sdl2: Fix build problem
[qemu/ar7.git] / configure
blob0ac5c66e0206126eb19eadcf2723278a67c8d1f5
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 -Wno-override-init|\
98 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
99 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
102 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
104 esac
105 done
108 compile_object() {
109 local_cflags="$1"
110 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
113 compile_prog() {
114 local_cflags="$1"
115 local_ldflags="$2"
116 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
119 # symbolically link $1 to $2. Portable version of "ln -sf".
120 symlink() {
121 rm -rf "$2"
122 mkdir -p "$(dirname "$2")"
123 ln -s "$1" "$2"
126 # check whether a command is available to this shell (may be either an
127 # executable or a builtin)
128 has() {
129 type "$1" >/dev/null 2>&1
132 # search for an executable in PATH
133 path_of() {
134 local_command="$1"
135 local_ifs="$IFS"
136 local_dir=""
138 # pathname has a dir component?
139 if [ "${local_command#*/}" != "$local_command" ]; then
140 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
141 echo "$local_command"
142 return 0
145 if [ -z "$local_command" ]; then
146 return 1
149 IFS=:
150 for local_dir in $PATH; do
151 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
152 echo "$local_dir/$local_command"
153 IFS="${local_ifs:-$(printf ' \t\n')}"
154 return 0
156 done
157 # not found
158 IFS="${local_ifs:-$(printf ' \t\n')}"
159 return 1
162 have_backend () {
163 echo "$trace_backends" | grep "$1" >/dev/null
166 # default parameters
167 source_path=$(dirname "$0")
168 cpu=""
169 iasl="iasl"
170 interp_prefix="/usr/gnemul/qemu-%M"
171 static="no"
172 cross_prefix=""
173 audio_drv_list=""
174 block_drv_rw_whitelist=""
175 block_drv_ro_whitelist=""
176 host_cc="cc"
177 libs_softmmu=""
178 libs_tools=""
179 audio_pt_int=""
180 audio_win_int=""
181 cc_i386=i386-pc-linux-gnu-gcc
182 libs_qga=""
183 debug_info="yes"
184 stack_protector=""
186 # Don't accept a target_list environment variable.
187 unset target_list
189 # Default value for a variable defining feature "foo".
190 # * foo="no" feature will only be used if --enable-foo arg is given
191 # * foo="" feature will be searched for, and if found, will be used
192 # unless --disable-foo is given
193 # * foo="yes" this value will only be set by --enable-foo flag.
194 # feature will searched for,
195 # if not found, configure exits with error
197 # Always add --enable-foo and --disable-foo command line args.
198 # Distributions want to ensure that several features are compiled in, and it
199 # is impossible without a --enable-foo that exits if a feature is not found.
201 bluez=""
202 brlapi=""
203 curl=""
204 curses=""
205 docs=""
206 fdt=""
207 netmap="no"
208 pixman=""
209 sdl=""
210 sdlabi=""
211 virtfs=""
212 vnc="yes"
213 sparse="no"
214 vde=""
215 vnc_sasl=""
216 vnc_jpeg=""
217 vnc_png=""
218 xen=""
219 xen_ctrl_version=""
220 xen_pv_domain_build="no"
221 xen_pci_passthrough=""
222 linux_aio=""
223 cap_ng=""
224 attr=""
225 libattr=""
226 xfs=""
228 vhost_net="no"
229 vhost_scsi="no"
230 vhost_vsock="no"
231 kvm="no"
232 hax="no"
233 colo="yes"
234 rdma=""
235 gprof="no"
236 debug_tcg="no"
237 debug="no"
238 fortify_source=""
239 strip_opt="yes"
240 tcg_interpreter="no"
241 bigendian="no"
242 mingw32="no"
243 gcov="no"
244 gcov_tool="gcov"
245 EXESUF=""
246 DSOSUF=".so"
247 LDFLAGS_SHARED="-shared"
248 modules="no"
249 prefix="/usr/local"
250 mandir="\${prefix}/share/man"
251 datadir="\${prefix}/share"
252 qemu_docdir="\${prefix}/share/doc/qemu"
253 bindir="\${prefix}/bin"
254 libdir="\${prefix}/lib"
255 libexecdir="\${prefix}/libexec"
256 includedir="\${prefix}/include"
257 sysconfdir="\${prefix}/etc"
258 local_statedir="\${prefix}/var"
259 confsuffix="/qemu"
260 slirp="yes"
261 oss_lib=""
262 bsd="no"
263 haiku="no"
264 linux="no"
265 solaris="no"
266 profiler="no"
267 cocoa="no"
268 softmmu="yes"
269 linux_user="no"
270 bsd_user="no"
271 aix="no"
272 blobs="yes"
273 pkgversion=""
274 pie=""
275 qom_cast_debug="yes"
276 trace_backends="log"
277 trace_file="trace"
278 spice=""
279 rbd=""
280 smartcard=""
281 libusb=""
282 usb_redir=""
283 opengl=""
284 opengl_dmabuf="no"
285 avx2_opt="no"
286 zlib="yes"
287 lzo=""
288 snappy=""
289 bzip2=""
290 guest_agent=""
291 guest_agent_with_vss="no"
292 guest_agent_ntddscsi="no"
293 guest_agent_msi=""
294 vss_win32_sdk=""
295 win_sdk="no"
296 want_tools="yes"
297 libiscsi=""
298 libnfs=""
299 coroutine=""
300 coroutine_pool=""
301 debug_stack_usage="no"
302 seccomp=""
303 glusterfs=""
304 glusterfs_xlator_opt="no"
305 glusterfs_discard="no"
306 glusterfs_zerofill="no"
307 archipelago="no"
308 gtk=""
309 gtkabi=""
310 gtk_gl="no"
311 tls_priority="NORMAL"
312 gnutls=""
313 gnutls_rnd=""
314 nettle=""
315 nettle_kdf="no"
316 gcrypt=""
317 gcrypt_hmac="no"
318 gcrypt_kdf="no"
319 vte=""
320 virglrenderer=""
321 tpm="yes"
322 libssh2=""
323 numa=""
324 tcmalloc="no"
325 jemalloc="no"
326 replication="yes"
328 # parse CC options first
329 for opt do
330 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
331 case "$opt" in
332 --cross-prefix=*) cross_prefix="$optarg"
334 --cc=*) CC="$optarg"
336 --cxx=*) CXX="$optarg"
338 --source-path=*) source_path="$optarg"
340 --cpu=*) cpu="$optarg"
342 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
343 EXTRA_CFLAGS="$optarg"
345 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
346 EXTRA_LDFLAGS="$optarg"
348 --enable-debug-info) debug_info="yes"
350 --disable-debug-info) debug_info="no"
352 esac
353 done
354 # OS specific
355 # Using uname is really, really broken. Once we have the right set of checks
356 # we can eliminate its usage altogether.
358 # Preferred compiler:
359 # ${CC} (if set)
360 # ${cross_prefix}gcc (if cross-prefix specified)
361 # system compiler
362 if test -z "${CC}${cross_prefix}"; then
363 cc="$host_cc"
364 else
365 cc="${CC-${cross_prefix}gcc}"
368 if test -z "${CXX}${cross_prefix}"; then
369 cxx="c++"
370 else
371 cxx="${CXX-${cross_prefix}g++}"
374 ar="${AR-${cross_prefix}ar}"
375 as="${AS-${cross_prefix}as}"
376 ccas="${CCAS-$cc}"
377 cpp="${CPP-$cc -E}"
378 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
379 ld="${LD-${cross_prefix}ld}"
380 nm="${NM-${cross_prefix}nm}"
381 strip="${STRIP-${cross_prefix}strip}"
382 windres="${WINDRES-${cross_prefix}windres}"
383 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
384 query_pkg_config() {
385 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
387 pkg_config=query_pkg_config
388 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
389 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
391 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
392 ARFLAGS="${ARFLAGS-rv}"
394 # default flags for all hosts
395 # We use -fwrapv to tell the compiler that we require a C dialect where
396 # left shift of signed integers is well defined and has the expected
397 # 2s-complement style results. (Both clang and gcc agree that it
398 # provides these semantics.)
399 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
400 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
401 QEMU_CFLAGS="-Wmissing-format-attribute $QEMU_CFLAGS"
402 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
403 QEMU_CFLAGS="-Wno-unused-parameter $QEMU_CFLAGS"
404 QEMU_CFLAGS="-Wno-missing-field-initializers $QEMU_CFLAGS"
405 QEMU_CFLAGS="-Wno-sign-compare $QEMU_CFLAGS"
406 QEMU_CFLAGS="-Wno-override-init $QEMU_CFLAGS"
407 QEMU_CFLAGS="-Wno-error=format $QEMU_CFLAGS"
408 QEMU_CFLAGS="-Wno-error=format-extra-args $QEMU_CFLAGS"
409 QEMU_CFLAGS="-Wno-error=parentheses $QEMU_CFLAGS"
410 QEMU_CFLAGS="-Wextra $QEMU_CFLAGS"
411 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
412 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
413 if test "$debug_info" = "yes"; then
414 CFLAGS="-g $CFLAGS"
415 LDFLAGS="-g $LDFLAGS"
418 # make source path absolute
419 source_path=$(cd "$source_path"; pwd)
421 cc_macros=$($cc $QEMU_CFLAGS -E -dD - </dev/null)
423 # running configure in the source tree?
424 # we know that's the case if configure is there.
425 if test -f "./configure"; then
426 pwd_is_source_path="y"
427 else
428 pwd_is_source_path="n"
431 check_define() {
432 rm -f $TMPC
433 cat > $TMPC <<EOF
434 #if !defined($1)
435 #error $1 not defined
436 #endif
437 int main(void) { return 0; }
439 compile_object
442 check_include() {
443 cat > $TMPC <<EOF
444 #include <$1>
445 int main(void) { return 0; }
447 compile_object
450 write_c_skeleton() {
451 cat > $TMPC <<EOF
452 int main(void) { return 0; }
456 if check_define __linux__ ; then
457 targetos="Linux"
458 elif check_define _WIN32 ; then
459 targetos='MINGW32'
460 elif check_define __OpenBSD__ ; then
461 targetos='OpenBSD'
462 elif check_define __sun__ ; then
463 targetos='SunOS'
464 elif check_define __HAIKU__ ; then
465 targetos='Haiku'
466 else
467 targetos=$(uname -s)
470 # Some host OSes need non-standard checks for which CPU to use.
471 # Note that these checks are broken for cross-compilation: if you're
472 # cross-compiling to one of these OSes then you'll need to specify
473 # the correct CPU with the --cpu option.
474 case $targetos in
475 Darwin)
476 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
477 # run 64-bit userspace code.
478 # If the user didn't specify a CPU explicitly and the kernel says this is
479 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
480 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
481 cpu="x86_64"
484 SunOS)
485 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
486 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
487 cpu="x86_64"
489 esac
491 if test ! -z "$cpu" ; then
492 # command line argument
494 elif check_define __i386__ ; then
495 cpu="i386"
496 elif check_define __x86_64__ ; then
497 if check_define __ILP32__ ; then
498 cpu="x32"
499 else
500 cpu="x86_64"
502 elif check_define __sparc__ ; then
503 if check_define __arch64__ ; then
504 cpu="sparc64"
505 else
506 cpu="sparc"
508 elif check_define _ARCH_PPC ; then
509 if check_define _ARCH_PPC64 ; then
510 cpu="ppc64"
511 else
512 cpu="ppc"
514 elif check_define __mips__ ; then
515 if check_define __mips64 ; then
516 cpu="mips64"
517 else
518 cpu="mips"
520 elif check_define __ia64__ ; then
521 cpu="ia64"
522 elif check_define __s390__ ; then
523 if check_define __s390x__ ; then
524 cpu="s390x"
525 else
526 cpu="s390"
528 elif check_define __arm__ ; then
529 cpu="arm"
530 elif check_define __aarch64__ ; then
531 cpu="aarch64"
532 else
533 cpu=$(uname -m)
536 ARCH=
537 # Normalise host CPU name and set ARCH.
538 # Note that this case should only have supported host CPUs, not guests.
539 case "$cpu" in
540 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
541 cpu="$cpu"
543 i386|i486|i586|i686|i86pc|BePC)
544 cpu="i386"
546 x86_64|amd64)
547 cpu="x86_64"
549 armv*b|armv*l|arm)
550 cpu="arm"
552 aarch64)
553 cpu="aarch64"
555 mips*)
556 cpu="mips"
557 if check_define __MIPSEL__ ; then
558 cpu="${cpu}el"
561 sparc|sun4[cdmuv])
562 cpu="sparc"
564 sh4)
565 cpu="sh4"
568 # This will result in either an error or falling back to TCI later
569 ARCH=unknown
571 esac
572 if test -z "$ARCH"; then
573 ARCH="$cpu"
576 # OS specific
578 # host *BSD for user mode
579 HOST_VARIANT_DIR=""
581 case $targetos in
582 CYGWIN*)
583 mingw32="yes"
584 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
585 audio_possible_drivers="sdl"
586 audio_drv_list="sdl"
588 MINGW32*)
589 mingw32="yes"
590 hax="yes"
591 audio_possible_drivers="dsound sdl"
592 if check_include dsound.h; then
593 audio_drv_list="dsound"
594 else
595 audio_drv_list=""
598 GNU/kFreeBSD)
599 bsd="yes"
600 audio_drv_list="oss"
601 audio_possible_drivers="oss sdl pa"
603 FreeBSD)
604 bsd="yes"
605 make="${MAKE-gmake}"
606 audio_drv_list="oss"
607 audio_possible_drivers="oss sdl pa"
608 # needed for kinfo_getvmmap(3) in libutil.h
609 LIBS="-lutil $LIBS"
610 # needed for kinfo_getproc
611 libs_qga="-lutil $libs_qga"
612 netmap="" # enable netmap autodetect
613 HOST_VARIANT_DIR="freebsd"
615 DragonFly)
616 bsd="yes"
617 make="${MAKE-gmake}"
618 audio_drv_list="oss"
619 audio_possible_drivers="oss sdl pa"
620 HOST_VARIANT_DIR="dragonfly"
622 NetBSD)
623 bsd="yes"
624 make="${MAKE-gmake}"
625 audio_drv_list="oss"
626 audio_possible_drivers="oss sdl"
627 oss_lib="-lossaudio"
628 HOST_VARIANT_DIR="netbsd"
630 OpenBSD)
631 bsd="yes"
632 make="${MAKE-gmake}"
633 audio_drv_list="sdl"
634 audio_possible_drivers="sdl"
635 HOST_VARIANT_DIR="openbsd"
637 Darwin)
638 bsd="yes"
639 darwin="yes"
640 hax="yes"
641 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
642 if [ "$cpu" = "x86_64" ] ; then
643 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
644 LDFLAGS="-arch x86_64 $LDFLAGS"
646 cocoa="yes"
647 audio_drv_list="coreaudio"
648 audio_possible_drivers="coreaudio sdl"
649 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
650 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
651 # Disable attempts to use ObjectiveC features in os/object.h since they
652 # won't work when we're compiling with gcc as a C compiler.
653 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
654 HOST_VARIANT_DIR="darwin"
656 SunOS)
657 solaris="yes"
658 make="${MAKE-gmake}"
659 install="${INSTALL-ginstall}"
660 ld="gld"
661 smbd="${SMBD-/usr/sfw/sbin/smbd}"
662 needs_libsunmath="no"
663 solarisrev=$(uname -r | cut -f2 -d.)
664 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
665 if test "$solarisrev" -le 9 ; then
666 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
667 needs_libsunmath="yes"
668 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
669 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
670 LIBS="-lsunmath $LIBS"
671 else
672 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
673 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
674 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
675 "Studio 11 can be downloaded from www.sun.com."
679 if test -f /usr/include/sys/soundcard.h ; then
680 audio_drv_list="oss"
682 audio_possible_drivers="oss sdl"
683 # needed for CMSG_ macros in sys/socket.h
684 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
685 # needed for TIOCWIN* defines in termios.h
686 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
687 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
688 solarisnetlibs="-lsocket -lnsl -lresolv"
689 LIBS="$solarisnetlibs $LIBS"
690 libs_qga="$solarisnetlibs $libs_qga"
692 AIX)
693 aix="yes"
694 make="${MAKE-gmake}"
696 Haiku)
697 haiku="yes"
698 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
699 LIBS="-lposix_error_mapper -lnetwork $LIBS"
702 audio_drv_list="oss"
703 audio_possible_drivers="oss alsa sdl pa"
704 linux="yes"
705 linux_user="yes"
706 kvm="yes"
707 vhost_net="yes"
708 vhost_scsi="yes"
709 vhost_vsock="yes"
710 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
712 esac
714 if [ "$bsd" = "yes" ] ; then
715 if [ "$darwin" != "yes" ] ; then
716 bsd_user="yes"
720 : ${make=${MAKE-make}}
721 : ${install=${INSTALL-install}}
722 : ${python=${PYTHON-python}}
723 : ${smbd=${SMBD-/usr/sbin/smbd}}
725 # Default objcc to clang if available, otherwise use CC
726 if has clang; then
727 objcc=clang
728 else
729 objcc="$cc"
732 if test "$mingw32" = "yes" ; then
733 EXESUF=".exe"
734 DSOSUF=".dll"
735 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
736 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
737 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
738 # MinGW-w64 needs _POSIX defined.
739 QEMU_CFLAGS="-D_POSIX=1 $QEMU_CFLAGS"
740 # MinGW needs -mthreads for TLS and macro _MT.
741 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
742 QEMU_CFLAGS="-I\$(SRC_PATH)/hosts/w32/include $QEMU_CFLAGS"
743 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
744 write_c_skeleton;
745 if compile_prog "" "-liberty" ; then
746 LIBS="-liberty $LIBS"
748 prefix="c:/Program Files/QEMU"
749 mandir="\${prefix}"
750 datadir="\${prefix}"
751 qemu_docdir="\${prefix}"
752 bindir="\${prefix}"
753 sysconfdir="\${prefix}"
754 local_statedir=
755 confsuffix=""
756 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
759 werror=""
761 for opt do
762 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
763 case "$opt" in
764 --help|-h) show_help=yes
766 --version|-V) exec cat $source_path/VERSION
768 --prefix=*) prefix="$optarg"
770 --interp-prefix=*) interp_prefix="$optarg"
772 --source-path=*)
774 --cross-prefix=*)
776 --cc=*)
778 --host-cc=*) host_cc="$optarg"
780 --cxx=*)
782 --iasl=*) iasl="$optarg"
784 --objcc=*) objcc="$optarg"
786 --make=*) make="$optarg"
788 --install=*) install="$optarg"
790 --python=*) python="$optarg"
792 --gcov=*) gcov_tool="$optarg"
794 --smbd=*) smbd="$optarg"
796 --extra-cflags=*)
798 --extra-ldflags=*)
800 --enable-debug-info)
802 --disable-debug-info)
804 --enable-modules)
805 modules="yes"
807 --disable-modules)
808 modules="no"
810 --cpu=*)
812 --target-list=*) target_list="$optarg"
814 --enable-trace-backends=*) trace_backends="$optarg"
816 # XXX: backwards compatibility
817 --enable-trace-backend=*) trace_backends="$optarg"
819 --with-trace-file=*) trace_file="$optarg"
821 --enable-gprof) gprof="yes"
823 --enable-gcov) gcov="yes"
825 --static)
826 static="yes"
827 LDFLAGS="-static $LDFLAGS"
828 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
830 --mandir=*) mandir="$optarg"
832 --bindir=*) bindir="$optarg"
834 --libdir=*) libdir="$optarg"
836 --libexecdir=*) libexecdir="$optarg"
838 --includedir=*) includedir="$optarg"
840 --datadir=*) datadir="$optarg"
842 --with-confsuffix=*) confsuffix="$optarg"
844 --docdir=*) qemu_docdir="$optarg"
846 --sysconfdir=*) sysconfdir="$optarg"
848 --localstatedir=*) local_statedir="$optarg"
850 --sbindir=*|--sharedstatedir=*|\
851 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
852 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
853 # These switches are silently ignored, for compatibility with
854 # autoconf-generated configure scripts. This allows QEMU's
855 # configure to be used by RPM and similar macros that set
856 # lots of directory switches by default.
858 --with-system-pixman) pixman="system"
860 --without-system-pixman) pixman="internal"
862 --without-pixman) pixman="none"
864 --disable-sdl) sdl="no"
866 --enable-sdl) sdl="yes"
868 --with-sdlabi=*) sdlabi="$optarg"
870 --disable-qom-cast-debug) qom_cast_debug="no"
872 --enable-qom-cast-debug) qom_cast_debug="yes"
874 --disable-virtfs) virtfs="no"
876 --enable-virtfs) virtfs="yes"
878 --disable-vnc) vnc="no"
880 --enable-vnc) vnc="yes"
882 --oss-lib=*) oss_lib="$optarg"
884 --audio-drv-list=*) audio_drv_list="$optarg"
886 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
888 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
890 --enable-debug-tcg) debug_tcg="yes"
892 --disable-debug-tcg) debug_tcg="no"
894 --enable-debug)
895 # Enable debugging options that aren't excessively noisy
896 debug_tcg="yes"
897 debug="yes"
898 strip_opt="no"
899 fortify_source="no"
901 --enable-sparse) sparse="yes"
903 --disable-sparse) sparse="no"
905 --disable-strip) strip_opt="no"
907 --disable-vnc-sasl) vnc_sasl="no"
909 --enable-vnc-sasl) vnc_sasl="yes"
911 --disable-vnc-jpeg) vnc_jpeg="no"
913 --enable-vnc-jpeg) vnc_jpeg="yes"
915 --disable-vnc-png) vnc_png="no"
917 --enable-vnc-png) vnc_png="yes"
919 --disable-slirp) slirp="no"
921 --disable-vde) vde="no"
923 --enable-vde) vde="yes"
925 --disable-netmap) netmap="no"
927 --enable-netmap) netmap="yes"
929 --disable-xen) xen="no"
931 --enable-xen) xen="yes"
933 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
935 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
937 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
939 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
941 --disable-brlapi) brlapi="no"
943 --enable-brlapi) brlapi="yes"
945 --disable-bluez) bluez="no"
947 --enable-bluez) bluez="yes"
949 --disable-kvm) kvm="no"
951 --enable-kvm) kvm="yes"
953 --disable-hax) hax="no"
955 --enable-hax) hax="yes"
957 --disable-colo) colo="no"
959 --enable-colo) colo="yes"
961 --disable-tcg-interpreter) tcg_interpreter="no"
963 --enable-tcg-interpreter) tcg_interpreter="yes"
965 --disable-cap-ng) cap_ng="no"
967 --enable-cap-ng) cap_ng="yes"
969 --disable-spice) spice="no"
971 --enable-spice) spice="yes"
973 --disable-libiscsi) libiscsi="no"
975 --enable-libiscsi) libiscsi="yes"
977 --disable-libnfs) libnfs="no"
979 --enable-libnfs) libnfs="yes"
981 --enable-profiler) profiler="yes"
983 --disable-cocoa) cocoa="no"
985 --enable-cocoa)
986 cocoa="yes" ;
987 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
989 --disable-system) softmmu="no"
991 --enable-system) softmmu="yes"
993 --disable-user)
994 linux_user="no" ;
995 bsd_user="no" ;
997 --enable-user) ;;
998 --disable-linux-user) linux_user="no"
1000 --enable-linux-user) linux_user="yes"
1002 --disable-bsd-user) bsd_user="no"
1004 --enable-bsd-user) bsd_user="yes"
1006 --enable-pie) pie="yes"
1008 --disable-pie) pie="no"
1010 --enable-werror) werror="yes"
1012 --disable-werror) werror="no"
1014 --enable-stack-protector) stack_protector="yes"
1016 --disable-stack-protector) stack_protector="no"
1018 --disable-curses) curses="no"
1020 --enable-curses) curses="yes"
1022 --disable-curl) curl="no"
1024 --enable-curl) curl="yes"
1026 --disable-fdt) fdt="no"
1028 --enable-fdt) fdt="yes"
1030 --disable-linux-aio) linux_aio="no"
1032 --enable-linux-aio) linux_aio="yes"
1034 --disable-attr) attr="no"
1036 --enable-attr) attr="yes"
1038 --disable-blobs) blobs="no"
1040 --with-pkgversion=*) pkgversion=" ($optarg)"
1042 --with-coroutine=*) coroutine="$optarg"
1044 --disable-coroutine-pool) coroutine_pool="no"
1046 --enable-coroutine-pool) coroutine_pool="yes"
1048 --enable-debug-stack-usage) debug_stack_usage="yes"
1050 --disable-docs) docs="no"
1052 --enable-docs) docs="yes"
1054 --disable-vhost-net) vhost_net="no"
1056 --enable-vhost-net) vhost_net="yes"
1058 --disable-vhost-scsi) vhost_scsi="no"
1060 --enable-vhost-scsi) vhost_scsi="yes"
1062 --disable-vhost-vsock) vhost_vsock="no"
1064 --enable-vhost-vsock) vhost_vsock="yes"
1066 --disable-opengl) opengl="no"
1068 --enable-opengl) opengl="yes"
1070 --disable-rbd) rbd="no"
1072 --enable-rbd) rbd="yes"
1074 --disable-xfsctl) xfs="no"
1076 --enable-xfsctl) xfs="yes"
1078 --disable-smartcard) smartcard="no"
1080 --enable-smartcard) smartcard="yes"
1082 --disable-libusb) libusb="no"
1084 --enable-libusb) libusb="yes"
1086 --disable-usb-redir) usb_redir="no"
1088 --enable-usb-redir) usb_redir="yes"
1090 --disable-zlib-test) zlib="no"
1092 --disable-lzo) lzo="no"
1094 --enable-lzo) lzo="yes"
1096 --disable-snappy) snappy="no"
1098 --enable-snappy) snappy="yes"
1100 --disable-bzip2) bzip2="no"
1102 --enable-bzip2) bzip2="yes"
1104 --enable-guest-agent) guest_agent="yes"
1106 --disable-guest-agent) guest_agent="no"
1108 --enable-guest-agent-msi) guest_agent_msi="yes"
1110 --disable-guest-agent-msi) guest_agent_msi="no"
1112 --with-vss-sdk) vss_win32_sdk=""
1114 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1116 --without-vss-sdk) vss_win32_sdk="no"
1118 --with-win-sdk) win_sdk=""
1120 --with-win-sdk=*) win_sdk="$optarg"
1122 --without-win-sdk) win_sdk="no"
1124 --enable-tools) want_tools="yes"
1126 --disable-tools) want_tools="no"
1128 --enable-seccomp) seccomp="yes"
1130 --disable-seccomp) seccomp="no"
1132 --disable-glusterfs) glusterfs="no"
1134 --enable-glusterfs) glusterfs="yes"
1136 --disable-archipelago) archipelago="no"
1138 --enable-archipelago) archipelago="yes"
1140 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1141 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1143 --enable-vhdx|--disable-vhdx)
1144 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1146 --enable-uuid|--disable-uuid)
1147 echo "$0: $opt is obsolete, UUID support is always built" >&2
1149 --disable-gtk) gtk="no"
1151 --enable-gtk) gtk="yes"
1153 --tls-priority=*) tls_priority="$optarg"
1155 --disable-gnutls) gnutls="no"
1157 --enable-gnutls) gnutls="yes"
1159 --disable-nettle) nettle="no"
1161 --enable-nettle) nettle="yes"
1163 --disable-gcrypt) gcrypt="no"
1165 --enable-gcrypt) gcrypt="yes"
1167 --enable-rdma) rdma="yes"
1169 --disable-rdma) rdma="no"
1171 --with-gtkabi=*) gtkabi="$optarg"
1173 --disable-vte) vte="no"
1175 --enable-vte) vte="yes"
1177 --disable-virglrenderer) virglrenderer="no"
1179 --enable-virglrenderer) virglrenderer="yes"
1181 --disable-tpm) tpm="no"
1183 --enable-tpm) tpm="yes"
1185 --disable-libssh2) libssh2="no"
1187 --enable-libssh2) libssh2="yes"
1189 --disable-numa) numa="no"
1191 --enable-numa) numa="yes"
1193 --disable-tcmalloc) tcmalloc="no"
1195 --enable-tcmalloc) tcmalloc="yes"
1197 --disable-jemalloc) jemalloc="no"
1199 --enable-jemalloc) jemalloc="yes"
1201 --disable-replication) replication="no"
1203 --enable-replication) replication="yes"
1206 echo "ERROR: unknown option $opt"
1207 echo "Try '$0 --help' for more information"
1208 exit 1
1210 esac
1211 done
1213 if ! has $python; then
1214 error_exit "Python not found. Use --python=/path/to/python"
1217 # Note that if the Python conditional here evaluates True we will exit
1218 # with status 1 which is a shell 'false' value.
1219 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1220 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1221 "Note that Python 3 or later is not yet supported." \
1222 "Use --python=/path/to/python to specify a supported Python."
1225 # Suppress writing compiled files
1226 python="$python -B"
1228 case "$cpu" in
1229 ppc)
1230 CPU_CFLAGS="-m32"
1231 LDFLAGS="-m32 $LDFLAGS"
1233 ppc64)
1234 CPU_CFLAGS="-m64"
1235 LDFLAGS="-m64 $LDFLAGS"
1237 sparc)
1238 LDFLAGS="-m32 $LDFLAGS"
1239 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1241 sparc64)
1242 LDFLAGS="-m64 $LDFLAGS"
1243 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1245 s390)
1246 CPU_CFLAGS="-m31"
1247 LDFLAGS="-m31 $LDFLAGS"
1249 s390x)
1250 CPU_CFLAGS="-m64"
1251 LDFLAGS="-m64 $LDFLAGS"
1253 i386)
1254 CPU_CFLAGS="-m32"
1255 LDFLAGS="-m32 $LDFLAGS"
1256 cc_i386='$(CC) -m32'
1258 x86_64)
1259 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1260 # If we truly care, we should simply detect this case at
1261 # runtime and generate the fallback to serial emulation.
1262 CPU_CFLAGS="-m64 -mcx16"
1263 LDFLAGS="-m64 $LDFLAGS"
1264 cc_i386='$(CC) -m32'
1266 x32)
1267 CPU_CFLAGS="-mx32"
1268 LDFLAGS="-mx32 $LDFLAGS"
1269 cc_i386='$(CC) -m32'
1271 # No special flags required for other host CPUs
1272 esac
1274 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1275 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1277 # For user-mode emulation the host arch has to be one we explicitly
1278 # support, even if we're using TCI.
1279 if [ "$ARCH" = "unknown" ]; then
1280 bsd_user="no"
1281 linux_user="no"
1284 default_target_list=""
1286 mak_wilds=""
1288 if [ "$softmmu" = "yes" ]; then
1289 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1291 if [ "$linux_user" = "yes" ]; then
1292 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1294 if [ "$bsd_user" = "yes" ]; then
1295 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1298 for config in $mak_wilds; do
1299 default_target_list="${default_target_list} $(basename "$config" .mak)"
1300 done
1302 if test x"$show_help" = x"yes" ; then
1303 cat << EOF
1305 Usage: configure [options]
1306 Options: [defaults in brackets after descriptions]
1308 Standard options:
1309 --help print this message
1310 --prefix=PREFIX install in PREFIX [$prefix]
1311 --interp-prefix=PREFIX where to find shared libraries, etc.
1312 use %M for cpu name [$interp_prefix]
1313 --target-list=LIST set target list (default: build everything)
1314 $(echo Available targets: $default_target_list | \
1315 fold -s -w 53 | sed -e 's/^/ /')
1317 Advanced options (experts only):
1318 --source-path=PATH path of source code [$source_path]
1319 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1320 --cc=CC use C compiler CC [$cc]
1321 --iasl=IASL use ACPI compiler IASL [$iasl]
1322 --host-cc=CC use C compiler CC [$host_cc] for code run at
1323 build time
1324 --cxx=CXX use C++ compiler CXX [$cxx]
1325 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1326 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1327 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1328 --make=MAKE use specified make [$make]
1329 --install=INSTALL use specified install [$install]
1330 --python=PYTHON use specified python [$python]
1331 --smbd=SMBD use specified smbd [$smbd]
1332 --static enable static build [$static]
1333 --mandir=PATH install man pages in PATH
1334 --datadir=PATH install firmware in PATH$confsuffix
1335 --docdir=PATH install documentation in PATH$confsuffix
1336 --bindir=PATH install binaries in PATH
1337 --libdir=PATH install libraries in PATH
1338 --sysconfdir=PATH install config in PATH$confsuffix
1339 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1340 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1341 --enable-debug enable common debug build options
1342 --disable-strip disable stripping binaries
1343 --disable-werror disable compilation abort on warning
1344 --disable-stack-protector disable compiler-provided stack protection
1345 --audio-drv-list=LIST set audio drivers list:
1346 Available drivers: $audio_possible_drivers
1347 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1348 --block-drv-rw-whitelist=L
1349 set block driver read-write whitelist
1350 (affects only QEMU, not qemu-img)
1351 --block-drv-ro-whitelist=L
1352 set block driver read-only whitelist
1353 (affects only QEMU, not qemu-img)
1354 --enable-trace-backends=B Set trace backend
1355 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1356 --with-trace-file=NAME Full PATH,NAME of file to store traces
1357 Default:trace-<pid>
1358 --disable-slirp disable SLIRP userspace network connectivity
1359 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1360 --oss-lib path to OSS library
1361 --cpu=CPU Build for host CPU [$cpu]
1362 --with-coroutine=BACKEND coroutine backend. Supported options:
1363 gthread, ucontext, sigaltstack, windows
1364 --enable-gcov enable test coverage analysis with gcov
1365 --gcov=GCOV use specified gcov [$gcov_tool]
1366 --disable-blobs disable installing provided firmware blobs
1367 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1368 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1369 --tls-priority default TLS protocol/cipher priority string
1371 Optional features, enabled with --enable-FEATURE and
1372 disabled with --disable-FEATURE, default is enabled if available:
1374 system all system emulation targets
1375 user supported user emulation targets
1376 linux-user all linux usermode emulation targets
1377 bsd-user all BSD usermode emulation targets
1378 docs build documentation
1379 guest-agent build the QEMU Guest Agent
1380 guest-agent-msi build guest agent Windows MSI installation package
1381 pie Position Independent Executables
1382 modules modules support
1383 debug-tcg TCG debugging (default is disabled)
1384 debug-info debugging information
1385 sparse sparse checker
1387 gnutls GNUTLS cryptography support
1388 nettle nettle cryptography support
1389 gcrypt libgcrypt cryptography support
1390 sdl SDL UI
1391 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1392 gtk gtk UI
1393 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1394 vte vte support for the gtk UI
1395 curses curses UI
1396 vnc VNC UI support
1397 vnc-sasl SASL encryption for VNC server
1398 vnc-jpeg JPEG lossy compression for VNC server
1399 vnc-png PNG compression for VNC server
1400 cocoa Cocoa UI (Mac OS X only)
1401 virtfs VirtFS
1402 xen xen backend driver support
1403 xen-pci-passthrough
1404 brlapi BrlAPI (Braile)
1405 curl curl connectivity
1406 fdt fdt device tree
1407 bluez bluez stack connectivity
1408 kvm KVM acceleration support
1409 hax HAX acceleration support
1410 colo COarse-grain LOck-stepping VM for Non-stop Service
1411 rdma RDMA-based migration support
1412 vde support for vde network
1413 netmap support for netmap network
1414 linux-aio Linux AIO support
1415 cap-ng libcap-ng support
1416 attr attr and xattr support
1417 vhost-net vhost-net acceleration support
1418 spice spice
1419 rbd rados block device (rbd)
1420 libiscsi iscsi support
1421 libnfs nfs support
1422 smartcard smartcard support (libcacard)
1423 libusb libusb (for usb passthrough)
1424 usb-redir usb network redirection support
1425 lzo support of lzo compression library
1426 snappy support of snappy compression library
1427 bzip2 support of bzip2 compression library
1428 (for reading bzip2-compressed dmg images)
1429 seccomp seccomp support
1430 coroutine-pool coroutine freelist (better performance)
1431 glusterfs GlusterFS backend
1432 archipelago Archipelago backend
1433 tpm TPM support
1434 libssh2 ssh block device support
1435 numa libnuma support
1436 tcmalloc tcmalloc support
1437 jemalloc jemalloc support
1438 replication replication support
1440 NOTE: The object files are built at the place where configure is launched
1442 exit 0
1445 # Now we have handled --enable-tcg-interpreter and know we're not just
1446 # printing the help message, bail out if the host CPU isn't supported.
1447 if test "$ARCH" = "unknown"; then
1448 if test "$tcg_interpreter" = "yes" ; then
1449 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1450 else
1451 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1455 # Consult white-list to determine whether to enable werror
1456 # by default. Only enable by default for git builds
1457 if test -z "$werror" ; then
1458 if test -d "$source_path/.git" -a \
1459 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1460 werror="yes"
1461 else
1462 werror="no"
1466 # check that the C compiler works.
1467 write_c_skeleton;
1468 if compile_object ; then
1469 : C compiler works ok
1470 else
1471 error_exit "\"$cc\" either does not exist or does not work"
1473 if ! compile_prog ; then
1474 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1477 # Check that the C++ compiler exists and works with the C compiler
1478 if has $cxx; then
1479 cat > $TMPC <<EOF
1480 int c_function(void);
1481 int main(void) { return c_function(); }
1484 compile_object
1486 cat > $TMPCXX <<EOF
1487 extern "C" {
1488 int c_function(void);
1490 int c_function(void) { return 42; }
1493 update_cxxflags
1495 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1496 # C++ compiler $cxx works ok with C compiler $cc
1498 else
1499 echo "C++ compiler $cxx does not work with C compiler $cc"
1500 echo "Disabling C++ specific optional code"
1501 cxx=
1503 else
1504 echo "No C++ compiler available; disabling C++ specific optional code"
1505 cxx=
1508 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1509 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1510 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1511 gcc_flags="-Wunused-but-set-variable $gcc_flags"
1512 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1513 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1514 gcc_flags="-Wno-string-plus-int $gcc_flags"
1515 # Note that we do not add -Werror to gcc_flags here, because that would
1516 # enable it for all configure tests. If a configure test failed due
1517 # to -Werror this would just silently disable some features,
1518 # so it's too error prone.
1520 cc_has_warning_flag() {
1521 write_c_skeleton;
1523 # Use the positive sense of the flag when testing for -Wno-wombat
1524 # support (gcc will happily accept the -Wno- form of unknown
1525 # warning options).
1526 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1527 compile_prog "-Werror $optflag" ""
1530 for flag in $gcc_flags; do
1531 if cc_has_warning_flag $flag ; then
1532 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1534 done
1536 if test "$mingw32" = "yes"; then
1537 stack_protector="no"
1539 if test "$stack_protector" != "no"; then
1540 cat > $TMPC << EOF
1541 int main(int argc, char *argv[])
1543 char arr[64], *p = arr, *c = argv[0];
1544 while (*c) {
1545 *p++ = *c++;
1547 return 0;
1550 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1551 sp_on=0
1552 for flag in $gcc_flags; do
1553 # We need to check both a compile and a link, since some compiler
1554 # setups fail only on a .c->.o compile and some only at link time
1555 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1556 compile_prog "-Werror $flag" ""; then
1557 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1558 sp_on=1
1559 break
1561 done
1562 if test "$stack_protector" = yes; then
1563 if test $sp_on = 0; then
1564 error_exit "Stack protector not supported"
1569 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1570 # large functions that use global variables. The bug is in all releases of
1571 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1572 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1573 cat > $TMPC << EOF
1574 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1575 int main(void) { return 0; }
1576 #else
1577 #error No bug in this compiler.
1578 #endif
1580 if compile_prog "-Werror -fno-gcse" "" ; then
1581 TRANSLATE_OPT_CFLAGS=-fno-gcse
1584 if test "$static" = "yes" ; then
1585 if test "$modules" = "yes" ; then
1586 error_exit "static and modules are mutually incompatible"
1588 if test "$pie" = "yes" ; then
1589 error_exit "static and pie are mutually incompatible"
1590 else
1591 pie="no"
1595 # Unconditional check for compiler __thread support
1596 cat > $TMPC << EOF
1597 static __thread int tls_var;
1598 int main(void) { return tls_var; }
1601 if ! compile_prog "-Werror" "" ; then
1602 error_exit "Your compiler does not support the __thread specifier for " \
1603 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1606 if test "$pie" = ""; then
1607 case "$cpu-$targetos" in
1608 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1611 pie="no"
1613 esac
1616 if test "$pie" != "no" ; then
1617 cat > $TMPC << EOF
1619 #ifdef __linux__
1620 # define THREAD __thread
1621 #else
1622 # define THREAD
1623 #endif
1625 static THREAD int tls_var;
1627 int main(void) { return tls_var; }
1630 if compile_prog "-fPIE -DPIE" "-pie"; then
1631 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1632 LDFLAGS="-pie $LDFLAGS"
1633 pie="yes"
1634 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1635 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1637 else
1638 if test "$pie" = "yes"; then
1639 error_exit "PIE not available due to missing toolchain support"
1640 else
1641 echo "Disabling PIE due to missing toolchain support"
1642 pie="no"
1646 if compile_prog "-Werror -fno-pie" "-nopie"; then
1647 CFLAGS_NOPIE="-fno-pie"
1648 LDFLAGS_NOPIE="-nopie"
1652 ##########################################
1653 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1654 # use i686 as default anyway, but for those that don't, an explicit
1655 # specification is necessary
1657 if test "$cpu" = "i386"; then
1658 cat > $TMPC << EOF
1659 static int sfaa(int *ptr)
1661 return __sync_fetch_and_and(ptr, 0);
1664 int main(void)
1666 int val = 42;
1667 val = __sync_val_compare_and_swap(&val, 0, 1);
1668 sfaa(&val);
1669 return val;
1672 if ! compile_prog "" "" ; then
1673 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1677 #########################################
1678 # Solaris specific configure tool chain decisions
1680 if test "$solaris" = "yes" ; then
1681 if has $install; then
1683 else
1684 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1685 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1686 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1688 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1689 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1690 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1691 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1693 if has ar; then
1695 else
1696 if test -f /usr/ccs/bin/ar ; then
1697 error_exit "No path includes ar" \
1698 "Add /usr/ccs/bin to your path and rerun configure"
1700 error_exit "No path includes ar"
1704 if test -z "${target_list+xxx}" ; then
1705 target_list="$default_target_list"
1706 else
1707 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1710 # Check that we recognised the target name; this allows a more
1711 # friendly error message than if we let it fall through.
1712 for target in $target_list; do
1713 case " $default_target_list " in
1714 *" $target "*)
1717 error_exit "Unknown target name '$target'"
1719 esac
1720 done
1722 # see if system emulation was really requested
1723 case " $target_list " in
1724 *"-softmmu "*) softmmu=yes
1726 *) softmmu=no
1728 esac
1730 feature_not_found() {
1731 feature=$1
1732 remedy=$2
1734 error_exit "User requested feature $feature" \
1735 "configure was not able to find it." \
1736 "$remedy"
1739 # ---
1740 # big/little endian test
1741 cat > $TMPC << EOF
1742 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1743 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1744 extern int foo(short *, short *);
1745 int main(int argc, char *argv[]) {
1746 return foo(big_endian, little_endian);
1750 if compile_object ; then
1751 if grep -q BiGeNdIaN $TMPO ; then
1752 bigendian="yes"
1753 elif grep -q LiTtLeEnDiAn $TMPO ; then
1754 bigendian="no"
1755 else
1756 echo big/little test failed
1758 else
1759 echo big/little test failed
1762 ##########################################
1763 # cocoa implies not SDL or GTK
1764 # (the cocoa UI code currently assumes it is always the active UI
1765 # and doesn't interact well with other UI frontend code)
1766 if test "$cocoa" = "yes"; then
1767 if test "$sdl" = "yes"; then
1768 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1770 if test "$gtk" = "yes"; then
1771 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1773 gtk=no
1774 sdl=no
1777 # Some versions of Mac OS X incorrectly define SIZE_MAX
1778 cat > $TMPC << EOF
1779 #include <stdint.h>
1780 #include <stdio.h>
1781 int main(int argc, char *argv[]) {
1782 return printf("%zu", SIZE_MAX);
1785 have_broken_size_max=no
1786 if ! compile_object -Werror ; then
1787 have_broken_size_max=yes
1790 ##########################################
1791 # L2TPV3 probe
1793 cat > $TMPC <<EOF
1794 #include <sys/socket.h>
1795 #include <linux/ip.h>
1796 int main(void) { return sizeof(struct mmsghdr); }
1798 if compile_prog "" "" ; then
1799 l2tpv3=yes
1800 else
1801 l2tpv3=no
1804 ##########################################
1805 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1807 if test "$mingw32" = "yes"; then
1808 # Some versions of MinGW / Mingw-w64 lack localtime_r
1809 # and gmtime_r entirely.
1811 # Some versions of Mingw-w64 define a macro for
1812 # localtime_r/gmtime_r.
1814 # Some versions of Mingw-w64 will define functions
1815 # for localtime_r/gmtime_r, but only if you have
1816 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1817 # though, unistd.h and pthread.h both define
1818 # that for you.
1820 # So this #undef localtime_r and #include <unistd.h>
1821 # are not in fact redundant.
1822 cat > $TMPC << EOF
1823 #include <unistd.h>
1824 #include <time.h>
1825 #undef localtime_r
1826 int main(void) { localtime_r(NULL, NULL); return 0; }
1828 if compile_prog "" "" ; then
1829 localtime_r="yes"
1830 else
1831 localtime_r="no"
1835 ##########################################
1836 # pkg-config probe
1838 if ! has "$pkg_config_exe"; then
1839 error_exit "pkg-config binary '$pkg_config_exe' not found"
1842 ##########################################
1843 # NPTL probe
1845 if test "$linux_user" = "yes"; then
1846 cat > $TMPC <<EOF
1847 #include <sched.h>
1848 #include <linux/futex.h>
1849 int main(void) {
1850 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1851 #error bork
1852 #endif
1853 return 0;
1856 if ! compile_object ; then
1857 feature_not_found "nptl" "Install glibc and linux kernel headers."
1861 ##########################################
1862 # avx2 optimization requirement check
1864 cat > $TMPC << EOF
1865 #pragma GCC push_options
1866 #pragma GCC target("avx2")
1867 #include <cpuid.h>
1868 #include <immintrin.h>
1869 static int bar(void *a) {
1870 __m256i x = *(__m256i *)a;
1871 return _mm256_testz_si256(x, x);
1873 int main(int argc, char *argv[]) { return bar(argv[0]); }
1875 if compile_object "" ; then
1876 avx2_opt="yes"
1879 ##########################################
1880 # lzo check
1882 if test "$lzo" != "no" ; then
1883 cat > $TMPC << EOF
1884 #include <lzo/lzo1x.h>
1885 int main(void) { lzo_version(); return 0; }
1887 if compile_prog "" "-llzo2" ; then
1888 libs_softmmu="$libs_softmmu -llzo2"
1889 lzo="yes"
1890 else
1891 if test "$lzo" = "yes"; then
1892 feature_not_found "liblzo2" "Install liblzo2 devel"
1894 lzo="no"
1898 ##########################################
1899 # snappy check
1901 if test "$snappy" != "no" ; then
1902 cat > $TMPC << EOF
1903 #include <snappy-c.h>
1904 int main(void) { snappy_max_compressed_length(4096); return 0; }
1906 if compile_prog "" "-lsnappy" ; then
1907 libs_softmmu="$libs_softmmu -lsnappy"
1908 snappy="yes"
1909 else
1910 if test "$snappy" = "yes"; then
1911 feature_not_found "libsnappy" "Install libsnappy devel"
1913 snappy="no"
1917 ##########################################
1918 # bzip2 check
1920 if test "$bzip2" != "no" ; then
1921 cat > $TMPC << EOF
1922 #include <bzlib.h>
1923 int main(void) { BZ2_bzlibVersion(); return 0; }
1925 if compile_prog "" "-lbz2" ; then
1926 bzip2="yes"
1927 else
1928 if test "$bzip2" = "yes"; then
1929 feature_not_found "libbzip2" "Install libbzip2 devel"
1931 bzip2="no"
1935 ##########################################
1936 # libseccomp check
1938 if test "$seccomp" != "no" ; then
1939 case "$cpu" in
1940 i386|x86_64)
1941 libseccomp_minver="2.1.0"
1943 mips)
1944 libseccomp_minver="2.2.0"
1946 arm|aarch64)
1947 libseccomp_minver="2.2.3"
1949 ppc|ppc64)
1950 libseccomp_minver="2.3.0"
1953 libseccomp_minver=""
1955 esac
1957 if test "$libseccomp_minver" != "" &&
1958 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
1959 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1960 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
1961 seccomp="yes"
1962 else
1963 if test "$seccomp" = "yes" ; then
1964 if test "$libseccomp_minver" != "" ; then
1965 feature_not_found "libseccomp" \
1966 "Install libseccomp devel >= $libseccomp_minver"
1967 else
1968 feature_not_found "libseccomp" \
1969 "libseccomp is not supported for host cpu $cpu"
1972 seccomp="no"
1975 ##########################################
1976 # xen probe
1978 if test "$xen" != "no" ; then
1979 xen_libs="-lxenstore -lxenctrl -lxenguest"
1980 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1982 # First we test whether Xen headers and libraries are available.
1983 # If no, we are done and there is no Xen support.
1984 # If yes, more tests are run to detect the Xen version.
1986 # Xen (any)
1987 cat > $TMPC <<EOF
1988 #include <xenctrl.h>
1989 int main(void) {
1990 return 0;
1993 if ! compile_prog "" "$xen_libs" ; then
1994 # Xen not found
1995 if test "$xen" = "yes" ; then
1996 feature_not_found "xen" "Install xen devel"
1998 xen=no
2000 # Xen unstable
2001 elif
2002 cat > $TMPC <<EOF &&
2004 * If we have stable libs the we don't want the libxc compat
2005 * layers, regardless of what CFLAGS we may have been given.
2007 * Also, check if xengnttab_grant_copy_segment_t is defined and
2008 * grant copy operation is implemented.
2010 #undef XC_WANT_COMPAT_EVTCHN_API
2011 #undef XC_WANT_COMPAT_GNTTAB_API
2012 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2013 #include <xenctrl.h>
2014 #include <xenstore.h>
2015 #include <xenevtchn.h>
2016 #include <xengnttab.h>
2017 #include <xenforeignmemory.h>
2018 #include <stdint.h>
2019 #include <xen/hvm/hvm_info_table.h>
2020 #if !defined(HVM_MAX_VCPUS)
2021 # error HVM_MAX_VCPUS not defined
2022 #endif
2023 int main(void) {
2024 xc_interface *xc = NULL;
2025 xenforeignmemory_handle *xfmem;
2026 xenevtchn_handle *xe;
2027 xengnttab_handle *xg;
2028 xen_domain_handle_t handle;
2029 xengnttab_grant_copy_segment_t* seg = NULL;
2031 xs_daemon_open();
2033 xc = xc_interface_open(0, 0, 0);
2034 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2035 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2036 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2037 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2038 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2040 xfmem = xenforeignmemory_open(0, 0);
2041 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2043 xe = xenevtchn_open(0, 0);
2044 xenevtchn_fd(xe);
2046 xg = xengnttab_open(0, 0);
2047 xengnttab_grant_copy(xg, 0, seg);
2049 return 0;
2052 compile_prog "" "$xen_libs $xen_stable_libs"
2053 then
2054 xen_ctrl_version=480
2055 xen=yes
2056 elif
2057 cat > $TMPC <<EOF &&
2059 * If we have stable libs the we don't want the libxc compat
2060 * layers, regardless of what CFLAGS we may have been given.
2062 #undef XC_WANT_COMPAT_EVTCHN_API
2063 #undef XC_WANT_COMPAT_GNTTAB_API
2064 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2065 #include <xenctrl.h>
2066 #include <xenstore.h>
2067 #include <xenevtchn.h>
2068 #include <xengnttab.h>
2069 #include <xenforeignmemory.h>
2070 #include <stdint.h>
2071 #include <xen/hvm/hvm_info_table.h>
2072 #if !defined(HVM_MAX_VCPUS)
2073 # error HVM_MAX_VCPUS not defined
2074 #endif
2075 int main(void) {
2076 xc_interface *xc = NULL;
2077 xenforeignmemory_handle *xfmem;
2078 xenevtchn_handle *xe;
2079 xengnttab_handle *xg;
2080 xen_domain_handle_t handle;
2082 xs_daemon_open();
2084 xc = xc_interface_open(0, 0, 0);
2085 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2086 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2087 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2088 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2089 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2091 xfmem = xenforeignmemory_open(0, 0);
2092 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2094 xe = xenevtchn_open(0, 0);
2095 xenevtchn_fd(xe);
2097 xg = xengnttab_open(0, 0);
2098 xengnttab_map_grant_ref(xg, 0, 0, 0);
2100 return 0;
2103 compile_prog "" "$xen_libs $xen_stable_libs"
2104 then
2105 xen_ctrl_version=471
2106 xen=yes
2107 elif
2108 cat > $TMPC <<EOF &&
2109 #include <xenctrl.h>
2110 #include <stdint.h>
2111 int main(void) {
2112 xc_interface *xc = NULL;
2113 xen_domain_handle_t handle;
2114 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2115 return 0;
2118 compile_prog "" "$xen_libs"
2119 then
2120 xen_ctrl_version=470
2121 xen=yes
2123 # Xen 4.6
2124 elif
2125 cat > $TMPC <<EOF &&
2126 #include <xenctrl.h>
2127 #include <xenstore.h>
2128 #include <stdint.h>
2129 #include <xen/hvm/hvm_info_table.h>
2130 #if !defined(HVM_MAX_VCPUS)
2131 # error HVM_MAX_VCPUS not defined
2132 #endif
2133 int main(void) {
2134 xc_interface *xc;
2135 xs_daemon_open();
2136 xc = xc_interface_open(0, 0, 0);
2137 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2138 xc_gnttab_open(NULL, 0);
2139 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2140 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2141 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2142 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2143 return 0;
2146 compile_prog "" "$xen_libs"
2147 then
2148 xen_ctrl_version=460
2149 xen=yes
2151 # Xen 4.5
2152 elif
2153 cat > $TMPC <<EOF &&
2154 #include <xenctrl.h>
2155 #include <xenstore.h>
2156 #include <stdint.h>
2157 #include <xen/hvm/hvm_info_table.h>
2158 #if !defined(HVM_MAX_VCPUS)
2159 # error HVM_MAX_VCPUS not defined
2160 #endif
2161 int main(void) {
2162 xc_interface *xc;
2163 xs_daemon_open();
2164 xc = xc_interface_open(0, 0, 0);
2165 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2166 xc_gnttab_open(NULL, 0);
2167 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2168 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2169 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2170 return 0;
2173 compile_prog "" "$xen_libs"
2174 then
2175 xen_ctrl_version=450
2176 xen=yes
2178 elif
2179 cat > $TMPC <<EOF &&
2180 #include <xenctrl.h>
2181 #include <xenstore.h>
2182 #include <stdint.h>
2183 #include <xen/hvm/hvm_info_table.h>
2184 #if !defined(HVM_MAX_VCPUS)
2185 # error HVM_MAX_VCPUS not defined
2186 #endif
2187 int main(void) {
2188 xc_interface *xc;
2189 xs_daemon_open();
2190 xc = xc_interface_open(0, 0, 0);
2191 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2192 xc_gnttab_open(NULL, 0);
2193 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2194 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2195 return 0;
2198 compile_prog "" "$xen_libs"
2199 then
2200 xen_ctrl_version=420
2201 xen=yes
2203 else
2204 if test "$xen" = "yes" ; then
2205 feature_not_found "xen (unsupported version)" \
2206 "Install a supported xen (xen 4.2 or newer)"
2208 xen=no
2211 if test "$xen" = yes; then
2212 if test $xen_ctrl_version -ge 471 ; then
2213 libs_softmmu="$xen_stable_libs $libs_softmmu"
2215 libs_softmmu="$xen_libs $libs_softmmu"
2219 if test "$xen_pci_passthrough" != "no"; then
2220 if test "$xen" = "yes" && test "$linux" = "yes"; then
2221 xen_pci_passthrough=yes
2222 else
2223 if test "$xen_pci_passthrough" = "yes"; then
2224 error_exit "User requested feature Xen PCI Passthrough" \
2225 " but this feature requires /sys from Linux"
2227 xen_pci_passthrough=no
2231 if test "$xen_pv_domain_build" = "yes" &&
2232 test "$xen" != "yes"; then
2233 error_exit "User requested Xen PV domain builder support" \
2234 "which requires Xen support."
2237 ##########################################
2238 # Sparse probe
2239 if test "$sparse" != "no" ; then
2240 if has cgcc; then
2241 sparse=yes
2242 else
2243 if test "$sparse" = "yes" ; then
2244 feature_not_found "sparse" "Install sparse binary"
2246 sparse=no
2250 ##########################################
2251 # X11 probe
2252 x11_cflags=
2253 x11_libs=-lX11
2254 if $pkg_config --exists "x11"; then
2255 x11_cflags=$($pkg_config --cflags x11)
2256 x11_libs=$($pkg_config --libs x11)
2259 ##########################################
2260 # GTK probe
2262 if test "$gtkabi" = ""; then
2263 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2264 # Use 3.0 as a fallback if that is available.
2265 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2266 gtkabi=2.0
2267 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2268 gtkabi=3.0
2269 else
2270 gtkabi=2.0
2274 if test "$gtk" != "no"; then
2275 gtkpackage="gtk+-$gtkabi"
2276 gtkx11package="gtk+-x11-$gtkabi"
2277 if test "$gtkabi" = "3.0" ; then
2278 gtkversion="3.0.0"
2279 else
2280 gtkversion="2.18.0"
2282 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2283 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2284 gtk_libs=$($pkg_config --libs $gtkpackage)
2285 gtk_version=$($pkg_config --modversion $gtkpackage)
2286 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2287 gtk_cflags="$gtk_cflags $x11_cflags"
2288 gtk_libs="$gtk_libs $x11_libs"
2290 libs_softmmu="$gtk_libs $libs_softmmu"
2291 gtk="yes"
2292 elif test "$gtk" = "yes"; then
2293 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2294 else
2295 gtk="no"
2300 ##########################################
2301 # GNUTLS probe
2303 gnutls_works() {
2304 # Unfortunately some distros have bad pkg-config information for gnutls
2305 # such that it claims to exist but you get a compiler error if you try
2306 # to use the options returned by --libs. Specifically, Ubuntu for --static
2307 # builds doesn't work:
2308 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2310 # So sanity check the cflags/libs before assuming gnutls can be used.
2311 if ! $pkg_config --exists "gnutls"; then
2312 return 1
2315 write_c_skeleton
2316 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2319 gnutls_gcrypt=no
2320 gnutls_nettle=no
2321 if test "$gnutls" != "no"; then
2322 if gnutls_works; then
2323 gnutls_cflags=$($pkg_config --cflags gnutls)
2324 gnutls_libs=$($pkg_config --libs gnutls)
2325 libs_softmmu="$gnutls_libs $libs_softmmu"
2326 libs_tools="$gnutls_libs $libs_tools"
2327 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2328 gnutls="yes"
2330 # gnutls_rnd requires >= 2.11.0
2331 if $pkg_config --exists "gnutls >= 2.11.0"; then
2332 gnutls_rnd="yes"
2333 else
2334 gnutls_rnd="no"
2337 if $pkg_config --exists 'gnutls >= 3.0'; then
2338 gnutls_gcrypt=no
2339 gnutls_nettle=yes
2340 elif $pkg_config --exists 'gnutls >= 2.12'; then
2341 case $($pkg_config --libs --static gnutls) in
2342 *gcrypt*)
2343 gnutls_gcrypt=yes
2344 gnutls_nettle=no
2346 *nettle*)
2347 gnutls_gcrypt=no
2348 gnutls_nettle=yes
2351 gnutls_gcrypt=yes
2352 gnutls_nettle=no
2354 esac
2355 else
2356 gnutls_gcrypt=yes
2357 gnutls_nettle=no
2359 elif test "$gnutls" = "yes"; then
2360 feature_not_found "gnutls" "Install gnutls devel"
2361 else
2362 gnutls="no"
2363 gnutls_rnd="no"
2365 else
2366 gnutls_rnd="no"
2370 # If user didn't give a --disable/enable-gcrypt flag,
2371 # then mark as disabled if user requested nettle
2372 # explicitly, or if gnutls links to nettle
2373 if test -z "$gcrypt"
2374 then
2375 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2376 then
2377 gcrypt="no"
2381 # If user didn't give a --disable/enable-nettle flag,
2382 # then mark as disabled if user requested gcrypt
2383 # explicitly, or if gnutls links to gcrypt
2384 if test -z "$nettle"
2385 then
2386 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2387 then
2388 nettle="no"
2392 has_libgcrypt_config() {
2393 if ! has "libgcrypt-config"
2394 then
2395 return 1
2398 if test -n "$cross_prefix"
2399 then
2400 host=$(libgcrypt-config --host)
2401 if test "$host-" != $cross_prefix
2402 then
2403 return 1
2407 return 0
2410 if test "$gcrypt" != "no"; then
2411 if has_libgcrypt_config; then
2412 gcrypt_cflags=$(libgcrypt-config --cflags)
2413 gcrypt_libs=$(libgcrypt-config --libs)
2414 # Debian has remove -lgpg-error from libgcrypt-config
2415 # as it "spreads unnecessary dependencies" which in
2416 # turn breaks static builds...
2417 if test "$static" = "yes"
2418 then
2419 gcrypt_libs="$gcrypt_libs -lgpg-error"
2421 libs_softmmu="$gcrypt_libs $libs_softmmu"
2422 libs_tools="$gcrypt_libs $libs_tools"
2423 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2424 gcrypt="yes"
2425 if test -z "$nettle"; then
2426 nettle="no"
2429 cat > $TMPC << EOF
2430 #include <gcrypt.h>
2431 int main(void) {
2432 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2433 GCRY_MD_SHA256,
2434 NULL, 0, 0, 0, NULL);
2435 return 0;
2438 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2439 gcrypt_kdf=yes
2442 cat > $TMPC << EOF
2443 #include <gcrypt.h>
2444 int main(void) {
2445 gcry_mac_hd_t handle;
2446 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2447 GCRY_MAC_FLAG_SECURE, NULL);
2448 return 0;
2451 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2452 gcrypt_hmac=yes
2454 else
2455 if test "$gcrypt" = "yes"; then
2456 feature_not_found "gcrypt" "Install gcrypt devel"
2457 else
2458 gcrypt="no"
2464 if test "$nettle" != "no"; then
2465 if $pkg_config --exists "nettle"; then
2466 nettle_cflags=$($pkg_config --cflags nettle)
2467 nettle_libs=$($pkg_config --libs nettle)
2468 nettle_version=$($pkg_config --modversion nettle)
2469 libs_softmmu="$nettle_libs $libs_softmmu"
2470 libs_tools="$nettle_libs $libs_tools"
2471 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2472 nettle="yes"
2474 cat > $TMPC << EOF
2475 #include <stddef.h>
2476 #include <nettle/pbkdf2.h>
2477 int main(void) {
2478 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2479 return 0;
2482 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2483 nettle_kdf=yes
2485 else
2486 if test "$nettle" = "yes"; then
2487 feature_not_found "nettle" "Install nettle devel"
2488 else
2489 nettle="no"
2494 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2495 then
2496 error_exit "Only one of gcrypt & nettle can be enabled"
2499 ##########################################
2500 # libtasn1 - only for the TLS creds/session test suite
2502 tasn1=yes
2503 tasn1_cflags=""
2504 tasn1_libs=""
2505 if $pkg_config --exists "libtasn1"; then
2506 tasn1_cflags=$($pkg_config --cflags libtasn1)
2507 tasn1_libs=$($pkg_config --libs libtasn1)
2508 else
2509 tasn1=no
2513 ##########################################
2514 # getifaddrs (for tests/test-io-channel-socket )
2516 have_ifaddrs_h=yes
2517 if ! check_include "ifaddrs.h" ; then
2518 have_ifaddrs_h=no
2521 ##########################################
2522 # VTE probe
2524 if test "$vte" != "no"; then
2525 if test "$gtkabi" = "3.0"; then
2526 vteminversion="0.32.0"
2527 if $pkg_config --exists "vte-2.91"; then
2528 vtepackage="vte-2.91"
2529 else
2530 vtepackage="vte-2.90"
2532 else
2533 vtepackage="vte"
2534 vteminversion="0.24.0"
2536 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2537 vte_cflags=$($pkg_config --cflags $vtepackage)
2538 vte_libs=$($pkg_config --libs $vtepackage)
2539 vteversion=$($pkg_config --modversion $vtepackage)
2540 libs_softmmu="$vte_libs $libs_softmmu"
2541 vte="yes"
2542 elif test "$vte" = "yes"; then
2543 if test "$gtkabi" = "3.0"; then
2544 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2545 else
2546 feature_not_found "vte" "Install libvte devel"
2548 else
2549 vte="no"
2553 ##########################################
2554 # SDL probe
2556 # Look for sdl configuration program (pkg-config or sdl-config). Try
2557 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2559 if test "$sdlabi" = ""; then
2560 if $pkg_config --exists "sdl"; then
2561 sdlabi=1.2
2562 elif $pkg_config --exists "sdl2"; then
2563 sdlabi=2.0
2564 else
2565 sdlabi=1.2
2569 if test $sdlabi = "2.0"; then
2570 sdl_config=$sdl2_config
2571 sdlname=sdl2
2572 sdlconfigname=sdl2_config
2573 elif test $sdlabi = "1.2"; then
2574 sdlname=sdl
2575 sdlconfigname=sdl_config
2576 else
2577 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2580 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2581 sdl_config=$sdlconfigname
2584 if $pkg_config $sdlname --exists; then
2585 sdlconfig="$pkg_config $sdlname"
2586 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2587 elif has ${sdl_config}; then
2588 sdlconfig="$sdl_config"
2589 sdlversion=$($sdlconfig --version)
2590 else
2591 if test "$sdl" = "yes" ; then
2592 feature_not_found "sdl" "Install SDL devel"
2594 sdl=no
2596 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2597 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2600 sdl_too_old=no
2601 if test "$sdl" != "no" ; then
2602 cat > $TMPC << EOF
2603 #include <SDL.h>
2604 #undef main /* We don't want SDL to override our main() */
2605 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2607 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2608 if test "$static" = "yes" ; then
2609 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2610 else
2611 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2613 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2614 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2615 sdl_too_old=yes
2616 else
2617 sdl=yes
2620 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2621 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2622 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2623 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2624 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2626 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2628 else
2629 sdl=no
2631 fi # static link
2632 else # sdl not found
2633 if test "$sdl" = "yes" ; then
2634 feature_not_found "sdl" "Install SDL devel"
2636 sdl=no
2637 fi # sdl compile test
2640 if test "$sdl" = "yes" ; then
2641 cat > $TMPC <<EOF
2642 #include <SDL.h>
2643 #if defined(SDL_VIDEO_DRIVER_X11)
2644 #include <X11/XKBlib.h>
2645 #else
2646 #error No x11 support
2647 #endif
2648 int main(void) { return 0; }
2650 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2651 sdl_cflags="$sdl_cflags $x11_cflags"
2652 sdl_libs="$sdl_libs $x11_libs"
2654 libs_softmmu="$sdl_libs $libs_softmmu"
2657 ##########################################
2658 # RDMA needs OpenFabrics libraries
2659 if test "$rdma" != "no" ; then
2660 cat > $TMPC <<EOF
2661 #include <rdma/rdma_cma.h>
2662 int main(void) { return 0; }
2664 rdma_libs="-lrdmacm -libverbs"
2665 if compile_prog "" "$rdma_libs" ; then
2666 rdma="yes"
2667 libs_softmmu="$libs_softmmu $rdma_libs"
2668 else
2669 if test "$rdma" = "yes" ; then
2670 error_exit \
2671 " OpenFabrics librdmacm/libibverbs not present." \
2672 " Your options:" \
2673 " (1) Fast: Install infiniband packages from your distro." \
2674 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2675 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2677 rdma="no"
2681 ##########################################
2682 # VNC SASL detection
2683 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2684 cat > $TMPC <<EOF
2685 #include <sasl/sasl.h>
2686 #include <stdio.h>
2687 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2689 # Assuming Cyrus-SASL installed in /usr prefix
2690 vnc_sasl_cflags=""
2691 vnc_sasl_libs="-lsasl2"
2692 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2693 vnc_sasl=yes
2694 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2695 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2696 else
2697 if test "$vnc_sasl" = "yes" ; then
2698 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2700 vnc_sasl=no
2704 ##########################################
2705 # VNC JPEG detection
2706 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2707 if $pkg_config --exists libjpeg; then
2708 vnc_jpeg=yes
2709 libs_softmmu="$libs_softmmu $($pkg_config --libs libjpeg)"
2710 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libjpeg)"
2711 else
2712 cat > $TMPC <<EOF
2713 #include <stdio.h>
2714 #include <jpeglib.h>
2715 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2717 vnc_jpeg_cflags=""
2718 vnc_jpeg_libs="-ljpeg"
2719 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2720 vnc_jpeg=yes
2721 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2722 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2723 else
2724 if test "$vnc_jpeg" = "yes" ; then
2725 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2727 vnc_jpeg=no
2732 ##########################################
2733 # VNC PNG detection
2734 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2735 cat > $TMPC <<EOF
2736 //#include <stdio.h>
2737 #include <png.h>
2738 #include <stddef.h>
2739 int main(void) {
2740 png_structp png_ptr;
2741 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2742 return png_ptr != 0;
2745 if $pkg_config libpng --exists; then
2746 vnc_png_cflags=$($pkg_config libpng --cflags)
2747 vnc_png_libs=$($pkg_config libpng --libs)
2748 else
2749 vnc_png_cflags=""
2750 vnc_png_libs="-lpng"
2752 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2753 vnc_png=yes
2754 libs_softmmu="$vnc_png_libs $libs_softmmu"
2755 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2756 else
2757 if test "$vnc_png" = "yes" ; then
2758 feature_not_found "vnc-png" "Install libpng devel"
2760 vnc_png=no
2764 ##########################################
2765 # fnmatch() probe, used for ACL routines
2766 fnmatch="no"
2767 cat > $TMPC << EOF
2768 #include <fnmatch.h>
2769 int main(void)
2771 fnmatch("foo", "foo", 0);
2772 return 0;
2775 if compile_prog "" "" ; then
2776 fnmatch="yes"
2779 ##########################################
2780 # xfsctl() probe, used for file-posix.c
2781 if test "$xfs" != "no" ; then
2782 cat > $TMPC << EOF
2783 #include <stddef.h> /* NULL */
2784 #include <xfs/xfs.h>
2785 int main(void)
2787 xfsctl(NULL, 0, 0, NULL);
2788 return 0;
2791 if compile_prog "" "" ; then
2792 xfs="yes"
2793 else
2794 if test "$xfs" = "yes" ; then
2795 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2797 xfs=no
2801 ##########################################
2802 # vde libraries probe
2803 if test "$vde" != "no" ; then
2804 vde_libs="-lvdeplug"
2805 cat > $TMPC << EOF
2806 #include <stddef.h>
2807 #include <libvdeplug.h>
2808 int main(void)
2810 struct vde_open_args a = {0, 0, 0};
2811 char s[] = "";
2812 vde_open(s, s, &a);
2813 return 0;
2816 if compile_prog "" "$vde_libs" ; then
2817 vde=yes
2818 libs_softmmu="$vde_libs $libs_softmmu"
2819 libs_tools="$vde_libs $libs_tools"
2820 else
2821 if test "$vde" = "yes" ; then
2822 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2824 vde=no
2828 ##########################################
2829 # netmap support probe
2830 # Apart from looking for netmap headers, we make sure that the host API version
2831 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2832 # a minor/major version number. Minor new features will be marked with values up
2833 # to 15, and if something happens that requires a change to the backend we will
2834 # move above 15, submit the backend fixes and modify this two bounds.
2835 if test "$netmap" != "no" ; then
2836 cat > $TMPC << EOF
2837 #include <inttypes.h>
2838 #include <net/if.h>
2839 #include <net/netmap.h>
2840 #include <net/netmap_user.h>
2841 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2842 #error
2843 #endif
2844 int main(void) { return 0; }
2846 if compile_prog "" "" ; then
2847 netmap=yes
2848 else
2849 if test "$netmap" = "yes" ; then
2850 feature_not_found "netmap"
2852 netmap=no
2856 ##########################################
2857 # libcap-ng library probe
2858 if test "$cap_ng" != "no" ; then
2859 cap_libs="-lcap-ng"
2860 cat > $TMPC << EOF
2861 #include <cap-ng.h>
2862 int main(void)
2864 capng_capability_to_name(CAPNG_EFFECTIVE);
2865 return 0;
2868 if compile_prog "" "$cap_libs" ; then
2869 cap_ng=yes
2870 libs_tools="$cap_libs $libs_tools"
2871 else
2872 if test "$cap_ng" = "yes" ; then
2873 feature_not_found "cap_ng" "Install libcap-ng devel"
2875 cap_ng=no
2879 ##########################################
2880 # Sound support libraries probe
2882 audio_drv_probe()
2884 drv=$1
2885 hdr=$2
2886 lib=$3
2887 exp=$4
2888 cfl=$5
2889 cat > $TMPC << EOF
2890 #include <$hdr>
2891 int main(void) { $exp }
2893 if compile_prog "$cfl" "$lib" ; then
2895 else
2896 error_exit "$drv check failed" \
2897 "Make sure to have the $drv libs and headers installed."
2901 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
2902 for drv in $audio_drv_list; do
2903 case $drv in
2904 alsa)
2905 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2906 "return snd_pcm_close((snd_pcm_t *)0);"
2907 libs_softmmu="-lasound $libs_softmmu"
2911 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2912 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
2913 libs_softmmu="-lpulse $libs_softmmu"
2914 audio_pt_int="yes"
2917 coreaudio)
2918 libs_softmmu="-framework CoreAudio $libs_softmmu"
2921 dsound)
2922 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2923 audio_win_int="yes"
2926 oss)
2927 libs_softmmu="$oss_lib $libs_softmmu"
2930 sdl|wav)
2931 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2935 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2936 error_exit "Unknown driver '$drv' selected" \
2937 "Possible drivers are: $audio_possible_drivers"
2940 esac
2941 done
2943 ##########################################
2944 # BrlAPI probe
2946 if test "$brlapi" != "no" ; then
2947 brlapi_libs="-lbrlapi"
2948 cat > $TMPC << EOF
2949 #include <brlapi.h>
2950 #include <stddef.h>
2951 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2953 if compile_prog "" "$brlapi_libs" ; then
2954 brlapi=yes
2955 libs_softmmu="$brlapi_libs $libs_softmmu"
2956 else
2957 if test "$brlapi" = "yes" ; then
2958 feature_not_found "brlapi" "Install brlapi devel"
2960 brlapi=no
2964 ##########################################
2965 # curses probe
2966 if test "$curses" != "no" ; then
2967 if test "$mingw32" = "yes" ; then
2968 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
2969 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
2970 else
2971 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
2972 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
2974 curses_found=no
2975 cat > $TMPC << EOF
2976 #include <locale.h>
2977 #include <curses.h>
2978 #include <wchar.h>
2979 int main(void) {
2980 const char *s = curses_version();
2981 wchar_t wch = L'w';
2982 setlocale(LC_ALL, "");
2983 resize_term(0, 0);
2984 addwstr(L"wide chars\n");
2985 addnwstr(&wch, 1);
2986 add_wch(WACS_DEGREE);
2987 return s != 0;
2990 IFS=:
2991 for curses_inc in $curses_inc_list; do
2992 IFS=:
2993 for curses_lib in $curses_lib_list; do
2994 unset IFS
2995 if compile_prog "$curses_inc" "$curses_lib" ; then
2996 curses_found=yes
2997 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
2998 libs_softmmu="$curses_lib $libs_softmmu"
2999 break
3001 done
3002 if test "$curses_found" = yes ; then
3003 break
3005 done
3006 unset IFS
3007 if test "$curses_found" = "yes" ; then
3008 curses=yes
3009 else
3010 if test "$curses" = "yes" ; then
3011 feature_not_found "curses" "Install ncurses devel"
3013 curses=no
3017 ##########################################
3018 # curl probe
3019 if test "$curl" != "no" ; then
3020 if $pkg_config libcurl --exists; then
3021 curlconfig="$pkg_config libcurl"
3022 else
3023 curlconfig=curl-config
3025 cat > $TMPC << EOF
3026 #include <curl/curl.h>
3027 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3029 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3030 curl_libs=$($curlconfig --libs 2>/dev/null)
3031 if compile_prog "$curl_cflags" "$curl_libs" ; then
3032 curl=yes
3033 else
3034 if test "$curl" = "yes" ; then
3035 feature_not_found "curl" "Install libcurl devel"
3037 curl=no
3039 fi # test "$curl"
3041 ##########################################
3042 # bluez support probe
3043 if test "$bluez" != "no" ; then
3044 cat > $TMPC << EOF
3045 #include <bluetooth/bluetooth.h>
3046 int main(void) { return bt_error(0); }
3048 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3049 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3050 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3051 bluez=yes
3052 libs_softmmu="$bluez_libs $libs_softmmu"
3053 else
3054 if test "$bluez" = "yes" ; then
3055 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3057 bluez="no"
3061 ##########################################
3062 # glib support probe
3064 glib_req_ver=2.22
3065 glib_modules=gthread-2.0
3066 if test "$modules" = yes; then
3067 glib_modules="$glib_modules gmodule-2.0"
3070 for i in $glib_modules; do
3071 if $pkg_config --atleast-version=$glib_req_ver $i; then
3072 glib_cflags=$($pkg_config --cflags $i)
3073 glib_libs=$($pkg_config --libs $i)
3074 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3075 LIBS="$glib_libs $LIBS"
3076 libs_qga="$glib_libs $libs_qga"
3077 else
3078 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3080 done
3082 # Sanity check that the current size_t matches the
3083 # size that glib thinks it should be. This catches
3084 # problems on multi-arch where people try to build
3085 # 32-bit QEMU while pointing at 64-bit glib headers
3086 cat > $TMPC <<EOF
3087 #include <glib.h>
3088 #include <unistd.h>
3090 #define QEMU_BUILD_BUG_ON(x) \
3091 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3093 int main(void) {
3094 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3095 return 0;
3099 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3100 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3101 "You probably need to set PKG_CONFIG_LIBDIR"\
3102 "to point to the right pkg-config files for your"\
3103 "build target"
3106 # g_test_trap_subprocess added in 2.38. Used by some tests.
3107 glib_subprocess=yes
3108 if test "$mingw32" = "yes" || ! $pkg_config --atleast-version=2.38 glib-2.0; then
3109 glib_subprocess=no
3112 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3113 cat > $TMPC << EOF
3114 #include <glib.h>
3115 int main(void) { return 0; }
3117 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3118 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3119 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3120 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3124 #########################################
3125 # zlib check
3127 if test "$zlib" != "no" ; then
3128 if $pkg_config --exists zlib; then
3129 zlib_cflags=$($pkg_config --cflags zlib)
3130 zlib_libs=$($pkg_config --libs zlib)
3131 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3132 LIBS="$zlib_libs $LIBS"
3133 else
3134 cat > $TMPC << EOF
3135 #include <zlib.h>
3136 int main(void) { zlibVersion(); return 0; }
3138 if compile_prog "" "-lz" ; then
3139 LIBS="$LIBS -lz"
3140 else
3141 error_exit "zlib check failed" \
3142 "Make sure to have the zlib libs and headers installed."
3147 ##########################################
3148 # SHA command probe for modules
3149 if test "$modules" = yes; then
3150 shacmd_probe="sha1sum sha1 shasum"
3151 for c in $shacmd_probe; do
3152 if has $c; then
3153 shacmd="$c"
3154 break
3156 done
3157 if test "$shacmd" = ""; then
3158 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3162 ##########################################
3163 # pixman support probe
3165 if test "$pixman" = ""; then
3166 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3167 pixman="none"
3168 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3169 pixman="system"
3170 else
3171 pixman="internal"
3174 if test "$pixman" = "none"; then
3175 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3176 error_exit "pixman disabled but system emulation or tools build" \
3177 "enabled. You can turn off pixman only if you also" \
3178 "disable all system emulation targets and the tools" \
3179 "build with '--disable-tools --disable-system'."
3181 pixman_cflags=
3182 pixman_libs=
3183 elif test "$pixman" = "system"; then
3184 # pixman version has been checked above
3185 pixman_cflags=$($pkg_config --cflags pixman-1)
3186 pixman_libs=$($pkg_config --libs pixman-1)
3187 else
3188 if test ! -d ${source_path}/pixman/pixman; then
3189 error_exit "pixman >= 0.21.8 not present. Your options:" \
3190 " (1) Preferred: Install the pixman devel package (any recent" \
3191 " distro should have packages as Xorg needs pixman too)." \
3192 " (2) Fetch the pixman submodule, using:" \
3193 " git submodule update --init pixman"
3195 mkdir -p pixman/pixman
3196 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3197 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3200 ##########################################
3201 # libcap probe
3203 if test "$cap" != "no" ; then
3204 cat > $TMPC <<EOF
3205 #include <stdio.h>
3206 #include <sys/capability.h>
3207 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3209 if compile_prog "" "-lcap" ; then
3210 cap=yes
3211 else
3212 cap=no
3216 ##########################################
3217 # pthread probe
3218 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3220 pthread=no
3221 cat > $TMPC << EOF
3222 #include <pthread.h>
3223 static void *f(void *p) { return NULL; }
3224 int main(void) {
3225 pthread_t thread;
3226 pthread_create(&thread, 0, f, 0);
3227 return 0;
3230 if compile_prog "" "" ; then
3231 pthread=yes
3232 else
3233 for pthread_lib in $PTHREADLIBS_LIST; do
3234 if compile_prog "" "$pthread_lib" ; then
3235 pthread=yes
3236 found=no
3237 for lib_entry in $LIBS; do
3238 if test "$lib_entry" = "$pthread_lib"; then
3239 found=yes
3240 break
3242 done
3243 if test "$found" = "no"; then
3244 LIBS="$pthread_lib $LIBS"
3246 PTHREAD_LIB="$pthread_lib"
3247 break
3249 done
3252 if test "$mingw32" != yes -a "$pthread" = no; then
3253 error_exit "pthread check failed" \
3254 "Make sure to have the pthread libs and headers installed."
3257 # check for pthread_setname_np
3258 pthread_setname_np=no
3259 cat > $TMPC << EOF
3260 #include <pthread.h>
3262 static void *f(void *p) { return NULL; }
3263 int main(void)
3265 pthread_t thread;
3266 pthread_create(&thread, 0, f, 0);
3267 pthread_setname_np(thread, "QEMU");
3268 return 0;
3271 if compile_prog "" "$pthread_lib" ; then
3272 pthread_setname_np=yes
3275 ##########################################
3276 # rbd probe
3277 if test "$rbd" != "no" ; then
3278 cat > $TMPC <<EOF
3279 #include <stdio.h>
3280 #include <rbd/librbd.h>
3281 int main(void) {
3282 rados_t cluster;
3283 rados_create(&cluster, NULL);
3284 return 0;
3287 rbd_libs="-lrbd -lrados"
3288 if compile_prog "" "$rbd_libs" ; then
3289 rbd=yes
3290 else
3291 if test "$rbd" = "yes" ; then
3292 feature_not_found "rados block device" "Install librbd/ceph devel"
3294 rbd=no
3298 ##########################################
3299 # libssh2 probe
3300 min_libssh2_version=1.2.8
3301 if test "$libssh2" != "no" ; then
3302 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3303 libssh2_cflags=$($pkg_config libssh2 --cflags)
3304 libssh2_libs=$($pkg_config libssh2 --libs)
3305 libssh2=yes
3306 else
3307 if test "$libssh2" = "yes" ; then
3308 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3310 libssh2=no
3314 ##########################################
3315 # libssh2_sftp_fsync probe
3317 if test "$libssh2" = "yes"; then
3318 cat > $TMPC <<EOF
3319 #include <stdio.h>
3320 #include <libssh2.h>
3321 #include <libssh2_sftp.h>
3322 int main(void) {
3323 LIBSSH2_SESSION *session;
3324 LIBSSH2_SFTP *sftp;
3325 LIBSSH2_SFTP_HANDLE *sftp_handle;
3326 session = libssh2_session_init ();
3327 sftp = libssh2_sftp_init (session);
3328 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3329 libssh2_sftp_fsync (sftp_handle);
3330 return 0;
3333 # libssh2_cflags/libssh2_libs defined in previous test.
3334 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3335 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3339 ##########################################
3340 # linux-aio probe
3342 if test "$linux_aio" != "no" ; then
3343 cat > $TMPC <<EOF
3344 #include <libaio.h>
3345 #include <sys/eventfd.h>
3346 #include <stddef.h>
3347 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3349 if compile_prog "" "-laio" ; then
3350 linux_aio=yes
3351 else
3352 if test "$linux_aio" = "yes" ; then
3353 feature_not_found "linux AIO" "Install libaio devel"
3355 linux_aio=no
3359 ##########################################
3360 # TPM passthrough is only on x86 Linux
3362 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3363 tpm_passthrough=$tpm
3364 else
3365 tpm_passthrough=no
3368 ##########################################
3369 # attr probe
3371 if test "$attr" != "no" ; then
3372 cat > $TMPC <<EOF
3373 #include <stdio.h>
3374 #include <sys/types.h>
3375 #ifdef CONFIG_LIBATTR
3376 #include <attr/xattr.h>
3377 #else
3378 #include <sys/xattr.h>
3379 #endif
3380 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3382 if compile_prog "" "" ; then
3383 attr=yes
3384 # Older distros have <attr/xattr.h>, and need -lattr:
3385 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3386 attr=yes
3387 LIBS="-lattr $LIBS"
3388 libattr=yes
3389 else
3390 if test "$attr" = "yes" ; then
3391 feature_not_found "ATTR" "Install libc6 or libattr devel"
3393 attr=no
3397 ##########################################
3398 # iovec probe
3399 cat > $TMPC <<EOF
3400 #include <sys/types.h>
3401 #include <sys/uio.h>
3402 #include <unistd.h>
3403 int main(void) { return sizeof(struct iovec); }
3405 iovec=no
3406 if compile_prog "" "" ; then
3407 iovec=yes
3410 ##########################################
3411 # preadv probe
3412 cat > $TMPC <<EOF
3413 #include <sys/types.h>
3414 #include <sys/uio.h>
3415 #include <unistd.h>
3416 int main(void) { return preadv(0, 0, 0, 0); }
3418 preadv=no
3419 if compile_prog "" "" ; then
3420 preadv=yes
3423 ##########################################
3424 # fdt probe
3425 # fdt support is mandatory for at least some target architectures,
3426 # so insist on it if we're building those system emulators.
3427 fdt_required=no
3428 for target in $target_list; do
3429 case $target in
3430 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3431 fdt_required=yes
3433 esac
3434 done
3436 if test "$fdt_required" = "yes"; then
3437 if test "$fdt" = "no"; then
3438 error_exit "fdt disabled but some requested targets require it." \
3439 "You can turn off fdt only if you also disable all the system emulation" \
3440 "targets which need it (by specifying a cut down --target-list)."
3442 fdt=yes
3445 if test "$fdt" != "no" ; then
3446 fdt_libs="-lfdt"
3447 # explicitly check for libfdt_env.h as it is missing in some stable installs
3448 # and test for required functions to make sure we are on a version >= 1.4.0
3449 cat > $TMPC << EOF
3450 #include <libfdt.h>
3451 #include <libfdt_env.h>
3452 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3454 if compile_prog "" "$fdt_libs" ; then
3455 # system DTC is good - use it
3456 fdt=yes
3457 elif test -d ${source_path}/dtc/libfdt ; then
3458 # have submodule DTC - use it
3459 fdt=yes
3460 dtc_internal="yes"
3461 mkdir -p dtc
3462 if [ "$pwd_is_source_path" != "y" ] ; then
3463 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3464 symlink "$source_path/dtc/scripts" "dtc/scripts"
3466 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3467 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3468 elif test "$fdt" = "yes" ; then
3469 # have neither and want - prompt for system/submodule install
3470 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3471 " (1) Preferred: Install the DTC (libfdt) devel package" \
3472 " (2) Fetch the DTC submodule, using:" \
3473 " git submodule update --init dtc"
3474 else
3475 # don't have and don't want
3476 fdt_libs=
3477 fdt=no
3481 libs_softmmu="$libs_softmmu $fdt_libs"
3483 ##########################################
3484 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3486 if test "$opengl" != "no" ; then
3487 opengl_pkgs="epoxy libdrm gbm"
3488 if $pkg_config $opengl_pkgs x11; then
3489 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3490 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3491 opengl=yes
3492 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3493 gtk_gl="yes"
3495 else
3496 if test "$opengl" = "yes" ; then
3497 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3499 opengl_cflags=""
3500 opengl_libs=""
3501 opengl=no
3505 if test "$opengl" = "yes"; then
3506 cat > $TMPC << EOF
3507 #include <epoxy/egl.h>
3508 #ifndef EGL_MESA_image_dma_buf_export
3509 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3510 #endif
3511 int main(void) { return 0; }
3513 if compile_prog "" "" ; then
3514 opengl_dmabuf=yes
3518 ##########################################
3519 # archipelago probe
3520 if test "$archipelago" != "no" ; then
3521 cat > $TMPC <<EOF
3522 #include <stdio.h>
3523 #include <xseg/xseg.h>
3524 #include <xseg/protocol.h>
3525 int main(void) {
3526 xseg_initialize();
3527 return 0;
3530 archipelago_libs=-lxseg
3531 if compile_prog "" "$archipelago_libs"; then
3532 archipelago="yes"
3533 libs_tools="$archipelago_libs $libs_tools"
3534 libs_softmmu="$archipelago_libs $libs_softmmu"
3536 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3537 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3538 echo "license and therefore prevent redistribution."
3539 echo
3540 echo "To disable Archipelago, use --disable-archipelago"
3541 else
3542 if test "$archipelago" = "yes" ; then
3543 feature_not_found "Archipelago backend support" "Install libxseg devel"
3545 archipelago="no"
3550 ##########################################
3551 # glusterfs probe
3552 if test "$glusterfs" != "no" ; then
3553 if $pkg_config --atleast-version=3 glusterfs-api; then
3554 glusterfs="yes"
3555 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3556 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3557 if $pkg_config --atleast-version=4 glusterfs-api; then
3558 glusterfs_xlator_opt="yes"
3560 if $pkg_config --atleast-version=5 glusterfs-api; then
3561 glusterfs_discard="yes"
3563 if $pkg_config --atleast-version=6 glusterfs-api; then
3564 glusterfs_zerofill="yes"
3566 else
3567 if test "$glusterfs" = "yes" ; then
3568 feature_not_found "GlusterFS backend support" \
3569 "Install glusterfs-api devel >= 3"
3571 glusterfs="no"
3575 # Check for inotify functions when we are building linux-user
3576 # emulator. This is done because older glibc versions don't
3577 # have syscall stubs for these implemented. In that case we
3578 # don't provide them even if kernel supports them.
3580 inotify=no
3581 cat > $TMPC << EOF
3582 #include <sys/inotify.h>
3585 main(void)
3587 /* try to start inotify */
3588 return inotify_init();
3591 if compile_prog "" "" ; then
3592 inotify=yes
3595 inotify1=no
3596 cat > $TMPC << EOF
3597 #include <sys/inotify.h>
3600 main(void)
3602 /* try to start inotify */
3603 return inotify_init1(0);
3606 if compile_prog "" "" ; then
3607 inotify1=yes
3610 # check if utimensat and futimens are supported
3611 utimens=no
3612 cat > $TMPC << EOF
3613 #define _ATFILE_SOURCE
3614 #include <stddef.h>
3615 #include <fcntl.h>
3616 #include <sys/stat.h>
3618 int main(void)
3620 utimensat(AT_FDCWD, "foo", NULL, 0);
3621 futimens(0, NULL);
3622 return 0;
3625 if compile_prog "" "" ; then
3626 utimens=yes
3629 # check if pipe2 is there
3630 pipe2=no
3631 cat > $TMPC << EOF
3632 #include <unistd.h>
3633 #include <fcntl.h>
3635 int main(void)
3637 int pipefd[2];
3638 return pipe2(pipefd, O_CLOEXEC);
3641 if compile_prog "" "" ; then
3642 pipe2=yes
3645 # check if accept4 is there
3646 accept4=no
3647 cat > $TMPC << EOF
3648 #include <sys/socket.h>
3649 #include <stddef.h>
3651 int main(void)
3653 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3654 return 0;
3657 if compile_prog "" "" ; then
3658 accept4=yes
3661 # check if tee/splice is there. vmsplice was added same time.
3662 splice=no
3663 cat > $TMPC << EOF
3664 #include <unistd.h>
3665 #include <fcntl.h>
3666 #include <limits.h>
3668 int main(void)
3670 int len, fd = 0;
3671 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3672 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3673 return 0;
3676 if compile_prog "" "" ; then
3677 splice=yes
3680 ##########################################
3681 # libnuma probe
3683 if test "$numa" != "no" ; then
3684 cat > $TMPC << EOF
3685 #include <numa.h>
3686 int main(void) { return numa_available(); }
3689 if compile_prog "" "-lnuma" ; then
3690 numa=yes
3691 libs_softmmu="-lnuma $libs_softmmu"
3692 else
3693 if test "$numa" = "yes" ; then
3694 feature_not_found "numa" "install numactl devel"
3696 numa=no
3700 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3701 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3702 exit 1
3705 ##########################################
3706 # tcmalloc probe
3708 if test "$tcmalloc" = "yes" ; then
3709 cat > $TMPC << EOF
3710 #include <stdlib.h>
3711 int main(void) { malloc(1); return 0; }
3714 if compile_prog "" "-ltcmalloc" ; then
3715 LIBS="-ltcmalloc $LIBS"
3716 else
3717 feature_not_found "tcmalloc" "install gperftools devel"
3721 ##########################################
3722 # jemalloc probe
3724 if test "$jemalloc" = "yes" ; then
3725 cat > $TMPC << EOF
3726 #include <stdlib.h>
3727 int main(void) { malloc(1); return 0; }
3730 if compile_prog "" "-ljemalloc" ; then
3731 LIBS="-ljemalloc $LIBS"
3732 else
3733 feature_not_found "jemalloc" "install jemalloc devel"
3737 ##########################################
3738 # signalfd probe
3739 signalfd="no"
3740 cat > $TMPC << EOF
3741 #include <unistd.h>
3742 #include <sys/syscall.h>
3743 #include <signal.h>
3744 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3747 if compile_prog "" "" ; then
3748 signalfd=yes
3751 # check if eventfd is supported
3752 eventfd=no
3753 cat > $TMPC << EOF
3754 #include <sys/eventfd.h>
3756 int main(void)
3758 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3761 if compile_prog "" "" ; then
3762 eventfd=yes
3765 # check if memfd is supported
3766 memfd=no
3767 cat > $TMPC << EOF
3768 #include <sys/memfd.h>
3770 int main(void)
3772 return memfd_create("foo", MFD_ALLOW_SEALING);
3775 if compile_prog "" "" ; then
3776 memfd=yes
3781 # check for fallocate
3782 fallocate=no
3783 cat > $TMPC << EOF
3784 #include <fcntl.h>
3786 int main(void)
3788 fallocate(0, 0, 0, 0);
3789 return 0;
3792 if compile_prog "" "" ; then
3793 fallocate=yes
3796 # check for fallocate hole punching
3797 fallocate_punch_hole=no
3798 cat > $TMPC << EOF
3799 #include <fcntl.h>
3800 #include <linux/falloc.h>
3802 int main(void)
3804 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3805 return 0;
3808 if compile_prog "" "" ; then
3809 fallocate_punch_hole=yes
3812 # check that fallocate supports range zeroing inside the file
3813 fallocate_zero_range=no
3814 cat > $TMPC << EOF
3815 #include <fcntl.h>
3816 #include <linux/falloc.h>
3818 int main(void)
3820 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3821 return 0;
3824 if compile_prog "" "" ; then
3825 fallocate_zero_range=yes
3828 # check for posix_fallocate
3829 posix_fallocate=no
3830 cat > $TMPC << EOF
3831 #include <fcntl.h>
3833 int main(void)
3835 posix_fallocate(0, 0, 0);
3836 return 0;
3839 if compile_prog "" "" ; then
3840 posix_fallocate=yes
3843 # check for sync_file_range
3844 sync_file_range=no
3845 cat > $TMPC << EOF
3846 #include <fcntl.h>
3848 int main(void)
3850 sync_file_range(0, 0, 0, 0);
3851 return 0;
3854 if compile_prog "" "" ; then
3855 sync_file_range=yes
3858 # check for linux/fiemap.h and FS_IOC_FIEMAP
3859 fiemap=no
3860 cat > $TMPC << EOF
3861 #include <sys/ioctl.h>
3862 #include <linux/fs.h>
3863 #include <linux/fiemap.h>
3865 int main(void)
3867 ioctl(0, FS_IOC_FIEMAP, 0);
3868 return 0;
3871 if compile_prog "" "" ; then
3872 fiemap=yes
3875 # check for dup3
3876 dup3=no
3877 cat > $TMPC << EOF
3878 #include <unistd.h>
3880 int main(void)
3882 dup3(0, 0, 0);
3883 return 0;
3886 if compile_prog "" "" ; then
3887 dup3=yes
3890 # check for ppoll support
3891 ppoll=no
3892 cat > $TMPC << EOF
3893 #include <poll.h>
3895 int main(void)
3897 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3898 ppoll(&pfd, 1, 0, 0);
3899 return 0;
3902 if compile_prog "" "" ; then
3903 ppoll=yes
3906 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3907 prctl_pr_set_timerslack=no
3908 cat > $TMPC << EOF
3909 #include <sys/prctl.h>
3911 int main(void)
3913 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3914 return 0;
3917 if compile_prog "" "" ; then
3918 prctl_pr_set_timerslack=yes
3921 # check for epoll support
3922 epoll=no
3923 cat > $TMPC << EOF
3924 #include <sys/epoll.h>
3926 int main(void)
3928 epoll_create(0);
3929 return 0;
3932 if compile_prog "" "" ; then
3933 epoll=yes
3936 # epoll_create1 is a later addition
3937 # so we must check separately for its presence
3938 epoll_create1=no
3939 cat > $TMPC << EOF
3940 #include <sys/epoll.h>
3942 int main(void)
3944 /* Note that we use epoll_create1 as a value, not as
3945 * a function being called. This is necessary so that on
3946 * old SPARC glibc versions where the function was present in
3947 * the library but not declared in the header file we will
3948 * fail the configure check. (Otherwise we will get a compiler
3949 * warning but not an error, and will proceed to fail the
3950 * qemu compile where we compile with -Werror.)
3952 return (int)(uintptr_t)&epoll_create1;
3955 if compile_prog "" "" ; then
3956 epoll_create1=yes
3959 # check for sendfile support
3960 sendfile=no
3961 cat > $TMPC << EOF
3962 #include <sys/sendfile.h>
3964 int main(void)
3966 return sendfile(0, 0, 0, 0);
3969 if compile_prog "" "" ; then
3970 sendfile=yes
3973 # check for timerfd support (glibc 2.8 and newer)
3974 timerfd=no
3975 cat > $TMPC << EOF
3976 #include <sys/timerfd.h>
3978 int main(void)
3980 return(timerfd_create(CLOCK_REALTIME, 0));
3983 if compile_prog "" "" ; then
3984 timerfd=yes
3987 # check for setns and unshare support
3988 setns=no
3989 cat > $TMPC << EOF
3990 #include <sched.h>
3992 int main(void)
3994 int ret;
3995 ret = setns(0, 0);
3996 ret = unshare(0);
3997 return ret;
4000 if compile_prog "" "" ; then
4001 setns=yes
4004 # clock_adjtime probe
4005 clock_adjtime=no
4006 cat > $TMPC <<EOF
4007 #include <time.h>
4009 int main(void)
4011 return clock_adjtime(0, 0);
4014 clock_adjtime=no
4015 if compile_prog "" "" ; then
4016 clock_adjtime=yes
4019 # syncfs probe
4020 syncfs=no
4021 cat > $TMPC <<EOF
4022 #include <unistd.h>
4024 int main(void)
4026 return syncfs(0);
4029 syncfs=no
4030 if compile_prog "" "" ; then
4031 syncfs=yes
4034 # Check if tools are available to build documentation.
4035 if test "$docs" != "no" ; then
4036 if has makeinfo && has pod2man; then
4037 docs=yes
4038 else
4039 if test "$docs" = "yes" ; then
4040 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4042 docs=no
4046 if test "$want_tools" = ""; then
4047 if test $(expr "$target_list" : ".*softmmu.*") != 0; then
4048 want_tools=yes
4049 else
4050 want_tools=no
4054 # Search for bswap_32 function
4055 byteswap_h=no
4056 cat > $TMPC << EOF
4057 #include <byteswap.h>
4058 int main(void) { return bswap_32(0); }
4060 if compile_prog "" "" ; then
4061 byteswap_h=yes
4064 # Search for bswap32 function
4065 bswap_h=no
4066 cat > $TMPC << EOF
4067 #include <sys/endian.h>
4068 #include <sys/types.h>
4069 #include <machine/bswap.h>
4070 int main(void) { return bswap32(0); }
4072 if compile_prog "" "" ; then
4073 bswap_h=yes
4076 ##########################################
4077 # Do we have libiscsi >= 1.9.0
4078 if test "$libiscsi" != "no" ; then
4079 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4080 libiscsi="yes"
4081 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4082 libiscsi_libs=$($pkg_config --libs libiscsi)
4083 else
4084 if test "$libiscsi" = "yes" ; then
4085 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4087 libiscsi="no"
4091 ##########################################
4092 # Do we need libm
4093 cat > $TMPC << EOF
4094 #include <math.h>
4095 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4097 if compile_prog "" "" ; then
4099 elif compile_prog "" "-lm" ; then
4100 LIBS="-lm $LIBS"
4101 libs_qga="-lm $libs_qga"
4102 else
4103 error_exit "libm check failed"
4106 ##########################################
4107 # Do we need librt
4108 # uClibc provides 2 versions of clock_gettime(), one with realtime
4109 # support and one without. This means that the clock_gettime() don't
4110 # need -lrt. We still need it for timer_create() so we check for this
4111 # function in addition.
4112 cat > $TMPC <<EOF
4113 #include <signal.h>
4114 #include <time.h>
4115 int main(void) {
4116 timer_create(CLOCK_REALTIME, NULL, NULL);
4117 return clock_gettime(CLOCK_REALTIME, NULL);
4121 if compile_prog "" "" ; then
4123 # we need pthread for static linking. use previous pthread test result
4124 elif compile_prog "" "$pthread_lib -lrt" ; then
4125 LIBS="$LIBS -lrt"
4126 libs_qga="$libs_qga -lrt"
4129 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4130 "$aix" != "yes" -a "$haiku" != "yes" ; then
4131 libs_softmmu="-lutil $libs_softmmu"
4134 ##########################################
4135 # spice probe
4136 if test "$spice" != "no" ; then
4137 cat > $TMPC << EOF
4138 #include <spice.h>
4139 int main(void) { spice_server_new(); return 0; }
4141 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4142 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4143 if $pkg_config --atleast-version=0.12.0 spice-server && \
4144 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4145 compile_prog "$spice_cflags" "$spice_libs" ; then
4146 spice="yes"
4147 libs_softmmu="$libs_softmmu $spice_libs"
4148 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4149 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4150 spice_server_version=$($pkg_config --modversion spice-server)
4151 else
4152 if test "$spice" = "yes" ; then
4153 feature_not_found "spice" \
4154 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4156 spice="no"
4160 # check for smartcard support
4161 smartcard_cflags=""
4162 if test "$smartcard" != "no"; then
4163 if $pkg_config libcacard; then
4164 libcacard_cflags=$($pkg_config --cflags libcacard)
4165 libcacard_libs=$($pkg_config --libs libcacard)
4166 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4167 libs_softmmu="$libs_softmmu $libcacard_libs"
4168 smartcard="yes"
4169 else
4170 if test "$smartcard" = "yes"; then
4171 feature_not_found "smartcard" "Install libcacard devel"
4173 smartcard="no"
4177 # check for libusb
4178 if test "$libusb" != "no" ; then
4179 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4180 libusb="yes"
4181 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4182 libusb_libs=$($pkg_config --libs libusb-1.0)
4183 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4184 libs_softmmu="$libs_softmmu $libusb_libs"
4185 else
4186 if test "$libusb" = "yes"; then
4187 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4189 libusb="no"
4193 # check for usbredirparser for usb network redirection support
4194 if test "$usb_redir" != "no" ; then
4195 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4196 usb_redir="yes"
4197 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4198 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4199 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4200 libs_softmmu="$libs_softmmu $usb_redir_libs"
4201 else
4202 if test "$usb_redir" = "yes"; then
4203 feature_not_found "usb-redir" "Install usbredir devel"
4205 usb_redir="no"
4209 ##########################################
4210 # check if we have VSS SDK headers for win
4212 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4213 case "$vss_win32_sdk" in
4214 "") vss_win32_include="-isystem $source_path" ;;
4215 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4216 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4217 vss_win32_include="-isystem $source_path/.sdk/vss"
4218 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4220 *) vss_win32_include="-isystem $vss_win32_sdk"
4221 esac
4222 cat > $TMPC << EOF
4223 #define __MIDL_user_allocate_free_DEFINED__
4224 #include <inc/win2003/vss.h>
4225 int main(void) { return VSS_CTX_BACKUP; }
4227 if compile_prog "$vss_win32_include" "" ; then
4228 guest_agent_with_vss="yes"
4229 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4230 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4231 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4232 else
4233 if test "$vss_win32_sdk" != "" ; then
4234 echo "ERROR: Please download and install Microsoft VSS SDK:"
4235 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4236 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4237 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4238 echo "ERROR: The headers are extracted in the directory \`inc'."
4239 feature_not_found "VSS support"
4241 guest_agent_with_vss="no"
4245 ##########################################
4246 # lookup Windows platform SDK (if not specified)
4247 # The SDK is needed only to build .tlb (type library) file of guest agent
4248 # VSS provider from the source. It is usually unnecessary because the
4249 # pre-compiled .tlb file is included.
4251 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4252 if test -z "$win_sdk"; then
4253 programfiles="$PROGRAMFILES"
4254 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4255 if test -n "$programfiles"; then
4256 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4257 else
4258 feature_not_found "Windows SDK"
4260 elif test "$win_sdk" = "no"; then
4261 win_sdk=""
4265 ##########################################
4266 # check if mingw environment provides a recent ntddscsi.h
4267 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4268 cat > $TMPC << EOF
4269 #include <windows.h>
4270 #include <ntddscsi.h>
4271 int main(void) {
4272 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4273 #error Missing required ioctl definitions
4274 #endif
4275 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4276 return addr.Lun;
4279 if compile_prog "" "" ; then
4280 guest_agent_ntddscsi=yes
4281 libs_qga="-lsetupapi $libs_qga"
4285 ##########################################
4286 # virgl renderer probe
4288 if test "$virglrenderer" != "no" ; then
4289 cat > $TMPC << EOF
4290 #include <virglrenderer.h>
4291 int main(void) { virgl_renderer_poll(); return 0; }
4293 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4294 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4295 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4296 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4297 virglrenderer="yes"
4298 else
4299 if test "$virglrenderer" = "yes" ; then
4300 feature_not_found "virglrenderer"
4302 virglrenderer="no"
4306 ##########################################
4307 # check if we have fdatasync
4309 fdatasync=no
4310 cat > $TMPC << EOF
4311 #include <unistd.h>
4312 int main(void) {
4313 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4314 return fdatasync(0);
4315 #else
4316 #error Not supported
4317 #endif
4320 if compile_prog "" "" ; then
4321 fdatasync=yes
4324 ##########################################
4325 # check if we have madvise
4327 madvise=no
4328 cat > $TMPC << EOF
4329 #include <sys/types.h>
4330 #include <sys/mman.h>
4331 #include <stddef.h>
4332 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4334 if compile_prog "" "" ; then
4335 madvise=yes
4338 ##########################################
4339 # check if we have posix_madvise
4341 posix_madvise=no
4342 cat > $TMPC << EOF
4343 #include <sys/mman.h>
4344 #include <stddef.h>
4345 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4347 if compile_prog "" "" ; then
4348 posix_madvise=yes
4351 ##########################################
4352 # check if we have posix_syslog
4354 posix_syslog=no
4355 cat > $TMPC << EOF
4356 #include <syslog.h>
4357 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4359 if compile_prog "" "" ; then
4360 posix_syslog=yes
4363 ##########################################
4364 # check if trace backend exists
4366 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4367 if test "$?" -ne 0 ; then
4368 error_exit "invalid trace backends" \
4369 "Please choose supported trace backends."
4372 ##########################################
4373 # For 'ust' backend, test if ust headers are present
4374 if have_backend "ust"; then
4375 cat > $TMPC << EOF
4376 #include <lttng/tracepoint.h>
4377 int main(void) { return 0; }
4379 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4380 if $pkg_config lttng-ust --exists; then
4381 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4382 else
4383 lttng_ust_libs="-llttng-ust -ldl"
4385 if $pkg_config liburcu-bp --exists; then
4386 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4387 else
4388 urcu_bp_libs="-lurcu-bp"
4391 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4392 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4393 else
4394 error_exit "Trace backend 'ust' missing lttng-ust header files"
4398 ##########################################
4399 # For 'dtrace' backend, test if 'dtrace' command is present
4400 if have_backend "dtrace"; then
4401 if ! has 'dtrace' ; then
4402 error_exit "dtrace command is not found in PATH $PATH"
4404 trace_backend_stap="no"
4405 if has 'stap' ; then
4406 trace_backend_stap="yes"
4410 ##########################################
4411 # check and set a backend for coroutine
4413 # We prefer ucontext, but it's not always possible. The fallback
4414 # is sigcontext. gthread is not selectable except explicitly, because
4415 # it is not functional enough to run QEMU proper. (It is occasionally
4416 # useful for debugging purposes.) On Windows the only valid backend
4417 # is the Windows-specific one.
4419 ucontext_works=no
4420 if test "$darwin" != "yes"; then
4421 cat > $TMPC << EOF
4422 #include <ucontext.h>
4423 #ifdef __stub_makecontext
4424 #error Ignoring glibc stub makecontext which will always fail
4425 #endif
4426 int main(void) { makecontext(0, 0, 0); return 0; }
4428 if compile_prog "" "" ; then
4429 ucontext_works=yes
4433 if test "$coroutine" = ""; then
4434 if test "$mingw32" = "yes"; then
4435 coroutine=win32
4436 elif test "$ucontext_works" = "yes"; then
4437 coroutine=ucontext
4438 else
4439 coroutine=sigaltstack
4441 else
4442 case $coroutine in
4443 windows)
4444 if test "$mingw32" != "yes"; then
4445 error_exit "'windows' coroutine backend only valid for Windows"
4447 # Unfortunately the user visible backend name doesn't match the
4448 # coroutine-*.c filename for this case, so we have to adjust it here.
4449 coroutine=win32
4451 ucontext)
4452 if test "$ucontext_works" != "yes"; then
4453 feature_not_found "ucontext"
4456 gthread|sigaltstack)
4457 if test "$mingw32" = "yes"; then
4458 error_exit "only the 'windows' coroutine backend is valid for Windows"
4462 error_exit "unknown coroutine backend $coroutine"
4464 esac
4467 if test "$coroutine_pool" = ""; then
4468 if test "$coroutine" = "gthread" -o "$coroutine" = "win32"; then
4469 coroutine_pool=no
4470 else
4471 coroutine_pool=yes
4474 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4475 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4478 if test "$debug_stack_usage" = "yes"; then
4479 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4480 error_exit "stack usage debugging is not supported for $cpu"
4482 if test "$coroutine_pool" = "yes"; then
4483 echo "WARN: disabling coroutine pool for stack usage debugging"
4484 coroutine_pool=no
4489 ##########################################
4490 # check if we have open_by_handle_at
4492 open_by_handle_at=no
4493 cat > $TMPC << EOF
4494 #include <fcntl.h>
4495 #if !defined(AT_EMPTY_PATH)
4496 # error missing definition
4497 #else
4498 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4499 #endif
4501 if compile_prog "" "" ; then
4502 open_by_handle_at=yes
4505 ########################################
4506 # check if we have linux/magic.h
4508 linux_magic_h=no
4509 cat > $TMPC << EOF
4510 #include <linux/magic.h>
4511 int main(void) {
4512 return 0;
4515 if compile_prog "" "" ; then
4516 linux_magic_h=yes
4519 ########################################
4520 # check whether we can disable warning option with a pragma (this is needed
4521 # to silence warnings in the headers of some versions of external libraries).
4522 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4523 # only a warning.
4525 # If we can't selectively disable warning in the code, disable -Werror so that
4526 # the build doesn't fail anyway.
4528 pragma_disable_unused_but_set=no
4529 cat > $TMPC << EOF
4530 #pragma GCC diagnostic push
4531 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4532 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4533 #pragma GCC diagnostic pop
4535 int main(void) {
4536 return 0;
4539 if compile_prog "-Werror" "" ; then
4540 pragma_diagnostic_available=yes
4543 ########################################
4544 # check if we have valgrind/valgrind.h
4546 valgrind_h=no
4547 cat > $TMPC << EOF
4548 #include <valgrind/valgrind.h>
4549 int main(void) {
4550 return 0;
4553 if compile_prog "" "" ; then
4554 valgrind_h=yes
4557 ########################################
4558 # check if environ is declared
4560 has_environ=no
4561 cat > $TMPC << EOF
4562 #include <unistd.h>
4563 int main(void) {
4564 environ = 0;
4565 return 0;
4568 if compile_prog "" "" ; then
4569 has_environ=yes
4572 ########################################
4573 # check if cpuid.h is usable.
4575 cpuid_h=no
4576 cat > $TMPC << EOF
4577 #include <cpuid.h>
4578 int main(void) {
4579 unsigned a, b, c, d;
4580 int max = __get_cpuid_max(0, 0);
4582 if (max >= 1) {
4583 __cpuid(1, a, b, c, d);
4586 if (max >= 7) {
4587 __cpuid_count(7, 0, a, b, c, d);
4590 return 0;
4593 if compile_prog "" "" ; then
4594 cpuid_h=yes
4597 ########################################
4598 # check if __[u]int128_t is usable.
4600 int128=no
4601 cat > $TMPC << EOF
4602 #if defined(__clang_major__) && defined(__clang_minor__)
4603 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4604 # error __int128_t does not work in CLANG before 3.2
4605 # endif
4606 #endif
4607 __int128_t a;
4608 __uint128_t b;
4609 int main (void) {
4610 a = a + b;
4611 b = a * b;
4612 a = a * a;
4613 return 0;
4616 if compile_prog "" "" ; then
4617 int128=yes
4620 #########################################
4621 # See if 128-bit atomic operations are supported.
4623 atomic128=no
4624 if test "$int128" = "yes"; then
4625 cat > $TMPC << EOF
4626 int main(void)
4628 unsigned __int128 x = 0, y = 0;
4629 y = __atomic_load_16(&x, 0);
4630 __atomic_store_16(&x, y, 0);
4631 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4632 return 0;
4635 if compile_prog "" "" ; then
4636 atomic128=yes
4640 #########################################
4641 # See if 64-bit atomic operations are supported.
4642 # Note that without __atomic builtins, we can only
4643 # assume atomic loads/stores max at pointer size.
4645 cat > $TMPC << EOF
4646 #include <stdint.h>
4647 int main(void)
4649 uint64_t x = 0, y = 0;
4650 #ifdef __ATOMIC_RELAXED
4651 y = __atomic_load_8(&x, 0);
4652 __atomic_store_8(&x, y, 0);
4653 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4654 __atomic_exchange_8(&x, y, 0);
4655 __atomic_fetch_add_8(&x, y, 0);
4656 #else
4657 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4658 __sync_lock_test_and_set(&x, y);
4659 __sync_val_compare_and_swap(&x, y, 0);
4660 __sync_fetch_and_add(&x, y);
4661 #endif
4662 return 0;
4665 if compile_prog "" "" ; then
4666 atomic64=yes
4669 ########################################
4670 # check if getauxval is available.
4672 getauxval=no
4673 cat > $TMPC << EOF
4674 #include <sys/auxv.h>
4675 int main(void) {
4676 return getauxval(AT_HWCAP) == 0;
4679 if compile_prog "" "" ; then
4680 getauxval=yes
4683 ########################################
4684 # check if ccache is interfering with
4685 # semantic analysis of macros
4687 unset CCACHE_CPP2
4688 ccache_cpp2=no
4689 cat > $TMPC << EOF
4690 static const int Z = 1;
4691 #define fn() ({ Z; })
4692 #define TAUT(X) ((X) == Z)
4693 #define PAREN(X, Y) (X == Y)
4694 #define ID(X) (X)
4695 int main(int argc, char *argv[])
4697 int x = 0, y = 0;
4698 x = ID(x);
4699 x = fn();
4700 fn();
4701 if (PAREN(x, y)) return 0;
4702 if (TAUT(Z)) return 0;
4703 return 0;
4707 if ! compile_object "-Werror"; then
4708 ccache_cpp2=yes
4711 #################################################
4712 # clang does not support glibc + FORTIFY_SOURCE.
4714 if test "$fortify_source" != "no"; then
4715 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4716 fortify_source="no";
4717 elif test -n "$cxx" &&
4718 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4719 fortify_source="no";
4720 else
4721 fortify_source="yes"
4725 ##########################################
4726 # check if struct fsxattr is available via linux/fs.h
4728 have_fsxattr=no
4729 cat > $TMPC << EOF
4730 #include <linux/fs.h>
4731 struct fsxattr foo;
4732 int main(void) {
4733 return 0;
4736 if compile_prog "" "" ; then
4737 have_fsxattr=yes
4740 ##########################################
4741 # check if rtnetlink.h exists and is useful
4742 have_rtnetlink=no
4743 cat > $TMPC << EOF
4744 #include <linux/rtnetlink.h>
4745 int main(void) {
4746 return IFLA_PROTO_DOWN;
4749 if compile_prog "" "" ; then
4750 have_rtnetlink=yes
4753 ##########################################
4754 # check for usable AF_VSOCK environment
4755 have_af_vsock=no
4756 cat > $TMPC << EOF
4757 #include <errno.h>
4758 #include <sys/types.h>
4759 #include <sys/socket.h>
4760 #if !defined(AF_VSOCK)
4761 # error missing AF_VSOCK flag
4762 #endif
4763 #include <linux/vm_sockets.h>
4764 int main(void) {
4765 int sock, ret;
4766 struct sockaddr_vm svm;
4767 socklen_t len = sizeof(svm);
4768 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4769 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4770 if ((ret == -1) && (errno == ENOTCONN)) {
4771 return 0;
4773 return -1;
4776 if compile_prog "" "" ; then
4777 have_af_vsock=yes
4780 #################################################
4781 # Sparc implicitly links with --relax, which is
4782 # incompatible with -r, so --no-relax should be
4783 # given. It does no harm to give it on other
4784 # platforms too.
4786 # Note: the prototype is needed since QEMU_CFLAGS
4787 # contains -Wmissing-prototypes
4788 cat > $TMPC << EOF
4789 extern int foo(void);
4790 int foo(void) { return 0; }
4792 if ! compile_object ""; then
4793 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4795 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4796 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4797 LD_REL_FLAGS=$i
4798 break
4800 done
4801 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4802 feature_not_found "modules" "Cannot find how to build relocatable objects"
4805 ##########################################
4806 # End of CC checks
4807 # After here, no more $cc or $ld runs
4809 if test "$gcov" = "yes" ; then
4810 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4811 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4812 elif test "$fortify_source" = "yes" ; then
4813 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4814 elif test "$debug" = "no"; then
4815 CFLAGS="-O2 $CFLAGS"
4818 ##########################################
4819 # Do we have libnfs
4820 if test "$libnfs" != "no" ; then
4821 if $pkg_config --atleast-version=1.9.3 libnfs; then
4822 libnfs="yes"
4823 libnfs_libs=$($pkg_config --libs libnfs)
4824 else
4825 if test "$libnfs" = "yes" ; then
4826 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4828 libnfs="no"
4832 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4833 if test "$werror" = "yes"; then
4834 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4837 if test "$solaris" = "no" ; then
4838 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4839 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4843 # test if pod2man has --utf8 option
4844 if pod2man --help | grep -q utf8; then
4845 POD2MAN="pod2man --utf8"
4846 else
4847 POD2MAN="pod2man"
4850 # Use large addresses, ASLR, no-SEH and DEP if available.
4851 if test "$mingw32" = "yes" ; then
4852 if test "$cpu" = i386; then
4853 LDFLAGS="-Wl,--large-address-aware $LDFLAGS"
4855 for flag in --dynamicbase --no-seh --nxcompat; do
4856 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4857 LDFLAGS="-Wl,$flag $LDFLAGS"
4859 done
4862 qemu_confdir=$sysconfdir$confsuffix
4863 qemu_moddir=$libdir$confsuffix
4864 qemu_datadir=$datadir$confsuffix
4865 qemu_localedir="$datadir/locale"
4867 tools=""
4868 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4869 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4870 tools="qemu-nbd\$(EXESUF) $tools"
4871 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4873 if test "$softmmu" = yes ; then
4874 if test "$virtfs" != no ; then
4875 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4876 virtfs=yes
4877 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4878 else
4879 if test "$virtfs" = yes; then
4880 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
4882 virtfs=no
4887 # Probe for guest agent support/options
4889 if [ "$guest_agent" != "no" ]; then
4890 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4891 tools="qemu-ga $tools"
4892 guest_agent=yes
4893 elif [ "$guest_agent" != yes ]; then
4894 guest_agent=no
4895 else
4896 error_exit "Guest agent is not supported on this platform"
4900 # Guest agent Window MSI package
4902 if test "$guest_agent" != yes; then
4903 if test "$guest_agent_msi" = yes; then
4904 error_exit "MSI guest agent package requires guest agent enabled"
4906 guest_agent_msi=no
4907 elif test "$mingw32" != "yes"; then
4908 if test "$guest_agent_msi" = "yes"; then
4909 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4911 guest_agent_msi=no
4912 elif ! has wixl; then
4913 if test "$guest_agent_msi" = "yes"; then
4914 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4916 guest_agent_msi=no
4917 else
4918 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4919 # disabled explicitly
4920 if test "$guest_agent_msi" != "no"; then
4921 guest_agent_msi=yes
4925 if test "$guest_agent_msi" = "yes"; then
4926 if test "$guest_agent_with_vss" = "yes"; then
4927 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4930 if test "$QEMU_GA_MANUFACTURER" = ""; then
4931 QEMU_GA_MANUFACTURER=QEMU
4934 if test "$QEMU_GA_DISTRO" = ""; then
4935 QEMU_GA_DISTRO=Linux
4938 if test "$QEMU_GA_VERSION" = ""; then
4939 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4942 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
4944 case "$cpu" in
4945 x86_64)
4946 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4948 i386)
4949 QEMU_GA_MSI_ARCH="-D Arch=32"
4952 error_exit "CPU $cpu not supported for building installation package"
4954 esac
4957 # Mac OS X ships with a broken assembler
4958 roms=
4959 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4960 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4961 "$softmmu" = yes ; then
4962 # Different host OS linkers have different ideas about the name of the ELF
4963 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
4964 # variant; and Windows uses i386pe.
4965 for emu in elf_i386 elf_i386_fbsd i386pe; do
4966 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4967 ld_i386_emulation="$emu"
4968 roms="optionrom"
4969 break
4971 done
4973 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4974 roms="$roms spapr-rtas"
4977 if test "$cpu" = "s390x" ; then
4978 roms="$roms s390-ccw"
4981 # Probe for the need for relocating the user-only binary.
4982 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
4983 textseg_addr=
4984 case "$cpu" in
4985 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4986 # ??? Rationale for choosing this address
4987 textseg_addr=0x60000000
4989 mips)
4990 # A 256M aligned address, high in the address space, with enough
4991 # room for the code_gen_buffer above it before the stack.
4992 textseg_addr=0x60000000
4994 esac
4995 if [ -n "$textseg_addr" ]; then
4996 cat > $TMPC <<EOF
4997 int main(void) { return 0; }
4999 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5000 if ! compile_prog "" "$textseg_ldflags"; then
5001 # In case ld does not support -Ttext-segment, edit the default linker
5002 # script via sed to set the .text start addr. This is needed on FreeBSD
5003 # at least.
5004 if ! $ld --verbose >/dev/null 2>&1; then
5005 error_exit \
5006 "We need to link the QEMU user mode binaries at a" \
5007 "specific text address. Unfortunately your linker" \
5008 "doesn't support either the -Ttext-segment option or" \
5009 "printing the default linker script with --verbose." \
5010 "If you don't want the user mode binaries, pass the" \
5011 "--disable-user option to configure."
5014 $ld --verbose | sed \
5015 -e '1,/==================================================/d' \
5016 -e '/==================================================/,$d' \
5017 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5018 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5019 textseg_ldflags="-Wl,-T../config-host.ld"
5024 echo_version() {
5025 if test "$1" = "yes" ; then
5026 echo "($2)"
5030 # prepend pixman and ftd flags after all config tests are done
5031 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5032 libs_softmmu="$pixman_libs $libs_softmmu"
5034 echo "Install prefix $prefix"
5035 echo "BIOS directory $(eval echo $qemu_datadir)"
5036 echo "binary directory $(eval echo $bindir)"
5037 echo "library directory $(eval echo $libdir)"
5038 echo "module directory $(eval echo $qemu_moddir)"
5039 echo "libexec directory $(eval echo $libexecdir)"
5040 echo "include directory $(eval echo $includedir)"
5041 echo "config directory $(eval echo $sysconfdir)"
5042 if test "$mingw32" = "no" ; then
5043 echo "local state directory $(eval echo $local_statedir)"
5044 echo "Manual directory $(eval echo $mandir)"
5045 echo "ELF interp prefix $interp_prefix"
5046 else
5047 echo "local state directory queried at runtime"
5048 echo "Windows SDK $win_sdk"
5050 echo "Source path $source_path"
5051 echo "C compiler $cc"
5052 echo "Host C compiler $host_cc"
5053 echo "C++ compiler $cxx"
5054 echo "Objective-C compiler $objcc"
5055 echo "ARFLAGS $ARFLAGS"
5056 echo "CFLAGS $CFLAGS"
5057 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5058 echo "LDFLAGS $LDFLAGS"
5059 echo "make $make"
5060 echo "install $install"
5061 echo "python $python"
5062 if test "$slirp" = "yes" ; then
5063 echo "smbd $smbd"
5065 echo "module support $modules"
5066 echo "host CPU $cpu"
5067 echo "host big endian $bigendian"
5068 echo "target list $target_list"
5069 echo "tcg debug enabled $debug_tcg"
5070 echo "gprof enabled $gprof"
5071 echo "sparse enabled $sparse"
5072 echo "strip binaries $strip_opt"
5073 echo "profiler $profiler"
5074 echo "static build $static"
5075 if test "$darwin" = "yes" ; then
5076 echo "Cocoa support $cocoa"
5078 echo "pixman $pixman"
5079 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5080 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5081 echo "GTK GL support $gtk_gl"
5082 echo "VTE support $vte $(echo_version $vte $vteversion)"
5083 echo "TLS priority $tls_priority"
5084 echo "GNUTLS support $gnutls"
5085 echo "GNUTLS rnd $gnutls_rnd"
5086 if test "$gcrypt" = "yes"; then
5087 echo "encryption libgcrypt"
5088 echo "libgcrypt kdf $gcrypt_kdf"
5089 elif test "$nettle" = "yes"; then
5090 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5091 else
5092 echo "encryption none"
5094 echo "nettle kdf $nettle_kdf"
5095 echo "libtasn1 $tasn1"
5096 echo "curses support $curses"
5097 echo "virgl support $virglrenderer"
5098 echo "curl support $curl"
5099 echo "mingw32 support $mingw32"
5100 echo "Audio drivers $audio_drv_list"
5101 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5102 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5103 echo "VirtFS support $virtfs"
5104 echo "VNC support $vnc"
5105 if test "$vnc" = "yes" ; then
5106 echo "VNC SASL support $vnc_sasl"
5107 echo "VNC JPEG support $vnc_jpeg"
5108 echo "VNC PNG support $vnc_png"
5110 if test -n "$sparc_cpu"; then
5111 echo "Target Sparc Arch $sparc_cpu"
5113 echo "xen support $xen"
5114 if test "$xen" = "yes" ; then
5115 echo "xen ctrl version $xen_ctrl_version"
5116 echo "pv dom build $xen_pv_domain_build"
5118 echo "brlapi support $brlapi"
5119 echo "bluez support $bluez"
5120 echo "Documentation $docs"
5121 echo "Tools $tools"
5122 echo "PIE $pie"
5123 echo "vde support $vde"
5124 echo "netmap support $netmap"
5125 echo "Linux AIO support $linux_aio"
5126 echo "(X)ATTR support $attr"
5127 echo "Install blobs $blobs"
5128 echo "KVM support $kvm"
5129 echo "COLO support $colo"
5130 echo "HAX support $hax"
5131 echo "RDMA support $rdma"
5132 echo "TCG interpreter $tcg_interpreter"
5133 echo "fdt support $fdt"
5134 echo "preadv support $preadv"
5135 echo "fdatasync $fdatasync"
5136 echo "madvise $madvise"
5137 echo "posix_madvise $posix_madvise"
5138 echo "libcap-ng support $cap_ng"
5139 echo "vhost-net support $vhost_net"
5140 echo "vhost-scsi support $vhost_scsi"
5141 echo "vhost-vsock support $vhost_vsock"
5142 echo "Trace backends $trace_backends"
5143 if have_backend "simple"; then
5144 echo "Trace output file $trace_file-<pid>"
5146 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5147 echo "rbd support $rbd"
5148 echo "xfsctl support $xfs"
5149 echo "smartcard support $smartcard"
5150 echo "libusb $libusb"
5151 echo "usb net redir $usb_redir"
5152 echo "OpenGL support $opengl"
5153 echo "OpenGL dmabufs $opengl_dmabuf"
5154 echo "libiscsi support $libiscsi"
5155 echo "libnfs support $libnfs"
5156 echo "build guest agent $guest_agent"
5157 echo "QGA VSS support $guest_agent_with_vss"
5158 echo "QGA w32 disk info $guest_agent_ntddscsi"
5159 echo "QGA MSI support $guest_agent_msi"
5160 echo "seccomp support $seccomp"
5161 echo "coroutine backend $coroutine"
5162 echo "coroutine pool $coroutine_pool"
5163 echo "debug stack usage $debug_stack_usage"
5164 echo "GlusterFS support $glusterfs"
5165 echo "Archipelago support $archipelago"
5166 echo "gcov $gcov_tool"
5167 echo "gcov enabled $gcov"
5168 echo "TPM support $tpm"
5169 echo "libssh2 support $libssh2"
5170 echo "TPM passthrough $tpm_passthrough"
5171 echo "QOM debugging $qom_cast_debug"
5172 echo "lzo support $lzo"
5173 echo "snappy support $snappy"
5174 echo "bzip2 support $bzip2"
5175 echo "NUMA host support $numa"
5176 echo "tcmalloc support $tcmalloc"
5177 echo "jemalloc support $jemalloc"
5178 echo "avx2 optimization $avx2_opt"
5179 echo "replication support $replication"
5181 if test "$sdl_too_old" = "yes"; then
5182 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5185 config_host_mak="config-host.mak"
5187 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5189 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5190 echo >> $config_host_mak
5192 echo all: >> $config_host_mak
5193 echo "prefix=$prefix" >> $config_host_mak
5194 echo "bindir=$bindir" >> $config_host_mak
5195 echo "libdir=$libdir" >> $config_host_mak
5196 echo "libexecdir=$libexecdir" >> $config_host_mak
5197 echo "includedir=$includedir" >> $config_host_mak
5198 echo "mandir=$mandir" >> $config_host_mak
5199 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5200 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5201 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5202 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5203 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5204 if test "$mingw32" = "no" ; then
5205 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5207 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5208 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5209 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5210 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5211 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5213 echo "ARCH=$ARCH" >> $config_host_mak
5215 if test "$debug_tcg" = "yes" ; then
5216 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5218 if test "$strip_opt" = "yes" ; then
5219 echo "STRIP=${strip}" >> $config_host_mak
5221 if test "$bigendian" = "yes" ; then
5222 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5224 if test "$mingw32" = "yes" ; then
5225 echo "CONFIG_WIN32=y" >> $config_host_mak
5226 echo "CONFIG_INSTALLER=y" >> $config_host_mak
5227 rc_version=$(cat $source_path/VERSION)
5228 version_major=${rc_version%%.*}
5229 rc_version=${rc_version#*.}
5230 version_minor=${rc_version%%.*}
5231 rc_version=${rc_version#*.}
5232 version_subminor=${rc_version%%.*}
5233 version_micro=0
5234 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5235 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5236 if test "$guest_agent_with_vss" = "yes" ; then
5237 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5238 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5239 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5241 if test "$guest_agent_ntddscsi" = "yes" ; then
5242 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5244 if test "$guest_agent_msi" = "yes"; then
5245 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5246 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5247 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5248 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5249 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5250 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5251 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5253 else
5254 echo "CONFIG_POSIX=y" >> $config_host_mak
5257 if test "$linux" = "yes" ; then
5258 echo "CONFIG_LINUX=y" >> $config_host_mak
5261 if test "$darwin" = "yes" ; then
5262 echo "CONFIG_DARWIN=y" >> $config_host_mak
5265 if test "$aix" = "yes" ; then
5266 echo "CONFIG_AIX=y" >> $config_host_mak
5269 if test "$solaris" = "yes" ; then
5270 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5271 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
5272 if test "$needs_libsunmath" = "yes" ; then
5273 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
5276 if test "$haiku" = "yes" ; then
5277 echo "CONFIG_HAIKU=y" >> $config_host_mak
5279 if test "$static" = "yes" ; then
5280 echo "CONFIG_STATIC=y" >> $config_host_mak
5282 if test "$profiler" = "yes" ; then
5283 echo "CONFIG_PROFILER=y" >> $config_host_mak
5285 if test "$slirp" = "yes" ; then
5286 echo "CONFIG_SLIRP=y" >> $config_host_mak
5287 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5289 if test "$vde" = "yes" ; then
5290 echo "CONFIG_VDE=y" >> $config_host_mak
5292 if test "$netmap" = "yes" ; then
5293 echo "CONFIG_NETMAP=y" >> $config_host_mak
5295 if test "$l2tpv3" = "yes" ; then
5296 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5298 if test "$cap_ng" = "yes" ; then
5299 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5301 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5302 for drv in $audio_drv_list; do
5303 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5304 echo "$def=y" >> $config_host_mak
5305 done
5306 if test "$audio_pt_int" = "yes" ; then
5307 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5309 if test "$audio_win_int" = "yes" ; then
5310 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5312 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5313 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5314 if test "$vnc" = "yes" ; then
5315 echo "CONFIG_VNC=y" >> $config_host_mak
5317 if test "$vnc_sasl" = "yes" ; then
5318 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5320 if test "$vnc_jpeg" = "yes" ; then
5321 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5323 if test "$vnc_png" = "yes" ; then
5324 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5326 if test "$fnmatch" = "yes" ; then
5327 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5329 if test "$xfs" = "yes" ; then
5330 echo "CONFIG_XFS=y" >> $config_host_mak
5332 qemu_version=$(head $source_path/VERSION)
5333 echo "VERSION=$qemu_version" >>$config_host_mak
5334 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5335 echo "SRC_PATH=$source_path" >> $config_host_mak
5336 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5337 if [ "$docs" = "yes" ] ; then
5338 echo "BUILD_DOCS=yes" >> $config_host_mak
5340 if [ "$want_tools" = "yes" ] ; then
5341 echo "BUILD_TOOLS=yes" >> $config_host_mak
5343 if test "$modules" = "yes"; then
5344 # $shacmd can generate a hash started with digit, which the compiler doesn't
5345 # like as an symbol. So prefix it with an underscore
5346 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5347 echo "CONFIG_MODULES=y" >> $config_host_mak
5349 if test "$sdl" = "yes" ; then
5350 echo "CONFIG_SDL=y" >> $config_host_mak
5351 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5352 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5354 if test "$cocoa" = "yes" ; then
5355 echo "CONFIG_COCOA=y" >> $config_host_mak
5357 if test "$curses" = "yes" ; then
5358 echo "CONFIG_CURSES=y" >> $config_host_mak
5360 if test "$utimens" = "yes" ; then
5361 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
5363 if test "$pipe2" = "yes" ; then
5364 echo "CONFIG_PIPE2=y" >> $config_host_mak
5366 if test "$accept4" = "yes" ; then
5367 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5369 if test "$splice" = "yes" ; then
5370 echo "CONFIG_SPLICE=y" >> $config_host_mak
5372 if test "$eventfd" = "yes" ; then
5373 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5375 if test "$memfd" = "yes" ; then
5376 echo "CONFIG_MEMFD=y" >> $config_host_mak
5378 if test "$fallocate" = "yes" ; then
5379 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5381 if test "$fallocate_punch_hole" = "yes" ; then
5382 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5384 if test "$fallocate_zero_range" = "yes" ; then
5385 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5387 if test "$posix_fallocate" = "yes" ; then
5388 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5390 if test "$sync_file_range" = "yes" ; then
5391 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5393 if test "$fiemap" = "yes" ; then
5394 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5396 if test "$dup3" = "yes" ; then
5397 echo "CONFIG_DUP3=y" >> $config_host_mak
5399 if test "$ppoll" = "yes" ; then
5400 echo "CONFIG_PPOLL=y" >> $config_host_mak
5402 if test "$prctl_pr_set_timerslack" = "yes" ; then
5403 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5405 if test "$epoll" = "yes" ; then
5406 echo "CONFIG_EPOLL=y" >> $config_host_mak
5408 if test "$epoll_create1" = "yes" ; then
5409 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5411 if test "$sendfile" = "yes" ; then
5412 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5414 if test "$timerfd" = "yes" ; then
5415 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5417 if test "$setns" = "yes" ; then
5418 echo "CONFIG_SETNS=y" >> $config_host_mak
5420 if test "$clock_adjtime" = "yes" ; then
5421 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5423 if test "$syncfs" = "yes" ; then
5424 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5426 if test "$inotify" = "yes" ; then
5427 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5429 if test "$inotify1" = "yes" ; then
5430 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5432 if test "$byteswap_h" = "yes" ; then
5433 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5435 if test "$bswap_h" = "yes" ; then
5436 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5438 if test "$curl" = "yes" ; then
5439 echo "CONFIG_CURL=m" >> $config_host_mak
5440 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5441 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5443 if test "$brlapi" = "yes" ; then
5444 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5446 if test "$bluez" = "yes" ; then
5447 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5448 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5450 if test "$glib_subprocess" = "yes" ; then
5451 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5453 if test "$gtk" = "yes" ; then
5454 echo "CONFIG_GTK=y" >> $config_host_mak
5455 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5456 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5457 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5458 if test "$gtk_gl" = "yes" ; then
5459 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5462 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5463 if test "$gnutls" = "yes" ; then
5464 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5466 if test "$gnutls_rnd" = "yes" ; then
5467 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5469 if test "$gcrypt" = "yes" ; then
5470 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5471 if test "$gcrypt_hmac" = "yes" ; then
5472 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5474 if test "$gcrypt_kdf" = "yes" ; then
5475 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5478 if test "$nettle" = "yes" ; then
5479 echo "CONFIG_NETTLE=y" >> $config_host_mak
5480 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5481 if test "$nettle_kdf" = "yes" ; then
5482 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5485 if test "$tasn1" = "yes" ; then
5486 echo "CONFIG_TASN1=y" >> $config_host_mak
5488 if test "$have_ifaddrs_h" = "yes" ; then
5489 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5491 if test "$have_broken_size_max" = "yes" ; then
5492 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5495 # Work around a system header bug with some kernel/XFS header
5496 # versions where they both try to define 'struct fsxattr':
5497 # xfs headers will not try to redefine structs from linux headers
5498 # if this macro is set.
5499 if test "$have_fsxattr" = "yes" ; then
5500 echo "HAVE_FSXATTR=y" >> $config_host_mak
5502 if test "$vte" = "yes" ; then
5503 echo "CONFIG_VTE=y" >> $config_host_mak
5504 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5506 if test "$virglrenderer" = "yes" ; then
5507 echo "CONFIG_VIRGL=y" >> $config_host_mak
5508 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5509 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5511 if test "$xen" = "yes" ; then
5512 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5513 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5514 if test "$xen_pv_domain_build" = "yes" ; then
5515 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5518 if test "$linux_aio" = "yes" ; then
5519 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5521 if test "$attr" = "yes" ; then
5522 echo "CONFIG_ATTR=y" >> $config_host_mak
5524 if test "$libattr" = "yes" ; then
5525 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5527 if test "$virtfs" = "yes" ; then
5528 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5530 if test "$vhost_scsi" = "yes" ; then
5531 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5533 if test "$vhost_net" = "yes" ; then
5534 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5536 if test "$vhost_vsock" = "yes" ; then
5537 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5539 if test "$blobs" = "yes" ; then
5540 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5542 if test "$iovec" = "yes" ; then
5543 echo "CONFIG_IOVEC=y" >> $config_host_mak
5545 if test "$preadv" = "yes" ; then
5546 echo "CONFIG_PREADV=y" >> $config_host_mak
5548 if test "$fdt" = "yes" ; then
5549 echo "CONFIG_FDT=y" >> $config_host_mak
5551 if test "$signalfd" = "yes" ; then
5552 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5554 if test "$tcg_interpreter" = "yes" ; then
5555 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5557 if test "$fdatasync" = "yes" ; then
5558 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5560 if test "$madvise" = "yes" ; then
5561 echo "CONFIG_MADVISE=y" >> $config_host_mak
5563 if test "$posix_madvise" = "yes" ; then
5564 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5567 if test "$spice" = "yes" ; then
5568 echo "CONFIG_SPICE=y" >> $config_host_mak
5571 if test "$smartcard" = "yes" ; then
5572 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5575 if test "$libusb" = "yes" ; then
5576 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5579 if test "$usb_redir" = "yes" ; then
5580 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5583 if test "$opengl" = "yes" ; then
5584 echo "CONFIG_OPENGL=y" >> $config_host_mak
5585 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5586 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5587 if test "$opengl_dmabuf" = "yes" ; then
5588 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5592 if test "$avx2_opt" = "yes" ; then
5593 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5596 if test "$lzo" = "yes" ; then
5597 echo "CONFIG_LZO=y" >> $config_host_mak
5600 if test "$snappy" = "yes" ; then
5601 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5604 if test "$bzip2" = "yes" ; then
5605 echo "CONFIG_BZIP2=y" >> $config_host_mak
5606 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5609 if test "$libiscsi" = "yes" ; then
5610 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5611 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5612 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5615 if test "$libnfs" = "yes" ; then
5616 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5617 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
5620 if test "$seccomp" = "yes"; then
5621 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5624 # XXX: suppress that
5625 if [ "$bsd" = "yes" ] ; then
5626 echo "CONFIG_BSD=y" >> $config_host_mak
5629 if test "$localtime_r" = "yes" ; then
5630 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5632 if test "$qom_cast_debug" = "yes" ; then
5633 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5635 if test "$rbd" = "yes" ; then
5636 echo "CONFIG_RBD=m" >> $config_host_mak
5637 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5638 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5641 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5642 if test "$coroutine_pool" = "yes" ; then
5643 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5644 else
5645 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5648 if test "$debug_stack_usage" = "yes" ; then
5649 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5652 if test "$open_by_handle_at" = "yes" ; then
5653 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5656 if test "$linux_magic_h" = "yes" ; then
5657 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5660 if test "$pragma_diagnostic_available" = "yes" ; then
5661 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5664 if test "$valgrind_h" = "yes" ; then
5665 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5668 if test "$has_environ" = "yes" ; then
5669 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5672 if test "$cpuid_h" = "yes" ; then
5673 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5676 if test "$int128" = "yes" ; then
5677 echo "CONFIG_INT128=y" >> $config_host_mak
5680 if test "$atomic128" = "yes" ; then
5681 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5684 if test "$atomic64" = "yes" ; then
5685 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5688 if test "$getauxval" = "yes" ; then
5689 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5692 if test "$glusterfs" = "yes" ; then
5693 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5694 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5695 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5698 if test "$glusterfs_xlator_opt" = "yes" ; then
5699 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5702 if test "$glusterfs_discard" = "yes" ; then
5703 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5706 if test "$glusterfs_zerofill" = "yes" ; then
5707 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5710 if test "$archipelago" = "yes" ; then
5711 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5712 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5715 if test "$libssh2" = "yes" ; then
5716 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5717 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5718 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5721 # USB host support
5722 if test "$libusb" = "yes"; then
5723 echo "HOST_USB=libusb legacy" >> $config_host_mak
5724 else
5725 echo "HOST_USB=stub" >> $config_host_mak
5728 # TPM passthrough support?
5729 if test "$tpm" = "yes"; then
5730 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5731 if test "$tpm_passthrough" = "yes"; then
5732 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5736 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5737 if have_backend "nop"; then
5738 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5740 if have_backend "simple"; then
5741 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5742 # Set the appropriate trace file.
5743 trace_file="\"$trace_file-\" FMT_pid"
5745 if have_backend "log"; then
5746 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5748 if have_backend "ust"; then
5749 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5751 if have_backend "dtrace"; then
5752 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5753 if test "$trace_backend_stap" = "yes" ; then
5754 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5757 if have_backend "ftrace"; then
5758 if test "$linux" = "yes" ; then
5759 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5760 else
5761 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5764 if have_backend "syslog"; then
5765 if test "$posix_syslog" = "yes" ; then
5766 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5767 else
5768 feature_not_found "syslog(trace backend)" "syslog not available"
5771 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5773 if test "$colo" = "yes"; then
5774 echo "CONFIG_COLO=y" >> $config_host_mak
5777 if test "$rdma" = "yes" ; then
5778 echo "CONFIG_RDMA=y" >> $config_host_mak
5781 if test "$have_rtnetlink" = "yes" ; then
5782 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5785 if test "$replication" = "yes" ; then
5786 echo "CONFIG_REPLICATION=y" >> $config_host_mak
5789 if test "$have_af_vsock" = "yes" ; then
5790 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
5793 # Hold two types of flag:
5794 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5795 # a thread we have a handle to
5796 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5797 # platform
5798 if test "$pthread_setname_np" = "yes" ; then
5799 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5800 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5803 if test "$tcg_interpreter" = "yes"; then
5804 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5805 elif test "$ARCH" = "sparc64" ; then
5806 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5807 elif test "$ARCH" = "s390x" ; then
5808 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5809 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5810 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5811 elif test "$ARCH" = "ppc64" ; then
5812 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5813 else
5814 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5816 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5818 echo "TOOLS=$tools" >> $config_host_mak
5819 echo "ROMS=$roms" >> $config_host_mak
5820 echo "MAKE=$make" >> $config_host_mak
5821 echo "INSTALL=$install" >> $config_host_mak
5822 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5823 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5824 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5825 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5826 echo "PYTHON=$python" >> $config_host_mak
5827 echo "CC=$cc" >> $config_host_mak
5828 if $iasl -h > /dev/null 2>&1; then
5829 echo "IASL=$iasl" >> $config_host_mak
5831 echo "CC_I386=$cc_i386" >> $config_host_mak
5832 echo "HOST_CC=$host_cc" >> $config_host_mak
5833 echo "CXX=$cxx" >> $config_host_mak
5834 echo "OBJCC=$objcc" >> $config_host_mak
5835 echo "AR=$ar" >> $config_host_mak
5836 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5837 echo "AS=$as" >> $config_host_mak
5838 echo "CCAS=$ccas" >> $config_host_mak
5839 echo "CPP=$cpp" >> $config_host_mak
5840 echo "OBJCOPY=$objcopy" >> $config_host_mak
5841 echo "LD=$ld" >> $config_host_mak
5842 echo "NM=$nm" >> $config_host_mak
5843 echo "WINDRES=$windres" >> $config_host_mak
5844 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5845 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5846 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5847 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5848 if test "$sparse" = "yes" ; then
5849 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5850 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5851 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5852 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5853 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5855 if test "$cross_prefix" != ""; then
5856 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5857 else
5858 echo "AUTOCONF_HOST := " >> $config_host_mak
5860 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5861 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5862 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
5863 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
5864 echo "LIBS+=$LIBS" >> $config_host_mak
5865 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5866 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
5867 echo "EXESUF=$EXESUF" >> $config_host_mak
5868 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5869 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5870 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5871 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5872 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5873 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5874 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5875 if test "$gcov" = "yes" ; then
5876 echo "CONFIG_GCOV=y" >> $config_host_mak
5877 echo "GCOV=$gcov_tool" >> $config_host_mak
5880 # use included Linux headers
5881 if test "$linux" = "yes" ; then
5882 mkdir -p linux-headers
5883 case "$cpu" in
5884 i386|x86_64|x32)
5885 linux_arch=x86
5887 ppcemb|ppc|ppc64)
5888 linux_arch=powerpc
5890 s390x)
5891 linux_arch=s390
5893 aarch64)
5894 linux_arch=arm64
5896 mips64)
5897 linux_arch=mips
5900 # For most CPUs the kernel architecture name and QEMU CPU name match.
5901 linux_arch="$cpu"
5903 esac
5904 # For non-KVM architectures we will not have asm headers
5905 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5906 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5910 for target in $target_list; do
5911 target_dir="$target"
5912 config_target_mak=$target_dir/config-target.mak
5913 target_name=$(echo $target | cut -d '-' -f 1)
5914 target_bigendian="no"
5916 case "$target_name" in
5917 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5918 target_bigendian=yes
5920 esac
5921 target_softmmu="no"
5922 target_user_only="no"
5923 target_linux_user="no"
5924 target_bsd_user="no"
5925 case "$target" in
5926 ${target_name}-softmmu)
5927 target_softmmu="yes"
5929 ${target_name}-linux-user)
5930 if test "$linux" != "yes" ; then
5931 error_exit "Target '$target' is only available on a Linux host"
5933 target_user_only="yes"
5934 target_linux_user="yes"
5936 ${target_name}-bsd-user)
5937 if test "$bsd" != "yes" ; then
5938 error_exit "Target '$target' is only available on a BSD host"
5940 target_user_only="yes"
5941 target_bsd_user="yes"
5944 error_exit "Target '$target' not recognised"
5945 exit 1
5947 esac
5949 mkdir -p $target_dir
5950 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5952 bflt="no"
5953 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
5954 gdb_xml_files=""
5956 TARGET_ARCH="$target_name"
5957 TARGET_BASE_ARCH=""
5958 TARGET_ABI_DIR=""
5960 case "$target_name" in
5961 i386)
5963 x86_64)
5964 TARGET_BASE_ARCH=i386
5966 alpha)
5968 arm|armeb)
5969 TARGET_ARCH=arm
5970 bflt="yes"
5971 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5973 aarch64)
5974 TARGET_BASE_ARCH=arm
5975 bflt="yes"
5976 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5978 cris)
5980 lm32)
5982 m68k)
5983 bflt="yes"
5984 gdb_xml_files="cf-core.xml cf-fp.xml"
5986 microblaze|microblazeel)
5987 TARGET_ARCH=microblaze
5988 bflt="yes"
5990 mips|mipsel)
5991 TARGET_ARCH=mips
5992 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5994 mipsn32|mipsn32el)
5995 TARGET_ARCH=mips64
5996 TARGET_BASE_ARCH=mips
5997 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5998 echo "TARGET_ABI32=y" >> $config_target_mak
6000 mips64|mips64el)
6001 TARGET_ARCH=mips64
6002 TARGET_BASE_ARCH=mips
6003 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6005 moxie)
6007 or32)
6008 TARGET_ARCH=openrisc
6009 TARGET_BASE_ARCH=openrisc
6011 ppc)
6012 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6014 ppcemb)
6015 TARGET_BASE_ARCH=ppc
6016 TARGET_ABI_DIR=ppc
6017 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6019 ppc64)
6020 TARGET_BASE_ARCH=ppc
6021 TARGET_ABI_DIR=ppc
6022 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6024 ppc64le)
6025 TARGET_ARCH=ppc64
6026 TARGET_BASE_ARCH=ppc
6027 TARGET_ABI_DIR=ppc
6028 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6030 ppc64abi32)
6031 TARGET_ARCH=ppc64
6032 TARGET_BASE_ARCH=ppc
6033 TARGET_ABI_DIR=ppc
6034 echo "TARGET_ABI32=y" >> $config_target_mak
6035 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6037 sh4|sh4eb)
6038 TARGET_ARCH=sh4
6039 bflt="yes"
6041 sparc)
6043 sparc64)
6044 TARGET_BASE_ARCH=sparc
6046 sparc32plus)
6047 TARGET_ARCH=sparc64
6048 TARGET_BASE_ARCH=sparc
6049 TARGET_ABI_DIR=sparc
6050 echo "TARGET_ABI32=y" >> $config_target_mak
6052 s390x)
6053 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
6055 tilegx)
6057 tricore)
6059 unicore32)
6061 xtensa|xtensaeb)
6062 TARGET_ARCH=xtensa
6065 error_exit "Unsupported target CPU"
6067 esac
6068 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6069 if [ "$TARGET_BASE_ARCH" = "" ]; then
6070 TARGET_BASE_ARCH=$TARGET_ARCH
6073 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6075 upper() {
6076 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6079 target_arch_name="$(upper $TARGET_ARCH)"
6080 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6081 echo "TARGET_NAME=$target_name" >> $config_target_mak
6082 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6083 if [ "$TARGET_ABI_DIR" = "" ]; then
6084 TARGET_ABI_DIR=$TARGET_ARCH
6086 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6087 if [ "$HOST_VARIANT_DIR" != "" ]; then
6088 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6090 case "$target_name" in
6091 i386|x86_64)
6092 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
6093 echo "CONFIG_XEN=y" >> $config_target_mak
6094 if test "$xen_pci_passthrough" = yes; then
6095 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6100 esac
6101 case "$target_name" in
6102 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
6103 # Make sure the target and host cpus are compatible
6104 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
6105 \( "$target_name" = "$cpu" -o \
6106 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
6107 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
6108 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
6109 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
6110 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
6111 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
6112 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
6113 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
6114 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
6115 echo "CONFIG_KVM=y" >> $config_target_mak
6116 if test "$vhost_net" = "yes" ; then
6117 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6118 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
6121 esac
6122 if test "$hax" = "yes" ; then
6123 if test "$target_softmmu" = "yes" ; then
6124 case "$target_name" in
6125 i386|x86_64)
6126 echo "CONFIG_HAX=y" >> $config_target_mak
6128 esac
6131 if test "$target_bigendian" = "yes" ; then
6132 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6134 if test "$target_softmmu" = "yes" ; then
6135 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6137 if test "$target_user_only" = "yes" ; then
6138 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6139 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6141 if test "$target_linux_user" = "yes" ; then
6142 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6144 list=""
6145 if test ! -z "$gdb_xml_files" ; then
6146 for x in $gdb_xml_files; do
6147 list="$list $source_path/gdb-xml/$x"
6148 done
6149 echo "TARGET_XML_FILES=$list" >> $config_target_mak
6152 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6153 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6155 if test "$target_bsd_user" = "yes" ; then
6156 echo "CONFIG_BSD_USER=y" >> $config_target_mak
6159 # generate QEMU_CFLAGS/LDFLAGS for targets
6161 cflags=""
6162 ldflags=""
6164 disas_config() {
6165 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6166 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6169 for i in $ARCH $TARGET_BASE_ARCH ; do
6170 case "$i" in
6171 alpha)
6172 disas_config "ALPHA"
6174 aarch64)
6175 if test -n "${cxx}"; then
6176 disas_config "ARM_A64"
6179 arm)
6180 disas_config "ARM"
6181 if test -n "${cxx}"; then
6182 disas_config "ARM_A64"
6185 cris)
6186 disas_config "CRIS"
6188 i386|x86_64|x32)
6189 disas_config "I386"
6191 ia64*)
6192 disas_config "IA64"
6194 lm32)
6195 disas_config "LM32"
6197 m68k)
6198 disas_config "M68K"
6200 microblaze*)
6201 disas_config "MICROBLAZE"
6203 mips*)
6204 disas_config "MIPS"
6206 moxie*)
6207 disas_config "MOXIE"
6209 or32)
6210 disas_config "OPENRISC"
6212 ppc*)
6213 disas_config "PPC"
6215 s390*)
6216 disas_config "S390"
6218 sh4)
6219 disas_config "SH4"
6221 sparc*)
6222 disas_config "SPARC"
6224 xtensa*)
6225 disas_config "XTENSA"
6227 esac
6228 done
6229 if test "$tcg_interpreter" = "yes" ; then
6230 disas_config "TCI"
6233 case "$ARCH" in
6234 alpha)
6235 # Ensure there's only a single GP
6236 cflags="-msmall-data $cflags"
6238 esac
6240 if test "$gprof" = "yes" ; then
6241 echo "TARGET_GPROF=yes" >> $config_target_mak
6242 if test "$target_linux_user" = "yes" ; then
6243 cflags="-p $cflags"
6244 ldflags="-p $ldflags"
6246 if test "$target_softmmu" = "yes" ; then
6247 ldflags="-p $ldflags"
6248 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6252 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6253 ldflags="$ldflags $textseg_ldflags"
6256 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6257 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6259 done # for target in $targets
6261 if [ "$pixman" = "internal" ]; then
6262 echo "config-host.h: subdir-pixman" >> $config_host_mak
6265 if [ "$dtc_internal" = "yes" ]; then
6266 echo "config-host.h: subdir-dtc" >> $config_host_mak
6269 if test "$numa" = "yes"; then
6270 echo "CONFIG_NUMA=y" >> $config_host_mak
6273 if test "$ccache_cpp2" = "yes"; then
6274 echo "export CCACHE_CPP2=y" >> $config_host_mak
6277 # build tree in object directory in case the source is not in the current directory
6278 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
6279 DIRS="$DIRS fsdev"
6280 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6281 DIRS="$DIRS roms/seabios roms/vgabios"
6282 DIRS="$DIRS qapi-generated"
6283 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6284 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6285 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6286 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6287 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6288 FILES="$FILES pc-bios/s390-ccw/Makefile"
6289 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6290 FILES="$FILES pc-bios/qemu-icon.bmp"
6291 for bios_file in \
6292 $source_path/pc-bios/*.bin \
6293 $source_path/pc-bios/*.lid \
6294 $source_path/pc-bios/*.aml \
6295 $source_path/pc-bios/*.rom \
6296 $source_path/pc-bios/*.dtb \
6297 $source_path/pc-bios/*.img \
6298 $source_path/pc-bios/openbios-* \
6299 $source_path/pc-bios/u-boot.* \
6300 $source_path/pc-bios/palcode-*
6302 FILES="$FILES pc-bios/$(basename $bios_file)"
6303 done
6304 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6306 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6307 done
6308 mkdir -p $DIRS
6309 for f in $FILES ; do
6310 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6311 symlink "$source_path/$f" "$f"
6313 done
6315 # temporary config to build submodules
6316 for rom in seabios vgabios ; do
6317 config_mak=roms/$rom/config.mak
6318 echo "# Automatically generated by configure - do not modify" > $config_mak
6319 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6320 echo "AS=$as" >> $config_mak
6321 echo "CCAS=$ccas" >> $config_mak
6322 echo "CC=$cc" >> $config_mak
6323 echo "BCC=bcc" >> $config_mak
6324 echo "CPP=$cpp" >> $config_mak
6325 echo "OBJCOPY=objcopy" >> $config_mak
6326 echo "IASL=$iasl" >> $config_mak
6327 echo "LD=$ld" >> $config_mak
6328 done
6330 # set up tests data directory
6331 if [ ! -e tests/data ]; then
6332 symlink "$source_path/tests/data" tests/data
6335 # set up qemu-iotests in this build directory
6336 iotests_common_env="tests/qemu-iotests/common.env"
6337 iotests_check="tests/qemu-iotests/check"
6339 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6340 echo >> "$iotests_common_env"
6341 echo "export PYTHON='$python'" >> "$iotests_common_env"
6343 if [ ! -e "$iotests_check" ]; then
6344 symlink "$source_path/$iotests_check" "$iotests_check"
6347 # Save the configure command line for later reuse.
6348 cat <<EOD >config.status
6349 #!/bin/sh
6350 # Generated by configure.
6351 # Run this file to recreate the current configuration.
6352 # Compiler output produced by configure, useful for debugging
6353 # configure, is in config.log if it exists.
6355 printf "exec" >>config.status
6356 printf " '%s'" "$0" "$@" >>config.status
6357 echo ' "$@"' >>config.status
6358 chmod +x config.status
6360 rm -r "$TMPDIR1"