curses: Fix compiler warnings (Mingw-w64 redefinition of macro KEY_EVENT)
[qemu/ar7.git] / configure
bloba6f0e1912de9100ab1bda3e4ceee3b09ce0c9a78
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 TMPL="${TMPDIR1}/${TMPB}.lo"
32 TMPA="${TMPDIR1}/lib${TMPB}.la"
33 TMPE="${TMPDIR1}/${TMPB}.exe"
34 TMPMO="${TMPDIR1}/${TMPB}.mo"
36 rm -f config.log
38 # Print a helpful header at the top of config.log
39 echo "# QEMU configure log $(date)" >> config.log
40 printf "# Configured with:" >> config.log
41 printf " '%s'" "$0" "$@" >> config.log
42 echo >> config.log
43 echo "#" >> config.log
45 error_exit() {
46 echo
47 echo "ERROR: $1"
48 while test -n "$2"; do
49 echo " $2"
50 shift
51 done
52 echo
53 exit 1
56 do_compiler() {
57 # Run the compiler, capturing its output to the log. First argument
58 # is compiler binary to execute.
59 local compiler="$1"
60 shift
61 echo $compiler "$@" >> config.log
62 $compiler "$@" >> config.log 2>&1 || return $?
63 # Test passed. If this is an --enable-werror build, rerun
64 # the test with -Werror and bail out if it fails. This
65 # makes warning-generating-errors in configure test code
66 # obvious to developers.
67 if test "$werror" != "yes"; then
68 return 0
70 # Don't bother rerunning the compile if we were already using -Werror
71 case "$*" in
72 *-Werror*)
73 return 0
75 esac
76 echo $compiler -Werror "$@" >> config.log
77 $compiler -Werror "$@" >> config.log 2>&1 && return $?
78 error_exit "configure test passed without -Werror but failed with -Werror." \
79 "This is probably a bug in the configure script. The failing command" \
80 "will be at the bottom of config.log." \
81 "You can run configure with --disable-werror to bypass this check."
84 do_cc() {
85 do_compiler "$cc" "$@"
88 do_cxx() {
89 do_compiler "$cxx" "$@"
92 update_cxxflags() {
93 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
94 # options which some versions of GCC's C++ compiler complain about
95 # because they only make sense for C programs.
96 QEMU_CXXFLAGS=
97 for arg in $QEMU_CFLAGS; do
98 case $arg in
99 -Wno-override-init|\
100 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
101 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
104 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
106 esac
107 done
110 compile_object() {
111 local_cflags="$1"
112 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
115 compile_prog() {
116 local_cflags="$1"
117 local_ldflags="$2"
118 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
121 # symbolically link $1 to $2. Portable version of "ln -sf".
122 symlink() {
123 rm -rf "$2"
124 mkdir -p "$(dirname "$2")"
125 ln -s "$1" "$2"
128 # check whether a command is available to this shell (may be either an
129 # executable or a builtin)
130 has() {
131 type "$1" >/dev/null 2>&1
134 # search for an executable in PATH
135 path_of() {
136 local_command="$1"
137 local_ifs="$IFS"
138 local_dir=""
140 # pathname has a dir component?
141 if [ "${local_command#*/}" != "$local_command" ]; then
142 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
143 echo "$local_command"
144 return 0
147 if [ -z "$local_command" ]; then
148 return 1
151 IFS=:
152 for local_dir in $PATH; do
153 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
154 echo "$local_dir/$local_command"
155 IFS="${local_ifs:-$(printf ' \t\n')}"
156 return 0
158 done
159 # not found
160 IFS="${local_ifs:-$(printf ' \t\n')}"
161 return 1
164 have_backend () {
165 echo "$trace_backends" | grep "$1" >/dev/null
168 # default parameters
169 source_path=$(dirname "$0")
170 cpu=""
171 iasl="iasl"
172 interp_prefix="/usr/gnemul/qemu-%M"
173 static="no"
174 cross_prefix=""
175 audio_drv_list=""
176 block_drv_rw_whitelist=""
177 block_drv_ro_whitelist=""
178 host_cc="cc"
179 libs_softmmu=""
180 libs_tools=""
181 audio_pt_int=""
182 audio_win_int=""
183 cc_i386=i386-pc-linux-gnu-gcc
184 libs_qga=""
185 debug_info="yes"
186 stack_protector=""
188 # Don't accept a target_list environment variable.
189 unset target_list
191 # Default value for a variable defining feature "foo".
192 # * foo="no" feature will only be used if --enable-foo arg is given
193 # * foo="" feature will be searched for, and if found, will be used
194 # unless --disable-foo is given
195 # * foo="yes" this value will only be set by --enable-foo flag.
196 # feature will searched for,
197 # if not found, configure exits with error
199 # Always add --enable-foo and --disable-foo command line args.
200 # Distributions want to ensure that several features are compiled in, and it
201 # is impossible without a --enable-foo that exits if a feature is not found.
203 bluez=""
204 brlapi=""
205 curl=""
206 curses=""
207 docs=""
208 fdt=""
209 netmap="no"
210 pixman=""
211 sdl=""
212 sdlabi=""
213 virtfs=""
214 vnc="yes"
215 sparse="no"
216 vde=""
217 vnc_sasl=""
218 vnc_jpeg=""
219 vnc_png=""
220 xen=""
221 xen_ctrl_version=""
222 xen_pv_domain_build="no"
223 xen_pci_passthrough=""
224 linux_aio=""
225 cap_ng=""
226 attr=""
227 libattr=""
228 xfs=""
230 vhost_net="no"
231 vhost_scsi="no"
232 vhost_vsock="no"
233 kvm="no"
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_kdf="no"
318 vte=""
319 virglrenderer=""
320 tpm="yes"
321 libssh2=""
322 numa=""
323 tcmalloc="no"
324 jemalloc="no"
325 replication="yes"
327 # parse CC options first
328 for opt do
329 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
330 case "$opt" in
331 --cross-prefix=*) cross_prefix="$optarg"
333 --cc=*) CC="$optarg"
335 --cxx=*) CXX="$optarg"
337 --source-path=*) source_path="$optarg"
339 --cpu=*) cpu="$optarg"
341 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
342 EXTRA_CFLAGS="$optarg"
344 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
345 EXTRA_LDFLAGS="$optarg"
347 --enable-debug-info) debug_info="yes"
349 --disable-debug-info) debug_info="no"
351 esac
352 done
353 # OS specific
354 # Using uname is really, really broken. Once we have the right set of checks
355 # we can eliminate its usage altogether.
357 # Preferred compiler:
358 # ${CC} (if set)
359 # ${cross_prefix}gcc (if cross-prefix specified)
360 # system compiler
361 if test -z "${CC}${cross_prefix}"; then
362 cc="$host_cc"
363 else
364 cc="${CC-${cross_prefix}gcc}"
367 if test -z "${CXX}${cross_prefix}"; then
368 cxx="c++"
369 else
370 cxx="${CXX-${cross_prefix}g++}"
373 ar="${AR-${cross_prefix}ar}"
374 as="${AS-${cross_prefix}as}"
375 ccas="${CCAS-$cc}"
376 cpp="${CPP-$cc -E}"
377 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
378 ld="${LD-${cross_prefix}ld}"
379 nm="${NM-${cross_prefix}nm}"
380 strip="${STRIP-${cross_prefix}strip}"
381 windres="${WINDRES-${cross_prefix}windres}"
382 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
383 query_pkg_config() {
384 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
386 pkg_config=query_pkg_config
387 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
388 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
390 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
391 ARFLAGS="${ARFLAGS-rv}"
393 # default flags for all hosts
394 # We use -fwrapv to tell the compiler that we require a C dialect where
395 # left shift of signed integers is well defined and has the expected
396 # 2s-complement style results. (Both clang and gcc agree that it
397 # provides these semantics.)
398 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
399 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
400 QEMU_CFLAGS="-Wmissing-format-attribute $QEMU_CFLAGS"
401 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
402 QEMU_CFLAGS="-Wno-unused-parameter $QEMU_CFLAGS"
403 QEMU_CFLAGS="-Wno-missing-field-initializers $QEMU_CFLAGS"
404 QEMU_CFLAGS="-Wno-sign-compare $QEMU_CFLAGS"
405 QEMU_CFLAGS="-Wno-override-init $QEMU_CFLAGS"
406 QEMU_CFLAGS="-Wno-error=format $QEMU_CFLAGS"
407 QEMU_CFLAGS="-Wno-error=format-extra-args $QEMU_CFLAGS"
408 QEMU_CFLAGS="-Wno-error=parentheses $QEMU_CFLAGS"
409 QEMU_CFLAGS="-Wextra $QEMU_CFLAGS"
410 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
411 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
412 if test "$debug_info" = "yes"; then
413 CFLAGS="-g $CFLAGS"
414 LDFLAGS="-g $LDFLAGS"
417 # make source path absolute
418 source_path=$(cd "$source_path"; pwd)
420 cc_macros=$($cc $QEMU_CFLAGS -E -dD - </dev/null)
422 # running configure in the source tree?
423 # we know that's the case if configure is there.
424 if test -f "./configure"; then
425 pwd_is_source_path="y"
426 else
427 pwd_is_source_path="n"
430 check_define() {
431 rm -f $TMPC
432 cat > $TMPC <<EOF
433 #if !defined($1)
434 #error $1 not defined
435 #endif
436 int main(void) { return 0; }
438 compile_object
441 check_include() {
442 cat > $TMPC <<EOF
443 #include <$1>
444 int main(void) { return 0; }
446 compile_object
449 write_c_skeleton() {
450 cat > $TMPC <<EOF
451 int main(void) { return 0; }
455 if check_define __linux__ ; then
456 targetos="Linux"
457 elif check_define _WIN32 ; then
458 targetos='MINGW32'
459 elif check_define __OpenBSD__ ; then
460 targetos='OpenBSD'
461 elif check_define __sun__ ; then
462 targetos='SunOS'
463 elif check_define __HAIKU__ ; then
464 targetos='Haiku'
465 else
466 targetos=$(uname -s)
469 # Some host OSes need non-standard checks for which CPU to use.
470 # Note that these checks are broken for cross-compilation: if you're
471 # cross-compiling to one of these OSes then you'll need to specify
472 # the correct CPU with the --cpu option.
473 case $targetos in
474 Darwin)
475 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
476 # run 64-bit userspace code.
477 # If the user didn't specify a CPU explicitly and the kernel says this is
478 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
479 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
480 cpu="x86_64"
483 SunOS)
484 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
485 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
486 cpu="x86_64"
488 esac
490 if test ! -z "$cpu" ; then
491 # command line argument
493 elif check_define __i386__ ; then
494 cpu="i386"
495 elif check_define __x86_64__ ; then
496 if check_define __ILP32__ ; then
497 cpu="x32"
498 else
499 cpu="x86_64"
501 elif check_define __sparc__ ; then
502 if check_define __arch64__ ; then
503 cpu="sparc64"
504 else
505 cpu="sparc"
507 elif check_define _ARCH_PPC ; then
508 if check_define _ARCH_PPC64 ; then
509 cpu="ppc64"
510 else
511 cpu="ppc"
513 elif check_define __mips__ ; then
514 if check_define __mips64 ; then
515 cpu="mips64"
516 else
517 cpu="mips"
519 elif check_define __ia64__ ; then
520 cpu="ia64"
521 elif check_define __s390__ ; then
522 if check_define __s390x__ ; then
523 cpu="s390x"
524 else
525 cpu="s390"
527 elif check_define __arm__ ; then
528 cpu="arm"
529 elif check_define __aarch64__ ; then
530 cpu="aarch64"
531 else
532 cpu=$(uname -m)
535 ARCH=
536 # Normalise host CPU name and set ARCH.
537 # Note that this case should only have supported host CPUs, not guests.
538 case "$cpu" in
539 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
540 cpu="$cpu"
542 i386|i486|i586|i686|i86pc|BePC)
543 cpu="i386"
545 x86_64|amd64)
546 cpu="x86_64"
548 armv*b|armv*l|arm)
549 cpu="arm"
551 aarch64)
552 cpu="aarch64"
554 mips*)
555 cpu="mips"
556 if check_define __MIPSEL__ ; then
557 cpu="${cpu}el"
560 sparc|sun4[cdmuv])
561 cpu="sparc"
563 sh4)
564 cpu="sh4"
567 # This will result in either an error or falling back to TCI later
568 ARCH=unknown
570 esac
571 if test -z "$ARCH"; then
572 ARCH="$cpu"
575 # OS specific
577 # host *BSD for user mode
578 HOST_VARIANT_DIR=""
580 case $targetos in
581 CYGWIN*)
582 mingw32="yes"
583 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
584 audio_possible_drivers="sdl"
585 audio_drv_list="sdl"
587 MINGW32*)
588 mingw32="yes"
589 audio_possible_drivers="dsound sdl"
590 if check_include dsound.h; then
591 audio_drv_list="dsound"
592 else
593 audio_drv_list=""
596 GNU/kFreeBSD)
597 bsd="yes"
598 audio_drv_list="oss"
599 audio_possible_drivers="oss sdl pa"
601 FreeBSD)
602 bsd="yes"
603 make="${MAKE-gmake}"
604 audio_drv_list="oss"
605 audio_possible_drivers="oss sdl pa"
606 # needed for kinfo_getvmmap(3) in libutil.h
607 LIBS="-lutil $LIBS"
608 netmap="" # enable netmap autodetect
609 HOST_VARIANT_DIR="freebsd"
611 DragonFly)
612 bsd="yes"
613 make="${MAKE-gmake}"
614 audio_drv_list="oss"
615 audio_possible_drivers="oss sdl pa"
616 HOST_VARIANT_DIR="dragonfly"
618 NetBSD)
619 bsd="yes"
620 make="${MAKE-gmake}"
621 audio_drv_list="oss"
622 audio_possible_drivers="oss sdl"
623 oss_lib="-lossaudio"
624 HOST_VARIANT_DIR="netbsd"
626 OpenBSD)
627 bsd="yes"
628 make="${MAKE-gmake}"
629 audio_drv_list="sdl"
630 audio_possible_drivers="sdl"
631 HOST_VARIANT_DIR="openbsd"
633 Darwin)
634 bsd="yes"
635 darwin="yes"
636 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
637 if [ "$cpu" = "x86_64" ] ; then
638 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
639 LDFLAGS="-arch x86_64 $LDFLAGS"
641 cocoa="yes"
642 audio_drv_list="coreaudio"
643 audio_possible_drivers="coreaudio sdl"
644 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
645 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
646 # Disable attempts to use ObjectiveC features in os/object.h since they
647 # won't work when we're compiling with gcc as a C compiler.
648 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
649 HOST_VARIANT_DIR="darwin"
651 SunOS)
652 solaris="yes"
653 make="${MAKE-gmake}"
654 install="${INSTALL-ginstall}"
655 ld="gld"
656 smbd="${SMBD-/usr/sfw/sbin/smbd}"
657 needs_libsunmath="no"
658 solarisrev=$(uname -r | cut -f2 -d.)
659 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
660 if test "$solarisrev" -le 9 ; then
661 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
662 needs_libsunmath="yes"
663 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
664 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
665 LIBS="-lsunmath $LIBS"
666 else
667 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
668 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
669 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
670 "Studio 11 can be downloaded from www.sun.com."
674 if test -f /usr/include/sys/soundcard.h ; then
675 audio_drv_list="oss"
677 audio_possible_drivers="oss sdl"
678 # needed for CMSG_ macros in sys/socket.h
679 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
680 # needed for TIOCWIN* defines in termios.h
681 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
682 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
683 solarisnetlibs="-lsocket -lnsl -lresolv"
684 LIBS="$solarisnetlibs $LIBS"
685 libs_qga="$solarisnetlibs $libs_qga"
687 AIX)
688 aix="yes"
689 make="${MAKE-gmake}"
691 Haiku)
692 haiku="yes"
693 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
694 LIBS="-lposix_error_mapper -lnetwork $LIBS"
697 audio_drv_list="oss"
698 audio_possible_drivers="oss alsa sdl pa"
699 linux="yes"
700 linux_user="yes"
701 kvm="yes"
702 vhost_net="yes"
703 vhost_scsi="yes"
704 vhost_vsock="yes"
705 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
707 esac
709 if [ "$bsd" = "yes" ] ; then
710 if [ "$darwin" != "yes" ] ; then
711 bsd_user="yes"
715 : ${make=${MAKE-make}}
716 : ${install=${INSTALL-install}}
717 : ${python=${PYTHON-python}}
718 : ${smbd=${SMBD-/usr/sbin/smbd}}
720 # Default objcc to clang if available, otherwise use CC
721 if has clang; then
722 objcc=clang
723 else
724 objcc="$cc"
727 if test "$mingw32" = "yes" ; then
728 EXESUF=".exe"
729 DSOSUF=".dll"
730 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
731 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
732 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
733 # MinGW-w64 needs _POSIX defined.
734 QEMU_CFLAGS="-D_POSIX=1 $QEMU_CFLAGS"
735 # MinGW needs -mthreads for TLS and macro _MT.
736 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
737 QEMU_CFLAGS="-I\$(SRC_PATH)/hosts/w32/include $QEMU_CFLAGS"
738 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
739 write_c_skeleton;
740 if compile_prog "" "-liberty" ; then
741 LIBS="-liberty $LIBS"
743 prefix="c:/Program Files/QEMU"
744 mandir="\${prefix}"
745 datadir="\${prefix}"
746 qemu_docdir="\${prefix}"
747 bindir="\${prefix}"
748 sysconfdir="\${prefix}"
749 local_statedir=
750 confsuffix=""
751 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
754 werror=""
756 for opt do
757 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
758 case "$opt" in
759 --help|-h) show_help=yes
761 --version|-V) exec cat $source_path/VERSION
763 --prefix=*) prefix="$optarg"
765 --interp-prefix=*) interp_prefix="$optarg"
767 --source-path=*)
769 --cross-prefix=*)
771 --cc=*)
773 --host-cc=*) host_cc="$optarg"
775 --cxx=*)
777 --iasl=*) iasl="$optarg"
779 --objcc=*) objcc="$optarg"
781 --make=*) make="$optarg"
783 --install=*) install="$optarg"
785 --python=*) python="$optarg"
787 --gcov=*) gcov_tool="$optarg"
789 --smbd=*) smbd="$optarg"
791 --extra-cflags=*)
793 --extra-ldflags=*)
795 --enable-debug-info)
797 --disable-debug-info)
799 --enable-modules)
800 modules="yes"
802 --disable-modules)
803 modules="no"
805 --cpu=*)
807 --target-list=*) target_list="$optarg"
809 --enable-trace-backends=*) trace_backends="$optarg"
811 # XXX: backwards compatibility
812 --enable-trace-backend=*) trace_backends="$optarg"
814 --with-trace-file=*) trace_file="$optarg"
816 --enable-gprof) gprof="yes"
818 --enable-gcov) gcov="yes"
820 --static)
821 static="yes"
822 LDFLAGS="-static $LDFLAGS"
823 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
825 --mandir=*) mandir="$optarg"
827 --bindir=*) bindir="$optarg"
829 --libdir=*) libdir="$optarg"
831 --libexecdir=*) libexecdir="$optarg"
833 --includedir=*) includedir="$optarg"
835 --datadir=*) datadir="$optarg"
837 --with-confsuffix=*) confsuffix="$optarg"
839 --docdir=*) qemu_docdir="$optarg"
841 --sysconfdir=*) sysconfdir="$optarg"
843 --localstatedir=*) local_statedir="$optarg"
845 --sbindir=*|--sharedstatedir=*|\
846 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
847 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
848 # These switches are silently ignored, for compatibility with
849 # autoconf-generated configure scripts. This allows QEMU's
850 # configure to be used by RPM and similar macros that set
851 # lots of directory switches by default.
853 --with-system-pixman) pixman="system"
855 --without-system-pixman) pixman="internal"
857 --without-pixman) pixman="none"
859 --disable-sdl) sdl="no"
861 --enable-sdl) sdl="yes"
863 --with-sdlabi=*) sdlabi="$optarg"
865 --disable-qom-cast-debug) qom_cast_debug="no"
867 --enable-qom-cast-debug) qom_cast_debug="yes"
869 --disable-virtfs) virtfs="no"
871 --enable-virtfs) virtfs="yes"
873 --disable-vnc) vnc="no"
875 --enable-vnc) vnc="yes"
877 --oss-lib=*) oss_lib="$optarg"
879 --audio-drv-list=*) audio_drv_list="$optarg"
881 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
883 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
885 --enable-debug-tcg) debug_tcg="yes"
887 --disable-debug-tcg) debug_tcg="no"
889 --enable-debug)
890 # Enable debugging options that aren't excessively noisy
891 debug_tcg="yes"
892 debug="yes"
893 strip_opt="no"
894 fortify_source="no"
896 --enable-sparse) sparse="yes"
898 --disable-sparse) sparse="no"
900 --disable-strip) strip_opt="no"
902 --disable-vnc-sasl) vnc_sasl="no"
904 --enable-vnc-sasl) vnc_sasl="yes"
906 --disable-vnc-jpeg) vnc_jpeg="no"
908 --enable-vnc-jpeg) vnc_jpeg="yes"
910 --disable-vnc-png) vnc_png="no"
912 --enable-vnc-png) vnc_png="yes"
914 --disable-slirp) slirp="no"
916 --disable-vde) vde="no"
918 --enable-vde) vde="yes"
920 --disable-netmap) netmap="no"
922 --enable-netmap) netmap="yes"
924 --disable-xen) xen="no"
926 --enable-xen) xen="yes"
928 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
930 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
932 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
934 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
936 --disable-brlapi) brlapi="no"
938 --enable-brlapi) brlapi="yes"
940 --disable-bluez) bluez="no"
942 --enable-bluez) bluez="yes"
944 --disable-kvm) kvm="no"
946 --enable-kvm) kvm="yes"
948 --disable-tcg-interpreter) tcg_interpreter="no"
950 --enable-tcg-interpreter) tcg_interpreter="yes"
952 --disable-cap-ng) cap_ng="no"
954 --enable-cap-ng) cap_ng="yes"
956 --disable-spice) spice="no"
958 --enable-spice) spice="yes"
960 --disable-libiscsi) libiscsi="no"
962 --enable-libiscsi) libiscsi="yes"
964 --disable-libnfs) libnfs="no"
966 --enable-libnfs) libnfs="yes"
968 --enable-profiler) profiler="yes"
970 --disable-cocoa) cocoa="no"
972 --enable-cocoa)
973 cocoa="yes" ;
974 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
976 --disable-system) softmmu="no"
978 --enable-system) softmmu="yes"
980 --disable-user)
981 linux_user="no" ;
982 bsd_user="no" ;
984 --enable-user) ;;
985 --disable-linux-user) linux_user="no"
987 --enable-linux-user) linux_user="yes"
989 --disable-bsd-user) bsd_user="no"
991 --enable-bsd-user) bsd_user="yes"
993 --enable-pie) pie="yes"
995 --disable-pie) pie="no"
997 --enable-werror) werror="yes"
999 --disable-werror) werror="no"
1001 --enable-stack-protector) stack_protector="yes"
1003 --disable-stack-protector) stack_protector="no"
1005 --disable-curses) curses="no"
1007 --enable-curses) curses="yes"
1009 --disable-curl) curl="no"
1011 --enable-curl) curl="yes"
1013 --disable-fdt) fdt="no"
1015 --enable-fdt) fdt="yes"
1017 --disable-linux-aio) linux_aio="no"
1019 --enable-linux-aio) linux_aio="yes"
1021 --disable-attr) attr="no"
1023 --enable-attr) attr="yes"
1025 --disable-blobs) blobs="no"
1027 --with-pkgversion=*) pkgversion=" ($optarg)"
1029 --with-coroutine=*) coroutine="$optarg"
1031 --disable-coroutine-pool) coroutine_pool="no"
1033 --enable-coroutine-pool) coroutine_pool="yes"
1035 --enable-debug-stack-usage) debug_stack_usage="yes"
1037 --disable-docs) docs="no"
1039 --enable-docs) docs="yes"
1041 --disable-vhost-net) vhost_net="no"
1043 --enable-vhost-net) vhost_net="yes"
1045 --disable-vhost-scsi) vhost_scsi="no"
1047 --enable-vhost-scsi) vhost_scsi="yes"
1049 --disable-vhost-vsock) vhost_vsock="no"
1051 --enable-vhost-vsock) vhost_vsock="yes"
1053 --disable-opengl) opengl="no"
1055 --enable-opengl) opengl="yes"
1057 --disable-rbd) rbd="no"
1059 --enable-rbd) rbd="yes"
1061 --disable-xfsctl) xfs="no"
1063 --enable-xfsctl) xfs="yes"
1065 --disable-smartcard) smartcard="no"
1067 --enable-smartcard) smartcard="yes"
1069 --disable-libusb) libusb="no"
1071 --enable-libusb) libusb="yes"
1073 --disable-usb-redir) usb_redir="no"
1075 --enable-usb-redir) usb_redir="yes"
1077 --disable-zlib-test) zlib="no"
1079 --disable-lzo) lzo="no"
1081 --enable-lzo) lzo="yes"
1083 --disable-snappy) snappy="no"
1085 --enable-snappy) snappy="yes"
1087 --disable-bzip2) bzip2="no"
1089 --enable-bzip2) bzip2="yes"
1091 --enable-guest-agent) guest_agent="yes"
1093 --disable-guest-agent) guest_agent="no"
1095 --enable-guest-agent-msi) guest_agent_msi="yes"
1097 --disable-guest-agent-msi) guest_agent_msi="no"
1099 --with-vss-sdk) vss_win32_sdk=""
1101 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1103 --without-vss-sdk) vss_win32_sdk="no"
1105 --with-win-sdk) win_sdk=""
1107 --with-win-sdk=*) win_sdk="$optarg"
1109 --without-win-sdk) win_sdk="no"
1111 --enable-tools) want_tools="yes"
1113 --disable-tools) want_tools="no"
1115 --enable-seccomp) seccomp="yes"
1117 --disable-seccomp) seccomp="no"
1119 --disable-glusterfs) glusterfs="no"
1121 --enable-glusterfs) glusterfs="yes"
1123 --disable-archipelago) archipelago="no"
1125 --enable-archipelago) archipelago="yes"
1127 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1128 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1130 --enable-vhdx|--disable-vhdx)
1131 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1133 --enable-uuid|--disable-uuid)
1134 echo "$0: $opt is obsolete, UUID support is always built" >&2
1136 --disable-gtk) gtk="no"
1138 --enable-gtk) gtk="yes"
1140 --tls-priority=*) tls_priority="$optarg"
1142 --disable-gnutls) gnutls="no"
1144 --enable-gnutls) gnutls="yes"
1146 --disable-nettle) nettle="no"
1148 --enable-nettle) nettle="yes"
1150 --disable-gcrypt) gcrypt="no"
1152 --enable-gcrypt) gcrypt="yes"
1154 --enable-rdma) rdma="yes"
1156 --disable-rdma) rdma="no"
1158 --with-gtkabi=*) gtkabi="$optarg"
1160 --disable-vte) vte="no"
1162 --enable-vte) vte="yes"
1164 --disable-virglrenderer) virglrenderer="no"
1166 --enable-virglrenderer) virglrenderer="yes"
1168 --disable-tpm) tpm="no"
1170 --enable-tpm) tpm="yes"
1172 --disable-libssh2) libssh2="no"
1174 --enable-libssh2) libssh2="yes"
1176 --disable-numa) numa="no"
1178 --enable-numa) numa="yes"
1180 --disable-tcmalloc) tcmalloc="no"
1182 --enable-tcmalloc) tcmalloc="yes"
1184 --disable-jemalloc) jemalloc="no"
1186 --enable-jemalloc) jemalloc="yes"
1188 --disable-replication) replication="no"
1190 --enable-replication) replication="yes"
1193 echo "ERROR: unknown option $opt"
1194 echo "Try '$0 --help' for more information"
1195 exit 1
1197 esac
1198 done
1200 if ! has $python; then
1201 error_exit "Python not found. Use --python=/path/to/python"
1204 # Note that if the Python conditional here evaluates True we will exit
1205 # with status 1 which is a shell 'false' value.
1206 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1207 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1208 "Note that Python 3 or later is not yet supported." \
1209 "Use --python=/path/to/python to specify a supported Python."
1212 # Suppress writing compiled files
1213 python="$python -B"
1215 case "$cpu" in
1216 ppc)
1217 CPU_CFLAGS="-m32"
1218 LDFLAGS="-m32 $LDFLAGS"
1220 ppc64)
1221 CPU_CFLAGS="-m64"
1222 LDFLAGS="-m64 $LDFLAGS"
1224 sparc)
1225 LDFLAGS="-m32 $LDFLAGS"
1226 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1228 sparc64)
1229 LDFLAGS="-m64 $LDFLAGS"
1230 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1232 s390)
1233 CPU_CFLAGS="-m31"
1234 LDFLAGS="-m31 $LDFLAGS"
1236 s390x)
1237 CPU_CFLAGS="-m64"
1238 LDFLAGS="-m64 $LDFLAGS"
1240 i386)
1241 CPU_CFLAGS="-m32"
1242 LDFLAGS="-m32 $LDFLAGS"
1243 cc_i386='$(CC) -m32'
1245 x86_64)
1246 CPU_CFLAGS="-m64"
1247 LDFLAGS="-m64 $LDFLAGS"
1248 cc_i386='$(CC) -m32'
1250 x32)
1251 CPU_CFLAGS="-mx32"
1252 LDFLAGS="-mx32 $LDFLAGS"
1253 cc_i386='$(CC) -m32'
1255 # No special flags required for other host CPUs
1256 esac
1258 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1259 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1261 # For user-mode emulation the host arch has to be one we explicitly
1262 # support, even if we're using TCI.
1263 if [ "$ARCH" = "unknown" ]; then
1264 bsd_user="no"
1265 linux_user="no"
1268 default_target_list=""
1270 mak_wilds=""
1272 if [ "$softmmu" = "yes" ]; then
1273 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1275 if [ "$linux_user" = "yes" ]; then
1276 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1278 if [ "$bsd_user" = "yes" ]; then
1279 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1282 for config in $mak_wilds; do
1283 default_target_list="${default_target_list} $(basename "$config" .mak)"
1284 done
1286 if test x"$show_help" = x"yes" ; then
1287 cat << EOF
1289 Usage: configure [options]
1290 Options: [defaults in brackets after descriptions]
1292 Standard options:
1293 --help print this message
1294 --prefix=PREFIX install in PREFIX [$prefix]
1295 --interp-prefix=PREFIX where to find shared libraries, etc.
1296 use %M for cpu name [$interp_prefix]
1297 --target-list=LIST set target list (default: build everything)
1298 $(echo Available targets: $default_target_list | \
1299 fold -s -w 53 | sed -e 's/^/ /')
1301 Advanced options (experts only):
1302 --source-path=PATH path of source code [$source_path]
1303 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1304 --cc=CC use C compiler CC [$cc]
1305 --iasl=IASL use ACPI compiler IASL [$iasl]
1306 --host-cc=CC use C compiler CC [$host_cc] for code run at
1307 build time
1308 --cxx=CXX use C++ compiler CXX [$cxx]
1309 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1310 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1311 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1312 --make=MAKE use specified make [$make]
1313 --install=INSTALL use specified install [$install]
1314 --python=PYTHON use specified python [$python]
1315 --smbd=SMBD use specified smbd [$smbd]
1316 --static enable static build [$static]
1317 --mandir=PATH install man pages in PATH
1318 --datadir=PATH install firmware in PATH$confsuffix
1319 --docdir=PATH install documentation in PATH$confsuffix
1320 --bindir=PATH install binaries in PATH
1321 --libdir=PATH install libraries in PATH
1322 --sysconfdir=PATH install config in PATH$confsuffix
1323 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1324 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1325 --enable-debug enable common debug build options
1326 --disable-strip disable stripping binaries
1327 --disable-werror disable compilation abort on warning
1328 --disable-stack-protector disable compiler-provided stack protection
1329 --audio-drv-list=LIST set audio drivers list:
1330 Available drivers: $audio_possible_drivers
1331 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1332 --block-drv-rw-whitelist=L
1333 set block driver read-write whitelist
1334 (affects only QEMU, not qemu-img)
1335 --block-drv-ro-whitelist=L
1336 set block driver read-only whitelist
1337 (affects only QEMU, not qemu-img)
1338 --enable-trace-backends=B Set trace backend
1339 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1340 --with-trace-file=NAME Full PATH,NAME of file to store traces
1341 Default:trace-<pid>
1342 --disable-slirp disable SLIRP userspace network connectivity
1343 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1344 --oss-lib path to OSS library
1345 --cpu=CPU Build for host CPU [$cpu]
1346 --with-coroutine=BACKEND coroutine backend. Supported options:
1347 gthread, ucontext, sigaltstack, windows
1348 --enable-gcov enable test coverage analysis with gcov
1349 --gcov=GCOV use specified gcov [$gcov_tool]
1350 --disable-blobs disable installing provided firmware blobs
1351 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1352 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1353 --tls-priority default TLS protocol/cipher priority string
1355 Optional features, enabled with --enable-FEATURE and
1356 disabled with --disable-FEATURE, default is enabled if available:
1358 system all system emulation targets
1359 user supported user emulation targets
1360 linux-user all linux usermode emulation targets
1361 bsd-user all BSD usermode emulation targets
1362 docs build documentation
1363 guest-agent build the QEMU Guest Agent
1364 guest-agent-msi build guest agent Windows MSI installation package
1365 pie Position Independent Executables
1366 modules modules support
1367 debug-tcg TCG debugging (default is disabled)
1368 debug-info debugging information
1369 sparse sparse checker
1371 gnutls GNUTLS cryptography support
1372 nettle nettle cryptography support
1373 gcrypt libgcrypt cryptography support
1374 sdl SDL UI
1375 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1376 gtk gtk UI
1377 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1378 vte vte support for the gtk UI
1379 curses curses UI
1380 vnc VNC UI support
1381 vnc-sasl SASL encryption for VNC server
1382 vnc-jpeg JPEG lossy compression for VNC server
1383 vnc-png PNG compression for VNC server
1384 cocoa Cocoa UI (Mac OS X only)
1385 virtfs VirtFS
1386 xen xen backend driver support
1387 xen-pci-passthrough
1388 brlapi BrlAPI (Braile)
1389 curl curl connectivity
1390 fdt fdt device tree
1391 bluez bluez stack connectivity
1392 kvm KVM acceleration support
1393 rdma RDMA-based migration support
1394 vde support for vde network
1395 netmap support for netmap network
1396 linux-aio Linux AIO support
1397 cap-ng libcap-ng support
1398 attr attr and xattr support
1399 vhost-net vhost-net acceleration support
1400 spice spice
1401 rbd rados block device (rbd)
1402 libiscsi iscsi support
1403 libnfs nfs support
1404 smartcard smartcard support (libcacard)
1405 libusb libusb (for usb passthrough)
1406 usb-redir usb network redirection support
1407 lzo support of lzo compression library
1408 snappy support of snappy compression library
1409 bzip2 support of bzip2 compression library
1410 (for reading bzip2-compressed dmg images)
1411 seccomp seccomp support
1412 coroutine-pool coroutine freelist (better performance)
1413 glusterfs GlusterFS backend
1414 archipelago Archipelago backend
1415 tpm TPM support
1416 libssh2 ssh block device support
1417 numa libnuma support
1418 tcmalloc tcmalloc support
1419 jemalloc jemalloc support
1420 replication replication support
1422 NOTE: The object files are built at the place where configure is launched
1424 exit 0
1427 # Now we have handled --enable-tcg-interpreter and know we're not just
1428 # printing the help message, bail out if the host CPU isn't supported.
1429 if test "$ARCH" = "unknown"; then
1430 if test "$tcg_interpreter" = "yes" ; then
1431 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1432 else
1433 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1437 # Consult white-list to determine whether to enable werror
1438 # by default. Only enable by default for git builds
1439 if test -z "$werror" ; then
1440 if test -d "$source_path/.git" -a \
1441 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1442 werror="yes"
1443 else
1444 werror="no"
1448 # check that the C compiler works.
1449 write_c_skeleton;
1450 if compile_object ; then
1451 : C compiler works ok
1452 else
1453 error_exit "\"$cc\" either does not exist or does not work"
1455 if ! compile_prog ; then
1456 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1459 # Check that the C++ compiler exists and works with the C compiler
1460 if has $cxx; then
1461 cat > $TMPC <<EOF
1462 int c_function(void);
1463 int main(void) { return c_function(); }
1466 compile_object
1468 cat > $TMPCXX <<EOF
1469 extern "C" {
1470 int c_function(void);
1472 int c_function(void) { return 42; }
1475 update_cxxflags
1477 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1478 # C++ compiler $cxx works ok with C compiler $cc
1480 else
1481 echo "C++ compiler $cxx does not work with C compiler $cc"
1482 echo "Disabling C++ specific optional code"
1483 cxx=
1485 else
1486 echo "No C++ compiler available; disabling C++ specific optional code"
1487 cxx=
1490 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1491 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1492 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1493 gcc_flags="-Wunused-but-set-variable $gcc_flags"
1494 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1495 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1496 gcc_flags="-Wno-string-plus-int $gcc_flags"
1497 # Note that we do not add -Werror to gcc_flags here, because that would
1498 # enable it for all configure tests. If a configure test failed due
1499 # to -Werror this would just silently disable some features,
1500 # so it's too error prone.
1502 cc_has_warning_flag() {
1503 write_c_skeleton;
1505 # Use the positive sense of the flag when testing for -Wno-wombat
1506 # support (gcc will happily accept the -Wno- form of unknown
1507 # warning options).
1508 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1509 compile_prog "-Werror $optflag" ""
1512 for flag in $gcc_flags; do
1513 if cc_has_warning_flag $flag ; then
1514 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1516 done
1518 if test "$mingw32" = "yes"; then
1519 stack_protector="no"
1521 if test "$stack_protector" != "no"; then
1522 cat > $TMPC << EOF
1523 int main(int argc, char *argv[])
1525 char arr[64], *p = arr, *c = argv[0];
1526 while (*c) {
1527 *p++ = *c++;
1529 return 0;
1532 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1533 sp_on=0
1534 for flag in $gcc_flags; do
1535 # We need to check both a compile and a link, since some compiler
1536 # setups fail only on a .c->.o compile and some only at link time
1537 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1538 compile_prog "-Werror $flag" ""; then
1539 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1540 sp_on=1
1541 break
1543 done
1544 if test "$stack_protector" = yes; then
1545 if test $sp_on = 0; then
1546 error_exit "Stack protector not supported"
1551 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1552 # large functions that use global variables. The bug is in all releases of
1553 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1554 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1555 cat > $TMPC << EOF
1556 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1557 int main(void) { return 0; }
1558 #else
1559 #error No bug in this compiler.
1560 #endif
1562 if compile_prog "-Werror -fno-gcse" "" ; then
1563 TRANSLATE_OPT_CFLAGS=-fno-gcse
1566 if test "$static" = "yes" ; then
1567 if test "$modules" = "yes" ; then
1568 error_exit "static and modules are mutually incompatible"
1570 if test "$pie" = "yes" ; then
1571 error_exit "static and pie are mutually incompatible"
1572 else
1573 pie="no"
1577 # Unconditional check for compiler __thread support
1578 cat > $TMPC << EOF
1579 static __thread int tls_var;
1580 int main(void) { return tls_var; }
1583 if ! compile_prog "-Werror" "" ; then
1584 error_exit "Your compiler does not support the __thread specifier for " \
1585 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1588 if test "$pie" = ""; then
1589 case "$cpu-$targetos" in
1590 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1593 pie="no"
1595 esac
1598 if test "$pie" != "no" ; then
1599 cat > $TMPC << EOF
1601 #ifdef __linux__
1602 # define THREAD __thread
1603 #else
1604 # define THREAD
1605 #endif
1607 static THREAD int tls_var;
1609 int main(void) { return tls_var; }
1612 if compile_prog "-fPIE -DPIE" "-pie"; then
1613 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1614 LDFLAGS="-pie $LDFLAGS"
1615 pie="yes"
1616 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1617 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1619 else
1620 if test "$pie" = "yes"; then
1621 error_exit "PIE not available due to missing toolchain support"
1622 else
1623 echo "Disabling PIE due to missing toolchain support"
1624 pie="no"
1628 if compile_prog "-Werror -fno-pie" "-nopie"; then
1629 CFLAGS_NOPIE="-fno-pie"
1630 LDFLAGS_NOPIE="-nopie"
1634 ##########################################
1635 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1636 # use i686 as default anyway, but for those that don't, an explicit
1637 # specification is necessary
1639 if test "$cpu" = "i386"; then
1640 cat > $TMPC << EOF
1641 static int sfaa(int *ptr)
1643 return __sync_fetch_and_and(ptr, 0);
1646 int main(void)
1648 int val = 42;
1649 val = __sync_val_compare_and_swap(&val, 0, 1);
1650 sfaa(&val);
1651 return val;
1654 if ! compile_prog "" "" ; then
1655 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1659 #########################################
1660 # Solaris specific configure tool chain decisions
1662 if test "$solaris" = "yes" ; then
1663 if has $install; then
1665 else
1666 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1667 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1668 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1670 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1671 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1672 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1673 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1675 if has ar; then
1677 else
1678 if test -f /usr/ccs/bin/ar ; then
1679 error_exit "No path includes ar" \
1680 "Add /usr/ccs/bin to your path and rerun configure"
1682 error_exit "No path includes ar"
1686 if test -z "${target_list+xxx}" ; then
1687 target_list="$default_target_list"
1688 else
1689 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1692 # Check that we recognised the target name; this allows a more
1693 # friendly error message than if we let it fall through.
1694 for target in $target_list; do
1695 case " $default_target_list " in
1696 *" $target "*)
1699 error_exit "Unknown target name '$target'"
1701 esac
1702 done
1704 # see if system emulation was really requested
1705 case " $target_list " in
1706 *"-softmmu "*) softmmu=yes
1708 *) softmmu=no
1710 esac
1712 feature_not_found() {
1713 feature=$1
1714 remedy=$2
1716 error_exit "User requested feature $feature" \
1717 "configure was not able to find it." \
1718 "$remedy"
1721 # ---
1722 # big/little endian test
1723 cat > $TMPC << EOF
1724 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1725 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1726 extern int foo(short *, short *);
1727 int main(int argc, char *argv[]) {
1728 return foo(big_endian, little_endian);
1732 if compile_object ; then
1733 if grep -q BiGeNdIaN $TMPO ; then
1734 bigendian="yes"
1735 elif grep -q LiTtLeEnDiAn $TMPO ; then
1736 bigendian="no"
1737 else
1738 echo big/little test failed
1740 else
1741 echo big/little test failed
1744 ##########################################
1745 # cocoa implies not SDL or GTK
1746 # (the cocoa UI code currently assumes it is always the active UI
1747 # and doesn't interact well with other UI frontend code)
1748 if test "$cocoa" = "yes"; then
1749 if test "$sdl" = "yes"; then
1750 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1752 if test "$gtk" = "yes"; then
1753 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1755 gtk=no
1756 sdl=no
1759 # Some versions of Mac OS X incorrectly define SIZE_MAX
1760 cat > $TMPC << EOF
1761 #include <stdint.h>
1762 #include <stdio.h>
1763 int main(int argc, char *argv[]) {
1764 return printf("%zu", SIZE_MAX);
1767 have_broken_size_max=no
1768 if ! compile_object -Werror ; then
1769 have_broken_size_max=yes
1772 ##########################################
1773 # L2TPV3 probe
1775 cat > $TMPC <<EOF
1776 #include <sys/socket.h>
1777 #include <linux/ip.h>
1778 int main(void) { return sizeof(struct mmsghdr); }
1780 if compile_prog "" "" ; then
1781 l2tpv3=yes
1782 else
1783 l2tpv3=no
1786 ##########################################
1787 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1789 if test "$mingw32" = "yes"; then
1790 # Some versions of MinGW / Mingw-w64 lack localtime_r
1791 # and gmtime_r entirely.
1793 # Some versions of Mingw-w64 define a macro for
1794 # localtime_r/gmtime_r.
1796 # Some versions of Mingw-w64 will define functions
1797 # for localtime_r/gmtime_r, but only if you have
1798 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1799 # though, unistd.h and pthread.h both define
1800 # that for you.
1802 # So this #undef localtime_r and #include <unistd.h>
1803 # are not in fact redundant.
1804 cat > $TMPC << EOF
1805 #include <unistd.h>
1806 #include <time.h>
1807 #undef localtime_r
1808 int main(void) { localtime_r(NULL, NULL); return 0; }
1810 if compile_prog "" "" ; then
1811 localtime_r="yes"
1812 else
1813 localtime_r="no"
1817 ##########################################
1818 # pkg-config probe
1820 if ! has "$pkg_config_exe"; then
1821 error_exit "pkg-config binary '$pkg_config_exe' not found"
1824 ##########################################
1825 # NPTL probe
1827 if test "$linux_user" = "yes"; then
1828 cat > $TMPC <<EOF
1829 #include <sched.h>
1830 #include <linux/futex.h>
1831 int main(void) {
1832 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1833 #error bork
1834 #endif
1835 return 0;
1838 if ! compile_object ; then
1839 feature_not_found "nptl" "Install glibc and linux kernel headers."
1843 ##########################################
1844 # avx2 optimization requirement check
1846 cat > $TMPC << EOF
1847 #pragma GCC push_options
1848 #pragma GCC target("avx2")
1849 #include <cpuid.h>
1850 #include <immintrin.h>
1851 static int bar(void *a) {
1852 __m256i x = *(__m256i *)a;
1853 return _mm256_testz_si256(x, x);
1855 int main(int argc, char *argv[]) { return bar(argv[0]); }
1857 if compile_object "" ; then
1858 avx2_opt="yes"
1861 ##########################################
1862 # lzo check
1864 if test "$lzo" != "no" ; then
1865 cat > $TMPC << EOF
1866 #include <lzo/lzo1x.h>
1867 int main(void) { lzo_version(); return 0; }
1869 if compile_prog "" "-llzo2" ; then
1870 libs_softmmu="$libs_softmmu -llzo2"
1871 lzo="yes"
1872 else
1873 if test "$lzo" = "yes"; then
1874 feature_not_found "liblzo2" "Install liblzo2 devel"
1876 lzo="no"
1880 ##########################################
1881 # snappy check
1883 if test "$snappy" != "no" ; then
1884 cat > $TMPC << EOF
1885 #include <snappy-c.h>
1886 int main(void) { snappy_max_compressed_length(4096); return 0; }
1888 if compile_prog "" "-lsnappy" ; then
1889 libs_softmmu="$libs_softmmu -lsnappy"
1890 snappy="yes"
1891 else
1892 if test "$snappy" = "yes"; then
1893 feature_not_found "libsnappy" "Install libsnappy devel"
1895 snappy="no"
1899 ##########################################
1900 # bzip2 check
1902 if test "$bzip2" != "no" ; then
1903 cat > $TMPC << EOF
1904 #include <bzlib.h>
1905 int main(void) { BZ2_bzlibVersion(); return 0; }
1907 if compile_prog "" "-lbz2" ; then
1908 bzip2="yes"
1909 else
1910 if test "$bzip2" = "yes"; then
1911 feature_not_found "libbzip2" "Install libbzip2 devel"
1913 bzip2="no"
1917 ##########################################
1918 # libseccomp check
1920 if test "$seccomp" != "no" ; then
1921 case "$cpu" in
1922 i386|x86_64)
1923 libseccomp_minver="2.1.0"
1925 mips)
1926 libseccomp_minver="2.2.0"
1928 arm|aarch64)
1929 libseccomp_minver="2.2.3"
1931 ppc|ppc64)
1932 libseccomp_minver="2.3.0"
1935 libseccomp_minver=""
1937 esac
1939 if test "$libseccomp_minver" != "" &&
1940 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
1941 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1942 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
1943 seccomp="yes"
1944 else
1945 if test "$seccomp" = "yes" ; then
1946 if test "$libseccomp_minver" != "" ; then
1947 feature_not_found "libseccomp" \
1948 "Install libseccomp devel >= $libseccomp_minver"
1949 else
1950 feature_not_found "libseccomp" \
1951 "libseccomp is not supported for host cpu $cpu"
1954 seccomp="no"
1957 ##########################################
1958 # xen probe
1960 if test "$xen" != "no" ; then
1961 xen_libs="-lxenstore -lxenctrl -lxenguest"
1962 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1964 # First we test whether Xen headers and libraries are available.
1965 # If no, we are done and there is no Xen support.
1966 # If yes, more tests are run to detect the Xen version.
1968 # Xen (any)
1969 cat > $TMPC <<EOF
1970 #include <xenctrl.h>
1971 int main(void) {
1972 return 0;
1975 if ! compile_prog "" "$xen_libs" ; then
1976 # Xen not found
1977 if test "$xen" = "yes" ; then
1978 feature_not_found "xen" "Install xen devel"
1980 xen=no
1982 # Xen unstable
1983 elif
1984 cat > $TMPC <<EOF &&
1986 * If we have stable libs the we don't want the libxc compat
1987 * layers, regardless of what CFLAGS we may have been given.
1989 * Also, check if xengnttab_grant_copy_segment_t is defined and
1990 * grant copy operation is implemented.
1992 #undef XC_WANT_COMPAT_EVTCHN_API
1993 #undef XC_WANT_COMPAT_GNTTAB_API
1994 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
1995 #include <xenctrl.h>
1996 #include <xenstore.h>
1997 #include <xenevtchn.h>
1998 #include <xengnttab.h>
1999 #include <xenforeignmemory.h>
2000 #include <stdint.h>
2001 #include <xen/hvm/hvm_info_table.h>
2002 #if !defined(HVM_MAX_VCPUS)
2003 # error HVM_MAX_VCPUS not defined
2004 #endif
2005 int main(void) {
2006 xc_interface *xc = NULL;
2007 xenforeignmemory_handle *xfmem;
2008 xenevtchn_handle *xe;
2009 xengnttab_handle *xg;
2010 xen_domain_handle_t handle;
2011 xengnttab_grant_copy_segment_t* seg = NULL;
2013 xs_daemon_open();
2015 xc = xc_interface_open(0, 0, 0);
2016 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2017 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2018 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2019 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2020 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2022 xfmem = xenforeignmemory_open(0, 0);
2023 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2025 xe = xenevtchn_open(0, 0);
2026 xenevtchn_fd(xe);
2028 xg = xengnttab_open(0, 0);
2029 xengnttab_grant_copy(xg, 0, seg);
2031 return 0;
2034 compile_prog "" "$xen_libs $xen_stable_libs"
2035 then
2036 xen_ctrl_version=480
2037 xen=yes
2038 elif
2039 cat > $TMPC <<EOF &&
2041 * If we have stable libs the we don't want the libxc compat
2042 * layers, regardless of what CFLAGS we may have been given.
2044 #undef XC_WANT_COMPAT_EVTCHN_API
2045 #undef XC_WANT_COMPAT_GNTTAB_API
2046 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2047 #include <xenctrl.h>
2048 #include <xenstore.h>
2049 #include <xenevtchn.h>
2050 #include <xengnttab.h>
2051 #include <xenforeignmemory.h>
2052 #include <stdint.h>
2053 #include <xen/hvm/hvm_info_table.h>
2054 #if !defined(HVM_MAX_VCPUS)
2055 # error HVM_MAX_VCPUS not defined
2056 #endif
2057 int main(void) {
2058 xc_interface *xc = NULL;
2059 xenforeignmemory_handle *xfmem;
2060 xenevtchn_handle *xe;
2061 xengnttab_handle *xg;
2062 xen_domain_handle_t handle;
2064 xs_daemon_open();
2066 xc = xc_interface_open(0, 0, 0);
2067 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2068 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2069 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2070 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2071 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2073 xfmem = xenforeignmemory_open(0, 0);
2074 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2076 xe = xenevtchn_open(0, 0);
2077 xenevtchn_fd(xe);
2079 xg = xengnttab_open(0, 0);
2080 xengnttab_map_grant_ref(xg, 0, 0, 0);
2082 return 0;
2085 compile_prog "" "$xen_libs $xen_stable_libs"
2086 then
2087 xen_ctrl_version=471
2088 xen=yes
2089 elif
2090 cat > $TMPC <<EOF &&
2091 #include <xenctrl.h>
2092 #include <stdint.h>
2093 int main(void) {
2094 xc_interface *xc = NULL;
2095 xen_domain_handle_t handle;
2096 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2097 return 0;
2100 compile_prog "" "$xen_libs"
2101 then
2102 xen_ctrl_version=470
2103 xen=yes
2105 # Xen 4.6
2106 elif
2107 cat > $TMPC <<EOF &&
2108 #include <xenctrl.h>
2109 #include <xenstore.h>
2110 #include <stdint.h>
2111 #include <xen/hvm/hvm_info_table.h>
2112 #if !defined(HVM_MAX_VCPUS)
2113 # error HVM_MAX_VCPUS not defined
2114 #endif
2115 int main(void) {
2116 xc_interface *xc;
2117 xs_daemon_open();
2118 xc = xc_interface_open(0, 0, 0);
2119 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2120 xc_gnttab_open(NULL, 0);
2121 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2122 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2123 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2124 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2125 return 0;
2128 compile_prog "" "$xen_libs"
2129 then
2130 xen_ctrl_version=460
2131 xen=yes
2133 # Xen 4.5
2134 elif
2135 cat > $TMPC <<EOF &&
2136 #include <xenctrl.h>
2137 #include <xenstore.h>
2138 #include <stdint.h>
2139 #include <xen/hvm/hvm_info_table.h>
2140 #if !defined(HVM_MAX_VCPUS)
2141 # error HVM_MAX_VCPUS not defined
2142 #endif
2143 int main(void) {
2144 xc_interface *xc;
2145 xs_daemon_open();
2146 xc = xc_interface_open(0, 0, 0);
2147 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2148 xc_gnttab_open(NULL, 0);
2149 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2150 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2151 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2152 return 0;
2155 compile_prog "" "$xen_libs"
2156 then
2157 xen_ctrl_version=450
2158 xen=yes
2160 elif
2161 cat > $TMPC <<EOF &&
2162 #include <xenctrl.h>
2163 #include <xenstore.h>
2164 #include <stdint.h>
2165 #include <xen/hvm/hvm_info_table.h>
2166 #if !defined(HVM_MAX_VCPUS)
2167 # error HVM_MAX_VCPUS not defined
2168 #endif
2169 int main(void) {
2170 xc_interface *xc;
2171 xs_daemon_open();
2172 xc = xc_interface_open(0, 0, 0);
2173 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2174 xc_gnttab_open(NULL, 0);
2175 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2176 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2177 return 0;
2180 compile_prog "" "$xen_libs"
2181 then
2182 xen_ctrl_version=420
2183 xen=yes
2185 else
2186 if test "$xen" = "yes" ; then
2187 feature_not_found "xen (unsupported version)" \
2188 "Install a supported xen (xen 4.2 or newer)"
2190 xen=no
2193 if test "$xen" = yes; then
2194 if test $xen_ctrl_version -ge 471 ; then
2195 libs_softmmu="$xen_stable_libs $libs_softmmu"
2197 libs_softmmu="$xen_libs $libs_softmmu"
2201 if test "$xen_pci_passthrough" != "no"; then
2202 if test "$xen" = "yes" && test "$linux" = "yes"; then
2203 xen_pci_passthrough=yes
2204 else
2205 if test "$xen_pci_passthrough" = "yes"; then
2206 error_exit "User requested feature Xen PCI Passthrough" \
2207 " but this feature requires /sys from Linux"
2209 xen_pci_passthrough=no
2213 if test "$xen_pv_domain_build" = "yes" &&
2214 test "$xen" != "yes"; then
2215 error_exit "User requested Xen PV domain builder support" \
2216 "which requires Xen support."
2219 ##########################################
2220 # Sparse probe
2221 if test "$sparse" != "no" ; then
2222 if has cgcc; then
2223 sparse=yes
2224 else
2225 if test "$sparse" = "yes" ; then
2226 feature_not_found "sparse" "Install sparse binary"
2228 sparse=no
2232 ##########################################
2233 # X11 probe
2234 x11_cflags=
2235 x11_libs=-lX11
2236 if $pkg_config --exists "x11"; then
2237 x11_cflags=$($pkg_config --cflags x11)
2238 x11_libs=$($pkg_config --libs x11)
2241 ##########################################
2242 # GTK probe
2244 if test "$gtkabi" = ""; then
2245 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2246 # Use 3.0 as a fallback if that is available.
2247 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2248 gtkabi=2.0
2249 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2250 gtkabi=3.0
2251 else
2252 gtkabi=2.0
2256 if test "$gtk" != "no"; then
2257 gtkpackage="gtk+-$gtkabi"
2258 gtkx11package="gtk+-x11-$gtkabi"
2259 if test "$gtkabi" = "3.0" ; then
2260 gtkversion="3.0.0"
2261 else
2262 gtkversion="2.18.0"
2264 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2265 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2266 gtk_libs=$($pkg_config --libs $gtkpackage)
2267 gtk_version=$($pkg_config --modversion $gtkpackage)
2268 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2269 gtk_cflags="$gtk_cflags $x11_cflags"
2270 gtk_libs="$gtk_libs $x11_libs"
2272 libs_softmmu="$gtk_libs $libs_softmmu"
2273 gtk="yes"
2274 elif test "$gtk" = "yes"; then
2275 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2276 else
2277 gtk="no"
2282 ##########################################
2283 # GNUTLS probe
2285 gnutls_works() {
2286 # Unfortunately some distros have bad pkg-config information for gnutls
2287 # such that it claims to exist but you get a compiler error if you try
2288 # to use the options returned by --libs. Specifically, Ubuntu for --static
2289 # builds doesn't work:
2290 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2292 # So sanity check the cflags/libs before assuming gnutls can be used.
2293 if ! $pkg_config --exists "gnutls"; then
2294 return 1
2297 write_c_skeleton
2298 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2301 gnutls_gcrypt=no
2302 gnutls_nettle=no
2303 if test "$gnutls" != "no"; then
2304 if gnutls_works; then
2305 gnutls_cflags=$($pkg_config --cflags gnutls)
2306 gnutls_libs=$($pkg_config --libs gnutls)
2307 libs_softmmu="$gnutls_libs $libs_softmmu"
2308 libs_tools="$gnutls_libs $libs_tools"
2309 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2310 gnutls="yes"
2312 # gnutls_rnd requires >= 2.11.0
2313 if $pkg_config --exists "gnutls >= 2.11.0"; then
2314 gnutls_rnd="yes"
2315 else
2316 gnutls_rnd="no"
2319 if $pkg_config --exists 'gnutls >= 3.0'; then
2320 gnutls_gcrypt=no
2321 gnutls_nettle=yes
2322 elif $pkg_config --exists 'gnutls >= 2.12'; then
2323 case $($pkg_config --libs --static gnutls) in
2324 *gcrypt*)
2325 gnutls_gcrypt=yes
2326 gnutls_nettle=no
2328 *nettle*)
2329 gnutls_gcrypt=no
2330 gnutls_nettle=yes
2333 gnutls_gcrypt=yes
2334 gnutls_nettle=no
2336 esac
2337 else
2338 gnutls_gcrypt=yes
2339 gnutls_nettle=no
2341 elif test "$gnutls" = "yes"; then
2342 feature_not_found "gnutls" "Install gnutls devel"
2343 else
2344 gnutls="no"
2345 gnutls_rnd="no"
2347 else
2348 gnutls_rnd="no"
2352 # If user didn't give a --disable/enable-gcrypt flag,
2353 # then mark as disabled if user requested nettle
2354 # explicitly, or if gnutls links to nettle
2355 if test -z "$gcrypt"
2356 then
2357 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2358 then
2359 gcrypt="no"
2363 # If user didn't give a --disable/enable-nettle flag,
2364 # then mark as disabled if user requested gcrypt
2365 # explicitly, or if gnutls links to gcrypt
2366 if test -z "$nettle"
2367 then
2368 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2369 then
2370 nettle="no"
2374 has_libgcrypt_config() {
2375 if ! has "libgcrypt-config"
2376 then
2377 return 1
2380 if test -n "$cross_prefix"
2381 then
2382 host=$(libgcrypt-config --host)
2383 if test "$host-" != $cross_prefix
2384 then
2385 return 1
2389 return 0
2392 if test "$gcrypt" != "no"; then
2393 if has_libgcrypt_config; then
2394 gcrypt_cflags=$(libgcrypt-config --cflags)
2395 gcrypt_libs=$(libgcrypt-config --libs)
2396 # Debian has remove -lgpg-error from libgcrypt-config
2397 # as it "spreads unnecessary dependencies" which in
2398 # turn breaks static builds...
2399 if test "$static" = "yes"
2400 then
2401 gcrypt_libs="$gcrypt_libs -lgpg-error"
2403 libs_softmmu="$gcrypt_libs $libs_softmmu"
2404 libs_tools="$gcrypt_libs $libs_tools"
2405 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2406 gcrypt="yes"
2407 if test -z "$nettle"; then
2408 nettle="no"
2411 cat > $TMPC << EOF
2412 #include <gcrypt.h>
2413 int main(void) {
2414 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2415 GCRY_MD_SHA256,
2416 NULL, 0, 0, 0, NULL);
2417 return 0;
2420 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2421 gcrypt_kdf=yes
2423 else
2424 if test "$gcrypt" = "yes"; then
2425 feature_not_found "gcrypt" "Install gcrypt devel"
2426 else
2427 gcrypt="no"
2433 if test "$nettle" != "no"; then
2434 if $pkg_config --exists "nettle"; then
2435 nettle_cflags=$($pkg_config --cflags nettle)
2436 nettle_libs=$($pkg_config --libs nettle)
2437 nettle_version=$($pkg_config --modversion nettle)
2438 libs_softmmu="$nettle_libs $libs_softmmu"
2439 libs_tools="$nettle_libs $libs_tools"
2440 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2441 nettle="yes"
2443 cat > $TMPC << EOF
2444 #include <stddef.h>
2445 #include <nettle/pbkdf2.h>
2446 int main(void) {
2447 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2448 return 0;
2451 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2452 nettle_kdf=yes
2454 else
2455 if test "$nettle" = "yes"; then
2456 feature_not_found "nettle" "Install nettle devel"
2457 else
2458 nettle="no"
2463 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2464 then
2465 error_exit "Only one of gcrypt & nettle can be enabled"
2468 ##########################################
2469 # libtasn1 - only for the TLS creds/session test suite
2471 tasn1=yes
2472 tasn1_cflags=""
2473 tasn1_libs=""
2474 if $pkg_config --exists "libtasn1"; then
2475 tasn1_cflags=$($pkg_config --cflags libtasn1)
2476 tasn1_libs=$($pkg_config --libs libtasn1)
2477 else
2478 tasn1=no
2482 ##########################################
2483 # getifaddrs (for tests/test-io-channel-socket )
2485 have_ifaddrs_h=yes
2486 if ! check_include "ifaddrs.h" ; then
2487 have_ifaddrs_h=no
2490 ##########################################
2491 # VTE probe
2493 if test "$vte" != "no"; then
2494 if test "$gtkabi" = "3.0"; then
2495 vteminversion="0.32.0"
2496 if $pkg_config --exists "vte-2.91"; then
2497 vtepackage="vte-2.91"
2498 else
2499 vtepackage="vte-2.90"
2501 else
2502 vtepackage="vte"
2503 vteminversion="0.24.0"
2505 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2506 vte_cflags=$($pkg_config --cflags $vtepackage)
2507 vte_libs=$($pkg_config --libs $vtepackage)
2508 vteversion=$($pkg_config --modversion $vtepackage)
2509 libs_softmmu="$vte_libs $libs_softmmu"
2510 vte="yes"
2511 elif test "$vte" = "yes"; then
2512 if test "$gtkabi" = "3.0"; then
2513 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2514 else
2515 feature_not_found "vte" "Install libvte devel"
2517 else
2518 vte="no"
2522 ##########################################
2523 # SDL probe
2525 # Look for sdl configuration program (pkg-config or sdl-config). Try
2526 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2528 if test "$sdlabi" = ""; then
2529 if $pkg_config --exists "sdl"; then
2530 sdlabi=1.2
2531 elif $pkg_config --exists "sdl2"; then
2532 sdlabi=2.0
2533 else
2534 sdlabi=1.2
2538 if test $sdlabi = "2.0"; then
2539 sdl_config=$sdl2_config
2540 sdlname=sdl2
2541 sdlconfigname=sdl2_config
2542 elif test $sdlabi = "1.2"; then
2543 sdlname=sdl
2544 sdlconfigname=sdl_config
2545 else
2546 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2549 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2550 sdl_config=$sdlconfigname
2553 if $pkg_config $sdlname --exists; then
2554 sdlconfig="$pkg_config $sdlname"
2555 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2556 elif has ${sdl_config}; then
2557 sdlconfig="$sdl_config"
2558 sdlversion=$($sdlconfig --version)
2559 else
2560 if test "$sdl" = "yes" ; then
2561 feature_not_found "sdl" "Install SDL devel"
2563 sdl=no
2565 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2566 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2569 sdl_too_old=no
2570 if test "$sdl" != "no" ; then
2571 cat > $TMPC << EOF
2572 #include <SDL.h>
2573 #undef main /* We don't want SDL to override our main() */
2574 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2576 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2577 if test "$static" = "yes" ; then
2578 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2579 else
2580 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2582 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2583 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2584 sdl_too_old=yes
2585 else
2586 sdl=yes
2589 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2590 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2591 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2592 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2593 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2595 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2597 else
2598 sdl=no
2600 fi # static link
2601 else # sdl not found
2602 if test "$sdl" = "yes" ; then
2603 feature_not_found "sdl" "Install SDL devel"
2605 sdl=no
2606 fi # sdl compile test
2609 if test "$sdl" = "yes" ; then
2610 cat > $TMPC <<EOF
2611 #include <SDL.h>
2612 #if defined(SDL_VIDEO_DRIVER_X11)
2613 #include <X11/XKBlib.h>
2614 #else
2615 #error No x11 support
2616 #endif
2617 int main(void) { return 0; }
2619 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2620 sdl_cflags="$sdl_cflags $x11_cflags"
2621 sdl_libs="$sdl_libs $x11_libs"
2623 libs_softmmu="$sdl_libs $libs_softmmu"
2626 ##########################################
2627 # RDMA needs OpenFabrics libraries
2628 if test "$rdma" != "no" ; then
2629 cat > $TMPC <<EOF
2630 #include <rdma/rdma_cma.h>
2631 int main(void) { return 0; }
2633 rdma_libs="-lrdmacm -libverbs"
2634 if compile_prog "" "$rdma_libs" ; then
2635 rdma="yes"
2636 libs_softmmu="$libs_softmmu $rdma_libs"
2637 else
2638 if test "$rdma" = "yes" ; then
2639 error_exit \
2640 " OpenFabrics librdmacm/libibverbs not present." \
2641 " Your options:" \
2642 " (1) Fast: Install infiniband packages from your distro." \
2643 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2644 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2646 rdma="no"
2650 ##########################################
2651 # VNC SASL detection
2652 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2653 cat > $TMPC <<EOF
2654 #include <sasl/sasl.h>
2655 #include <stdio.h>
2656 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2658 # Assuming Cyrus-SASL installed in /usr prefix
2659 vnc_sasl_cflags=""
2660 vnc_sasl_libs="-lsasl2"
2661 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2662 vnc_sasl=yes
2663 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2664 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2665 else
2666 if test "$vnc_sasl" = "yes" ; then
2667 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2669 vnc_sasl=no
2673 ##########################################
2674 # VNC JPEG detection
2675 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2676 if $pkg_config --exists libjpeg; then
2677 vnc_jpeg=yes
2678 libs_softmmu="$libs_softmmu $($pkg_config --libs libjpeg)"
2679 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libjpeg)"
2680 else
2681 cat > $TMPC <<EOF
2682 #include <stdio.h>
2683 #include <jpeglib.h>
2684 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2686 vnc_jpeg_cflags=""
2687 vnc_jpeg_libs="-ljpeg"
2688 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2689 vnc_jpeg=yes
2690 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2691 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2692 else
2693 if test "$vnc_jpeg" = "yes" ; then
2694 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2696 vnc_jpeg=no
2701 ##########################################
2702 # VNC PNG detection
2703 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2704 cat > $TMPC <<EOF
2705 //#include <stdio.h>
2706 #include <png.h>
2707 #include <stddef.h>
2708 int main(void) {
2709 png_structp png_ptr;
2710 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2711 return png_ptr != 0;
2714 if $pkg_config libpng --exists; then
2715 vnc_png_cflags=$($pkg_config libpng --cflags)
2716 vnc_png_libs=$($pkg_config libpng --libs)
2717 else
2718 vnc_png_cflags=""
2719 vnc_png_libs="-lpng"
2721 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2722 vnc_png=yes
2723 libs_softmmu="$vnc_png_libs $libs_softmmu"
2724 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2725 else
2726 if test "$vnc_png" = "yes" ; then
2727 feature_not_found "vnc-png" "Install libpng devel"
2729 vnc_png=no
2733 ##########################################
2734 # fnmatch() probe, used for ACL routines
2735 fnmatch="no"
2736 cat > $TMPC << EOF
2737 #include <fnmatch.h>
2738 int main(void)
2740 fnmatch("foo", "foo", 0);
2741 return 0;
2744 if compile_prog "" "" ; then
2745 fnmatch="yes"
2748 ##########################################
2749 # xfsctl() probe, used for raw-posix
2750 if test "$xfs" != "no" ; then
2751 cat > $TMPC << EOF
2752 #include <stddef.h> /* NULL */
2753 #include <xfs/xfs.h>
2754 int main(void)
2756 xfsctl(NULL, 0, 0, NULL);
2757 return 0;
2760 if compile_prog "" "" ; then
2761 xfs="yes"
2762 else
2763 if test "$xfs" = "yes" ; then
2764 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2766 xfs=no
2770 ##########################################
2771 # vde libraries probe
2772 if test "$vde" != "no" ; then
2773 vde_libs="-lvdeplug"
2774 cat > $TMPC << EOF
2775 #include <stddef.h>
2776 #include <libvdeplug.h>
2777 int main(void)
2779 struct vde_open_args a = {0, 0, 0};
2780 char s[] = "";
2781 vde_open(s, s, &a);
2782 return 0;
2785 if compile_prog "" "$vde_libs" ; then
2786 vde=yes
2787 libs_softmmu="$vde_libs $libs_softmmu"
2788 libs_tools="$vde_libs $libs_tools"
2789 else
2790 if test "$vde" = "yes" ; then
2791 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2793 vde=no
2797 ##########################################
2798 # netmap support probe
2799 # Apart from looking for netmap headers, we make sure that the host API version
2800 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2801 # a minor/major version number. Minor new features will be marked with values up
2802 # to 15, and if something happens that requires a change to the backend we will
2803 # move above 15, submit the backend fixes and modify this two bounds.
2804 if test "$netmap" != "no" ; then
2805 cat > $TMPC << EOF
2806 #include <inttypes.h>
2807 #include <net/if.h>
2808 #include <net/netmap.h>
2809 #include <net/netmap_user.h>
2810 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2811 #error
2812 #endif
2813 int main(void) { return 0; }
2815 if compile_prog "" "" ; then
2816 netmap=yes
2817 else
2818 if test "$netmap" = "yes" ; then
2819 feature_not_found "netmap"
2821 netmap=no
2825 ##########################################
2826 # libcap-ng library probe
2827 if test "$cap_ng" != "no" ; then
2828 cap_libs="-lcap-ng"
2829 cat > $TMPC << EOF
2830 #include <cap-ng.h>
2831 int main(void)
2833 capng_capability_to_name(CAPNG_EFFECTIVE);
2834 return 0;
2837 if compile_prog "" "$cap_libs" ; then
2838 cap_ng=yes
2839 libs_tools="$cap_libs $libs_tools"
2840 else
2841 if test "$cap_ng" = "yes" ; then
2842 feature_not_found "cap_ng" "Install libcap-ng devel"
2844 cap_ng=no
2848 ##########################################
2849 # Sound support libraries probe
2851 audio_drv_probe()
2853 drv=$1
2854 hdr=$2
2855 lib=$3
2856 exp=$4
2857 cfl=$5
2858 cat > $TMPC << EOF
2859 #include <$hdr>
2860 int main(void) { $exp }
2862 if compile_prog "$cfl" "$lib" ; then
2864 else
2865 error_exit "$drv check failed" \
2866 "Make sure to have the $drv libs and headers installed."
2870 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
2871 for drv in $audio_drv_list; do
2872 case $drv in
2873 alsa)
2874 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2875 "return snd_pcm_close((snd_pcm_t *)0);"
2876 libs_softmmu="-lasound $libs_softmmu"
2880 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2881 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
2882 libs_softmmu="-lpulse $libs_softmmu"
2883 audio_pt_int="yes"
2886 coreaudio)
2887 libs_softmmu="-framework CoreAudio $libs_softmmu"
2890 dsound)
2891 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2892 audio_win_int="yes"
2895 oss)
2896 libs_softmmu="$oss_lib $libs_softmmu"
2899 sdl|wav)
2900 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2904 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2905 error_exit "Unknown driver '$drv' selected" \
2906 "Possible drivers are: $audio_possible_drivers"
2909 esac
2910 done
2912 ##########################################
2913 # BrlAPI probe
2915 if test "$brlapi" != "no" ; then
2916 brlapi_libs="-lbrlapi"
2917 cat > $TMPC << EOF
2918 #include <brlapi.h>
2919 #include <stddef.h>
2920 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2922 if compile_prog "" "$brlapi_libs" ; then
2923 brlapi=yes
2924 libs_softmmu="$brlapi_libs $libs_softmmu"
2925 else
2926 if test "$brlapi" = "yes" ; then
2927 feature_not_found "brlapi" "Install brlapi devel"
2929 brlapi=no
2933 ##########################################
2934 # curses probe
2935 if test "$curses" != "no" ; then
2936 curses_found=no
2937 if $pkg_config --exists ncurses; then
2938 curses_found=yes
2939 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags ncurses)"
2940 libs_softmmu="$libs_softmmu $($pkg_config --libs ncurses)"
2941 else
2942 if test "$mingw32" = "yes" ; then
2943 curses_list="-lpdcurses"
2944 else
2945 curses_list="-lncurses:-lcurses"
2947 cat > $TMPC << EOF
2948 #include <curses.h>
2949 int main(void) {
2950 const char *s = curses_version();
2951 resize_term(0, 0);
2952 return s != 0;
2955 IFS=:
2956 for curses_lib in $curses_list; do
2957 unset IFS
2958 if compile_prog "" "$curses_lib" ; then
2959 curses_found=yes
2960 libs_softmmu="$curses_lib $libs_softmmu"
2961 break
2963 done
2964 unset IFS
2966 if test "$curses_found" = "yes" ; then
2967 curses=yes
2968 else
2969 if test "$curses" = "yes" ; then
2970 feature_not_found "curses" "Install ncurses devel"
2972 curses=no
2976 ##########################################
2977 # curl probe
2978 if test "$curl" != "no" ; then
2979 if $pkg_config libcurl --exists; then
2980 curlconfig="$pkg_config libcurl"
2981 else
2982 curlconfig=curl-config
2984 cat > $TMPC << EOF
2985 #include <curl/curl.h>
2986 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2988 curl_cflags=$($curlconfig --cflags 2>/dev/null)
2989 curl_libs=$($curlconfig --libs 2>/dev/null)
2990 if compile_prog "$curl_cflags" "$curl_libs" ; then
2991 curl=yes
2992 else
2993 if test "$curl" = "yes" ; then
2994 feature_not_found "curl" "Install libcurl devel"
2996 curl=no
2998 fi # test "$curl"
3000 ##########################################
3001 # bluez support probe
3002 if test "$bluez" != "no" ; then
3003 cat > $TMPC << EOF
3004 #include <bluetooth/bluetooth.h>
3005 int main(void) { return bt_error(0); }
3007 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3008 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3009 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3010 bluez=yes
3011 libs_softmmu="$bluez_libs $libs_softmmu"
3012 else
3013 if test "$bluez" = "yes" ; then
3014 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3016 bluez="no"
3020 ##########################################
3021 # glib support probe
3023 glib_req_ver=2.22
3024 glib_modules=gthread-2.0
3025 if test "$modules" = yes; then
3026 glib_modules="$glib_modules gmodule-2.0"
3029 for i in $glib_modules; do
3030 if $pkg_config --atleast-version=$glib_req_ver $i; then
3031 glib_cflags=$($pkg_config --cflags $i)
3032 glib_libs=$($pkg_config --libs $i)
3033 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3034 LIBS="$glib_libs $LIBS"
3035 libs_qga="$glib_libs $libs_qga"
3036 else
3037 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3039 done
3041 # Sanity check that the current size_t matches the
3042 # size that glib thinks it should be. This catches
3043 # problems on multi-arch where people try to build
3044 # 32-bit QEMU while pointing at 64-bit glib headers
3045 cat > $TMPC <<EOF
3046 #include <glib.h>
3047 #include <unistd.h>
3049 #define QEMU_BUILD_BUG_ON(x) \
3050 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3052 int main(void) {
3053 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3054 return 0;
3058 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3059 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3060 "You probably need to set PKG_CONFIG_LIBDIR"\
3061 "to point to the right pkg-config files for your"\
3062 "build target"
3065 # g_test_trap_subprocess added in 2.38. Used by some tests.
3066 glib_subprocess=yes
3067 if test "$mingw32" = "yes" || ! $pkg_config --atleast-version=2.38 glib-2.0; then
3068 glib_subprocess=no
3071 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3072 cat > $TMPC << EOF
3073 #include <glib.h>
3074 int main(void) { return 0; }
3076 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3077 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3078 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3079 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3083 #########################################
3084 # zlib check
3086 if test "$zlib" != "no" ; then
3087 if $pkg_config --exists zlib; then
3088 zlib_cflags=$($pkg_config --cflags zlib)
3089 zlib_libs=$($pkg_config --libs zlib)
3090 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3091 LIBS="$zlib_libs $LIBS"
3092 else
3093 cat > $TMPC << EOF
3094 #include <zlib.h>
3095 int main(void) { zlibVersion(); return 0; }
3097 if compile_prog "" "-lz" ; then
3098 LIBS="$LIBS -lz"
3099 else
3100 error_exit "zlib check failed" \
3101 "Make sure to have the zlib libs and headers installed."
3106 ##########################################
3107 # SHA command probe for modules
3108 if test "$modules" = yes; then
3109 shacmd_probe="sha1sum sha1 shasum"
3110 for c in $shacmd_probe; do
3111 if has $c; then
3112 shacmd="$c"
3113 break
3115 done
3116 if test "$shacmd" = ""; then
3117 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3121 ##########################################
3122 # pixman support probe
3124 if test "$pixman" = ""; then
3125 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3126 pixman="none"
3127 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3128 pixman="system"
3129 else
3130 pixman="internal"
3133 if test "$pixman" = "none"; then
3134 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3135 error_exit "pixman disabled but system emulation or tools build" \
3136 "enabled. You can turn off pixman only if you also" \
3137 "disable all system emulation targets and the tools" \
3138 "build with '--disable-tools --disable-system'."
3140 pixman_cflags=
3141 pixman_libs=
3142 elif test "$pixman" = "system"; then
3143 # pixman version has been checked above
3144 pixman_cflags=$($pkg_config --cflags pixman-1)
3145 pixman_libs=$($pkg_config --libs pixman-1)
3146 else
3147 if test ! -d ${source_path}/pixman/pixman; then
3148 error_exit "pixman >= 0.21.8 not present. Your options:" \
3149 " (1) Preferred: Install the pixman devel package (any recent" \
3150 " distro should have packages as Xorg needs pixman too)." \
3151 " (2) Fetch the pixman submodule, using:" \
3152 " git submodule update --init pixman"
3154 mkdir -p pixman/pixman
3155 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3156 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3159 ##########################################
3160 # libcap probe
3162 if test "$cap" != "no" ; then
3163 cat > $TMPC <<EOF
3164 #include <stdio.h>
3165 #include <sys/capability.h>
3166 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3168 if compile_prog "" "-lcap" ; then
3169 cap=yes
3170 else
3171 cap=no
3175 ##########################################
3176 # pthread probe
3177 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3179 pthread=no
3180 cat > $TMPC << EOF
3181 #include <pthread.h>
3182 static void *f(void *p) { return NULL; }
3183 int main(void) {
3184 pthread_t thread;
3185 pthread_create(&thread, 0, f, 0);
3186 return 0;
3189 if compile_prog "" "" ; then
3190 pthread=yes
3191 else
3192 for pthread_lib in $PTHREADLIBS_LIST; do
3193 if compile_prog "" "$pthread_lib" ; then
3194 pthread=yes
3195 found=no
3196 for lib_entry in $LIBS; do
3197 if test "$lib_entry" = "$pthread_lib"; then
3198 found=yes
3199 break
3201 done
3202 if test "$found" = "no"; then
3203 LIBS="$pthread_lib $LIBS"
3205 PTHREAD_LIB="$pthread_lib"
3206 break
3208 done
3211 if test "$mingw32" != yes -a "$pthread" = no; then
3212 error_exit "pthread check failed" \
3213 "Make sure to have the pthread libs and headers installed."
3216 # check for pthread_setname_np
3217 pthread_setname_np=no
3218 cat > $TMPC << EOF
3219 #include <pthread.h>
3221 static void *f(void *p) { return NULL; }
3222 int main(void)
3224 pthread_t thread;
3225 pthread_create(&thread, 0, f, 0);
3226 pthread_setname_np(thread, "QEMU");
3227 return 0;
3230 if compile_prog "" "$pthread_lib" ; then
3231 pthread_setname_np=yes
3234 ##########################################
3235 # rbd probe
3236 if test "$rbd" != "no" ; then
3237 cat > $TMPC <<EOF
3238 #include <stdio.h>
3239 #include <rbd/librbd.h>
3240 int main(void) {
3241 rados_t cluster;
3242 rados_create(&cluster, NULL);
3243 return 0;
3246 rbd_libs="-lrbd -lrados"
3247 if compile_prog "" "$rbd_libs" ; then
3248 rbd=yes
3249 else
3250 if test "$rbd" = "yes" ; then
3251 feature_not_found "rados block device" "Install librbd/ceph devel"
3253 rbd=no
3257 ##########################################
3258 # libssh2 probe
3259 min_libssh2_version=1.2.8
3260 if test "$libssh2" != "no" ; then
3261 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3262 libssh2_cflags=$($pkg_config libssh2 --cflags)
3263 libssh2_libs=$($pkg_config libssh2 --libs)
3264 libssh2=yes
3265 else
3266 if test "$libssh2" = "yes" ; then
3267 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3269 libssh2=no
3273 ##########################################
3274 # libssh2_sftp_fsync probe
3276 if test "$libssh2" = "yes"; then
3277 cat > $TMPC <<EOF
3278 #include <stdio.h>
3279 #include <libssh2.h>
3280 #include <libssh2_sftp.h>
3281 int main(void) {
3282 LIBSSH2_SESSION *session;
3283 LIBSSH2_SFTP *sftp;
3284 LIBSSH2_SFTP_HANDLE *sftp_handle;
3285 session = libssh2_session_init ();
3286 sftp = libssh2_sftp_init (session);
3287 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3288 libssh2_sftp_fsync (sftp_handle);
3289 return 0;
3292 # libssh2_cflags/libssh2_libs defined in previous test.
3293 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3294 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3298 ##########################################
3299 # linux-aio probe
3301 if test "$linux_aio" != "no" ; then
3302 cat > $TMPC <<EOF
3303 #include <libaio.h>
3304 #include <sys/eventfd.h>
3305 #include <stddef.h>
3306 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3308 if compile_prog "" "-laio" ; then
3309 linux_aio=yes
3310 else
3311 if test "$linux_aio" = "yes" ; then
3312 feature_not_found "linux AIO" "Install libaio devel"
3314 linux_aio=no
3318 ##########################################
3319 # TPM passthrough is only on x86 Linux
3321 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3322 tpm_passthrough=$tpm
3323 else
3324 tpm_passthrough=no
3327 ##########################################
3328 # attr probe
3330 if test "$attr" != "no" ; then
3331 cat > $TMPC <<EOF
3332 #include <stdio.h>
3333 #include <sys/types.h>
3334 #ifdef CONFIG_LIBATTR
3335 #include <attr/xattr.h>
3336 #else
3337 #include <sys/xattr.h>
3338 #endif
3339 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3341 if compile_prog "" "" ; then
3342 attr=yes
3343 # Older distros have <attr/xattr.h>, and need -lattr:
3344 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3345 attr=yes
3346 LIBS="-lattr $LIBS"
3347 libattr=yes
3348 else
3349 if test "$attr" = "yes" ; then
3350 feature_not_found "ATTR" "Install libc6 or libattr devel"
3352 attr=no
3356 ##########################################
3357 # iovec probe
3358 cat > $TMPC <<EOF
3359 #include <sys/types.h>
3360 #include <sys/uio.h>
3361 #include <unistd.h>
3362 int main(void) { return sizeof(struct iovec); }
3364 iovec=no
3365 if compile_prog "" "" ; then
3366 iovec=yes
3369 ##########################################
3370 # preadv probe
3371 cat > $TMPC <<EOF
3372 #include <sys/types.h>
3373 #include <sys/uio.h>
3374 #include <unistd.h>
3375 int main(void) { return preadv(0, 0, 0, 0); }
3377 preadv=no
3378 if compile_prog "" "" ; then
3379 preadv=yes
3382 ##########################################
3383 # fdt probe
3384 # fdt support is mandatory for at least some target architectures,
3385 # so insist on it if we're building those system emulators.
3386 fdt_required=no
3387 for target in $target_list; do
3388 case $target in
3389 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3390 fdt_required=yes
3392 esac
3393 done
3395 if test "$fdt_required" = "yes"; then
3396 if test "$fdt" = "no"; then
3397 error_exit "fdt disabled but some requested targets require it." \
3398 "You can turn off fdt only if you also disable all the system emulation" \
3399 "targets which need it (by specifying a cut down --target-list)."
3401 fdt=yes
3404 if test "$fdt" != "no" ; then
3405 fdt_libs="-lfdt"
3406 # explicitly check for libfdt_env.h as it is missing in some stable installs
3407 # and test for required functions to make sure we are on a version >= 1.4.0
3408 cat > $TMPC << EOF
3409 #include <libfdt.h>
3410 #include <libfdt_env.h>
3411 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3413 if compile_prog "" "$fdt_libs" ; then
3414 # system DTC is good - use it
3415 fdt=yes
3416 elif test -d ${source_path}/dtc/libfdt ; then
3417 # have submodule DTC - use it
3418 fdt=yes
3419 dtc_internal="yes"
3420 mkdir -p dtc
3421 if [ "$pwd_is_source_path" != "y" ] ; then
3422 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3423 symlink "$source_path/dtc/scripts" "dtc/scripts"
3425 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3426 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3427 elif test "$fdt" = "yes" ; then
3428 # have neither and want - prompt for system/submodule install
3429 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3430 " (1) Preferred: Install the DTC (libfdt) devel package" \
3431 " (2) Fetch the DTC submodule, using:" \
3432 " git submodule update --init dtc"
3433 else
3434 # don't have and don't want
3435 fdt_libs=
3436 fdt=no
3440 libs_softmmu="$libs_softmmu $fdt_libs"
3442 ##########################################
3443 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3445 if test "$opengl" != "no" ; then
3446 opengl_pkgs="epoxy libdrm gbm"
3447 if $pkg_config $opengl_pkgs x11; then
3448 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3449 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3450 opengl=yes
3451 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3452 gtk_gl="yes"
3454 else
3455 if test "$opengl" = "yes" ; then
3456 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3458 opengl_cflags=""
3459 opengl_libs=""
3460 opengl=no
3464 if test "$opengl" = "yes"; then
3465 cat > $TMPC << EOF
3466 #include <epoxy/egl.h>
3467 #ifndef EGL_MESA_image_dma_buf_export
3468 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3469 #endif
3470 int main(void) { return 0; }
3472 if compile_prog "" "" ; then
3473 opengl_dmabuf=yes
3477 ##########################################
3478 # archipelago probe
3479 if test "$archipelago" != "no" ; then
3480 cat > $TMPC <<EOF
3481 #include <stdio.h>
3482 #include <xseg/xseg.h>
3483 #include <xseg/protocol.h>
3484 int main(void) {
3485 xseg_initialize();
3486 return 0;
3489 archipelago_libs=-lxseg
3490 if compile_prog "" "$archipelago_libs"; then
3491 archipelago="yes"
3492 libs_tools="$archipelago_libs $libs_tools"
3493 libs_softmmu="$archipelago_libs $libs_softmmu"
3495 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3496 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3497 echo "license and therefore prevent redistribution."
3498 echo
3499 echo "To disable Archipelago, use --disable-archipelago"
3500 else
3501 if test "$archipelago" = "yes" ; then
3502 feature_not_found "Archipelago backend support" "Install libxseg devel"
3504 archipelago="no"
3509 ##########################################
3510 # glusterfs probe
3511 if test "$glusterfs" != "no" ; then
3512 if $pkg_config --atleast-version=3 glusterfs-api; then
3513 glusterfs="yes"
3514 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3515 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3516 if $pkg_config --atleast-version=4 glusterfs-api; then
3517 glusterfs_xlator_opt="yes"
3519 if $pkg_config --atleast-version=5 glusterfs-api; then
3520 glusterfs_discard="yes"
3522 if $pkg_config --atleast-version=6 glusterfs-api; then
3523 glusterfs_zerofill="yes"
3525 else
3526 if test "$glusterfs" = "yes" ; then
3527 feature_not_found "GlusterFS backend support" \
3528 "Install glusterfs-api devel >= 3"
3530 glusterfs="no"
3534 # Check for inotify functions when we are building linux-user
3535 # emulator. This is done because older glibc versions don't
3536 # have syscall stubs for these implemented. In that case we
3537 # don't provide them even if kernel supports them.
3539 inotify=no
3540 cat > $TMPC << EOF
3541 #include <sys/inotify.h>
3544 main(void)
3546 /* try to start inotify */
3547 return inotify_init();
3550 if compile_prog "" "" ; then
3551 inotify=yes
3554 inotify1=no
3555 cat > $TMPC << EOF
3556 #include <sys/inotify.h>
3559 main(void)
3561 /* try to start inotify */
3562 return inotify_init1(0);
3565 if compile_prog "" "" ; then
3566 inotify1=yes
3569 # check if utimensat and futimens are supported
3570 utimens=no
3571 cat > $TMPC << EOF
3572 #define _ATFILE_SOURCE
3573 #include <stddef.h>
3574 #include <fcntl.h>
3575 #include <sys/stat.h>
3577 int main(void)
3579 utimensat(AT_FDCWD, "foo", NULL, 0);
3580 futimens(0, NULL);
3581 return 0;
3584 if compile_prog "" "" ; then
3585 utimens=yes
3588 # check if pipe2 is there
3589 pipe2=no
3590 cat > $TMPC << EOF
3591 #include <unistd.h>
3592 #include <fcntl.h>
3594 int main(void)
3596 int pipefd[2];
3597 return pipe2(pipefd, O_CLOEXEC);
3600 if compile_prog "" "" ; then
3601 pipe2=yes
3604 # check if accept4 is there
3605 accept4=no
3606 cat > $TMPC << EOF
3607 #include <sys/socket.h>
3608 #include <stddef.h>
3610 int main(void)
3612 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3613 return 0;
3616 if compile_prog "" "" ; then
3617 accept4=yes
3620 # check if tee/splice is there. vmsplice was added same time.
3621 splice=no
3622 cat > $TMPC << EOF
3623 #include <unistd.h>
3624 #include <fcntl.h>
3625 #include <limits.h>
3627 int main(void)
3629 int len, fd = 0;
3630 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3631 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3632 return 0;
3635 if compile_prog "" "" ; then
3636 splice=yes
3639 ##########################################
3640 # libnuma probe
3642 if test "$numa" != "no" ; then
3643 cat > $TMPC << EOF
3644 #include <numa.h>
3645 int main(void) { return numa_available(); }
3648 if compile_prog "" "-lnuma" ; then
3649 numa=yes
3650 libs_softmmu="-lnuma $libs_softmmu"
3651 else
3652 if test "$numa" = "yes" ; then
3653 feature_not_found "numa" "install numactl devel"
3655 numa=no
3659 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3660 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3661 exit 1
3664 ##########################################
3665 # tcmalloc probe
3667 if test "$tcmalloc" = "yes" ; then
3668 cat > $TMPC << EOF
3669 #include <stdlib.h>
3670 int main(void) { malloc(1); return 0; }
3673 if compile_prog "" "-ltcmalloc" ; then
3674 LIBS="-ltcmalloc $LIBS"
3675 else
3676 feature_not_found "tcmalloc" "install gperftools devel"
3680 ##########################################
3681 # jemalloc probe
3683 if test "$jemalloc" = "yes" ; then
3684 cat > $TMPC << EOF
3685 #include <stdlib.h>
3686 int main(void) { malloc(1); return 0; }
3689 if compile_prog "" "-ljemalloc" ; then
3690 LIBS="-ljemalloc $LIBS"
3691 else
3692 feature_not_found "jemalloc" "install jemalloc devel"
3696 ##########################################
3697 # signalfd probe
3698 signalfd="no"
3699 cat > $TMPC << EOF
3700 #include <unistd.h>
3701 #include <sys/syscall.h>
3702 #include <signal.h>
3703 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3706 if compile_prog "" "" ; then
3707 signalfd=yes
3710 # check if eventfd is supported
3711 eventfd=no
3712 cat > $TMPC << EOF
3713 #include <sys/eventfd.h>
3715 int main(void)
3717 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3720 if compile_prog "" "" ; then
3721 eventfd=yes
3724 # check if memfd is supported
3725 memfd=no
3726 cat > $TMPC << EOF
3727 #include <sys/memfd.h>
3729 int main(void)
3731 return memfd_create("foo", MFD_ALLOW_SEALING);
3734 if compile_prog "" "" ; then
3735 memfd=yes
3740 # check for fallocate
3741 fallocate=no
3742 cat > $TMPC << EOF
3743 #include <fcntl.h>
3745 int main(void)
3747 fallocate(0, 0, 0, 0);
3748 return 0;
3751 if compile_prog "" "" ; then
3752 fallocate=yes
3755 # check for fallocate hole punching
3756 fallocate_punch_hole=no
3757 cat > $TMPC << EOF
3758 #include <fcntl.h>
3759 #include <linux/falloc.h>
3761 int main(void)
3763 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3764 return 0;
3767 if compile_prog "" "" ; then
3768 fallocate_punch_hole=yes
3771 # check that fallocate supports range zeroing inside the file
3772 fallocate_zero_range=no
3773 cat > $TMPC << EOF
3774 #include <fcntl.h>
3775 #include <linux/falloc.h>
3777 int main(void)
3779 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3780 return 0;
3783 if compile_prog "" "" ; then
3784 fallocate_zero_range=yes
3787 # check for posix_fallocate
3788 posix_fallocate=no
3789 cat > $TMPC << EOF
3790 #include <fcntl.h>
3792 int main(void)
3794 posix_fallocate(0, 0, 0);
3795 return 0;
3798 if compile_prog "" "" ; then
3799 posix_fallocate=yes
3802 # check for sync_file_range
3803 sync_file_range=no
3804 cat > $TMPC << EOF
3805 #include <fcntl.h>
3807 int main(void)
3809 sync_file_range(0, 0, 0, 0);
3810 return 0;
3813 if compile_prog "" "" ; then
3814 sync_file_range=yes
3817 # check for linux/fiemap.h and FS_IOC_FIEMAP
3818 fiemap=no
3819 cat > $TMPC << EOF
3820 #include <sys/ioctl.h>
3821 #include <linux/fs.h>
3822 #include <linux/fiemap.h>
3824 int main(void)
3826 ioctl(0, FS_IOC_FIEMAP, 0);
3827 return 0;
3830 if compile_prog "" "" ; then
3831 fiemap=yes
3834 # check for dup3
3835 dup3=no
3836 cat > $TMPC << EOF
3837 #include <unistd.h>
3839 int main(void)
3841 dup3(0, 0, 0);
3842 return 0;
3845 if compile_prog "" "" ; then
3846 dup3=yes
3849 # check for ppoll support
3850 ppoll=no
3851 cat > $TMPC << EOF
3852 #include <poll.h>
3854 int main(void)
3856 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3857 ppoll(&pfd, 1, 0, 0);
3858 return 0;
3861 if compile_prog "" "" ; then
3862 ppoll=yes
3865 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3866 prctl_pr_set_timerslack=no
3867 cat > $TMPC << EOF
3868 #include <sys/prctl.h>
3870 int main(void)
3872 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3873 return 0;
3876 if compile_prog "" "" ; then
3877 prctl_pr_set_timerslack=yes
3880 # check for epoll support
3881 epoll=no
3882 cat > $TMPC << EOF
3883 #include <sys/epoll.h>
3885 int main(void)
3887 epoll_create(0);
3888 return 0;
3891 if compile_prog "" "" ; then
3892 epoll=yes
3895 # epoll_create1 is a later addition
3896 # so we must check separately for its presence
3897 epoll_create1=no
3898 cat > $TMPC << EOF
3899 #include <sys/epoll.h>
3901 int main(void)
3903 /* Note that we use epoll_create1 as a value, not as
3904 * a function being called. This is necessary so that on
3905 * old SPARC glibc versions where the function was present in
3906 * the library but not declared in the header file we will
3907 * fail the configure check. (Otherwise we will get a compiler
3908 * warning but not an error, and will proceed to fail the
3909 * qemu compile where we compile with -Werror.)
3911 return (int)(uintptr_t)&epoll_create1;
3914 if compile_prog "" "" ; then
3915 epoll_create1=yes
3918 # check for sendfile support
3919 sendfile=no
3920 cat > $TMPC << EOF
3921 #include <sys/sendfile.h>
3923 int main(void)
3925 return sendfile(0, 0, 0, 0);
3928 if compile_prog "" "" ; then
3929 sendfile=yes
3932 # check for timerfd support (glibc 2.8 and newer)
3933 timerfd=no
3934 cat > $TMPC << EOF
3935 #include <sys/timerfd.h>
3937 int main(void)
3939 return(timerfd_create(CLOCK_REALTIME, 0));
3942 if compile_prog "" "" ; then
3943 timerfd=yes
3946 # check for setns and unshare support
3947 setns=no
3948 cat > $TMPC << EOF
3949 #include <sched.h>
3951 int main(void)
3953 int ret;
3954 ret = setns(0, 0);
3955 ret = unshare(0);
3956 return ret;
3959 if compile_prog "" "" ; then
3960 setns=yes
3963 # Check if tools are available to build documentation.
3964 if test "$docs" != "no" ; then
3965 if has makeinfo && has pod2man; then
3966 docs=yes
3967 else
3968 if test "$docs" = "yes" ; then
3969 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3971 docs=no
3975 if test "$want_tools" = ""; then
3976 if test $(expr "$target_list" : ".*softmmu.*") != 0; then
3977 want_tools=yes
3978 else
3979 want_tools=no
3983 # Search for bswap_32 function
3984 byteswap_h=no
3985 cat > $TMPC << EOF
3986 #include <byteswap.h>
3987 int main(void) { return bswap_32(0); }
3989 if compile_prog "" "" ; then
3990 byteswap_h=yes
3993 # Search for bswap32 function
3994 bswap_h=no
3995 cat > $TMPC << EOF
3996 #include <sys/endian.h>
3997 #include <sys/types.h>
3998 #include <machine/bswap.h>
3999 int main(void) { return bswap32(0); }
4001 if compile_prog "" "" ; then
4002 bswap_h=yes
4005 ##########################################
4006 # Do we have libiscsi >= 1.9.0
4007 if test "$libiscsi" != "no" ; then
4008 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4009 libiscsi="yes"
4010 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4011 libiscsi_libs=$($pkg_config --libs libiscsi)
4012 else
4013 if test "$libiscsi" = "yes" ; then
4014 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4016 libiscsi="no"
4020 ##########################################
4021 # Do we need libm
4022 cat > $TMPC << EOF
4023 #include <math.h>
4024 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4026 if compile_prog "" "" ; then
4028 elif compile_prog "" "-lm" ; then
4029 LIBS="-lm $LIBS"
4030 libs_qga="-lm $libs_qga"
4031 else
4032 error_exit "libm check failed"
4035 ##########################################
4036 # Do we need librt
4037 # uClibc provides 2 versions of clock_gettime(), one with realtime
4038 # support and one without. This means that the clock_gettime() don't
4039 # need -lrt. We still need it for timer_create() so we check for this
4040 # function in addition.
4041 cat > $TMPC <<EOF
4042 #include <signal.h>
4043 #include <time.h>
4044 int main(void) {
4045 timer_create(CLOCK_REALTIME, NULL, NULL);
4046 return clock_gettime(CLOCK_REALTIME, NULL);
4050 if compile_prog "" "" ; then
4052 # we need pthread for static linking. use previous pthread test result
4053 elif compile_prog "" "$pthread_lib -lrt" ; then
4054 LIBS="$LIBS -lrt"
4055 libs_qga="$libs_qga -lrt"
4058 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4059 "$aix" != "yes" -a "$haiku" != "yes" ; then
4060 libs_softmmu="-lutil $libs_softmmu"
4063 ##########################################
4064 # spice probe
4065 if test "$spice" != "no" ; then
4066 cat > $TMPC << EOF
4067 #include <spice.h>
4068 int main(void) { spice_server_new(); return 0; }
4070 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4071 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4072 if $pkg_config --atleast-version=0.12.0 spice-server && \
4073 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4074 compile_prog "$spice_cflags" "$spice_libs" ; then
4075 spice="yes"
4076 libs_softmmu="$libs_softmmu $spice_libs"
4077 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4078 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4079 spice_server_version=$($pkg_config --modversion spice-server)
4080 else
4081 if test "$spice" = "yes" ; then
4082 feature_not_found "spice" \
4083 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4085 spice="no"
4089 # check for smartcard support
4090 smartcard_cflags=""
4091 if test "$smartcard" != "no"; then
4092 if $pkg_config libcacard; then
4093 libcacard_cflags=$($pkg_config --cflags libcacard)
4094 libcacard_libs=$($pkg_config --libs libcacard)
4095 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4096 libs_softmmu="$libs_softmmu $libcacard_libs"
4097 smartcard="yes"
4098 else
4099 if test "$smartcard" = "yes"; then
4100 feature_not_found "smartcard" "Install libcacard devel"
4102 smartcard="no"
4106 # check for libusb
4107 if test "$libusb" != "no" ; then
4108 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4109 libusb="yes"
4110 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4111 libusb_libs=$($pkg_config --libs libusb-1.0)
4112 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4113 libs_softmmu="$libs_softmmu $libusb_libs"
4114 else
4115 if test "$libusb" = "yes"; then
4116 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4118 libusb="no"
4122 # check for usbredirparser for usb network redirection support
4123 if test "$usb_redir" != "no" ; then
4124 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4125 usb_redir="yes"
4126 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4127 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4128 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4129 libs_softmmu="$libs_softmmu $usb_redir_libs"
4130 else
4131 if test "$usb_redir" = "yes"; then
4132 feature_not_found "usb-redir" "Install usbredir devel"
4134 usb_redir="no"
4138 ##########################################
4139 # check if we have VSS SDK headers for win
4141 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4142 case "$vss_win32_sdk" in
4143 "") vss_win32_include="-isystem $source_path" ;;
4144 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4145 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4146 vss_win32_include="-isystem $source_path/.sdk/vss"
4147 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4149 *) vss_win32_include="-isystem $vss_win32_sdk"
4150 esac
4151 cat > $TMPC << EOF
4152 #define __MIDL_user_allocate_free_DEFINED__
4153 #include <inc/win2003/vss.h>
4154 int main(void) { return VSS_CTX_BACKUP; }
4156 if compile_prog "$vss_win32_include" "" ; then
4157 guest_agent_with_vss="yes"
4158 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4159 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4160 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4161 else
4162 if test "$vss_win32_sdk" != "" ; then
4163 echo "ERROR: Please download and install Microsoft VSS SDK:"
4164 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4165 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4166 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4167 echo "ERROR: The headers are extracted in the directory \`inc'."
4168 feature_not_found "VSS support"
4170 guest_agent_with_vss="no"
4174 ##########################################
4175 # lookup Windows platform SDK (if not specified)
4176 # The SDK is needed only to build .tlb (type library) file of guest agent
4177 # VSS provider from the source. It is usually unnecessary because the
4178 # pre-compiled .tlb file is included.
4180 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4181 if test -z "$win_sdk"; then
4182 programfiles="$PROGRAMFILES"
4183 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4184 if test -n "$programfiles"; then
4185 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4186 else
4187 feature_not_found "Windows SDK"
4189 elif test "$win_sdk" = "no"; then
4190 win_sdk=""
4194 ##########################################
4195 # check if mingw environment provides a recent ntddscsi.h
4196 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4197 cat > $TMPC << EOF
4198 #include <windows.h>
4199 #include <ntddscsi.h>
4200 int main(void) {
4201 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4202 #error Missing required ioctl definitions
4203 #endif
4204 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4205 return addr.Lun;
4208 if compile_prog "" "" ; then
4209 guest_agent_ntddscsi=yes
4210 libs_qga="-lsetupapi $libs_qga"
4214 ##########################################
4215 # virgl renderer probe
4217 if test "$virglrenderer" != "no" ; then
4218 cat > $TMPC << EOF
4219 #include <virglrenderer.h>
4220 int main(void) { virgl_renderer_poll(); return 0; }
4222 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4223 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4224 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4225 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4226 virglrenderer="yes"
4227 else
4228 if test "$virglrenderer" = "yes" ; then
4229 feature_not_found "virglrenderer"
4231 virglrenderer="no"
4235 ##########################################
4236 # check if we have fdatasync
4238 fdatasync=no
4239 cat > $TMPC << EOF
4240 #include <unistd.h>
4241 int main(void) {
4242 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4243 return fdatasync(0);
4244 #else
4245 #error Not supported
4246 #endif
4249 if compile_prog "" "" ; then
4250 fdatasync=yes
4253 ##########################################
4254 # check if we have madvise
4256 madvise=no
4257 cat > $TMPC << EOF
4258 #include <sys/types.h>
4259 #include <sys/mman.h>
4260 #include <stddef.h>
4261 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4263 if compile_prog "" "" ; then
4264 madvise=yes
4267 ##########################################
4268 # check if we have posix_madvise
4270 posix_madvise=no
4271 cat > $TMPC << EOF
4272 #include <sys/mman.h>
4273 #include <stddef.h>
4274 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4276 if compile_prog "" "" ; then
4277 posix_madvise=yes
4280 ##########################################
4281 # check if we have posix_syslog
4283 posix_syslog=no
4284 cat > $TMPC << EOF
4285 #include <syslog.h>
4286 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4288 if compile_prog "" "" ; then
4289 posix_syslog=yes
4292 ##########################################
4293 # check if trace backend exists
4295 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4296 if test "$?" -ne 0 ; then
4297 error_exit "invalid trace backends" \
4298 "Please choose supported trace backends."
4301 ##########################################
4302 # For 'ust' backend, test if ust headers are present
4303 if have_backend "ust"; then
4304 cat > $TMPC << EOF
4305 #include <lttng/tracepoint.h>
4306 int main(void) { return 0; }
4308 if compile_prog "" "" ; then
4309 if $pkg_config lttng-ust --exists; then
4310 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4311 else
4312 lttng_ust_libs="-llttng-ust"
4314 if $pkg_config liburcu-bp --exists; then
4315 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4316 else
4317 urcu_bp_libs="-lurcu-bp"
4320 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4321 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4322 else
4323 error_exit "Trace backend 'ust' missing lttng-ust header files"
4327 ##########################################
4328 # For 'dtrace' backend, test if 'dtrace' command is present
4329 if have_backend "dtrace"; then
4330 if ! has 'dtrace' ; then
4331 error_exit "dtrace command is not found in PATH $PATH"
4333 trace_backend_stap="no"
4334 if has 'stap' ; then
4335 trace_backend_stap="yes"
4339 ##########################################
4340 # check and set a backend for coroutine
4342 # We prefer ucontext, but it's not always possible. The fallback
4343 # is sigcontext. gthread is not selectable except explicitly, because
4344 # it is not functional enough to run QEMU proper. (It is occasionally
4345 # useful for debugging purposes.) On Windows the only valid backend
4346 # is the Windows-specific one.
4348 ucontext_works=no
4349 if test "$darwin" != "yes"; then
4350 cat > $TMPC << EOF
4351 #include <ucontext.h>
4352 #ifdef __stub_makecontext
4353 #error Ignoring glibc stub makecontext which will always fail
4354 #endif
4355 int main(void) { makecontext(0, 0, 0); return 0; }
4357 if compile_prog "" "" ; then
4358 ucontext_works=yes
4362 if test "$coroutine" = ""; then
4363 if test "$mingw32" = "yes"; then
4364 coroutine=win32
4365 elif test "$ucontext_works" = "yes"; then
4366 coroutine=ucontext
4367 else
4368 coroutine=sigaltstack
4370 else
4371 case $coroutine in
4372 windows)
4373 if test "$mingw32" != "yes"; then
4374 error_exit "'windows' coroutine backend only valid for Windows"
4376 # Unfortunately the user visible backend name doesn't match the
4377 # coroutine-*.c filename for this case, so we have to adjust it here.
4378 coroutine=win32
4380 ucontext)
4381 if test "$ucontext_works" != "yes"; then
4382 feature_not_found "ucontext"
4385 gthread|sigaltstack)
4386 if test "$mingw32" = "yes"; then
4387 error_exit "only the 'windows' coroutine backend is valid for Windows"
4391 error_exit "unknown coroutine backend $coroutine"
4393 esac
4396 if test "$coroutine_pool" = ""; then
4397 if test "$coroutine" = "gthread" -o "$coroutine" = "win32"; then
4398 coroutine_pool=no
4399 else
4400 coroutine_pool=yes
4403 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4404 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4407 if test "$debug_stack_usage" = "yes"; then
4408 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4409 error_exit "stack usage debugging is not supported for $cpu"
4411 if test "$coroutine_pool" = "yes"; then
4412 echo "WARN: disabling coroutine pool for stack usage debugging"
4413 coroutine_pool=no
4418 ##########################################
4419 # check if we have open_by_handle_at
4421 open_by_handle_at=no
4422 cat > $TMPC << EOF
4423 #include <fcntl.h>
4424 #if !defined(AT_EMPTY_PATH)
4425 # error missing definition
4426 #else
4427 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4428 #endif
4430 if compile_prog "" "" ; then
4431 open_by_handle_at=yes
4434 ########################################
4435 # check if we have linux/magic.h
4437 linux_magic_h=no
4438 cat > $TMPC << EOF
4439 #include <linux/magic.h>
4440 int main(void) {
4441 return 0;
4444 if compile_prog "" "" ; then
4445 linux_magic_h=yes
4448 ########################################
4449 # check whether we can disable warning option with a pragma (this is needed
4450 # to silence warnings in the headers of some versions of external libraries).
4451 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4452 # only a warning.
4454 # If we can't selectively disable warning in the code, disable -Werror so that
4455 # the build doesn't fail anyway.
4457 pragma_disable_unused_but_set=no
4458 cat > $TMPC << EOF
4459 #pragma GCC diagnostic push
4460 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4461 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4462 #pragma GCC diagnostic pop
4464 int main(void) {
4465 return 0;
4468 if compile_prog "-Werror" "" ; then
4469 pragma_diagnostic_available=yes
4472 ########################################
4473 # check if we have valgrind/valgrind.h
4475 valgrind_h=no
4476 cat > $TMPC << EOF
4477 #include <valgrind/valgrind.h>
4478 int main(void) {
4479 return 0;
4482 if compile_prog "" "" ; then
4483 valgrind_h=yes
4486 ########################################
4487 # check if environ is declared
4489 has_environ=no
4490 cat > $TMPC << EOF
4491 #include <unistd.h>
4492 int main(void) {
4493 environ = 0;
4494 return 0;
4497 if compile_prog "" "" ; then
4498 has_environ=yes
4501 ########################################
4502 # check if cpuid.h is usable.
4504 cpuid_h=no
4505 cat > $TMPC << EOF
4506 #include <cpuid.h>
4507 int main(void) {
4508 unsigned a, b, c, d;
4509 int max = __get_cpuid_max(0, 0);
4511 if (max >= 1) {
4512 __cpuid(1, a, b, c, d);
4515 if (max >= 7) {
4516 __cpuid_count(7, 0, a, b, c, d);
4519 return 0;
4522 if compile_prog "" "" ; then
4523 cpuid_h=yes
4526 ########################################
4527 # check if __[u]int128_t is usable.
4529 int128=no
4530 cat > $TMPC << EOF
4531 #if defined(__clang_major__) && defined(__clang_minor__)
4532 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4533 # error __int128_t does not work in CLANG before 3.2
4534 # endif
4535 #endif
4536 __int128_t a;
4537 __uint128_t b;
4538 int main (void) {
4539 a = a + b;
4540 b = a * b;
4541 a = a * a;
4542 return 0;
4545 if compile_prog "" "" ; then
4546 int128=yes
4549 ########################################
4550 # check if getauxval is available.
4552 getauxval=no
4553 cat > $TMPC << EOF
4554 #include <sys/auxv.h>
4555 int main(void) {
4556 return getauxval(AT_HWCAP) == 0;
4559 if compile_prog "" "" ; then
4560 getauxval=yes
4563 ########################################
4564 # check if ccache is interfering with
4565 # semantic analysis of macros
4567 unset CCACHE_CPP2
4568 ccache_cpp2=no
4569 cat > $TMPC << EOF
4570 static const int Z = 1;
4571 #define fn() ({ Z; })
4572 #define TAUT(X) ((X) == Z)
4573 #define PAREN(X, Y) (X == Y)
4574 #define ID(X) (X)
4575 int main(int argc, char *argv[])
4577 int x = 0, y = 0;
4578 x = ID(x);
4579 x = fn();
4580 fn();
4581 if (PAREN(x, y)) return 0;
4582 if (TAUT(Z)) return 0;
4583 return 0;
4587 if ! compile_object "-Werror"; then
4588 ccache_cpp2=yes
4591 #################################################
4592 # clang does not support glibc + FORTIFY_SOURCE.
4594 if test "$fortify_source" != "no"; then
4595 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4596 fortify_source="no";
4597 elif test -n "$cxx" &&
4598 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4599 fortify_source="no";
4600 else
4601 fortify_source="yes"
4605 ##########################################
4606 # check if struct fsxattr is available via linux/fs.h
4608 have_fsxattr=no
4609 cat > $TMPC << EOF
4610 #include <linux/fs.h>
4611 struct fsxattr foo;
4612 int main(void) {
4613 return 0;
4616 if compile_prog "" "" ; then
4617 have_fsxattr=yes
4620 ##########################################
4621 # check if rtnetlink.h exists and is useful
4622 have_rtnetlink=no
4623 cat > $TMPC << EOF
4624 #include <linux/rtnetlink.h>
4625 int main(void) {
4626 return IFLA_PROTO_DOWN;
4629 if compile_prog "" "" ; then
4630 have_rtnetlink=yes
4633 #################################################
4634 # Sparc implicitly links with --relax, which is
4635 # incompatible with -r, so --no-relax should be
4636 # given. It does no harm to give it on other
4637 # platforms too.
4639 # Note: the prototype is needed since QEMU_CFLAGS
4640 # contains -Wmissing-prototypes
4641 cat > $TMPC << EOF
4642 extern int foo(void);
4643 int foo(void) { return 0; }
4645 if ! compile_object ""; then
4646 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4648 if do_cc -nostdlib -Wl,-r -Wl,--no-relax -o $TMPMO $TMPO; then
4649 LD_REL_FLAGS="-Wl,--no-relax"
4652 ##########################################
4653 # End of CC checks
4654 # After here, no more $cc or $ld runs
4656 if test "$gcov" = "yes" ; then
4657 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4658 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4659 elif test "$fortify_source" = "yes" ; then
4660 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4661 elif test "$debug" = "no"; then
4662 CFLAGS="-O2 $CFLAGS"
4665 ##########################################
4666 # Do we have libnfs
4667 if test "$libnfs" != "no" ; then
4668 if $pkg_config --atleast-version=1.9.3 libnfs; then
4669 libnfs="yes"
4670 libnfs_libs=$($pkg_config --libs libnfs)
4671 else
4672 if test "$libnfs" = "yes" ; then
4673 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4675 libnfs="no"
4679 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4680 if test "$werror" = "yes"; then
4681 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4684 if test "$solaris" = "no" ; then
4685 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4686 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4690 # test if pod2man has --utf8 option
4691 if pod2man --help | grep -q utf8; then
4692 POD2MAN="pod2man --utf8"
4693 else
4694 POD2MAN="pod2man"
4697 # Use large addresses, ASLR, no-SEH and DEP if available.
4698 if test "$mingw32" = "yes" ; then
4699 if test "$cpu" = i386; then
4700 LDFLAGS="-Wl,--large-address-aware $LDFLAGS"
4702 for flag in --dynamicbase --no-seh --nxcompat; do
4703 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4704 LDFLAGS="-Wl,$flag $LDFLAGS"
4706 done
4709 qemu_confdir=$sysconfdir$confsuffix
4710 qemu_moddir=$libdir$confsuffix
4711 qemu_datadir=$datadir$confsuffix
4712 qemu_localedir="$datadir/locale"
4714 tools=""
4715 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4716 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4717 tools="qemu-nbd\$(EXESUF) $tools"
4718 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4720 if test "$softmmu" = yes ; then
4721 if test "$virtfs" != no ; then
4722 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4723 virtfs=yes
4724 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4725 else
4726 if test "$virtfs" = yes; then
4727 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
4729 virtfs=no
4734 # Probe for guest agent support/options
4736 if [ "$guest_agent" != "no" ]; then
4737 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4738 tools="qemu-ga $tools"
4739 guest_agent=yes
4740 elif [ "$guest_agent" != yes ]; then
4741 guest_agent=no
4742 else
4743 error_exit "Guest agent is not supported on this platform"
4747 # Guest agent Window MSI package
4749 if test "$guest_agent" != yes; then
4750 if test "$guest_agent_msi" = yes; then
4751 error_exit "MSI guest agent package requires guest agent enabled"
4753 guest_agent_msi=no
4754 elif test "$mingw32" != "yes"; then
4755 if test "$guest_agent_msi" = "yes"; then
4756 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4758 guest_agent_msi=no
4759 elif ! has wixl; then
4760 if test "$guest_agent_msi" = "yes"; then
4761 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4763 guest_agent_msi=no
4764 else
4765 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4766 # disabled explicitly
4767 if test "$guest_agent_msi" != "no"; then
4768 guest_agent_msi=yes
4772 if test "$guest_agent_msi" = "yes"; then
4773 if test "$guest_agent_with_vss" = "yes"; then
4774 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4777 if test "$QEMU_GA_MANUFACTURER" = ""; then
4778 QEMU_GA_MANUFACTURER=QEMU
4781 if test "$QEMU_GA_DISTRO" = ""; then
4782 QEMU_GA_DISTRO=Linux
4785 if test "$QEMU_GA_VERSION" = ""; then
4786 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4789 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
4791 case "$cpu" in
4792 x86_64)
4793 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4795 i386)
4796 QEMU_GA_MSI_ARCH="-D Arch=32"
4799 error_exit "CPU $cpu not supported for building installation package"
4801 esac
4804 # Mac OS X ships with a broken assembler
4805 roms=
4806 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4807 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4808 "$softmmu" = yes ; then
4809 # Different host OS linkers have different ideas about the name of the ELF
4810 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
4811 # variant; and Windows uses i386pe.
4812 for emu in elf_i386 elf_i386_fbsd i386pe; do
4813 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4814 ld_i386_emulation="$emu"
4815 roms="optionrom"
4816 break
4818 done
4820 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4821 roms="$roms spapr-rtas"
4824 if test "$cpu" = "s390x" ; then
4825 roms="$roms s390-ccw"
4828 # Probe for the need for relocating the user-only binary.
4829 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
4830 textseg_addr=
4831 case "$cpu" in
4832 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4833 # ??? Rationale for choosing this address
4834 textseg_addr=0x60000000
4836 mips)
4837 # A 256M aligned address, high in the address space, with enough
4838 # room for the code_gen_buffer above it before the stack.
4839 textseg_addr=0x60000000
4841 esac
4842 if [ -n "$textseg_addr" ]; then
4843 cat > $TMPC <<EOF
4844 int main(void) { return 0; }
4846 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4847 if ! compile_prog "" "$textseg_ldflags"; then
4848 # In case ld does not support -Ttext-segment, edit the default linker
4849 # script via sed to set the .text start addr. This is needed on FreeBSD
4850 # at least.
4851 if ! $ld --verbose >/dev/null 2>&1; then
4852 error_exit \
4853 "We need to link the QEMU user mode binaries at a" \
4854 "specific text address. Unfortunately your linker" \
4855 "doesn't support either the -Ttext-segment option or" \
4856 "printing the default linker script with --verbose." \
4857 "If you don't want the user mode binaries, pass the" \
4858 "--disable-user option to configure."
4861 $ld --verbose | sed \
4862 -e '1,/==================================================/d' \
4863 -e '/==================================================/,$d' \
4864 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4865 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4866 textseg_ldflags="-Wl,-T../config-host.ld"
4871 echo_version() {
4872 if test "$1" = "yes" ; then
4873 echo "($2)"
4877 # prepend pixman and ftd flags after all config tests are done
4878 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4879 libs_softmmu="$pixman_libs $libs_softmmu"
4881 echo "Install prefix $prefix"
4882 echo "BIOS directory $(eval echo $qemu_datadir)"
4883 echo "binary directory $(eval echo $bindir)"
4884 echo "library directory $(eval echo $libdir)"
4885 echo "module directory $(eval echo $qemu_moddir)"
4886 echo "libexec directory $(eval echo $libexecdir)"
4887 echo "include directory $(eval echo $includedir)"
4888 echo "config directory $(eval echo $sysconfdir)"
4889 if test "$mingw32" = "no" ; then
4890 echo "local state directory $(eval echo $local_statedir)"
4891 echo "Manual directory $(eval echo $mandir)"
4892 echo "ELF interp prefix $interp_prefix"
4893 else
4894 echo "local state directory queried at runtime"
4895 echo "Windows SDK $win_sdk"
4897 echo "Source path $source_path"
4898 echo "C compiler $cc"
4899 echo "Host C compiler $host_cc"
4900 echo "C++ compiler $cxx"
4901 echo "Objective-C compiler $objcc"
4902 echo "ARFLAGS $ARFLAGS"
4903 echo "CFLAGS $CFLAGS"
4904 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4905 echo "LDFLAGS $LDFLAGS"
4906 echo "make $make"
4907 echo "install $install"
4908 echo "python $python"
4909 if test "$slirp" = "yes" ; then
4910 echo "smbd $smbd"
4912 echo "module support $modules"
4913 echo "host CPU $cpu"
4914 echo "host big endian $bigendian"
4915 echo "target list $target_list"
4916 echo "tcg debug enabled $debug_tcg"
4917 echo "gprof enabled $gprof"
4918 echo "sparse enabled $sparse"
4919 echo "strip binaries $strip_opt"
4920 echo "profiler $profiler"
4921 echo "static build $static"
4922 if test "$darwin" = "yes" ; then
4923 echo "Cocoa support $cocoa"
4925 echo "pixman $pixman"
4926 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
4927 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
4928 echo "GTK GL support $gtk_gl"
4929 echo "VTE support $vte $(echo_version $vte $vteversion)"
4930 echo "TLS priority $tls_priority"
4931 echo "GNUTLS support $gnutls"
4932 echo "GNUTLS rnd $gnutls_rnd"
4933 if test "$gcrypt" = "yes"; then
4934 echo "encryption libgcrypt"
4935 echo "libgcrypt kdf $gcrypt_kdf"
4936 elif test "$nettle" = "yes"; then
4937 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
4938 else
4939 echo "encryption none"
4941 echo "nettle kdf $nettle_kdf"
4942 echo "libtasn1 $tasn1"
4943 echo "curses support $curses"
4944 echo "virgl support $virglrenderer"
4945 echo "curl support $curl"
4946 echo "mingw32 support $mingw32"
4947 echo "Audio drivers $audio_drv_list"
4948 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4949 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4950 echo "VirtFS support $virtfs"
4951 echo "VNC support $vnc"
4952 if test "$vnc" = "yes" ; then
4953 echo "VNC SASL support $vnc_sasl"
4954 echo "VNC JPEG support $vnc_jpeg"
4955 echo "VNC PNG support $vnc_png"
4957 if test -n "$sparc_cpu"; then
4958 echo "Target Sparc Arch $sparc_cpu"
4960 echo "xen support $xen"
4961 if test "$xen" = "yes" ; then
4962 echo "xen ctrl version $xen_ctrl_version"
4963 echo "pv dom build $xen_pv_domain_build"
4965 echo "brlapi support $brlapi"
4966 echo "bluez support $bluez"
4967 echo "Documentation $docs"
4968 echo "Tools $tools"
4969 echo "PIE $pie"
4970 echo "vde support $vde"
4971 echo "netmap support $netmap"
4972 echo "Linux AIO support $linux_aio"
4973 echo "(X)ATTR support $attr"
4974 echo "Install blobs $blobs"
4975 echo "KVM support $kvm"
4976 echo "RDMA support $rdma"
4977 echo "TCG interpreter $tcg_interpreter"
4978 echo "fdt support $fdt"
4979 echo "preadv support $preadv"
4980 echo "fdatasync $fdatasync"
4981 echo "madvise $madvise"
4982 echo "posix_madvise $posix_madvise"
4983 echo "libcap-ng support $cap_ng"
4984 echo "vhost-net support $vhost_net"
4985 echo "vhost-scsi support $vhost_scsi"
4986 echo "vhost-vsock support $vhost_vsock"
4987 echo "Trace backends $trace_backends"
4988 if have_backend "simple"; then
4989 echo "Trace output file $trace_file-<pid>"
4991 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
4992 echo "rbd support $rbd"
4993 echo "xfsctl support $xfs"
4994 echo "smartcard support $smartcard"
4995 echo "libusb $libusb"
4996 echo "usb net redir $usb_redir"
4997 echo "OpenGL support $opengl"
4998 echo "OpenGL dmabufs $opengl_dmabuf"
4999 echo "libiscsi support $libiscsi"
5000 echo "libnfs support $libnfs"
5001 echo "build guest agent $guest_agent"
5002 echo "QGA VSS support $guest_agent_with_vss"
5003 echo "QGA w32 disk info $guest_agent_ntddscsi"
5004 echo "QGA MSI support $guest_agent_msi"
5005 echo "seccomp support $seccomp"
5006 echo "coroutine backend $coroutine"
5007 echo "coroutine pool $coroutine_pool"
5008 echo "debug stack usage $debug_stack_usage"
5009 echo "GlusterFS support $glusterfs"
5010 echo "Archipelago support $archipelago"
5011 echo "gcov $gcov_tool"
5012 echo "gcov enabled $gcov"
5013 echo "TPM support $tpm"
5014 echo "libssh2 support $libssh2"
5015 echo "TPM passthrough $tpm_passthrough"
5016 echo "QOM debugging $qom_cast_debug"
5017 echo "lzo support $lzo"
5018 echo "snappy support $snappy"
5019 echo "bzip2 support $bzip2"
5020 echo "NUMA host support $numa"
5021 echo "tcmalloc support $tcmalloc"
5022 echo "jemalloc support $jemalloc"
5023 echo "avx2 optimization $avx2_opt"
5024 echo "replication support $replication"
5026 if test "$sdl_too_old" = "yes"; then
5027 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5030 config_host_mak="config-host.mak"
5032 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5034 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5035 echo >> $config_host_mak
5037 echo all: >> $config_host_mak
5038 echo "prefix=$prefix" >> $config_host_mak
5039 echo "bindir=$bindir" >> $config_host_mak
5040 echo "libdir=$libdir" >> $config_host_mak
5041 echo "libexecdir=$libexecdir" >> $config_host_mak
5042 echo "includedir=$includedir" >> $config_host_mak
5043 echo "mandir=$mandir" >> $config_host_mak
5044 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5045 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5046 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5047 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5048 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5049 if test "$mingw32" = "no" ; then
5050 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5052 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5053 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5054 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5055 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5056 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5058 echo "ARCH=$ARCH" >> $config_host_mak
5060 if test "$debug_tcg" = "yes" ; then
5061 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5063 if test "$strip_opt" = "yes" ; then
5064 echo "STRIP=${strip}" >> $config_host_mak
5066 if test "$bigendian" = "yes" ; then
5067 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5069 if test "$mingw32" = "yes" ; then
5070 echo "CONFIG_WIN32=y" >> $config_host_mak
5071 echo "CONFIG_INSTALLER=y" >> $config_host_mak
5072 rc_version=$(cat $source_path/VERSION)
5073 version_major=${rc_version%%.*}
5074 rc_version=${rc_version#*.}
5075 version_minor=${rc_version%%.*}
5076 rc_version=${rc_version#*.}
5077 version_subminor=${rc_version%%.*}
5078 version_micro=0
5079 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5080 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5081 if test "$guest_agent_with_vss" = "yes" ; then
5082 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5083 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5084 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5086 if test "$guest_agent_ntddscsi" = "yes" ; then
5087 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5089 if test "$guest_agent_msi" = "yes"; then
5090 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5091 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5092 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5093 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5094 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5095 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5096 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5098 else
5099 echo "CONFIG_POSIX=y" >> $config_host_mak
5102 if test "$linux" = "yes" ; then
5103 echo "CONFIG_LINUX=y" >> $config_host_mak
5106 if test "$darwin" = "yes" ; then
5107 echo "CONFIG_DARWIN=y" >> $config_host_mak
5110 if test "$aix" = "yes" ; then
5111 echo "CONFIG_AIX=y" >> $config_host_mak
5114 if test "$solaris" = "yes" ; then
5115 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5116 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
5117 if test "$needs_libsunmath" = "yes" ; then
5118 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
5121 if test "$haiku" = "yes" ; then
5122 echo "CONFIG_HAIKU=y" >> $config_host_mak
5124 if test "$static" = "yes" ; then
5125 echo "CONFIG_STATIC=y" >> $config_host_mak
5127 if test "$profiler" = "yes" ; then
5128 echo "CONFIG_PROFILER=y" >> $config_host_mak
5130 if test "$slirp" = "yes" ; then
5131 echo "CONFIG_SLIRP=y" >> $config_host_mak
5132 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5134 if test "$vde" = "yes" ; then
5135 echo "CONFIG_VDE=y" >> $config_host_mak
5137 if test "$netmap" = "yes" ; then
5138 echo "CONFIG_NETMAP=y" >> $config_host_mak
5140 if test "$l2tpv3" = "yes" ; then
5141 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5143 if test "$cap_ng" = "yes" ; then
5144 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5146 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5147 for drv in $audio_drv_list; do
5148 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5149 echo "$def=y" >> $config_host_mak
5150 done
5151 if test "$audio_pt_int" = "yes" ; then
5152 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5154 if test "$audio_win_int" = "yes" ; then
5155 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5157 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5158 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5159 if test "$vnc" = "yes" ; then
5160 echo "CONFIG_VNC=y" >> $config_host_mak
5162 if test "$vnc_sasl" = "yes" ; then
5163 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5165 if test "$vnc_jpeg" = "yes" ; then
5166 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5168 if test "$vnc_png" = "yes" ; then
5169 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5171 if test "$fnmatch" = "yes" ; then
5172 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5174 if test "$xfs" = "yes" ; then
5175 echo "CONFIG_XFS=y" >> $config_host_mak
5177 qemu_version=$(head $source_path/VERSION)
5178 echo "VERSION=$qemu_version" >>$config_host_mak
5179 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5180 echo "SRC_PATH=$source_path" >> $config_host_mak
5181 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5182 if [ "$docs" = "yes" ] ; then
5183 echo "BUILD_DOCS=yes" >> $config_host_mak
5185 if [ "$want_tools" = "yes" ] ; then
5186 echo "BUILD_TOOLS=yes" >> $config_host_mak
5188 if test "$modules" = "yes"; then
5189 # $shacmd can generate a hash started with digit, which the compiler doesn't
5190 # like as an symbol. So prefix it with an underscore
5191 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5192 echo "CONFIG_MODULES=y" >> $config_host_mak
5194 if test "$sdl" = "yes" ; then
5195 echo "CONFIG_SDL=y" >> $config_host_mak
5196 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5197 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5199 if test "$cocoa" = "yes" ; then
5200 echo "CONFIG_COCOA=y" >> $config_host_mak
5202 if test "$curses" = "yes" ; then
5203 echo "CONFIG_CURSES=y" >> $config_host_mak
5205 if test "$utimens" = "yes" ; then
5206 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
5208 if test "$pipe2" = "yes" ; then
5209 echo "CONFIG_PIPE2=y" >> $config_host_mak
5211 if test "$accept4" = "yes" ; then
5212 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5214 if test "$splice" = "yes" ; then
5215 echo "CONFIG_SPLICE=y" >> $config_host_mak
5217 if test "$eventfd" = "yes" ; then
5218 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5220 if test "$memfd" = "yes" ; then
5221 echo "CONFIG_MEMFD=y" >> $config_host_mak
5223 if test "$fallocate" = "yes" ; then
5224 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5226 if test "$fallocate_punch_hole" = "yes" ; then
5227 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5229 if test "$fallocate_zero_range" = "yes" ; then
5230 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5232 if test "$posix_fallocate" = "yes" ; then
5233 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5235 if test "$sync_file_range" = "yes" ; then
5236 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5238 if test "$fiemap" = "yes" ; then
5239 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5241 if test "$dup3" = "yes" ; then
5242 echo "CONFIG_DUP3=y" >> $config_host_mak
5244 if test "$ppoll" = "yes" ; then
5245 echo "CONFIG_PPOLL=y" >> $config_host_mak
5247 if test "$prctl_pr_set_timerslack" = "yes" ; then
5248 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5250 if test "$epoll" = "yes" ; then
5251 echo "CONFIG_EPOLL=y" >> $config_host_mak
5253 if test "$epoll_create1" = "yes" ; then
5254 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5256 if test "$sendfile" = "yes" ; then
5257 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5259 if test "$timerfd" = "yes" ; then
5260 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5262 if test "$setns" = "yes" ; then
5263 echo "CONFIG_SETNS=y" >> $config_host_mak
5265 if test "$inotify" = "yes" ; then
5266 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5268 if test "$inotify1" = "yes" ; then
5269 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5271 if test "$byteswap_h" = "yes" ; then
5272 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5274 if test "$bswap_h" = "yes" ; then
5275 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5277 if test "$curl" = "yes" ; then
5278 echo "CONFIG_CURL=m" >> $config_host_mak
5279 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5280 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5282 if test "$brlapi" = "yes" ; then
5283 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5285 if test "$bluez" = "yes" ; then
5286 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5287 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5289 if test "$glib_subprocess" = "yes" ; then
5290 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5292 if test "$gtk" = "yes" ; then
5293 echo "CONFIG_GTK=y" >> $config_host_mak
5294 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5295 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5296 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5297 if test "$gtk_gl" = "yes" ; then
5298 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5301 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5302 if test "$gnutls" = "yes" ; then
5303 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5305 if test "$gnutls_rnd" = "yes" ; then
5306 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5308 if test "$gcrypt" = "yes" ; then
5309 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5310 if test "$gcrypt_kdf" = "yes" ; then
5311 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5314 if test "$nettle" = "yes" ; then
5315 echo "CONFIG_NETTLE=y" >> $config_host_mak
5316 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5317 if test "$nettle_kdf" = "yes" ; then
5318 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5321 if test "$tasn1" = "yes" ; then
5322 echo "CONFIG_TASN1=y" >> $config_host_mak
5324 if test "$have_ifaddrs_h" = "yes" ; then
5325 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5327 if test "$have_broken_size_max" = "yes" ; then
5328 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5331 # Work around a system header bug with some kernel/XFS header
5332 # versions where they both try to define 'struct fsxattr':
5333 # xfs headers will not try to redefine structs from linux headers
5334 # if this macro is set.
5335 if test "$have_fsxattr" = "yes" ; then
5336 echo "HAVE_FSXATTR=y" >> $config_host_mak
5338 if test "$vte" = "yes" ; then
5339 echo "CONFIG_VTE=y" >> $config_host_mak
5340 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5342 if test "$virglrenderer" = "yes" ; then
5343 echo "CONFIG_VIRGL=y" >> $config_host_mak
5344 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5345 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5347 if test "$xen" = "yes" ; then
5348 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5349 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5350 if test "$xen_pv_domain_build" = "yes" ; then
5351 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5354 if test "$linux_aio" = "yes" ; then
5355 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5357 if test "$attr" = "yes" ; then
5358 echo "CONFIG_ATTR=y" >> $config_host_mak
5360 if test "$libattr" = "yes" ; then
5361 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5363 if test "$virtfs" = "yes" ; then
5364 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5366 if test "$vhost_scsi" = "yes" ; then
5367 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5369 if test "$vhost_net" = "yes" ; then
5370 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5372 if test "$vhost_vsock" = "yes" ; then
5373 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5375 if test "$blobs" = "yes" ; then
5376 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5378 if test "$iovec" = "yes" ; then
5379 echo "CONFIG_IOVEC=y" >> $config_host_mak
5381 if test "$preadv" = "yes" ; then
5382 echo "CONFIG_PREADV=y" >> $config_host_mak
5384 if test "$fdt" = "yes" ; then
5385 echo "CONFIG_FDT=y" >> $config_host_mak
5387 if test "$signalfd" = "yes" ; then
5388 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5390 if test "$tcg_interpreter" = "yes" ; then
5391 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5393 if test "$fdatasync" = "yes" ; then
5394 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5396 if test "$madvise" = "yes" ; then
5397 echo "CONFIG_MADVISE=y" >> $config_host_mak
5399 if test "$posix_madvise" = "yes" ; then
5400 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5403 if test "$spice" = "yes" ; then
5404 echo "CONFIG_SPICE=y" >> $config_host_mak
5407 if test "$smartcard" = "yes" ; then
5408 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5411 if test "$libusb" = "yes" ; then
5412 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5415 if test "$usb_redir" = "yes" ; then
5416 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5419 if test "$opengl" = "yes" ; then
5420 echo "CONFIG_OPENGL=y" >> $config_host_mak
5421 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5422 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5423 if test "$opengl_dmabuf" = "yes" ; then
5424 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5428 if test "$avx2_opt" = "yes" ; then
5429 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5432 if test "$lzo" = "yes" ; then
5433 echo "CONFIG_LZO=y" >> $config_host_mak
5436 if test "$snappy" = "yes" ; then
5437 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5440 if test "$bzip2" = "yes" ; then
5441 echo "CONFIG_BZIP2=y" >> $config_host_mak
5442 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5445 if test "$libiscsi" = "yes" ; then
5446 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5447 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5448 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5451 if test "$libnfs" = "yes" ; then
5452 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5453 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
5456 if test "$seccomp" = "yes"; then
5457 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5460 # XXX: suppress that
5461 if [ "$bsd" = "yes" ] ; then
5462 echo "CONFIG_BSD=y" >> $config_host_mak
5465 if test "$localtime_r" = "yes" ; then
5466 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5468 if test "$qom_cast_debug" = "yes" ; then
5469 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5471 if test "$rbd" = "yes" ; then
5472 echo "CONFIG_RBD=m" >> $config_host_mak
5473 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5474 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5477 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5478 if test "$coroutine_pool" = "yes" ; then
5479 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5480 else
5481 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5484 if test "$debug_stack_usage" = "yes" ; then
5485 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5488 if test "$open_by_handle_at" = "yes" ; then
5489 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5492 if test "$linux_magic_h" = "yes" ; then
5493 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5496 if test "$pragma_diagnostic_available" = "yes" ; then
5497 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5500 if test "$valgrind_h" = "yes" ; then
5501 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5504 if test "$has_environ" = "yes" ; then
5505 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5508 if test "$cpuid_h" = "yes" ; then
5509 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5512 if test "$int128" = "yes" ; then
5513 echo "CONFIG_INT128=y" >> $config_host_mak
5516 if test "$getauxval" = "yes" ; then
5517 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5520 if test "$glusterfs" = "yes" ; then
5521 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5522 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5523 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5526 if test "$glusterfs_xlator_opt" = "yes" ; then
5527 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5530 if test "$glusterfs_discard" = "yes" ; then
5531 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5534 if test "$glusterfs_zerofill" = "yes" ; then
5535 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5538 if test "$archipelago" = "yes" ; then
5539 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5540 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5543 if test "$libssh2" = "yes" ; then
5544 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5545 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5546 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5549 # USB host support
5550 if test "$libusb" = "yes"; then
5551 echo "HOST_USB=libusb legacy" >> $config_host_mak
5552 else
5553 echo "HOST_USB=stub" >> $config_host_mak
5556 # TPM passthrough support?
5557 if test "$tpm" = "yes"; then
5558 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5559 if test "$tpm_passthrough" = "yes"; then
5560 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5564 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5565 if have_backend "nop"; then
5566 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5568 if have_backend "simple"; then
5569 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5570 # Set the appropriate trace file.
5571 trace_file="\"$trace_file-\" FMT_pid"
5573 if have_backend "log"; then
5574 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5576 if have_backend "ust"; then
5577 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5579 if have_backend "dtrace"; then
5580 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5581 if test "$trace_backend_stap" = "yes" ; then
5582 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5585 if have_backend "ftrace"; then
5586 if test "$linux" = "yes" ; then
5587 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5588 else
5589 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5592 if have_backend "syslog"; then
5593 if test "$posix_syslog" = "yes" ; then
5594 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5595 else
5596 feature_not_found "syslog(trace backend)" "syslog not available"
5599 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5601 if test "$rdma" = "yes" ; then
5602 echo "CONFIG_RDMA=y" >> $config_host_mak
5605 if test "$have_rtnetlink" = "yes" ; then
5606 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5609 if test "$replication" = "yes" ; then
5610 echo "CONFIG_REPLICATION=y" >> $config_host_mak
5613 # Hold two types of flag:
5614 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5615 # a thread we have a handle to
5616 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5617 # platform
5618 if test "$pthread_setname_np" = "yes" ; then
5619 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5620 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5623 if test "$tcg_interpreter" = "yes"; then
5624 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5625 elif test "$ARCH" = "sparc64" ; then
5626 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5627 elif test "$ARCH" = "s390x" ; then
5628 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5629 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5630 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5631 elif test "$ARCH" = "ppc64" ; then
5632 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5633 else
5634 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5636 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5638 echo "TOOLS=$tools" >> $config_host_mak
5639 echo "ROMS=$roms" >> $config_host_mak
5640 echo "MAKE=$make" >> $config_host_mak
5641 echo "INSTALL=$install" >> $config_host_mak
5642 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5643 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5644 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5645 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5646 echo "PYTHON=$python" >> $config_host_mak
5647 echo "CC=$cc" >> $config_host_mak
5648 if $iasl -h > /dev/null 2>&1; then
5649 echo "IASL=$iasl" >> $config_host_mak
5651 echo "CC_I386=$cc_i386" >> $config_host_mak
5652 echo "HOST_CC=$host_cc" >> $config_host_mak
5653 echo "CXX=$cxx" >> $config_host_mak
5654 echo "OBJCC=$objcc" >> $config_host_mak
5655 echo "AR=$ar" >> $config_host_mak
5656 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5657 echo "AS=$as" >> $config_host_mak
5658 echo "CCAS=$ccas" >> $config_host_mak
5659 echo "CPP=$cpp" >> $config_host_mak
5660 echo "OBJCOPY=$objcopy" >> $config_host_mak
5661 echo "LD=$ld" >> $config_host_mak
5662 echo "NM=$nm" >> $config_host_mak
5663 echo "WINDRES=$windres" >> $config_host_mak
5664 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5665 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5666 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5667 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5668 if test "$sparse" = "yes" ; then
5669 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5670 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5671 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5672 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5673 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5675 if test "$cross_prefix" != ""; then
5676 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5677 else
5678 echo "AUTOCONF_HOST := " >> $config_host_mak
5680 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5681 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5682 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
5683 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
5684 echo "LIBS+=$LIBS" >> $config_host_mak
5685 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5686 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
5687 echo "EXESUF=$EXESUF" >> $config_host_mak
5688 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5689 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5690 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5691 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5692 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5693 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5694 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5695 if test "$gcov" = "yes" ; then
5696 echo "CONFIG_GCOV=y" >> $config_host_mak
5697 echo "GCOV=$gcov_tool" >> $config_host_mak
5700 # use included Linux headers
5701 if test "$linux" = "yes" ; then
5702 mkdir -p linux-headers
5703 case "$cpu" in
5704 i386|x86_64|x32)
5705 linux_arch=x86
5707 ppcemb|ppc|ppc64)
5708 linux_arch=powerpc
5710 s390x)
5711 linux_arch=s390
5713 aarch64)
5714 linux_arch=arm64
5716 mips64)
5717 linux_arch=mips
5720 # For most CPUs the kernel architecture name and QEMU CPU name match.
5721 linux_arch="$cpu"
5723 esac
5724 # For non-KVM architectures we will not have asm headers
5725 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5726 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5730 for target in $target_list; do
5731 target_dir="$target"
5732 config_target_mak=$target_dir/config-target.mak
5733 target_name=$(echo $target | cut -d '-' -f 1)
5734 target_bigendian="no"
5736 case "$target_name" in
5737 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5738 target_bigendian=yes
5740 esac
5741 target_softmmu="no"
5742 target_user_only="no"
5743 target_linux_user="no"
5744 target_bsd_user="no"
5745 case "$target" in
5746 ${target_name}-softmmu)
5747 target_softmmu="yes"
5749 ${target_name}-linux-user)
5750 if test "$linux" != "yes" ; then
5751 error_exit "Target '$target' is only available on a Linux host"
5753 target_user_only="yes"
5754 target_linux_user="yes"
5756 ${target_name}-bsd-user)
5757 if test "$bsd" != "yes" ; then
5758 error_exit "Target '$target' is only available on a BSD host"
5760 target_user_only="yes"
5761 target_bsd_user="yes"
5764 error_exit "Target '$target' not recognised"
5765 exit 1
5767 esac
5769 mkdir -p $target_dir
5770 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5772 bflt="no"
5773 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
5774 gdb_xml_files=""
5776 TARGET_ARCH="$target_name"
5777 TARGET_BASE_ARCH=""
5778 TARGET_ABI_DIR=""
5780 case "$target_name" in
5781 i386)
5783 x86_64)
5784 TARGET_BASE_ARCH=i386
5786 alpha)
5788 arm|armeb)
5789 TARGET_ARCH=arm
5790 bflt="yes"
5791 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5793 aarch64)
5794 TARGET_BASE_ARCH=arm
5795 bflt="yes"
5796 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5798 cris)
5800 lm32)
5802 m68k)
5803 bflt="yes"
5804 gdb_xml_files="cf-core.xml cf-fp.xml"
5806 microblaze|microblazeel)
5807 TARGET_ARCH=microblaze
5808 bflt="yes"
5810 mips|mipsel)
5811 TARGET_ARCH=mips
5812 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5814 mipsn32|mipsn32el)
5815 TARGET_ARCH=mips64
5816 TARGET_BASE_ARCH=mips
5817 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5818 echo "TARGET_ABI32=y" >> $config_target_mak
5820 mips64|mips64el)
5821 TARGET_ARCH=mips64
5822 TARGET_BASE_ARCH=mips
5823 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5825 moxie)
5827 or32)
5828 TARGET_ARCH=openrisc
5829 TARGET_BASE_ARCH=openrisc
5831 ppc)
5832 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5834 ppcemb)
5835 TARGET_BASE_ARCH=ppc
5836 TARGET_ABI_DIR=ppc
5837 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5839 ppc64)
5840 TARGET_BASE_ARCH=ppc
5841 TARGET_ABI_DIR=ppc
5842 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5844 ppc64le)
5845 TARGET_ARCH=ppc64
5846 TARGET_BASE_ARCH=ppc
5847 TARGET_ABI_DIR=ppc
5848 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5850 ppc64abi32)
5851 TARGET_ARCH=ppc64
5852 TARGET_BASE_ARCH=ppc
5853 TARGET_ABI_DIR=ppc
5854 echo "TARGET_ABI32=y" >> $config_target_mak
5855 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5857 sh4|sh4eb)
5858 TARGET_ARCH=sh4
5859 bflt="yes"
5861 sparc)
5863 sparc64)
5864 TARGET_BASE_ARCH=sparc
5866 sparc32plus)
5867 TARGET_ARCH=sparc64
5868 TARGET_BASE_ARCH=sparc
5869 TARGET_ABI_DIR=sparc
5870 echo "TARGET_ABI32=y" >> $config_target_mak
5872 s390x)
5873 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
5875 tilegx)
5877 tricore)
5879 unicore32)
5881 xtensa|xtensaeb)
5882 TARGET_ARCH=xtensa
5885 error_exit "Unsupported target CPU"
5887 esac
5888 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5889 if [ "$TARGET_BASE_ARCH" = "" ]; then
5890 TARGET_BASE_ARCH=$TARGET_ARCH
5893 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5895 upper() {
5896 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5899 target_arch_name="$(upper $TARGET_ARCH)"
5900 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5901 echo "TARGET_NAME=$target_name" >> $config_target_mak
5902 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5903 if [ "$TARGET_ABI_DIR" = "" ]; then
5904 TARGET_ABI_DIR=$TARGET_ARCH
5906 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5907 if [ "$HOST_VARIANT_DIR" != "" ]; then
5908 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5910 case "$target_name" in
5911 i386|x86_64)
5912 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5913 echo "CONFIG_XEN=y" >> $config_target_mak
5914 if test "$xen_pci_passthrough" = yes; then
5915 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5920 esac
5921 case "$target_name" in
5922 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5923 # Make sure the target and host cpus are compatible
5924 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5925 \( "$target_name" = "$cpu" -o \
5926 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5927 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5928 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5929 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5930 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5931 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5932 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5933 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5934 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5935 echo "CONFIG_KVM=y" >> $config_target_mak
5936 if test "$vhost_net" = "yes" ; then
5937 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5938 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
5941 esac
5942 if test "$target_bigendian" = "yes" ; then
5943 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5945 if test "$target_softmmu" = "yes" ; then
5946 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5948 if test "$target_user_only" = "yes" ; then
5949 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5950 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5952 if test "$target_linux_user" = "yes" ; then
5953 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5955 list=""
5956 if test ! -z "$gdb_xml_files" ; then
5957 for x in $gdb_xml_files; do
5958 list="$list $source_path/gdb-xml/$x"
5959 done
5960 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5963 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5964 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5966 if test "$target_bsd_user" = "yes" ; then
5967 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5970 # generate QEMU_CFLAGS/LDFLAGS for targets
5972 cflags=""
5973 ldflags=""
5975 disas_config() {
5976 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5977 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5980 for i in $ARCH $TARGET_BASE_ARCH ; do
5981 case "$i" in
5982 alpha)
5983 disas_config "ALPHA"
5985 aarch64)
5986 if test -n "${cxx}"; then
5987 disas_config "ARM_A64"
5990 arm)
5991 disas_config "ARM"
5992 if test -n "${cxx}"; then
5993 disas_config "ARM_A64"
5996 cris)
5997 disas_config "CRIS"
5999 i386|x86_64|x32)
6000 disas_config "I386"
6002 ia64*)
6003 disas_config "IA64"
6005 lm32)
6006 disas_config "LM32"
6008 m68k)
6009 disas_config "M68K"
6011 microblaze*)
6012 disas_config "MICROBLAZE"
6014 mips*)
6015 disas_config "MIPS"
6017 moxie*)
6018 disas_config "MOXIE"
6020 or32)
6021 disas_config "OPENRISC"
6023 ppc*)
6024 disas_config "PPC"
6026 s390*)
6027 disas_config "S390"
6029 sh4)
6030 disas_config "SH4"
6032 sparc*)
6033 disas_config "SPARC"
6035 xtensa*)
6036 disas_config "XTENSA"
6038 esac
6039 done
6040 if test "$tcg_interpreter" = "yes" ; then
6041 disas_config "TCI"
6044 case "$ARCH" in
6045 alpha)
6046 # Ensure there's only a single GP
6047 cflags="-msmall-data $cflags"
6049 esac
6051 if test "$gprof" = "yes" ; then
6052 echo "TARGET_GPROF=yes" >> $config_target_mak
6053 if test "$target_linux_user" = "yes" ; then
6054 cflags="-p $cflags"
6055 ldflags="-p $ldflags"
6057 if test "$target_softmmu" = "yes" ; then
6058 ldflags="-p $ldflags"
6059 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6063 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6064 ldflags="$ldflags $textseg_ldflags"
6067 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6068 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6070 done # for target in $targets
6072 if [ "$pixman" = "internal" ]; then
6073 echo "config-host.h: subdir-pixman" >> $config_host_mak
6076 if [ "$dtc_internal" = "yes" ]; then
6077 echo "config-host.h: subdir-dtc" >> $config_host_mak
6080 if test "$numa" = "yes"; then
6081 echo "CONFIG_NUMA=y" >> $config_host_mak
6084 if test "$ccache_cpp2" = "yes"; then
6085 echo "export CCACHE_CPP2=y" >> $config_host_mak
6088 # build tree in object directory in case the source is not in the current directory
6089 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
6090 DIRS="$DIRS fsdev"
6091 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6092 DIRS="$DIRS roms/seabios roms/vgabios"
6093 DIRS="$DIRS qapi-generated"
6094 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6095 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6096 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6097 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6098 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6099 FILES="$FILES pc-bios/s390-ccw/Makefile"
6100 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6101 FILES="$FILES pc-bios/qemu-icon.bmp"
6102 for bios_file in \
6103 $source_path/pc-bios/*.bin \
6104 $source_path/pc-bios/*.aml \
6105 $source_path/pc-bios/*.rom \
6106 $source_path/pc-bios/*.dtb \
6107 $source_path/pc-bios/*.img \
6108 $source_path/pc-bios/openbios-* \
6109 $source_path/pc-bios/u-boot.* \
6110 $source_path/pc-bios/palcode-*
6112 FILES="$FILES pc-bios/$(basename $bios_file)"
6113 done
6114 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6116 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6117 done
6118 mkdir -p $DIRS
6119 for f in $FILES ; do
6120 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6121 symlink "$source_path/$f" "$f"
6123 done
6125 # temporary config to build submodules
6126 for rom in seabios vgabios ; do
6127 config_mak=roms/$rom/config.mak
6128 echo "# Automatically generated by configure - do not modify" > $config_mak
6129 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6130 echo "AS=$as" >> $config_mak
6131 echo "CCAS=$ccas" >> $config_mak
6132 echo "CC=$cc" >> $config_mak
6133 echo "BCC=bcc" >> $config_mak
6134 echo "CPP=$cpp" >> $config_mak
6135 echo "OBJCOPY=objcopy" >> $config_mak
6136 echo "IASL=$iasl" >> $config_mak
6137 echo "LD=$ld" >> $config_mak
6138 done
6140 # set up tests data directory
6141 if [ ! -e tests/data ]; then
6142 symlink "$source_path/tests/data" tests/data
6145 # set up qemu-iotests in this build directory
6146 iotests_common_env="tests/qemu-iotests/common.env"
6147 iotests_check="tests/qemu-iotests/check"
6149 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6150 echo >> "$iotests_common_env"
6151 echo "export PYTHON='$python'" >> "$iotests_common_env"
6153 if [ ! -e "$iotests_check" ]; then
6154 symlink "$source_path/$iotests_check" "$iotests_check"
6157 # Save the configure command line for later reuse.
6158 cat <<EOD >config.status
6159 #!/bin/sh
6160 # Generated by configure.
6161 # Run this file to recreate the current configuration.
6162 # Compiler output produced by configure, useful for debugging
6163 # configure, is in config.log if it exists.
6165 printf "exec" >>config.status
6166 printf " '%s'" "$0" "$@" >>config.status
6167 echo ' "$@"' >>config.status
6168 chmod +x config.status
6170 rm -r "$TMPDIR1"