oslib-win32: Change return type of function getpagesize
[qemu/ar7.git] / configure
blobc0f026b6bd66f574fa0a04be13798e57e127d649
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"
35 rm -f config.log
37 # Print a helpful header at the top of config.log
38 echo "# QEMU configure log $(date)" >> config.log
39 printf "# Configured with:" >> config.log
40 printf " '%s'" "$0" "$@" >> config.log
41 echo >> config.log
42 echo "#" >> config.log
44 error_exit() {
45 echo
46 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
51 echo
52 exit 1
55 do_compiler() {
56 # Run the compiler, capturing its output to the log. First argument
57 # is compiler binary to execute.
58 local compiler="$1"
59 shift
60 echo $compiler "$@" >> config.log
61 $compiler "$@" >> config.log 2>&1 || return $?
62 # Test passed. If this is an --enable-werror build, rerun
63 # the test with -Werror and bail out if it fails. This
64 # makes warning-generating-errors in configure test code
65 # obvious to developers.
66 if test "$werror" != "yes"; then
67 return 0
69 # Don't bother rerunning the compile if we were already using -Werror
70 case "$*" in
71 *-Werror*)
72 return 0
74 esac
75 echo $compiler -Werror "$@" >> config.log
76 $compiler -Werror "$@" >> config.log 2>&1 && return $?
77 error_exit "configure test passed without -Werror but failed with -Werror." \
78 "This is probably a bug in the configure script. The failing command" \
79 "will be at the bottom of config.log." \
80 "You can run configure with --disable-werror to bypass this check."
83 do_cc() {
84 do_compiler "$cc" "$@"
87 do_cxx() {
88 do_compiler "$cxx" "$@"
91 update_cxxflags() {
92 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
93 # options which some versions of GCC's C++ compiler complain about
94 # because they only make sense for C programs.
95 QEMU_CXXFLAGS=
96 for arg in $QEMU_CFLAGS; do
97 case $arg in
98 -Wno-override-init|\
99 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
100 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
103 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
105 esac
106 done
109 compile_object() {
110 local_cflags="$1"
111 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
114 compile_prog() {
115 local_cflags="$1"
116 local_ldflags="$2"
117 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
120 do_libtool() {
121 local mode=$1
122 shift
123 # Run the compiler, capturing its output to the log.
124 echo $libtool $mode --tag=CC $cc "$@" >> config.log
125 $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
126 # Test passed. If this is an --enable-werror build, rerun
127 # the test with -Werror and bail out if it fails. This
128 # makes warning-generating-errors in configure test code
129 # obvious to developers.
130 if test "$werror" != "yes"; then
131 return 0
133 # Don't bother rerunning the compile if we were already using -Werror
134 case "$*" in
135 *-Werror*)
136 return 0
138 esac
139 echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
140 $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
141 error_exit "configure test passed without -Werror but failed with -Werror." \
142 "This is probably a bug in the configure script. The failing command" \
143 "will be at the bottom of config.log." \
144 "You can run configure with --disable-werror to bypass this check."
147 libtool_prog() {
148 do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
149 do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
152 # symbolically link $1 to $2. Portable version of "ln -sf".
153 symlink() {
154 rm -rf "$2"
155 mkdir -p "$(dirname "$2")"
156 ln -s "$1" "$2"
159 # check whether a command is available to this shell (may be either an
160 # executable or a builtin)
161 has() {
162 type "$1" >/dev/null 2>&1
165 # search for an executable in PATH
166 path_of() {
167 local_command="$1"
168 local_ifs="$IFS"
169 local_dir=""
171 # pathname has a dir component?
172 if [ "${local_command#*/}" != "$local_command" ]; then
173 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
174 echo "$local_command"
175 return 0
178 if [ -z "$local_command" ]; then
179 return 1
182 IFS=:
183 for local_dir in $PATH; do
184 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
185 echo "$local_dir/$local_command"
186 IFS="${local_ifs:-$(printf ' \t\n')}"
187 return 0
189 done
190 # not found
191 IFS="${local_ifs:-$(printf ' \t\n')}"
192 return 1
195 have_backend () {
196 echo "$trace_backends" | grep "$1" >/dev/null
199 # default parameters
200 source_path=`dirname "$0"`
201 cpu=""
202 iasl="iasl"
203 interp_prefix="/usr/gnemul/qemu-%M"
204 static="no"
205 cross_prefix=""
206 audio_drv_list=""
207 block_drv_rw_whitelist=""
208 block_drv_ro_whitelist=""
209 host_cc="cc"
210 libs_softmmu=""
211 libs_tools=""
212 audio_pt_int=""
213 audio_win_int=""
214 cc_i386=i386-pc-linux-gnu-gcc
215 libs_qga=""
216 debug_info="yes"
217 stack_protector=""
219 # Don't accept a target_list environment variable.
220 unset target_list
222 # Default value for a variable defining feature "foo".
223 # * foo="no" feature will only be used if --enable-foo arg is given
224 # * foo="" feature will be searched for, and if found, will be used
225 # unless --disable-foo is given
226 # * foo="yes" this value will only be set by --enable-foo flag.
227 # feature will searched for,
228 # if not found, configure exits with error
230 # Always add --enable-foo and --disable-foo command line args.
231 # Distributions want to ensure that several features are compiled in, and it
232 # is impossible without a --enable-foo that exits if a feature is not found.
234 bluez=""
235 brlapi=""
236 curl=""
237 curses=""
238 docs=""
239 fdt=""
240 netmap="no"
241 pixman=""
242 sdl=""
243 sdlabi="1.2"
244 virtfs=""
245 vnc="yes"
246 sparse="no"
247 uuid=""
248 vde=""
249 vnc_sasl=""
250 vnc_jpeg=""
251 vnc_png=""
252 xen=""
253 xen_ctrl_version=""
254 xen_pci_passthrough=""
255 linux_aio=""
256 cap_ng=""
257 attr=""
258 libattr=""
259 xfs=""
261 vhost_net="no"
262 vhost_scsi="no"
263 kvm="no"
264 rdma=""
265 gprof="no"
266 debug_tcg="no"
267 debug="no"
268 fortify_source=""
269 strip_opt="yes"
270 tcg_interpreter="no"
271 bigendian="no"
272 mingw32="no"
273 gcov="no"
274 gcov_tool="gcov"
275 EXESUF=""
276 DSOSUF=".so"
277 LDFLAGS_SHARED="-shared"
278 modules="no"
279 prefix="/usr/local"
280 mandir="\${prefix}/share/man"
281 datadir="\${prefix}/share"
282 qemu_docdir="\${prefix}/share/doc/qemu"
283 bindir="\${prefix}/bin"
284 libdir="\${prefix}/lib"
285 libexecdir="\${prefix}/libexec"
286 includedir="\${prefix}/include"
287 sysconfdir="\${prefix}/etc"
288 local_statedir="\${prefix}/var"
289 confsuffix="/qemu"
290 slirp="yes"
291 oss_lib=""
292 bsd="no"
293 haiku="no"
294 linux="no"
295 solaris="no"
296 profiler="no"
297 cocoa="no"
298 softmmu="yes"
299 linux_user="no"
300 bsd_user="no"
301 aix="no"
302 blobs="yes"
303 pkgversion=""
304 pie=""
305 zero_malloc=""
306 qom_cast_debug="yes"
307 trace_backends="nop"
308 trace_file="trace"
309 spice=""
310 rbd=""
311 smartcard=""
312 libusb=""
313 usb_redir=""
314 opengl=""
315 zlib="yes"
316 lzo=""
317 snappy=""
318 bzip2=""
319 guest_agent=""
320 guest_agent_with_vss="no"
321 guest_agent_ntddscsi="no"
322 guest_agent_msi=""
323 vss_win32_sdk=""
324 win_sdk="no"
325 want_tools="yes"
326 libiscsi=""
327 libnfs=""
328 coroutine=""
329 coroutine_pool=""
330 seccomp=""
331 glusterfs=""
332 glusterfs_discard="no"
333 glusterfs_zerofill="no"
334 archipelago="no"
335 gtk=""
336 gtkabi=""
337 gtk_gl="no"
338 gnutls=""
339 gnutls_hash=""
340 nettle=""
341 gcrypt=""
342 vte=""
343 virglrenderer=""
344 tpm="yes"
345 libssh2=""
346 vhdx=""
347 numa=""
348 tcmalloc="no"
349 jemalloc="no"
351 # parse CC options first
352 for opt do
353 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
354 case "$opt" in
355 --cross-prefix=*) cross_prefix="$optarg"
357 --cc=*) CC="$optarg"
359 --cxx=*) CXX="$optarg"
361 --source-path=*) source_path="$optarg"
363 --cpu=*) cpu="$optarg"
365 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
366 EXTRA_CFLAGS="$optarg"
368 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
369 EXTRA_LDFLAGS="$optarg"
371 --enable-debug-info) debug_info="yes"
373 --disable-debug-info) debug_info="no"
375 esac
376 done
377 # OS specific
378 # Using uname is really, really broken. Once we have the right set of checks
379 # we can eliminate its usage altogether.
381 # Preferred compiler:
382 # ${CC} (if set)
383 # ${cross_prefix}gcc (if cross-prefix specified)
384 # system compiler
385 if test -z "${CC}${cross_prefix}"; then
386 cc="$host_cc"
387 else
388 cc="${CC-${cross_prefix}gcc}"
391 if test -z "${CXX}${cross_prefix}"; then
392 cxx="c++"
393 else
394 cxx="${CXX-${cross_prefix}g++}"
397 ar="${AR-${cross_prefix}ar}"
398 as="${AS-${cross_prefix}as}"
399 cpp="${CPP-$cc -E}"
400 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
401 ld="${LD-${cross_prefix}ld}"
402 libtool="${LIBTOOL-${cross_prefix}libtool}"
403 nm="${NM-${cross_prefix}nm}"
404 strip="${STRIP-${cross_prefix}strip}"
405 windres="${WINDRES-${cross_prefix}windres}"
406 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
407 query_pkg_config() {
408 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
410 pkg_config=query_pkg_config
411 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
412 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
414 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
415 ARFLAGS="${ARFLAGS-rv}"
417 # default flags for all hosts
418 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
419 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
420 QEMU_CFLAGS="-Wmissing-format-attribute $QEMU_CFLAGS"
421 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
422 QEMU_CFLAGS="-Wno-unused-parameter $QEMU_CFLAGS"
423 QEMU_CFLAGS="-Wno-missing-field-initializers $QEMU_CFLAGS"
424 QEMU_CFLAGS="-Wno-sign-compare $QEMU_CFLAGS"
425 QEMU_CFLAGS="-Wno-override-init $QEMU_CFLAGS"
426 QEMU_CFLAGS="-Wno-error=format $QEMU_CFLAGS"
427 QEMU_CFLAGS="-Wno-error=format-extra-args $QEMU_CFLAGS"
428 QEMU_CFLAGS="-Wno-error=parentheses $QEMU_CFLAGS"
429 QEMU_CFLAGS="-Wextra $QEMU_CFLAGS"
430 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
431 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
432 if test "$debug_info" = "yes"; then
433 CFLAGS="-g $CFLAGS"
434 LDFLAGS="-g $LDFLAGS"
437 # make source path absolute
438 source_path=`cd "$source_path"; pwd`
440 cc_macros=`$cc $QEMU_CFLAGS -E -dD - </dev/null`
442 # running configure in the source tree?
443 # we know that's the case if configure is there.
444 if test -f "./configure"; then
445 pwd_is_source_path="y"
446 else
447 pwd_is_source_path="n"
450 check_define() {
451 cat > $TMPC <<EOF
452 #if !defined($1)
453 #error $1 not defined
454 #endif
455 int main(void) { return 0; }
457 compile_object
460 check_include() {
461 cat > $TMPC <<EOF
462 #include <$1>
463 int main(void) { return 0; }
465 compile_object
468 write_c_skeleton() {
469 cat > $TMPC <<EOF
470 int main(void) { return 0; }
474 if check_define __linux__ ; then
475 targetos="Linux"
476 elif check_define _WIN32 ; then
477 targetos='MINGW32'
478 elif check_define __OpenBSD__ ; then
479 targetos='OpenBSD'
480 elif check_define __sun__ ; then
481 targetos='SunOS'
482 elif check_define __HAIKU__ ; then
483 targetos='Haiku'
484 else
485 targetos=`uname -s`
488 # Some host OSes need non-standard checks for which CPU to use.
489 # Note that these checks are broken for cross-compilation: if you're
490 # cross-compiling to one of these OSes then you'll need to specify
491 # the correct CPU with the --cpu option.
492 case $targetos in
493 Darwin)
494 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
495 # run 64-bit userspace code.
496 # If the user didn't specify a CPU explicitly and the kernel says this is
497 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
498 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
499 cpu="x86_64"
502 SunOS)
503 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
504 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
505 cpu="x86_64"
507 esac
509 if test ! -z "$cpu" ; then
510 # command line argument
512 elif check_define __i386__ ; then
513 cpu="i386"
514 elif check_define __x86_64__ ; then
515 if check_define __ILP32__ ; then
516 cpu="x32"
517 else
518 cpu="x86_64"
520 elif check_define __sparc__ ; then
521 if check_define __arch64__ ; then
522 cpu="sparc64"
523 else
524 cpu="sparc"
526 elif check_define _ARCH_PPC ; then
527 if check_define _ARCH_PPC64 ; then
528 cpu="ppc64"
529 else
530 cpu="ppc"
532 elif check_define __mips__ ; then
533 if check_define __mips64 ; then
534 cpu="mips64"
535 else
536 cpu="mips"
538 elif check_define __ia64__ ; then
539 cpu="ia64"
540 elif check_define __s390__ ; then
541 if check_define __s390x__ ; then
542 cpu="s390x"
543 else
544 cpu="s390"
546 elif check_define __arm__ ; then
547 cpu="arm"
548 elif check_define __aarch64__ ; then
549 cpu="aarch64"
550 elif check_define __hppa__ ; then
551 cpu="hppa"
552 else
553 cpu=`uname -m`
556 ARCH=
557 # Normalise host CPU name and set ARCH.
558 # Note that this case should only have supported host CPUs, not guests.
559 case "$cpu" in
560 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
561 cpu="$cpu"
563 i386|i486|i586|i686|i86pc|BePC)
564 cpu="i386"
566 x86_64|amd64)
567 cpu="x86_64"
569 armv*b|armv*l|arm)
570 cpu="arm"
572 aarch64)
573 cpu="aarch64"
575 mips*)
576 cpu="mips"
577 if check_define __MIPSEL__ ; then
578 cpu="${cpu}el"
581 sparc|sun4[cdmuv])
582 cpu="sparc"
584 sh4)
585 cpu="sh4"
588 # This will result in either an error or falling back to TCI later
589 ARCH=unknown
591 esac
592 if test -z "$ARCH"; then
593 ARCH="$cpu"
596 # OS specific
598 # host *BSD for user mode
599 HOST_VARIANT_DIR=""
601 case $targetos in
602 CYGWIN*)
603 mingw32="yes"
604 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
605 audio_possible_drivers="sdl"
606 audio_drv_list="sdl"
608 MINGW32*)
609 mingw32="yes"
610 audio_possible_drivers="dsound sdl"
611 if check_include dsound.h; then
612 audio_drv_list="dsound"
613 else
614 audio_drv_list=""
617 GNU/kFreeBSD)
618 bsd="yes"
619 audio_drv_list="oss"
620 audio_possible_drivers="oss sdl pa"
622 FreeBSD)
623 bsd="yes"
624 make="${MAKE-gmake}"
625 audio_drv_list="oss"
626 audio_possible_drivers="oss sdl pa"
627 # needed for kinfo_getvmmap(3) in libutil.h
628 LIBS="-lutil $LIBS"
629 netmap="" # enable netmap autodetect
630 HOST_VARIANT_DIR="freebsd"
632 DragonFly)
633 bsd="yes"
634 make="${MAKE-gmake}"
635 audio_drv_list="oss"
636 audio_possible_drivers="oss sdl pa"
637 HOST_VARIANT_DIR="dragonfly"
639 NetBSD)
640 bsd="yes"
641 make="${MAKE-gmake}"
642 audio_drv_list="oss"
643 audio_possible_drivers="oss sdl"
644 oss_lib="-lossaudio"
645 HOST_VARIANT_DIR="netbsd"
647 OpenBSD)
648 bsd="yes"
649 make="${MAKE-gmake}"
650 audio_drv_list="sdl"
651 audio_possible_drivers="sdl"
652 HOST_VARIANT_DIR="openbsd"
654 Darwin)
655 bsd="yes"
656 darwin="yes"
657 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
658 if [ "$cpu" = "x86_64" ] ; then
659 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
660 LDFLAGS="-arch x86_64 $LDFLAGS"
662 cocoa="yes"
663 audio_drv_list="coreaudio"
664 audio_possible_drivers="coreaudio sdl"
665 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
666 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
667 # Disable attempts to use ObjectiveC features in os/object.h since they
668 # won't work when we're compiling with gcc as a C compiler.
669 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
670 HOST_VARIANT_DIR="darwin"
672 SunOS)
673 solaris="yes"
674 make="${MAKE-gmake}"
675 install="${INSTALL-ginstall}"
676 ld="gld"
677 smbd="${SMBD-/usr/sfw/sbin/smbd}"
678 needs_libsunmath="no"
679 solarisrev=`uname -r | cut -f2 -d.`
680 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
681 if test "$solarisrev" -le 9 ; then
682 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
683 needs_libsunmath="yes"
684 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
685 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
686 LIBS="-lsunmath $LIBS"
687 else
688 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
689 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
690 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
691 "Studio 11 can be downloaded from www.sun.com."
695 if test -f /usr/include/sys/soundcard.h ; then
696 audio_drv_list="oss"
698 audio_possible_drivers="oss sdl"
699 # needed for CMSG_ macros in sys/socket.h
700 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
701 # needed for TIOCWIN* defines in termios.h
702 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
703 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
704 solarisnetlibs="-lsocket -lnsl -lresolv"
705 LIBS="$solarisnetlibs $LIBS"
706 libs_qga="$solarisnetlibs $libs_qga"
708 AIX)
709 aix="yes"
710 make="${MAKE-gmake}"
712 Haiku)
713 haiku="yes"
714 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
715 LIBS="-lposix_error_mapper -lnetwork $LIBS"
718 audio_drv_list="oss"
719 audio_possible_drivers="oss alsa sdl pa"
720 linux="yes"
721 linux_user="yes"
722 kvm="yes"
723 vhost_net="yes"
724 vhost_scsi="yes"
725 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
727 esac
729 if [ "$bsd" = "yes" ] ; then
730 if [ "$darwin" != "yes" ] ; then
731 bsd_user="yes"
735 : ${make=${MAKE-make}}
736 : ${install=${INSTALL-install}}
737 : ${python=${PYTHON-python}}
738 : ${smbd=${SMBD-/usr/sbin/smbd}}
740 # Default objcc to clang if available, otherwise use CC
741 if has clang; then
742 objcc=clang
743 else
744 objcc="$cc"
747 if test "$mingw32" = "yes" ; then
748 EXESUF=".exe"
749 DSOSUF=".dll"
750 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
751 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
752 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
753 # MinGW-w64 needs _POSIX defined.
754 QEMU_CFLAGS="-D_POSIX=1 $QEMU_CFLAGS"
755 # MinGW needs -mthreads for TLS and macro _MT.
756 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
757 QEMU_CFLAGS="-I\$(SRC_PATH)/hosts/w32/include $QEMU_CFLAGS"
758 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
759 write_c_skeleton;
760 if compile_prog "" "-liberty" ; then
761 LIBS="-liberty $LIBS"
763 prefix="c:/Program Files/QEMU"
764 mandir="\${prefix}"
765 datadir="\${prefix}"
766 qemu_docdir="\${prefix}"
767 bindir="\${prefix}"
768 sysconfdir="\${prefix}"
769 local_statedir=
770 confsuffix=""
771 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
774 werror=""
776 for opt do
777 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
778 case "$opt" in
779 --help|-h) show_help=yes
781 --version|-V) exec cat $source_path/VERSION
783 --prefix=*) prefix="$optarg"
785 --interp-prefix=*) interp_prefix="$optarg"
787 --source-path=*)
789 --cross-prefix=*)
791 --cc=*)
793 --host-cc=*) host_cc="$optarg"
795 --cxx=*)
797 --iasl=*) iasl="$optarg"
799 --objcc=*) objcc="$optarg"
801 --make=*) make="$optarg"
803 --install=*) install="$optarg"
805 --python=*) python="$optarg"
807 --gcov=*) gcov_tool="$optarg"
809 --smbd=*) smbd="$optarg"
811 --extra-cflags=*)
813 --extra-ldflags=*)
815 --enable-debug-info)
817 --disable-debug-info)
819 --enable-modules)
820 modules="yes"
822 --disable-modules)
823 modules="no"
825 --cpu=*)
827 --target-list=*) target_list="$optarg"
829 --enable-trace-backends=*) trace_backends="$optarg"
831 # XXX: backwards compatibility
832 --enable-trace-backend=*) trace_backends="$optarg"
834 --with-trace-file=*) trace_file="$optarg"
836 --enable-gprof) gprof="yes"
838 --enable-gcov) gcov="yes"
840 --static)
841 static="yes"
842 LDFLAGS="-static $LDFLAGS"
843 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
845 --mandir=*) mandir="$optarg"
847 --bindir=*) bindir="$optarg"
849 --libdir=*) libdir="$optarg"
851 --libexecdir=*) libexecdir="$optarg"
853 --includedir=*) includedir="$optarg"
855 --datadir=*) datadir="$optarg"
857 --with-confsuffix=*) confsuffix="$optarg"
859 --docdir=*) qemu_docdir="$optarg"
861 --sysconfdir=*) sysconfdir="$optarg"
863 --localstatedir=*) local_statedir="$optarg"
865 --sbindir=*|--sharedstatedir=*|\
866 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
867 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
868 # These switches are silently ignored, for compatibility with
869 # autoconf-generated configure scripts. This allows QEMU's
870 # configure to be used by RPM and similar macros that set
871 # lots of directory switches by default.
873 --with-system-pixman) pixman="system"
875 --without-system-pixman) pixman="internal"
877 --without-pixman) pixman="none"
879 --disable-sdl) sdl="no"
881 --enable-sdl) sdl="yes"
883 --with-sdlabi=*) sdlabi="$optarg"
885 --disable-qom-cast-debug) qom_cast_debug="no"
887 --enable-qom-cast-debug) qom_cast_debug="yes"
889 --disable-virtfs) virtfs="no"
891 --enable-virtfs) virtfs="yes"
893 --disable-vnc) vnc="no"
895 --enable-vnc) vnc="yes"
897 --oss-lib=*) oss_lib="$optarg"
899 --audio-drv-list=*) audio_drv_list="$optarg"
901 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
903 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
905 --enable-debug-tcg) debug_tcg="yes"
907 --disable-debug-tcg) debug_tcg="no"
909 --enable-debug)
910 # Enable debugging options that aren't excessively noisy
911 debug_tcg="yes"
912 debug="yes"
913 strip_opt="no"
914 fortify_source="no"
916 --enable-sparse) sparse="yes"
918 --disable-sparse) sparse="no"
920 --disable-strip) strip_opt="no"
922 --disable-vnc-sasl) vnc_sasl="no"
924 --enable-vnc-sasl) vnc_sasl="yes"
926 --disable-vnc-jpeg) vnc_jpeg="no"
928 --enable-vnc-jpeg) vnc_jpeg="yes"
930 --disable-vnc-png) vnc_png="no"
932 --enable-vnc-png) vnc_png="yes"
934 --disable-slirp) slirp="no"
936 --disable-uuid) uuid="no"
938 --enable-uuid) uuid="yes"
940 --disable-vde) vde="no"
942 --enable-vde) vde="yes"
944 --disable-netmap) netmap="no"
946 --enable-netmap) netmap="yes"
948 --disable-xen) xen="no"
950 --enable-xen) xen="yes"
952 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
954 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
956 --disable-brlapi) brlapi="no"
958 --enable-brlapi) brlapi="yes"
960 --disable-bluez) bluez="no"
962 --enable-bluez) bluez="yes"
964 --disable-kvm) kvm="no"
966 --enable-kvm) kvm="yes"
968 --disable-tcg-interpreter) tcg_interpreter="no"
970 --enable-tcg-interpreter) tcg_interpreter="yes"
972 --disable-cap-ng) cap_ng="no"
974 --enable-cap-ng) cap_ng="yes"
976 --disable-spice) spice="no"
978 --enable-spice) spice="yes"
980 --disable-libiscsi) libiscsi="no"
982 --enable-libiscsi) libiscsi="yes"
984 --disable-libnfs) libnfs="no"
986 --enable-libnfs) libnfs="yes"
988 --enable-profiler) profiler="yes"
990 --disable-cocoa) cocoa="no"
992 --enable-cocoa)
993 cocoa="yes" ;
994 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
996 --disable-system) softmmu="no"
998 --enable-system) softmmu="yes"
1000 --disable-user)
1001 linux_user="no" ;
1002 bsd_user="no" ;
1004 --enable-user) ;;
1005 --disable-linux-user) linux_user="no"
1007 --enable-linux-user) linux_user="yes"
1009 --disable-bsd-user) bsd_user="no"
1011 --enable-bsd-user) bsd_user="yes"
1013 --enable-pie) pie="yes"
1015 --disable-pie) pie="no"
1017 --enable-werror) werror="yes"
1019 --disable-werror) werror="no"
1021 --enable-stack-protector) stack_protector="yes"
1023 --disable-stack-protector) stack_protector="no"
1025 --disable-curses) curses="no"
1027 --enable-curses) curses="yes"
1029 --disable-curl) curl="no"
1031 --enable-curl) curl="yes"
1033 --disable-fdt) fdt="no"
1035 --enable-fdt) fdt="yes"
1037 --disable-linux-aio) linux_aio="no"
1039 --enable-linux-aio) linux_aio="yes"
1041 --disable-attr) attr="no"
1043 --enable-attr) attr="yes"
1045 --disable-blobs) blobs="no"
1047 --with-pkgversion=*) pkgversion=" ($optarg)"
1049 --with-coroutine=*) coroutine="$optarg"
1051 --disable-coroutine-pool) coroutine_pool="no"
1053 --enable-coroutine-pool) coroutine_pool="yes"
1055 --disable-docs) docs="no"
1057 --enable-docs) docs="yes"
1059 --disable-vhost-net) vhost_net="no"
1061 --enable-vhost-net) vhost_net="yes"
1063 --disable-vhost-scsi) vhost_scsi="no"
1065 --enable-vhost-scsi) vhost_scsi="yes"
1067 --disable-opengl) opengl="no"
1069 --enable-opengl) opengl="yes"
1071 --disable-rbd) rbd="no"
1073 --enable-rbd) rbd="yes"
1075 --disable-xfsctl) xfs="no"
1077 --enable-xfsctl) xfs="yes"
1079 --disable-smartcard) smartcard="no"
1081 --enable-smartcard) smartcard="yes"
1083 --disable-libusb) libusb="no"
1085 --enable-libusb) libusb="yes"
1087 --disable-usb-redir) usb_redir="no"
1089 --enable-usb-redir) usb_redir="yes"
1091 --disable-zlib-test) zlib="no"
1093 --disable-lzo) lzo="no"
1095 --enable-lzo) lzo="yes"
1097 --disable-snappy) snappy="no"
1099 --enable-snappy) snappy="yes"
1101 --disable-bzip2) bzip2="no"
1103 --enable-bzip2) bzip2="yes"
1105 --enable-guest-agent) guest_agent="yes"
1107 --disable-guest-agent) guest_agent="no"
1109 --enable-guest-agent-msi) guest_agent_msi="yes"
1111 --disable-guest-agent-msi) guest_agent_msi="no"
1113 --with-vss-sdk) vss_win32_sdk=""
1115 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1117 --without-vss-sdk) vss_win32_sdk="no"
1119 --with-win-sdk) win_sdk=""
1121 --with-win-sdk=*) win_sdk="$optarg"
1123 --without-win-sdk) win_sdk="no"
1125 --enable-tools) want_tools="yes"
1127 --disable-tools) want_tools="no"
1129 --enable-seccomp) seccomp="yes"
1131 --disable-seccomp) seccomp="no"
1133 --disable-glusterfs) glusterfs="no"
1135 --enable-glusterfs) glusterfs="yes"
1137 --disable-archipelago) archipelago="no"
1139 --enable-archipelago) archipelago="yes"
1141 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1142 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1144 --disable-gtk) gtk="no"
1146 --enable-gtk) gtk="yes"
1148 --disable-gnutls) gnutls="no"
1150 --enable-gnutls) gnutls="yes"
1152 --disable-nettle) nettle="no"
1154 --enable-nettle) nettle="yes"
1156 --disable-gcrypt) gcrypt="no"
1158 --enable-gcrypt) gcrypt="yes"
1160 --enable-rdma) rdma="yes"
1162 --disable-rdma) rdma="no"
1164 --with-gtkabi=*) gtkabi="$optarg"
1166 --disable-vte) vte="no"
1168 --enable-vte) vte="yes"
1170 --disable-virglrenderer) virglrenderer="no"
1172 --enable-virglrenderer) virglrenderer="yes"
1174 --disable-tpm) tpm="no"
1176 --enable-tpm) tpm="yes"
1178 --disable-libssh2) libssh2="no"
1180 --enable-libssh2) libssh2="yes"
1182 --enable-vhdx) vhdx="yes"
1184 --disable-vhdx) vhdx="no"
1186 --disable-numa) numa="no"
1188 --enable-numa) numa="yes"
1190 --disable-tcmalloc) tcmalloc="no"
1192 --enable-tcmalloc) tcmalloc="yes"
1194 --disable-jemalloc) jemalloc="no"
1196 --enable-jemalloc) jemalloc="yes"
1199 echo "ERROR: unknown option $opt"
1200 echo "Try '$0 --help' for more information"
1201 exit 1
1203 esac
1204 done
1206 if ! has $python; then
1207 error_exit "Python not found. Use --python=/path/to/python"
1210 # Note that if the Python conditional here evaluates True we will exit
1211 # with status 1 which is a shell 'false' value.
1212 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1213 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1214 "Note that Python 3 or later is not yet supported." \
1215 "Use --python=/path/to/python to specify a supported Python."
1218 # Suppress writing compiled files
1219 python="$python -B"
1221 case "$cpu" in
1222 ppc)
1223 CPU_CFLAGS="-m32"
1224 LDFLAGS="-m32 $LDFLAGS"
1226 ppc64)
1227 CPU_CFLAGS="-m64"
1228 LDFLAGS="-m64 $LDFLAGS"
1230 sparc)
1231 LDFLAGS="-m32 $LDFLAGS"
1232 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1234 sparc64)
1235 LDFLAGS="-m64 $LDFLAGS"
1236 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1238 s390)
1239 CPU_CFLAGS="-m31"
1240 LDFLAGS="-m31 $LDFLAGS"
1242 s390x)
1243 CPU_CFLAGS="-m64"
1244 LDFLAGS="-m64 $LDFLAGS"
1246 i386)
1247 CPU_CFLAGS="-m32"
1248 LDFLAGS="-m32 $LDFLAGS"
1249 cc_i386='$(CC) -m32'
1251 x86_64)
1252 CPU_CFLAGS="-m64"
1253 LDFLAGS="-m64 $LDFLAGS"
1254 cc_i386='$(CC) -m32'
1256 x32)
1257 CPU_CFLAGS="-mx32"
1258 LDFLAGS="-mx32 $LDFLAGS"
1259 cc_i386='$(CC) -m32'
1261 # No special flags required for other host CPUs
1262 esac
1264 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1265 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1267 default_target_list=""
1269 mak_wilds=""
1271 if [ "$softmmu" = "yes" ]; then
1272 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1274 if [ "$linux_user" = "yes" ]; then
1275 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1277 if [ "$bsd_user" = "yes" ]; then
1278 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1281 for config in $mak_wilds; do
1282 default_target_list="${default_target_list} $(basename "$config" .mak)"
1283 done
1285 if test x"$show_help" = x"yes" ; then
1286 cat << EOF
1288 Usage: configure [options]
1289 Options: [defaults in brackets after descriptions]
1291 Standard options:
1292 --help print this message
1293 --prefix=PREFIX install in PREFIX [$prefix]
1294 --interp-prefix=PREFIX where to find shared libraries, etc.
1295 use %M for cpu name [$interp_prefix]
1296 --target-list=LIST set target list (default: build everything)
1297 $(echo Available targets: $default_target_list | \
1298 fold -s -w 53 | sed -e 's/^/ /')
1300 Advanced options (experts only):
1301 --source-path=PATH path of source code [$source_path]
1302 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1303 --cc=CC use C compiler CC [$cc]
1304 --iasl=IASL use ACPI compiler IASL [$iasl]
1305 --host-cc=CC use C compiler CC [$host_cc] for code run at
1306 build time
1307 --cxx=CXX use C++ compiler CXX [$cxx]
1308 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1309 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1310 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1311 --make=MAKE use specified make [$make]
1312 --install=INSTALL use specified install [$install]
1313 --python=PYTHON use specified python [$python]
1314 --smbd=SMBD use specified smbd [$smbd]
1315 --static enable static build [$static]
1316 --mandir=PATH install man pages in PATH
1317 --datadir=PATH install firmware in PATH$confsuffix
1318 --docdir=PATH install documentation in PATH$confsuffix
1319 --bindir=PATH install binaries in PATH
1320 --libdir=PATH install libraries in PATH
1321 --sysconfdir=PATH install config in PATH$confsuffix
1322 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1323 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1324 --enable-debug enable common debug build options
1325 --disable-strip disable stripping binaries
1326 --disable-werror disable compilation abort on warning
1327 --disable-stack-protector disable compiler-provided stack protection
1328 --audio-drv-list=LIST set audio drivers list:
1329 Available drivers: $audio_possible_drivers
1330 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1331 --block-drv-rw-whitelist=L
1332 set block driver read-write whitelist
1333 (affects only QEMU, not qemu-img)
1334 --block-drv-ro-whitelist=L
1335 set block driver read-only whitelist
1336 (affects only QEMU, not qemu-img)
1337 --enable-trace-backends=B Set trace backend
1338 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1339 --with-trace-file=NAME Full PATH,NAME of file to store traces
1340 Default:trace-<pid>
1341 --disable-slirp disable SLIRP userspace network connectivity
1342 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1343 --oss-lib path to OSS library
1344 --cpu=CPU Build for host CPU [$cpu]
1345 --with-coroutine=BACKEND coroutine backend. Supported options:
1346 gthread, ucontext, sigaltstack, windows
1347 --enable-gcov enable test coverage analysis with gcov
1348 --gcov=GCOV use specified gcov [$gcov_tool]
1349 --disable-blobs disable installing provided firmware blobs
1350 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1351 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1353 Optional features, enabled with --enable-FEATURE and
1354 disabled with --disable-FEATURE, default is enabled if available:
1356 system all system emulation targets
1357 user supported user emulation targets
1358 linux-user all linux usermode emulation targets
1359 bsd-user all BSD usermode emulation targets
1360 docs build documentation
1361 guest-agent build the QEMU Guest Agent
1362 guest-agent-msi build guest agent Windows MSI installation package
1363 pie Position Independent Executables
1364 modules modules support
1365 debug-tcg TCG debugging (default is disabled)
1366 debug-info debugging information
1367 sparse sparse checker
1369 gnutls GNUTLS cryptography support
1370 nettle nettle cryptography support
1371 gcrypt libgcrypt cryptography support
1372 sdl SDL UI
1373 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1374 gtk gtk UI
1375 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1376 vte vte support for the gtk UI
1377 curses curses UI
1378 vnc VNC UI support
1379 vnc-sasl SASL encryption for VNC server
1380 vnc-jpeg JPEG lossy compression for VNC server
1381 vnc-png PNG compression for VNC server
1382 cocoa Cocoa UI (Mac OS X only)
1383 virtfs VirtFS
1384 xen xen backend driver support
1385 xen-pci-passthrough
1386 brlapi BrlAPI (Braile)
1387 curl curl connectivity
1388 fdt fdt device tree
1389 bluez bluez stack connectivity
1390 kvm KVM acceleration support
1391 rdma RDMA-based migration support
1392 uuid uuid support
1393 vde support for vde network
1394 netmap support for netmap network
1395 linux-aio Linux AIO support
1396 cap-ng libcap-ng support
1397 attr attr and xattr support
1398 vhost-net vhost-net acceleration support
1399 spice spice
1400 rbd rados block device (rbd)
1401 libiscsi iscsi support
1402 libnfs nfs support
1403 smartcard smartcard support (libcacard)
1404 libusb libusb (for usb passthrough)
1405 usb-redir usb network redirection support
1406 lzo support of lzo compression library
1407 snappy support of snappy compression library
1408 bzip2 support of bzip2 compression library
1409 (for reading bzip2-compressed dmg images)
1410 seccomp seccomp support
1411 coroutine-pool coroutine freelist (better performance)
1412 glusterfs GlusterFS backend
1413 archipelago Archipelago backend
1414 tpm TPM support
1415 libssh2 ssh block device support
1416 vhdx support for the Microsoft VHDX image format
1417 numa libnuma support
1418 tcmalloc tcmalloc support
1419 jemalloc jemalloc support
1421 NOTE: The object files are built at the place where configure is launched
1423 exit 0
1426 # Now we have handled --enable-tcg-interpreter and know we're not just
1427 # printing the help message, bail out if the host CPU isn't supported.
1428 if test "$ARCH" = "unknown"; then
1429 if test "$tcg_interpreter" = "yes" ; then
1430 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1431 ARCH=tci
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 z_version=`cut -f3 -d. $source_path/VERSION`
1441 if test -z "$werror" ; then
1442 if test -d "$source_path/.git" -a \
1443 "$linux" = "yes" ; then
1444 werror="yes"
1445 else
1446 werror="no"
1450 # check that the C compiler works.
1451 write_c_skeleton;
1452 if compile_object ; then
1453 : C compiler works ok
1454 else
1455 error_exit "\"$cc\" either does not exist or does not work"
1458 # Check that the C++ compiler exists and works with the C compiler
1459 if has $cxx; then
1460 cat > $TMPC <<EOF
1461 int c_function(void);
1462 int main(void) { return c_function(); }
1465 compile_object
1467 cat > $TMPCXX <<EOF
1468 extern "C" {
1469 int c_function(void);
1471 int c_function(void) { return 42; }
1474 update_cxxflags
1476 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1477 # C++ compiler $cxx works ok with C compiler $cc
1479 else
1480 echo "C++ compiler $cxx does not work with C compiler $cc"
1481 echo "Disabling C++ specific optional code"
1482 cxx=
1484 else
1485 echo "No C++ compiler available; disabling C++ specific optional code"
1486 cxx=
1489 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1490 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1491 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1492 gcc_flags="-Wunused-but-set-variable $gcc_flags"
1493 gcc_flags="-Wendif-labels $gcc_flags"
1494 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1495 gcc_flags="-Wno-string-plus-int $gcc_flags"
1496 # Note that we do not add -Werror to gcc_flags here, because that would
1497 # enable it for all configure tests. If a configure test failed due
1498 # to -Werror this would just silently disable some features,
1499 # so it's too error prone.
1501 cc_has_warning_flag() {
1502 write_c_skeleton;
1504 # Use the positive sense of the flag when testing for -Wno-wombat
1505 # support (gcc will happily accept the -Wno- form of unknown
1506 # warning options).
1507 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1508 compile_prog "-Werror $optflag" ""
1511 for flag in $gcc_flags; do
1512 if cc_has_warning_flag $flag ; then
1513 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1515 done
1517 if test "$mingw32" = "yes"; then
1518 stack_protector="no"
1520 if test "$stack_protector" != "no"; then
1521 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1522 sp_on=0
1523 for flag in $gcc_flags; do
1524 # We need to check both a compile and a link, since some compiler
1525 # setups fail only on a .c->.o compile and some only at link time
1526 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1527 compile_prog "-Werror $flag" ""; then
1528 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1529 LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1530 sp_on=1
1531 break
1533 done
1534 if test "$stack_protector" = yes; then
1535 if test $sp_on = 0; then
1536 error_exit "Stack protector not supported"
1541 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1542 # large functions that use global variables. The bug is in all releases of
1543 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1544 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1545 cat > $TMPC << EOF
1546 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1547 int main(void) { return 0; }
1548 #else
1549 #error No bug in this compiler.
1550 #endif
1552 if compile_prog "-Werror -fno-gcse" "" ; then
1553 TRANSLATE_OPT_CFLAGS=-fno-gcse
1556 if test "$static" = "yes" ; then
1557 if test "$modules" = "yes" ; then
1558 error_exit "static and modules are mutually incompatible"
1560 if test "$pie" = "yes" ; then
1561 error_exit "static and pie are mutually incompatible"
1562 else
1563 pie="no"
1567 # Unconditional check for compiler __thread support
1568 cat > $TMPC << EOF
1569 static __thread int tls_var;
1570 int main(void) { return tls_var; }
1573 if ! compile_prog "-Werror" "" ; then
1574 error_exit "Your compiler does not support the __thread specifier for " \
1575 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1578 if test "$pie" = ""; then
1579 case "$cpu-$targetos" in
1580 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1583 pie="no"
1585 esac
1588 if test "$pie" != "no" ; then
1589 cat > $TMPC << EOF
1591 #ifdef __linux__
1592 # define THREAD __thread
1593 #else
1594 # define THREAD
1595 #endif
1597 static THREAD int tls_var;
1599 int main(void) { return tls_var; }
1602 if compile_prog "-fPIE -DPIE" "-pie"; then
1603 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1604 LDFLAGS="-pie $LDFLAGS"
1605 pie="yes"
1606 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1607 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1609 else
1610 if test "$pie" = "yes"; then
1611 error_exit "PIE not available due to missing toolchain support"
1612 else
1613 echo "Disabling PIE due to missing toolchain support"
1614 pie="no"
1618 if compile_prog "-Werror -fno-pie" "-nopie"; then
1619 CFLAGS_NOPIE="-fno-pie"
1620 LDFLAGS_NOPIE="-nopie"
1624 # check for broken gcc and libtool in RHEL5
1625 if test -n "$libtool" -a "$pie" != "no" ; then
1626 cat > $TMPC <<EOF
1628 void *f(unsigned char *buf, int len);
1629 void *g(unsigned char *buf, int len);
1631 void *
1632 f(unsigned char *buf, int len)
1634 return (void*)0L;
1637 void *
1638 g(unsigned char *buf, int len)
1640 return f(buf, len);
1644 if ! libtool_prog; then
1645 echo "Disabling libtool due to broken toolchain support"
1646 libtool=
1650 ##########################################
1651 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1652 # use i686 as default anyway, but for those that don't, an explicit
1653 # specification is necessary
1655 if test "$cpu" = "i386"; then
1656 cat > $TMPC << EOF
1657 static int sfaa(int *ptr)
1659 return __sync_fetch_and_and(ptr, 0);
1662 int main(void)
1664 int val = 42;
1665 val = __sync_val_compare_and_swap(&val, 0, 1);
1666 sfaa(&val);
1667 return val;
1670 if ! compile_prog "" "" ; then
1671 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1675 #########################################
1676 # Solaris specific configure tool chain decisions
1678 if test "$solaris" = "yes" ; then
1679 if has $install; then
1681 else
1682 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1683 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1684 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1686 if test "`path_of $install`" = "/usr/sbin/install" ; then
1687 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1688 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1689 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1691 if has ar; then
1693 else
1694 if test -f /usr/ccs/bin/ar ; then
1695 error_exit "No path includes ar" \
1696 "Add /usr/ccs/bin to your path and rerun configure"
1698 error_exit "No path includes ar"
1702 if test -z "${target_list+xxx}" ; then
1703 target_list="$default_target_list"
1704 else
1705 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1708 # Check that we recognised the target name; this allows a more
1709 # friendly error message than if we let it fall through.
1710 for target in $target_list; do
1711 case " $default_target_list " in
1712 *" $target "*)
1715 error_exit "Unknown target name '$target'"
1717 esac
1718 done
1720 # see if system emulation was really requested
1721 case " $target_list " in
1722 *"-softmmu "*) softmmu=yes
1724 *) softmmu=no
1726 esac
1728 feature_not_found() {
1729 feature=$1
1730 remedy=$2
1732 error_exit "User requested feature $feature" \
1733 "configure was not able to find it." \
1734 "$remedy"
1737 # ---
1738 # big/little endian test
1739 cat > $TMPC << EOF
1740 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1741 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1742 extern int foo(short *, short *);
1743 int main(int argc, char *argv[]) {
1744 return foo(big_endian, little_endian);
1748 if compile_object ; then
1749 if grep -q BiGeNdIaN $TMPO ; then
1750 bigendian="yes"
1751 elif grep -q LiTtLeEnDiAn $TMPO ; then
1752 bigendian="no"
1753 else
1754 echo big/little test failed
1756 else
1757 echo big/little test failed
1760 ##########################################
1761 # cocoa implies not SDL or GTK
1762 # (the cocoa UI code currently assumes it is always the active UI
1763 # and doesn't interact well with other UI frontend code)
1764 if test "$cocoa" = "yes"; then
1765 if test "$sdl" = "yes"; then
1766 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1768 if test "$gtk" = "yes"; then
1769 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1771 gtk=no
1772 sdl=no
1775 ##########################################
1776 # L2TPV3 probe
1778 cat > $TMPC <<EOF
1779 #include <sys/socket.h>
1780 #include <linux/ip.h>
1781 int main(void) { return sizeof(struct mmsghdr); }
1783 if compile_prog "" "" ; then
1784 l2tpv3=yes
1785 else
1786 l2tpv3=no
1789 ##########################################
1790 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1792 if test "$mingw32" = "yes"; then
1793 # Some versions of MinGW / Mingw-w64 lack localtime_r
1794 # and gmtime_r entirely.
1796 # Some versions of Mingw-w64 define a macro for
1797 # localtime_r/gmtime_r.
1799 # Some versions of Mingw-w64 will define functions
1800 # for localtime_r/gmtime_r, but only if you have
1801 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1802 # though, unistd.h and pthread.h both define
1803 # that for you.
1805 # So this #undef localtime_r and #include <unistd.h>
1806 # are not in fact redundant.
1807 cat > $TMPC << EOF
1808 #include <unistd.h>
1809 #include <time.h>
1810 #undef localtime_r
1811 int main(void) { localtime_r(NULL, NULL); return 0; }
1813 if compile_prog "" "" ; then
1814 localtime_r="yes"
1815 else
1816 localtime_r="no"
1820 ##########################################
1821 # pkg-config probe
1823 if ! has "$pkg_config_exe"; then
1824 error_exit "pkg-config binary '$pkg_config_exe' not found"
1827 ##########################################
1828 # NPTL probe
1830 if test "$linux_user" = "yes"; then
1831 cat > $TMPC <<EOF
1832 #include <sched.h>
1833 #include <linux/futex.h>
1834 int main(void) {
1835 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1836 #error bork
1837 #endif
1838 return 0;
1841 if ! compile_object ; then
1842 feature_not_found "nptl" "Install glibc and linux kernel headers."
1846 ##########################################
1847 # zlib check
1849 if test "$zlib" != "no" ; then
1850 cat > $TMPC << EOF
1851 #include <zlib.h>
1852 int main(void) { zlibVersion(); return 0; }
1854 if compile_prog "" "-lz" ; then
1856 else
1857 error_exit "zlib check failed" \
1858 "Make sure to have the zlib libs and headers installed."
1861 LIBS="$LIBS -lz"
1863 ##########################################
1864 # lzo check
1866 if test "$lzo" != "no" ; then
1867 cat > $TMPC << EOF
1868 #include <lzo/lzo1x.h>
1869 int main(void) { lzo_version(); return 0; }
1871 if compile_prog "" "-llzo2" ; then
1872 libs_softmmu="$libs_softmmu -llzo2"
1873 lzo="yes"
1874 else
1875 if test "$lzo" = "yes"; then
1876 feature_not_found "liblzo2" "Install liblzo2 devel"
1878 lzo="no"
1882 ##########################################
1883 # snappy check
1885 if test "$snappy" != "no" ; then
1886 cat > $TMPC << EOF
1887 #include <snappy-c.h>
1888 int main(void) { snappy_max_compressed_length(4096); return 0; }
1890 if compile_prog "" "-lsnappy" ; then
1891 libs_softmmu="$libs_softmmu -lsnappy"
1892 snappy="yes"
1893 else
1894 if test "$snappy" = "yes"; then
1895 feature_not_found "libsnappy" "Install libsnappy devel"
1897 snappy="no"
1901 ##########################################
1902 # bzip2 check
1904 if test "$bzip2" != "no" ; then
1905 cat > $TMPC << EOF
1906 #include <bzlib.h>
1907 int main(void) { BZ2_bzlibVersion(); return 0; }
1909 if compile_prog "" "-lbz2" ; then
1910 bzip2="yes"
1911 else
1912 if test "$bzip2" = "yes"; then
1913 feature_not_found "libbzip2" "Install libbzip2 devel"
1915 bzip2="no"
1919 ##########################################
1920 # libseccomp check
1922 if test "$seccomp" != "no" ; then
1923 if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1924 $pkg_config --atleast-version=2.1.1 libseccomp; then
1925 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1926 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1927 seccomp="yes"
1928 else
1929 if test "$seccomp" = "yes"; then
1930 feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1932 seccomp="no"
1935 ##########################################
1936 # xen probe
1938 if test "$xen" != "no" ; then
1939 xen_libs="-lxenstore -lxenctrl -lxenguest"
1941 # First we test whether Xen headers and libraries are available.
1942 # If no, we are done and there is no Xen support.
1943 # If yes, more tests are run to detect the Xen version.
1945 # Xen (any)
1946 cat > $TMPC <<EOF
1947 #include <xenctrl.h>
1948 int main(void) {
1949 return 0;
1952 if ! compile_prog "" "$xen_libs" ; then
1953 # Xen not found
1954 if test "$xen" = "yes" ; then
1955 feature_not_found "xen" "Install xen devel"
1957 xen=no
1959 # Xen unstable
1960 elif
1961 cat > $TMPC <<EOF &&
1962 #include <xenctrl.h>
1963 #include <xenstore.h>
1964 #include <stdint.h>
1965 #include <xen/hvm/hvm_info_table.h>
1966 #if !defined(HVM_MAX_VCPUS)
1967 # error HVM_MAX_VCPUS not defined
1968 #endif
1969 int main(void) {
1970 xc_interface *xc;
1971 xs_daemon_open();
1972 xc = xc_interface_open(0, 0, 0);
1973 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1974 xc_gnttab_open(NULL, 0);
1975 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1976 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1977 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
1978 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
1979 return 0;
1982 compile_prog "" "$xen_libs"
1983 then
1984 xen_ctrl_version=460
1985 xen=yes
1987 # Xen 4.5
1988 elif
1989 cat > $TMPC <<EOF &&
1990 #include <xenctrl.h>
1991 #include <xenstore.h>
1992 #include <stdint.h>
1993 #include <xen/hvm/hvm_info_table.h>
1994 #if !defined(HVM_MAX_VCPUS)
1995 # error HVM_MAX_VCPUS not defined
1996 #endif
1997 int main(void) {
1998 xc_interface *xc;
1999 xs_daemon_open();
2000 xc = xc_interface_open(0, 0, 0);
2001 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2002 xc_gnttab_open(NULL, 0);
2003 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2004 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2005 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2006 return 0;
2009 compile_prog "" "$xen_libs"
2010 then
2011 xen_ctrl_version=450
2012 xen=yes
2014 elif
2015 cat > $TMPC <<EOF &&
2016 #include <xenctrl.h>
2017 #include <xenstore.h>
2018 #include <stdint.h>
2019 #include <xen/hvm/hvm_info_table.h>
2020 #if !defined(HVM_MAX_VCPUS)
2021 # error HVM_MAX_VCPUS not defined
2022 #endif
2023 int main(void) {
2024 xc_interface *xc;
2025 xs_daemon_open();
2026 xc = xc_interface_open(0, 0, 0);
2027 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2028 xc_gnttab_open(NULL, 0);
2029 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2030 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2031 return 0;
2034 compile_prog "" "$xen_libs"
2035 then
2036 xen_ctrl_version=420
2037 xen=yes
2039 elif
2040 cat > $TMPC <<EOF &&
2041 #include <xenctrl.h>
2042 #include <xs.h>
2043 #include <stdint.h>
2044 #include <xen/hvm/hvm_info_table.h>
2045 #if !defined(HVM_MAX_VCPUS)
2046 # error HVM_MAX_VCPUS not defined
2047 #endif
2048 int main(void) {
2049 xs_daemon_open();
2050 xc_interface_open(0, 0, 0);
2051 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2052 xc_gnttab_open(NULL, 0);
2053 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2054 return 0;
2057 compile_prog "" "$xen_libs"
2058 then
2059 xen_ctrl_version=410
2060 xen=yes
2062 # Xen 4.0.0
2063 elif
2064 cat > $TMPC <<EOF &&
2065 #include <xenctrl.h>
2066 #include <xs.h>
2067 #include <stdint.h>
2068 #include <xen/hvm/hvm_info_table.h>
2069 #if !defined(HVM_MAX_VCPUS)
2070 # error HVM_MAX_VCPUS not defined
2071 #endif
2072 int main(void) {
2073 struct xen_add_to_physmap xatp = {
2074 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2076 xs_daemon_open();
2077 xc_interface_open();
2078 xc_gnttab_open();
2079 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2080 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2081 return 0;
2084 compile_prog "" "$xen_libs"
2085 then
2086 xen_ctrl_version=400
2087 xen=yes
2089 # Xen 3.4.0
2090 elif
2091 cat > $TMPC <<EOF &&
2092 #include <xenctrl.h>
2093 #include <xs.h>
2094 int main(void) {
2095 struct xen_add_to_physmap xatp = {
2096 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2098 xs_daemon_open();
2099 xc_interface_open();
2100 xc_gnttab_open();
2101 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2102 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2103 return 0;
2106 compile_prog "" "$xen_libs"
2107 then
2108 xen_ctrl_version=340
2109 xen=yes
2111 # Xen 3.3.0
2112 elif
2113 cat > $TMPC <<EOF &&
2114 #include <xenctrl.h>
2115 #include <xs.h>
2116 int main(void) {
2117 xs_daemon_open();
2118 xc_interface_open();
2119 xc_gnttab_open();
2120 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2121 return 0;
2124 compile_prog "" "$xen_libs"
2125 then
2126 xen_ctrl_version=330
2127 xen=yes
2129 # Xen version unsupported
2130 else
2131 if test "$xen" = "yes" ; then
2132 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2134 xen=no
2137 if test "$xen" = yes; then
2138 libs_softmmu="$xen_libs $libs_softmmu"
2142 if test "$xen_pci_passthrough" != "no"; then
2143 if test "$xen" = "yes" && test "$linux" = "yes" &&
2144 test "$xen_ctrl_version" -ge 340; then
2145 xen_pci_passthrough=yes
2146 else
2147 if test "$xen_pci_passthrough" = "yes"; then
2148 if test "$xen_ctrl_version" -lt 340; then
2149 error_exit "User requested feature Xen PCI Passthrough" \
2150 "This feature does not work with Xen 3.3"
2152 error_exit "User requested feature Xen PCI Passthrough" \
2153 " but this feature requires /sys from Linux"
2155 xen_pci_passthrough=no
2159 ##########################################
2160 # libtool probe
2162 if ! has $libtool; then
2163 libtool=
2166 # MacOSX ships with a libtool which isn't the GNU one; weed this
2167 # out by checking whether libtool supports the --version switch
2168 if test -n "$libtool"; then
2169 if ! "$libtool" --version >/dev/null 2>&1; then
2170 libtool=
2174 ##########################################
2175 # Sparse probe
2176 if test "$sparse" != "no" ; then
2177 if has cgcc; then
2178 sparse=yes
2179 else
2180 if test "$sparse" = "yes" ; then
2181 feature_not_found "sparse" "Install sparse binary"
2183 sparse=no
2187 ##########################################
2188 # X11 probe
2189 x11_cflags=
2190 x11_libs=-lX11
2191 if $pkg_config --exists "x11"; then
2192 x11_cflags=`$pkg_config --cflags x11`
2193 x11_libs=`$pkg_config --libs x11`
2196 ##########################################
2197 # GTK probe
2199 if test "$gtkabi" = ""; then
2200 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2201 # Use 3.0 as a fallback if that is available.
2202 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2203 gtkabi=2.0
2204 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2205 gtkabi=3.0
2206 else
2207 gtkabi=2.0
2211 if test "$gtk" != "no"; then
2212 gtkpackage="gtk+-$gtkabi"
2213 gtkx11package="gtk+-x11-$gtkabi"
2214 if test "$gtkabi" = "3.0" ; then
2215 gtkversion="3.0.0"
2216 else
2217 gtkversion="2.18.0"
2219 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2220 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2221 gtk_libs=`$pkg_config --libs $gtkpackage`
2222 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2223 gtk_cflags="$gtk_cflags $x11_cflags"
2224 gtk_libs="$gtk_libs $x11_libs"
2226 libs_softmmu="$gtk_libs $libs_softmmu"
2227 gtk="yes"
2228 elif test "$gtk" = "yes"; then
2229 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2230 else
2231 gtk="no"
2236 ##########################################
2237 # GNUTLS probe
2239 gnutls_works() {
2240 # Unfortunately some distros have bad pkg-config information for gnutls
2241 # such that it claims to exist but you get a compiler error if you try
2242 # to use the options returned by --libs. Specifically, Ubuntu for --static
2243 # builds doesn't work:
2244 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2246 # So sanity check the cflags/libs before assuming gnutls can be used.
2247 if ! $pkg_config --exists "gnutls"; then
2248 return 1
2251 write_c_skeleton
2252 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2255 gnutls_gcrypt=no
2256 gnutls_nettle=no
2257 if test "$gnutls" != "no"; then
2258 if gnutls_works; then
2259 gnutls_cflags=`$pkg_config --cflags gnutls`
2260 gnutls_libs=`$pkg_config --libs gnutls`
2261 libs_softmmu="$gnutls_libs $libs_softmmu"
2262 libs_tools="$gnutls_libs $libs_tools"
2263 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2264 gnutls="yes"
2266 # gnutls_hash_init requires >= 2.9.10
2267 if $pkg_config --exists "gnutls >= 2.9.10"; then
2268 gnutls_hash="yes"
2269 else
2270 gnutls_hash="no"
2273 if $pkg_config --exists 'gnutls >= 3.0'; then
2274 gnutls_gcrypt=no
2275 gnutls_nettle=yes
2276 elif $pkg_config --exists 'gnutls >= 2.12'; then
2277 case `$pkg_config --libs --static gnutls` in
2278 *gcrypt*)
2279 gnutls_gcrypt=yes
2280 gnutls_nettle=no
2282 *nettle*)
2283 gnutls_gcrypt=no
2284 gnutls_nettle=yes
2287 gnutls_gcrypt=yes
2288 gnutls_nettle=no
2290 esac
2291 else
2292 gnutls_gcrypt=yes
2293 gnutls_nettle=no
2295 elif test "$gnutls" = "yes"; then
2296 feature_not_found "gnutls" "Install gnutls devel"
2297 else
2298 gnutls="no"
2299 gnutls_hash="no"
2301 else
2302 gnutls_hash="no"
2306 # If user didn't give a --disable/enable-gcrypt flag,
2307 # then mark as disabled if user requested nettle
2308 # explicitly, or if gnutls links to nettle
2309 if test -z "$gcrypt"
2310 then
2311 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2312 then
2313 gcrypt="no"
2317 # If user didn't give a --disable/enable-nettle flag,
2318 # then mark as disabled if user requested gcrypt
2319 # explicitly, or if gnutls links to gcrypt
2320 if test -z "$nettle"
2321 then
2322 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2323 then
2324 nettle="no"
2328 has_libgcrypt_config() {
2329 if ! has "libgcrypt-config"
2330 then
2331 return 1
2334 if test -n "$cross_prefix"
2335 then
2336 host=`libgcrypt-config --host`
2337 if test "$host-" != $cross_prefix
2338 then
2339 return 1
2343 return 0
2346 if test "$gcrypt" != "no"; then
2347 if has_libgcrypt_config; then
2348 gcrypt_cflags=`libgcrypt-config --cflags`
2349 gcrypt_libs=`libgcrypt-config --libs`
2350 # Debian has remove -lgpg-error from libgcrypt-config
2351 # as it "spreads unnecessary dependencies" which in
2352 # turn breaks static builds...
2353 if test "$static" = "yes"
2354 then
2355 gcrypt_libs="$gcrypt_libs -lgpg-error"
2357 libs_softmmu="$gcrypt_libs $libs_softmmu"
2358 libs_tools="$gcrypt_libs $libs_tools"
2359 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2360 gcrypt="yes"
2361 if test -z "$nettle"; then
2362 nettle="no"
2364 else
2365 if test "$gcrypt" = "yes"; then
2366 feature_not_found "gcrypt" "Install gcrypt devel"
2367 else
2368 gcrypt="no"
2374 if test "$nettle" != "no"; then
2375 if $pkg_config --exists "nettle"; then
2376 nettle_cflags=`$pkg_config --cflags nettle`
2377 nettle_libs=`$pkg_config --libs nettle`
2378 nettle_version=`$pkg_config --modversion nettle`
2379 libs_softmmu="$nettle_libs $libs_softmmu"
2380 libs_tools="$nettle_libs $libs_tools"
2381 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2382 nettle="yes"
2383 else
2384 if test "$nettle" = "yes"; then
2385 feature_not_found "nettle" "Install nettle devel"
2386 else
2387 nettle="no"
2392 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2393 then
2394 error_exit "Only one of gcrypt & nettle can be enabled"
2397 ##########################################
2398 # libtasn1 - only for the TLS creds/session test suite
2400 tasn1=yes
2401 tasn1_cflags=""
2402 tasn1_libs=""
2403 if $pkg_config --exists "libtasn1"; then
2404 tasn1_cflags=`$pkg_config --cflags libtasn1`
2405 tasn1_libs=`$pkg_config --libs libtasn1`
2406 else
2407 tasn1=no
2411 ##########################################
2412 # VTE probe
2414 if test "$vte" != "no"; then
2415 if test "$gtkabi" = "3.0"; then
2416 vtepackage="vte-2.90"
2417 vteversion="0.32.0"
2418 else
2419 vtepackage="vte"
2420 vteversion="0.24.0"
2422 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2423 vte_cflags=`$pkg_config --cflags $vtepackage`
2424 vte_libs=`$pkg_config --libs $vtepackage`
2425 libs_softmmu="$vte_libs $libs_softmmu"
2426 vte="yes"
2427 elif test "$vte" = "yes"; then
2428 if test "$gtkabi" = "3.0"; then
2429 feature_not_found "vte" "Install libvte-2.90 devel"
2430 else
2431 feature_not_found "vte" "Install libvte devel"
2433 else
2434 vte="no"
2438 ##########################################
2439 # SDL probe
2441 # Look for sdl configuration program (pkg-config or sdl-config). Try
2442 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2444 if test $sdlabi = "2.0"; then
2445 sdl_config=$sdl2_config
2446 sdlname=sdl2
2447 sdlconfigname=sdl2_config
2448 else
2449 sdlname=sdl
2450 sdlconfigname=sdl_config
2453 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2454 sdl_config=$sdlconfigname
2457 if $pkg_config $sdlname --exists; then
2458 sdlconfig="$pkg_config $sdlname"
2459 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2460 elif has ${sdl_config}; then
2461 sdlconfig="$sdl_config"
2462 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2463 else
2464 if test "$sdl" = "yes" ; then
2465 feature_not_found "sdl" "Install SDL devel"
2467 sdl=no
2469 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2470 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2473 sdl_too_old=no
2474 if test "$sdl" != "no" ; then
2475 cat > $TMPC << EOF
2476 #include <SDL.h>
2477 #undef main /* We don't want SDL to override our main() */
2478 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2480 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2481 if test "$static" = "yes" ; then
2482 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2483 else
2484 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2486 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2487 if test "$_sdlversion" -lt 121 ; then
2488 sdl_too_old=yes
2489 else
2490 sdl=yes
2493 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2494 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2495 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2496 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2497 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2499 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2501 else
2502 sdl=no
2504 fi # static link
2505 else # sdl not found
2506 if test "$sdl" = "yes" ; then
2507 feature_not_found "sdl" "Install SDL devel"
2509 sdl=no
2510 fi # sdl compile test
2513 if test "$sdl" = "yes" ; then
2514 cat > $TMPC <<EOF
2515 #include <SDL.h>
2516 #if defined(SDL_VIDEO_DRIVER_X11)
2517 #include <X11/XKBlib.h>
2518 #else
2519 #error No x11 support
2520 #endif
2521 int main(void) { return 0; }
2523 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2524 sdl_cflags="$sdl_cflags $x11_cflags"
2525 sdl_libs="$sdl_libs $x11_libs"
2527 libs_softmmu="$sdl_libs $libs_softmmu"
2530 ##########################################
2531 # RDMA needs OpenFabrics libraries
2532 if test "$rdma" != "no" ; then
2533 cat > $TMPC <<EOF
2534 #include <rdma/rdma_cma.h>
2535 int main(void) { return 0; }
2537 rdma_libs="-lrdmacm -libverbs"
2538 if compile_prog "" "$rdma_libs" ; then
2539 rdma="yes"
2540 libs_softmmu="$libs_softmmu $rdma_libs"
2541 else
2542 if test "$rdma" = "yes" ; then
2543 error_exit \
2544 " OpenFabrics librdmacm/libibverbs not present." \
2545 " Your options:" \
2546 " (1) Fast: Install infiniband packages from your distro." \
2547 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2548 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2550 rdma="no"
2554 ##########################################
2555 # VNC SASL detection
2556 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2557 cat > $TMPC <<EOF
2558 #include <sasl/sasl.h>
2559 #include <stdio.h>
2560 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2562 # Assuming Cyrus-SASL installed in /usr prefix
2563 vnc_sasl_cflags=""
2564 vnc_sasl_libs="-lsasl2"
2565 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2566 vnc_sasl=yes
2567 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2568 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2569 else
2570 if test "$vnc_sasl" = "yes" ; then
2571 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2573 vnc_sasl=no
2577 ##########################################
2578 # VNC JPEG detection
2579 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2580 cat > $TMPC <<EOF
2581 #include <stdio.h>
2582 #include <jpeglib.h>
2583 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2585 vnc_jpeg_cflags=""
2586 vnc_jpeg_libs="-ljpeg"
2587 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2588 vnc_jpeg=yes
2589 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2590 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2591 else
2592 if test "$vnc_jpeg" = "yes" ; then
2593 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2595 vnc_jpeg=no
2599 ##########################################
2600 # VNC PNG detection
2601 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2602 cat > $TMPC <<EOF
2603 //#include <stdio.h>
2604 #include <png.h>
2605 #include <stddef.h>
2606 int main(void) {
2607 png_structp png_ptr;
2608 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2609 return png_ptr != 0;
2612 if $pkg_config libpng --exists; then
2613 vnc_png_cflags=`$pkg_config libpng --cflags`
2614 vnc_png_libs=`$pkg_config libpng --libs`
2615 else
2616 vnc_png_cflags=""
2617 vnc_png_libs="-lpng"
2619 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2620 vnc_png=yes
2621 libs_softmmu="$vnc_png_libs $libs_softmmu"
2622 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2623 else
2624 if test "$vnc_png" = "yes" ; then
2625 feature_not_found "vnc-png" "Install libpng devel"
2627 vnc_png=no
2631 ##########################################
2632 # fnmatch() probe, used for ACL routines
2633 fnmatch="no"
2634 cat > $TMPC << EOF
2635 #include <fnmatch.h>
2636 int main(void)
2638 fnmatch("foo", "foo", 0);
2639 return 0;
2642 if compile_prog "" "" ; then
2643 fnmatch="yes"
2646 ##########################################
2647 # uuid_generate() probe, used for vdi block driver
2648 # Note that on some systems (notably MacOSX) no extra library
2649 # need be linked to get the uuid functions.
2650 if test "$uuid" != "no" ; then
2651 uuid_libs="-luuid"
2652 cat > $TMPC << EOF
2653 #include <uuid/uuid.h>
2654 int main(void)
2656 uuid_t my_uuid;
2657 uuid_generate(my_uuid);
2658 return 0;
2661 if compile_prog "" "" ; then
2662 uuid="yes"
2663 elif compile_prog "" "$uuid_libs" ; then
2664 uuid="yes"
2665 libs_softmmu="$uuid_libs $libs_softmmu"
2666 libs_tools="$uuid_libs $libs_tools"
2667 else
2668 if test "$uuid" = "yes" ; then
2669 feature_not_found "uuid" "Install libuuid devel"
2671 uuid=no
2675 if test "$vhdx" = "yes" ; then
2676 if test "$uuid" = "no" ; then
2677 error_exit "uuid required for VHDX support"
2679 elif test "$vhdx" != "no" ; then
2680 if test "$uuid" = "yes" ; then
2681 vhdx=yes
2682 else
2683 vhdx=no
2687 ##########################################
2688 # xfsctl() probe, used for raw-posix
2689 if test "$xfs" != "no" ; then
2690 cat > $TMPC << EOF
2691 #include <stddef.h> /* NULL */
2692 #include <xfs/xfs.h>
2693 int main(void)
2695 xfsctl(NULL, 0, 0, NULL);
2696 return 0;
2699 if compile_prog "" "" ; then
2700 xfs="yes"
2701 else
2702 if test "$xfs" = "yes" ; then
2703 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2705 xfs=no
2709 ##########################################
2710 # vde libraries probe
2711 if test "$vde" != "no" ; then
2712 vde_libs="-lvdeplug"
2713 cat > $TMPC << EOF
2714 #include <stddef.h>
2715 #include <libvdeplug.h>
2716 int main(void)
2718 struct vde_open_args a = {0, 0, 0};
2719 char s[] = "";
2720 vde_open(s, s, &a);
2721 return 0;
2724 if compile_prog "" "$vde_libs" ; then
2725 vde=yes
2726 libs_softmmu="$vde_libs $libs_softmmu"
2727 libs_tools="$vde_libs $libs_tools"
2728 else
2729 if test "$vde" = "yes" ; then
2730 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2732 vde=no
2736 ##########################################
2737 # netmap support probe
2738 # Apart from looking for netmap headers, we make sure that the host API version
2739 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2740 # a minor/major version number. Minor new features will be marked with values up
2741 # to 15, and if something happens that requires a change to the backend we will
2742 # move above 15, submit the backend fixes and modify this two bounds.
2743 if test "$netmap" != "no" ; then
2744 cat > $TMPC << EOF
2745 #include <inttypes.h>
2746 #include <net/if.h>
2747 #include <net/netmap.h>
2748 #include <net/netmap_user.h>
2749 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2750 #error
2751 #endif
2752 int main(void) { return 0; }
2754 if compile_prog "" "" ; then
2755 netmap=yes
2756 else
2757 if test "$netmap" = "yes" ; then
2758 feature_not_found "netmap"
2760 netmap=no
2764 ##########################################
2765 # libcap-ng library probe
2766 if test "$cap_ng" != "no" ; then
2767 cap_libs="-lcap-ng"
2768 cat > $TMPC << EOF
2769 #include <cap-ng.h>
2770 int main(void)
2772 capng_capability_to_name(CAPNG_EFFECTIVE);
2773 return 0;
2776 if compile_prog "" "$cap_libs" ; then
2777 cap_ng=yes
2778 libs_tools="$cap_libs $libs_tools"
2779 else
2780 if test "$cap_ng" = "yes" ; then
2781 feature_not_found "cap_ng" "Install libcap-ng devel"
2783 cap_ng=no
2787 ##########################################
2788 # Sound support libraries probe
2790 audio_drv_probe()
2792 drv=$1
2793 hdr=$2
2794 lib=$3
2795 exp=$4
2796 cfl=$5
2797 cat > $TMPC << EOF
2798 #include <$hdr>
2799 int main(void) { $exp }
2801 if compile_prog "$cfl" "$lib" ; then
2803 else
2804 error_exit "$drv check failed" \
2805 "Make sure to have the $drv libs and headers installed."
2809 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2810 for drv in $audio_drv_list; do
2811 case $drv in
2812 alsa)
2813 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2814 "return snd_pcm_close((snd_pcm_t *)0);"
2815 libs_softmmu="-lasound $libs_softmmu"
2819 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2820 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2821 libs_softmmu="-lpulse $libs_softmmu"
2822 audio_pt_int="yes"
2825 coreaudio)
2826 libs_softmmu="-framework CoreAudio $libs_softmmu"
2829 dsound)
2830 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2831 audio_win_int="yes"
2834 oss)
2835 libs_softmmu="$oss_lib $libs_softmmu"
2838 sdl|wav)
2839 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2843 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2844 error_exit "Unknown driver '$drv' selected" \
2845 "Possible drivers are: $audio_possible_drivers"
2848 esac
2849 done
2851 ##########################################
2852 # BrlAPI probe
2854 if test "$brlapi" != "no" ; then
2855 brlapi_libs="-lbrlapi"
2856 cat > $TMPC << EOF
2857 #include <brlapi.h>
2858 #include <stddef.h>
2859 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2861 if compile_prog "" "$brlapi_libs" ; then
2862 brlapi=yes
2863 libs_softmmu="$brlapi_libs $libs_softmmu"
2864 else
2865 if test "$brlapi" = "yes" ; then
2866 feature_not_found "brlapi" "Install brlapi devel"
2868 brlapi=no
2872 ##########################################
2873 # curses probe
2874 if test "$curses" != "no" ; then
2875 if test "$mingw32" = "yes" ; then
2876 curses_list="-lpdcurses"
2877 else
2878 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2880 curses_found=no
2881 cat > $TMPC << EOF
2882 #include <curses.h>
2883 int main(void) {
2884 const char *s = curses_version();
2885 resize_term(0, 0);
2886 return s != 0;
2889 IFS=:
2890 for curses_lib in $curses_list; do
2891 unset IFS
2892 if compile_prog "" "$curses_lib" ; then
2893 curses_found=yes
2894 libs_softmmu="$curses_lib $libs_softmmu"
2895 break
2897 done
2898 unset IFS
2899 if test "$curses_found" = "yes" ; then
2900 curses=yes
2901 else
2902 if test "$curses" = "yes" ; then
2903 feature_not_found "curses" "Install ncurses devel"
2905 curses=no
2909 ##########################################
2910 # curl probe
2911 if test "$curl" != "no" ; then
2912 if $pkg_config libcurl --exists; then
2913 curlconfig="$pkg_config libcurl"
2914 else
2915 curlconfig=curl-config
2917 cat > $TMPC << EOF
2918 #include <curl/curl.h>
2919 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2921 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2922 curl_libs=`$curlconfig --libs 2>/dev/null`
2923 if compile_prog "$curl_cflags" "$curl_libs" ; then
2924 curl=yes
2925 else
2926 if test "$curl" = "yes" ; then
2927 feature_not_found "curl" "Install libcurl devel"
2929 curl=no
2931 fi # test "$curl"
2933 ##########################################
2934 # bluez support probe
2935 if test "$bluez" != "no" ; then
2936 cat > $TMPC << EOF
2937 #include <bluetooth/bluetooth.h>
2938 int main(void) { return bt_error(0); }
2940 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2941 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2942 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2943 bluez=yes
2944 libs_softmmu="$bluez_libs $libs_softmmu"
2945 else
2946 if test "$bluez" = "yes" ; then
2947 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2949 bluez="no"
2953 ##########################################
2954 # glib support probe
2956 glib_req_ver=2.22
2957 glib_modules=gthread-2.0
2958 if test "$modules" = yes; then
2959 glib_modules="$glib_modules gmodule-2.0"
2962 for i in $glib_modules; do
2963 if $pkg_config --atleast-version=$glib_req_ver $i; then
2964 glib_cflags=`$pkg_config --cflags $i`
2965 glib_libs=`$pkg_config --libs $i`
2966 CFLAGS="$glib_cflags $CFLAGS"
2967 LIBS="$glib_libs $LIBS"
2968 libs_qga="$glib_libs $libs_qga"
2969 else
2970 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2972 done
2974 # g_test_trap_subprocess added in 2.38. Used by some tests.
2975 glib_subprocess=yes
2976 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2977 glib_subprocess=no
2980 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2981 cat > $TMPC << EOF
2982 #include <glib.h>
2983 int main(void) { return 0; }
2985 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2986 if cc_has_warning_flag "-Wno-unknown-attributes"; then
2987 glib_cflags="-Wno-unknown-attributes $glib_cflags"
2988 CFLAGS="-Wno-unknown-attributes $CFLAGS"
2992 ##########################################
2993 # SHA command probe for modules
2994 if test "$modules" = yes; then
2995 shacmd_probe="sha1sum sha1 shasum"
2996 for c in $shacmd_probe; do
2997 if has $c; then
2998 shacmd="$c"
2999 break
3001 done
3002 if test "$shacmd" = ""; then
3003 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3007 ##########################################
3008 # pixman support probe
3010 if test "$pixman" = ""; then
3011 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3012 pixman="none"
3013 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3014 pixman="system"
3015 else
3016 pixman="internal"
3019 if test "$pixman" = "none"; then
3020 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3021 error_exit "pixman disabled but system emulation or tools build" \
3022 "enabled. You can turn off pixman only if you also" \
3023 "disable all system emulation targets and the tools" \
3024 "build with '--disable-tools --disable-system'."
3026 pixman_cflags=
3027 pixman_libs=
3028 elif test "$pixman" = "system"; then
3029 # pixman version has been checked above
3030 pixman_cflags=`$pkg_config --cflags pixman-1`
3031 pixman_libs=`$pkg_config --libs pixman-1`
3032 else
3033 if test ! -d ${source_path}/pixman/pixman; then
3034 error_exit "pixman >= 0.21.8 not present. Your options:" \
3035 " (1) Preferred: Install the pixman devel package (any recent" \
3036 " distro should have packages as Xorg needs pixman too)." \
3037 " (2) Fetch the pixman submodule, using:" \
3038 " git submodule update --init pixman"
3040 mkdir -p pixman/pixman
3041 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3042 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3045 ##########################################
3046 # libcap probe
3048 if test "$cap" != "no" ; then
3049 cat > $TMPC <<EOF
3050 #include <stdio.h>
3051 #include <sys/capability.h>
3052 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3054 if compile_prog "" "-lcap" ; then
3055 cap=yes
3056 else
3057 cap=no
3061 ##########################################
3062 # pthread probe
3063 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3065 pthread=no
3066 cat > $TMPC << EOF
3067 #include <pthread.h>
3068 static void *f(void *p) { return NULL; }
3069 int main(void) {
3070 pthread_t thread;
3071 pthread_create(&thread, 0, f, 0);
3072 return 0;
3075 if compile_prog "" "" ; then
3076 pthread=yes
3077 else
3078 for pthread_lib in $PTHREADLIBS_LIST; do
3079 if compile_prog "" "$pthread_lib" ; then
3080 pthread=yes
3081 found=no
3082 for lib_entry in $LIBS; do
3083 if test "$lib_entry" = "$pthread_lib"; then
3084 found=yes
3085 break
3087 done
3088 if test "$found" = "no"; then
3089 LIBS="$pthread_lib $LIBS"
3091 break
3093 done
3096 if test "$mingw32" != yes -a "$pthread" = no; then
3097 error_exit "pthread check failed" \
3098 "Make sure to have the pthread libs and headers installed."
3101 # check for pthread_setname_np
3102 pthread_setname_np=no
3103 cat > $TMPC << EOF
3104 #include <pthread.h>
3106 static void *f(void *p) { return NULL; }
3107 int main(void)
3109 pthread_t thread;
3110 pthread_create(&thread, 0, f, 0);
3111 pthread_setname_np(thread, "QEMU");
3112 return 0;
3115 if compile_prog "" "$pthread_lib" ; then
3116 pthread_setname_np=yes
3119 ##########################################
3120 # rbd probe
3121 if test "$rbd" != "no" ; then
3122 cat > $TMPC <<EOF
3123 #include <stdio.h>
3124 #include <rbd/librbd.h>
3125 int main(void) {
3126 rados_t cluster;
3127 rados_create(&cluster, NULL);
3128 return 0;
3131 rbd_libs="-lrbd -lrados"
3132 if compile_prog "" "$rbd_libs" ; then
3133 rbd=yes
3134 else
3135 if test "$rbd" = "yes" ; then
3136 feature_not_found "rados block device" "Install librbd/ceph devel"
3138 rbd=no
3142 ##########################################
3143 # libssh2 probe
3144 min_libssh2_version=1.2.8
3145 if test "$libssh2" != "no" ; then
3146 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3147 libssh2_cflags=`$pkg_config libssh2 --cflags`
3148 libssh2_libs=`$pkg_config libssh2 --libs`
3149 libssh2=yes
3150 else
3151 if test "$libssh2" = "yes" ; then
3152 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3154 libssh2=no
3158 ##########################################
3159 # libssh2_sftp_fsync probe
3161 if test "$libssh2" = "yes"; then
3162 cat > $TMPC <<EOF
3163 #include <stdio.h>
3164 #include <libssh2.h>
3165 #include <libssh2_sftp.h>
3166 int main(void) {
3167 LIBSSH2_SESSION *session;
3168 LIBSSH2_SFTP *sftp;
3169 LIBSSH2_SFTP_HANDLE *sftp_handle;
3170 session = libssh2_session_init ();
3171 sftp = libssh2_sftp_init (session);
3172 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3173 libssh2_sftp_fsync (sftp_handle);
3174 return 0;
3177 # libssh2_cflags/libssh2_libs defined in previous test.
3178 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3179 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3183 ##########################################
3184 # linux-aio probe
3186 if test "$linux_aio" != "no" ; then
3187 cat > $TMPC <<EOF
3188 #include <libaio.h>
3189 #include <sys/eventfd.h>
3190 #include <stddef.h>
3191 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3193 if compile_prog "" "-laio" ; then
3194 linux_aio=yes
3195 else
3196 if test "$linux_aio" = "yes" ; then
3197 feature_not_found "linux AIO" "Install libaio devel"
3199 linux_aio=no
3203 ##########################################
3204 # TPM passthrough is only on x86 Linux
3206 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3207 tpm_passthrough=$tpm
3208 else
3209 tpm_passthrough=no
3212 ##########################################
3213 # attr probe
3215 if test "$attr" != "no" ; then
3216 cat > $TMPC <<EOF
3217 #include <stdio.h>
3218 #include <sys/types.h>
3219 #ifdef CONFIG_LIBATTR
3220 #include <attr/xattr.h>
3221 #else
3222 #include <sys/xattr.h>
3223 #endif
3224 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3226 if compile_prog "" "" ; then
3227 attr=yes
3228 # Older distros have <attr/xattr.h>, and need -lattr:
3229 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3230 attr=yes
3231 LIBS="-lattr $LIBS"
3232 libattr=yes
3233 else
3234 if test "$attr" = "yes" ; then
3235 feature_not_found "ATTR" "Install libc6 or libattr devel"
3237 attr=no
3241 ##########################################
3242 # iovec probe
3243 cat > $TMPC <<EOF
3244 #include <sys/types.h>
3245 #include <sys/uio.h>
3246 #include <unistd.h>
3247 int main(void) { return sizeof(struct iovec); }
3249 iovec=no
3250 if compile_prog "" "" ; then
3251 iovec=yes
3254 ##########################################
3255 # preadv probe
3256 cat > $TMPC <<EOF
3257 #include <sys/types.h>
3258 #include <sys/uio.h>
3259 #include <unistd.h>
3260 int main(void) { return preadv(0, 0, 0, 0); }
3262 preadv=no
3263 if compile_prog "" "" ; then
3264 preadv=yes
3267 ##########################################
3268 # fdt probe
3269 # fdt support is mandatory for at least some target architectures,
3270 # so insist on it if we're building those system emulators.
3271 fdt_required=no
3272 for target in $target_list; do
3273 case $target in
3274 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3275 fdt_required=yes
3277 esac
3278 done
3280 if test "$fdt_required" = "yes"; then
3281 if test "$fdt" = "no"; then
3282 error_exit "fdt disabled but some requested targets require it." \
3283 "You can turn off fdt only if you also disable all the system emulation" \
3284 "targets which need it (by specifying a cut down --target-list)."
3286 fdt=yes
3289 if test "$fdt" != "no" ; then
3290 fdt_libs="-lfdt"
3291 # explicitly check for libfdt_env.h as it is missing in some stable installs
3292 # and test for required functions to make sure we are on a version >= 1.4.0
3293 cat > $TMPC << EOF
3294 #include <libfdt.h>
3295 #include <libfdt_env.h>
3296 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3298 if compile_prog "" "$fdt_libs" ; then
3299 # system DTC is good - use it
3300 fdt=yes
3301 elif test -d ${source_path}/dtc/libfdt ; then
3302 # have submodule DTC - use it
3303 fdt=yes
3304 dtc_internal="yes"
3305 mkdir -p dtc
3306 if [ "$pwd_is_source_path" != "y" ] ; then
3307 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3308 symlink "$source_path/dtc/scripts" "dtc/scripts"
3310 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3311 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3312 elif test "$fdt" = "yes" ; then
3313 # have neither and want - prompt for system/submodule install
3314 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3315 " (1) Preferred: Install the DTC (libfdt) devel package" \
3316 " (2) Fetch the DTC submodule, using:" \
3317 " git submodule update --init dtc"
3318 else
3319 # don't have and don't want
3320 fdt_libs=
3321 fdt=no
3325 libs_softmmu="$libs_softmmu $fdt_libs"
3327 ##########################################
3328 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3330 if test "$opengl" != "no" ; then
3331 opengl_pkgs="epoxy"
3332 if $pkg_config $opengl_pkgs x11; then
3333 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3334 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3335 opengl=yes
3336 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3337 gtk_gl="yes"
3339 else
3340 if test "$opengl" = "yes" ; then
3341 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3343 opengl_cflags=""
3344 opengl_libs=""
3345 opengl=no
3350 ##########################################
3351 # archipelago probe
3352 if test "$archipelago" != "no" ; then
3353 cat > $TMPC <<EOF
3354 #include <stdio.h>
3355 #include <xseg/xseg.h>
3356 #include <xseg/protocol.h>
3357 int main(void) {
3358 xseg_initialize();
3359 return 0;
3362 archipelago_libs=-lxseg
3363 if compile_prog "" "$archipelago_libs"; then
3364 archipelago="yes"
3365 libs_tools="$archipelago_libs $libs_tools"
3366 libs_softmmu="$archipelago_libs $libs_softmmu"
3368 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3369 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3370 echo "license and therefore prevent redistribution."
3371 echo
3372 echo "To disable Archipelago, use --disable-archipelago"
3373 else
3374 if test "$archipelago" = "yes" ; then
3375 feature_not_found "Archipelago backend support" "Install libxseg devel"
3377 archipelago="no"
3382 ##########################################
3383 # glusterfs probe
3384 if test "$glusterfs" != "no" ; then
3385 if $pkg_config --atleast-version=3 glusterfs-api; then
3386 glusterfs="yes"
3387 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3388 glusterfs_libs=`$pkg_config --libs glusterfs-api`
3389 if $pkg_config --atleast-version=5 glusterfs-api; then
3390 glusterfs_discard="yes"
3392 if $pkg_config --atleast-version=6 glusterfs-api; then
3393 glusterfs_zerofill="yes"
3395 else
3396 if test "$glusterfs" = "yes" ; then
3397 feature_not_found "GlusterFS backend support" \
3398 "Install glusterfs-api devel >= 3"
3400 glusterfs="no"
3404 # Check for inotify functions when we are building linux-user
3405 # emulator. This is done because older glibc versions don't
3406 # have syscall stubs for these implemented. In that case we
3407 # don't provide them even if kernel supports them.
3409 inotify=no
3410 cat > $TMPC << EOF
3411 #include <sys/inotify.h>
3414 main(void)
3416 /* try to start inotify */
3417 return inotify_init();
3420 if compile_prog "" "" ; then
3421 inotify=yes
3424 inotify1=no
3425 cat > $TMPC << EOF
3426 #include <sys/inotify.h>
3429 main(void)
3431 /* try to start inotify */
3432 return inotify_init1(0);
3435 if compile_prog "" "" ; then
3436 inotify1=yes
3439 # check if utimensat and futimens are supported
3440 utimens=no
3441 cat > $TMPC << EOF
3442 #define _ATFILE_SOURCE
3443 #include <stddef.h>
3444 #include <fcntl.h>
3445 #include <sys/stat.h>
3447 int main(void)
3449 utimensat(AT_FDCWD, "foo", NULL, 0);
3450 futimens(0, NULL);
3451 return 0;
3454 if compile_prog "" "" ; then
3455 utimens=yes
3458 # check if pipe2 is there
3459 pipe2=no
3460 cat > $TMPC << EOF
3461 #include <unistd.h>
3462 #include <fcntl.h>
3464 int main(void)
3466 int pipefd[2];
3467 return pipe2(pipefd, O_CLOEXEC);
3470 if compile_prog "" "" ; then
3471 pipe2=yes
3474 # check if accept4 is there
3475 accept4=no
3476 cat > $TMPC << EOF
3477 #include <sys/socket.h>
3478 #include <stddef.h>
3480 int main(void)
3482 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3483 return 0;
3486 if compile_prog "" "" ; then
3487 accept4=yes
3490 # check if tee/splice is there. vmsplice was added same time.
3491 splice=no
3492 cat > $TMPC << EOF
3493 #include <unistd.h>
3494 #include <fcntl.h>
3495 #include <limits.h>
3497 int main(void)
3499 int len, fd = 0;
3500 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3501 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3502 return 0;
3505 if compile_prog "" "" ; then
3506 splice=yes
3509 ##########################################
3510 # libnuma probe
3512 if test "$numa" != "no" ; then
3513 cat > $TMPC << EOF
3514 #include <numa.h>
3515 int main(void) { return numa_available(); }
3518 if compile_prog "" "-lnuma" ; then
3519 numa=yes
3520 libs_softmmu="-lnuma $libs_softmmu"
3521 else
3522 if test "$numa" = "yes" ; then
3523 feature_not_found "numa" "install numactl devel"
3525 numa=no
3529 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3530 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3531 exit 1
3534 ##########################################
3535 # tcmalloc probe
3537 if test "$tcmalloc" = "yes" ; then
3538 cat > $TMPC << EOF
3539 #include <stdlib.h>
3540 int main(void) { malloc(1); return 0; }
3543 if compile_prog "" "-ltcmalloc" ; then
3544 LIBS="-ltcmalloc $LIBS"
3545 else
3546 feature_not_found "tcmalloc" "install gperftools devel"
3550 ##########################################
3551 # jemalloc probe
3553 if test "$jemalloc" = "yes" ; then
3554 cat > $TMPC << EOF
3555 #include <stdlib.h>
3556 int main(void) { malloc(1); return 0; }
3559 if compile_prog "" "-ljemalloc" ; then
3560 LIBS="-ljemalloc $LIBS"
3561 else
3562 feature_not_found "jemalloc" "install jemalloc devel"
3566 ##########################################
3567 # signalfd probe
3568 signalfd="no"
3569 cat > $TMPC << EOF
3570 #include <unistd.h>
3571 #include <sys/syscall.h>
3572 #include <signal.h>
3573 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3576 if compile_prog "" "" ; then
3577 signalfd=yes
3580 # check if eventfd is supported
3581 eventfd=no
3582 cat > $TMPC << EOF
3583 #include <sys/eventfd.h>
3585 int main(void)
3587 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3590 if compile_prog "" "" ; then
3591 eventfd=yes
3594 # check if memfd is supported
3595 memfd=no
3596 cat > $TMPC << EOF
3597 #include <sys/memfd.h>
3599 int main(void)
3601 return memfd_create("foo", MFD_ALLOW_SEALING);
3604 if compile_prog "" "" ; then
3605 memfd=yes
3610 # check for fallocate
3611 fallocate=no
3612 cat > $TMPC << EOF
3613 #include <fcntl.h>
3615 int main(void)
3617 fallocate(0, 0, 0, 0);
3618 return 0;
3621 if compile_prog "" "" ; then
3622 fallocate=yes
3625 # check for fallocate hole punching
3626 fallocate_punch_hole=no
3627 cat > $TMPC << EOF
3628 #include <fcntl.h>
3629 #include <linux/falloc.h>
3631 int main(void)
3633 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3634 return 0;
3637 if compile_prog "" "" ; then
3638 fallocate_punch_hole=yes
3641 # check that fallocate supports range zeroing inside the file
3642 fallocate_zero_range=no
3643 cat > $TMPC << EOF
3644 #include <fcntl.h>
3645 #include <linux/falloc.h>
3647 int main(void)
3649 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3650 return 0;
3653 if compile_prog "" "" ; then
3654 fallocate_zero_range=yes
3657 # check for posix_fallocate
3658 posix_fallocate=no
3659 cat > $TMPC << EOF
3660 #include <fcntl.h>
3662 int main(void)
3664 posix_fallocate(0, 0, 0);
3665 return 0;
3668 if compile_prog "" "" ; then
3669 posix_fallocate=yes
3672 # check for sync_file_range
3673 sync_file_range=no
3674 cat > $TMPC << EOF
3675 #include <fcntl.h>
3677 int main(void)
3679 sync_file_range(0, 0, 0, 0);
3680 return 0;
3683 if compile_prog "" "" ; then
3684 sync_file_range=yes
3687 # check for linux/fiemap.h and FS_IOC_FIEMAP
3688 fiemap=no
3689 cat > $TMPC << EOF
3690 #include <sys/ioctl.h>
3691 #include <linux/fs.h>
3692 #include <linux/fiemap.h>
3694 int main(void)
3696 ioctl(0, FS_IOC_FIEMAP, 0);
3697 return 0;
3700 if compile_prog "" "" ; then
3701 fiemap=yes
3704 # check for dup3
3705 dup3=no
3706 cat > $TMPC << EOF
3707 #include <unistd.h>
3709 int main(void)
3711 dup3(0, 0, 0);
3712 return 0;
3715 if compile_prog "" "" ; then
3716 dup3=yes
3719 # check for ppoll support
3720 ppoll=no
3721 cat > $TMPC << EOF
3722 #include <poll.h>
3724 int main(void)
3726 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3727 ppoll(&pfd, 1, 0, 0);
3728 return 0;
3731 if compile_prog "" "" ; then
3732 ppoll=yes
3735 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3736 prctl_pr_set_timerslack=no
3737 cat > $TMPC << EOF
3738 #include <sys/prctl.h>
3740 int main(void)
3742 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3743 return 0;
3746 if compile_prog "" "" ; then
3747 prctl_pr_set_timerslack=yes
3750 # check for epoll support
3751 epoll=no
3752 cat > $TMPC << EOF
3753 #include <sys/epoll.h>
3755 int main(void)
3757 epoll_create(0);
3758 return 0;
3761 if compile_prog "" "" ; then
3762 epoll=yes
3765 # epoll_create1 and epoll_pwait are later additions
3766 # so we must check separately for their presence
3767 epoll_create1=no
3768 cat > $TMPC << EOF
3769 #include <sys/epoll.h>
3771 int main(void)
3773 /* Note that we use epoll_create1 as a value, not as
3774 * a function being called. This is necessary so that on
3775 * old SPARC glibc versions where the function was present in
3776 * the library but not declared in the header file we will
3777 * fail the configure check. (Otherwise we will get a compiler
3778 * warning but not an error, and will proceed to fail the
3779 * qemu compile where we compile with -Werror.)
3781 return (int)(uintptr_t)&epoll_create1;
3784 if compile_prog "" "" ; then
3785 epoll_create1=yes
3788 epoll_pwait=no
3789 cat > $TMPC << EOF
3790 #include <sys/epoll.h>
3792 int main(void)
3794 epoll_pwait(0, 0, 0, 0, 0);
3795 return 0;
3798 if compile_prog "" "" ; then
3799 epoll_pwait=yes
3802 # check for sendfile support
3803 sendfile=no
3804 cat > $TMPC << EOF
3805 #include <sys/sendfile.h>
3807 int main(void)
3809 return sendfile(0, 0, 0, 0);
3812 if compile_prog "" "" ; then
3813 sendfile=yes
3816 # check for timerfd support (glibc 2.8 and newer)
3817 timerfd=no
3818 cat > $TMPC << EOF
3819 #include <sys/timerfd.h>
3821 int main(void)
3823 return(timerfd_create(CLOCK_REALTIME, 0));
3826 if compile_prog "" "" ; then
3827 timerfd=yes
3830 # check for setns and unshare support
3831 setns=no
3832 cat > $TMPC << EOF
3833 #include <sched.h>
3835 int main(void)
3837 int ret;
3838 ret = setns(0, 0);
3839 ret = unshare(0);
3840 return ret;
3843 if compile_prog "" "" ; then
3844 setns=yes
3847 # Check if tools are available to build documentation.
3848 if test "$docs" != "no" ; then
3849 if has makeinfo && has pod2man; then
3850 docs=yes
3851 else
3852 if test "$docs" = "yes" ; then
3853 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3855 docs=no
3859 if test "$want_tools" = ""; then
3860 if test `expr "$target_list" : ".*softmmu.*"` != 0; then
3861 want_tools=yes
3862 else
3863 want_tools=no
3867 # Search for bswap_32 function
3868 byteswap_h=no
3869 cat > $TMPC << EOF
3870 #include <byteswap.h>
3871 int main(void) { return bswap_32(0); }
3873 if compile_prog "" "" ; then
3874 byteswap_h=yes
3877 # Search for bswap32 function
3878 bswap_h=no
3879 cat > $TMPC << EOF
3880 #include <sys/endian.h>
3881 #include <sys/types.h>
3882 #include <machine/bswap.h>
3883 int main(void) { return bswap32(0); }
3885 if compile_prog "" "" ; then
3886 bswap_h=yes
3889 ##########################################
3890 # Do we have libiscsi >= 1.9.0
3891 if test "$libiscsi" != "no" ; then
3892 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3893 libiscsi="yes"
3894 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3895 libiscsi_libs=$($pkg_config --libs libiscsi)
3896 else
3897 if test "$libiscsi" = "yes" ; then
3898 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3900 libiscsi="no"
3904 ##########################################
3905 # Do we need libm
3906 cat > $TMPC << EOF
3907 #include <math.h>
3908 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3910 if compile_prog "" "" ; then
3912 elif compile_prog "" "-lm" ; then
3913 LIBS="-lm $LIBS"
3914 libs_qga="-lm $libs_qga"
3915 else
3916 error_exit "libm check failed"
3919 ##########################################
3920 # Do we need librt
3921 # uClibc provides 2 versions of clock_gettime(), one with realtime
3922 # support and one without. This means that the clock_gettime() don't
3923 # need -lrt. We still need it for timer_create() so we check for this
3924 # function in addition.
3925 cat > $TMPC <<EOF
3926 #include <signal.h>
3927 #include <time.h>
3928 int main(void) {
3929 timer_create(CLOCK_REALTIME, NULL, NULL);
3930 return clock_gettime(CLOCK_REALTIME, NULL);
3934 if compile_prog "" "" ; then
3936 # we need pthread for static linking. use previous pthread test result
3937 elif compile_prog "" "$pthread_lib -lrt" ; then
3938 LIBS="$LIBS -lrt"
3939 libs_qga="$libs_qga -lrt"
3942 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3943 "$aix" != "yes" -a "$haiku" != "yes" ; then
3944 libs_softmmu="-lutil $libs_softmmu"
3947 ##########################################
3948 # spice probe
3949 if test "$spice" != "no" ; then
3950 cat > $TMPC << EOF
3951 #include <spice.h>
3952 int main(void) { spice_server_new(); return 0; }
3954 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3955 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3956 if $pkg_config --atleast-version=0.12.0 spice-server && \
3957 $pkg_config --atleast-version=0.12.3 spice-protocol && \
3958 compile_prog "$spice_cflags" "$spice_libs" ; then
3959 spice="yes"
3960 libs_softmmu="$libs_softmmu $spice_libs"
3961 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3962 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3963 spice_server_version=$($pkg_config --modversion spice-server)
3964 else
3965 if test "$spice" = "yes" ; then
3966 feature_not_found "spice" \
3967 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3969 spice="no"
3973 # check for smartcard support
3974 smartcard_cflags=""
3975 if test "$smartcard" != "no"; then
3976 if $pkg_config libcacard; then
3977 libcacard_cflags=$($pkg_config --cflags libcacard)
3978 libcacard_libs=$($pkg_config --libs libcacard)
3979 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
3980 libs_softmmu="$libs_softmmu $libcacard_libs"
3981 smartcard="yes"
3982 else
3983 if test "$smartcard" = "yes"; then
3984 feature_not_found "smartcard" "Install libcacard devel"
3986 smartcard="no"
3990 # check for libusb
3991 if test "$libusb" != "no" ; then
3992 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3993 libusb="yes"
3994 libusb_cflags=$($pkg_config --cflags libusb-1.0)
3995 libusb_libs=$($pkg_config --libs libusb-1.0)
3996 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3997 libs_softmmu="$libs_softmmu $libusb_libs"
3998 else
3999 if test "$libusb" = "yes"; then
4000 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4002 libusb="no"
4006 # check for usbredirparser for usb network redirection support
4007 if test "$usb_redir" != "no" ; then
4008 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4009 usb_redir="yes"
4010 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4011 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4012 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4013 libs_softmmu="$libs_softmmu $usb_redir_libs"
4014 else
4015 if test "$usb_redir" = "yes"; then
4016 feature_not_found "usb-redir" "Install usbredir devel"
4018 usb_redir="no"
4022 ##########################################
4023 # check if we have VSS SDK headers for win
4025 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4026 case "$vss_win32_sdk" in
4027 "") vss_win32_include="-I$source_path" ;;
4028 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4029 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4030 vss_win32_include="-I$source_path/.sdk/vss"
4031 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4033 *) vss_win32_include="-I$vss_win32_sdk"
4034 esac
4035 cat > $TMPC << EOF
4036 #define __MIDL_user_allocate_free_DEFINED__
4037 #include <inc/win2003/vss.h>
4038 int main(void) { return VSS_CTX_BACKUP; }
4040 if compile_prog "$vss_win32_include" "" ; then
4041 guest_agent_with_vss="yes"
4042 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4043 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4044 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4045 else
4046 if test "$vss_win32_sdk" != "" ; then
4047 echo "ERROR: Please download and install Microsoft VSS SDK:"
4048 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4049 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4050 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4051 echo "ERROR: The headers are extracted in the directory \`inc'."
4052 feature_not_found "VSS support"
4054 guest_agent_with_vss="no"
4058 ##########################################
4059 # lookup Windows platform SDK (if not specified)
4060 # The SDK is needed only to build .tlb (type library) file of guest agent
4061 # VSS provider from the source. It is usually unnecessary because the
4062 # pre-compiled .tlb file is included.
4064 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4065 if test -z "$win_sdk"; then
4066 programfiles="$PROGRAMFILES"
4067 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4068 if test -n "$programfiles"; then
4069 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4070 else
4071 feature_not_found "Windows SDK"
4073 elif test "$win_sdk" = "no"; then
4074 win_sdk=""
4078 ##########################################
4079 # check if mingw environment provides a recent ntddscsi.h
4080 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4081 cat > $TMPC << EOF
4082 #include <windows.h>
4083 #include <ntddscsi.h>
4084 int main(void) {
4085 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4086 #error Missing required ioctl definitions
4087 #endif
4088 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4089 return addr.Lun;
4092 if compile_prog "" "" ; then
4093 guest_agent_ntddscsi=yes
4094 libs_qga="-lsetupapi $libs_qga"
4098 ##########################################
4099 # virgl renderer probe
4101 if test "$virglrenderer" != "no" ; then
4102 cat > $TMPC << EOF
4103 #include <virglrenderer.h>
4104 int main(void) { virgl_renderer_poll(); return 0; }
4106 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4107 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4108 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4109 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4110 virglrenderer="yes"
4111 else
4112 if test "$virglrenderer" = "yes" ; then
4113 feature_not_found "virglrenderer"
4115 virglrenderer="no"
4119 ##########################################
4120 # check if we have fdatasync
4122 fdatasync=no
4123 cat > $TMPC << EOF
4124 #include <unistd.h>
4125 int main(void) {
4126 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4127 return fdatasync(0);
4128 #else
4129 #error Not supported
4130 #endif
4133 if compile_prog "" "" ; then
4134 fdatasync=yes
4137 ##########################################
4138 # check if we have madvise
4140 madvise=no
4141 cat > $TMPC << EOF
4142 #include <sys/types.h>
4143 #include <sys/mman.h>
4144 #include <stddef.h>
4145 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4147 if compile_prog "" "" ; then
4148 madvise=yes
4151 ##########################################
4152 # check if we have posix_madvise
4154 posix_madvise=no
4155 cat > $TMPC << EOF
4156 #include <sys/mman.h>
4157 #include <stddef.h>
4158 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4160 if compile_prog "" "" ; then
4161 posix_madvise=yes
4164 ##########################################
4165 # check if we have usable SIGEV_THREAD_ID
4167 sigev_thread_id=no
4168 cat > $TMPC << EOF
4169 #include <signal.h>
4170 int main(void) {
4171 struct sigevent ev;
4172 ev.sigev_notify = SIGEV_THREAD_ID;
4173 ev._sigev_un._tid = 0;
4174 asm volatile("" : : "g"(&ev));
4175 return 0;
4178 if compile_prog "" "" ; then
4179 sigev_thread_id=yes
4182 ##########################################
4183 # check if trace backend exists
4185 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4186 if test "$?" -ne 0 ; then
4187 error_exit "invalid trace backends" \
4188 "Please choose supported trace backends."
4191 ##########################################
4192 # For 'ust' backend, test if ust headers are present
4193 if have_backend "ust"; then
4194 cat > $TMPC << EOF
4195 #include <lttng/tracepoint.h>
4196 int main(void) { return 0; }
4198 if compile_prog "" "" ; then
4199 if $pkg_config lttng-ust --exists; then
4200 lttng_ust_libs=`$pkg_config --libs lttng-ust`
4201 else
4202 lttng_ust_libs="-llttng-ust"
4204 if $pkg_config liburcu-bp --exists; then
4205 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4206 else
4207 urcu_bp_libs="-lurcu-bp"
4210 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4211 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4212 else
4213 error_exit "Trace backend 'ust' missing lttng-ust header files"
4217 ##########################################
4218 # For 'dtrace' backend, test if 'dtrace' command is present
4219 if have_backend "dtrace"; then
4220 if ! has 'dtrace' ; then
4221 error_exit "dtrace command is not found in PATH $PATH"
4223 trace_backend_stap="no"
4224 if has 'stap' ; then
4225 trace_backend_stap="yes"
4229 ##########################################
4230 # check and set a backend for coroutine
4232 # We prefer ucontext, but it's not always possible. The fallback
4233 # is sigcontext. gthread is not selectable except explicitly, because
4234 # it is not functional enough to run QEMU proper. (It is occasionally
4235 # useful for debugging purposes.) On Windows the only valid backend
4236 # is the Windows-specific one.
4238 ucontext_works=no
4239 if test "$darwin" != "yes"; then
4240 cat > $TMPC << EOF
4241 #include <ucontext.h>
4242 #ifdef __stub_makecontext
4243 #error Ignoring glibc stub makecontext which will always fail
4244 #endif
4245 int main(void) { makecontext(0, 0, 0); return 0; }
4247 if compile_prog "" "" ; then
4248 ucontext_works=yes
4252 if test "$coroutine" = ""; then
4253 if test "$mingw32" = "yes"; then
4254 coroutine=win32
4255 elif test "$ucontext_works" = "yes"; then
4256 coroutine=ucontext
4257 else
4258 coroutine=sigaltstack
4260 else
4261 case $coroutine in
4262 windows)
4263 if test "$mingw32" != "yes"; then
4264 error_exit "'windows' coroutine backend only valid for Windows"
4266 # Unfortunately the user visible backend name doesn't match the
4267 # coroutine-*.c filename for this case, so we have to adjust it here.
4268 coroutine=win32
4270 ucontext)
4271 if test "$ucontext_works" != "yes"; then
4272 feature_not_found "ucontext"
4275 gthread|sigaltstack)
4276 if test "$mingw32" = "yes"; then
4277 error_exit "only the 'windows' coroutine backend is valid for Windows"
4281 error_exit "unknown coroutine backend $coroutine"
4283 esac
4286 if test "$coroutine_pool" = ""; then
4287 if test "$coroutine" = "gthread" -o "$coroutine" = "win32"; then
4288 coroutine_pool=no
4289 else
4290 coroutine_pool=yes
4293 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4294 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4297 ##########################################
4298 # check if we have open_by_handle_at
4300 open_by_handle_at=no
4301 cat > $TMPC << EOF
4302 #include <fcntl.h>
4303 #if !defined(AT_EMPTY_PATH)
4304 # error missing definition
4305 #else
4306 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4307 #endif
4309 if compile_prog "" "" ; then
4310 open_by_handle_at=yes
4313 ########################################
4314 # check if we have linux/magic.h
4316 linux_magic_h=no
4317 cat > $TMPC << EOF
4318 #include <linux/magic.h>
4319 int main(void) {
4320 return 0;
4323 if compile_prog "" "" ; then
4324 linux_magic_h=yes
4327 ########################################
4328 # check whether we can disable warning option with a pragma (this is needed
4329 # to silence warnings in the headers of some versions of external libraries).
4330 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4331 # only a warning.
4333 # If we can't selectively disable warning in the code, disable -Werror so that
4334 # the build doesn't fail anyway.
4336 pragma_disable_unused_but_set=no
4337 cat > $TMPC << EOF
4338 #pragma GCC diagnostic push
4339 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4340 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4341 #pragma GCC diagnostic pop
4343 int main(void) {
4344 return 0;
4347 if compile_prog "-Werror" "" ; then
4348 pragma_diagnostic_available=yes
4351 ########################################
4352 # check if we have valgrind/valgrind.h
4354 valgrind_h=no
4355 cat > $TMPC << EOF
4356 #include <valgrind/valgrind.h>
4357 int main(void) {
4358 return 0;
4361 if compile_prog "" "" ; then
4362 valgrind_h=yes
4365 ########################################
4366 # check if environ is declared
4368 has_environ=no
4369 cat > $TMPC << EOF
4370 #include <unistd.h>
4371 int main(void) {
4372 environ = 0;
4373 return 0;
4376 if compile_prog "" "" ; then
4377 has_environ=yes
4380 ########################################
4381 # check if cpuid.h is usable.
4383 cpuid_h=no
4384 cat > $TMPC << EOF
4385 #include <cpuid.h>
4386 int main(void) {
4387 unsigned a, b, c, d;
4388 int max = __get_cpuid_max(0, 0);
4390 if (max >= 1) {
4391 __cpuid(1, a, b, c, d);
4394 if (max >= 7) {
4395 __cpuid_count(7, 0, a, b, c, d);
4398 return 0;
4401 if compile_prog "" "" ; then
4402 cpuid_h=yes
4405 ########################################
4406 # check if __[u]int128_t is usable.
4408 int128=no
4409 cat > $TMPC << EOF
4410 #if defined(__clang_major__) && defined(__clang_minor__)
4411 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4412 # error __int128_t does not work in CLANG before 3.2
4413 # endif
4414 #endif
4415 __int128_t a;
4416 __uint128_t b;
4417 int main (void) {
4418 a = a + b;
4419 b = a * b;
4420 a = a * a;
4421 return 0;
4424 if compile_prog "" "" ; then
4425 int128=yes
4428 ########################################
4429 # check if getauxval is available.
4431 getauxval=no
4432 cat > $TMPC << EOF
4433 #include <sys/auxv.h>
4434 int main(void) {
4435 return getauxval(AT_HWCAP) == 0;
4438 if compile_prog "" "" ; then
4439 getauxval=yes
4442 ########################################
4443 # check if ccache is interfering with
4444 # semantic analysis of macros
4446 unset CCACHE_CPP2
4447 ccache_cpp2=no
4448 cat > $TMPC << EOF
4449 static const int Z = 1;
4450 #define fn() ({ Z; })
4451 #define TAUT(X) ((X) == Z)
4452 #define PAREN(X, Y) (X == Y)
4453 #define ID(X) (X)
4454 int main(int argc, char *argv[])
4456 int x = 0, y = 0;
4457 x = ID(x);
4458 x = fn();
4459 fn();
4460 if (PAREN(x, y)) return 0;
4461 if (TAUT(Z)) return 0;
4462 return 0;
4466 if ! compile_object "-Werror"; then
4467 ccache_cpp2=yes
4470 #################################################
4471 # clang does not support glibc + FORTIFY_SOURCE.
4473 if test "$fortify_source" != "no"; then
4474 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4475 fortify_source="no";
4476 elif test -n "$cxx" &&
4477 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4478 fortify_source="no";
4479 else
4480 fortify_source="yes"
4484 ##########################################
4485 # End of CC checks
4486 # After here, no more $cc or $ld runs
4488 if test "$gcov" = "yes" ; then
4489 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4490 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4491 elif test "$fortify_source" = "yes" ; then
4492 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4493 elif test "$debug" = "no"; then
4494 CFLAGS="-O2 $CFLAGS"
4497 ##########################################
4498 # Do we have libnfs
4499 if test "$libnfs" != "no" ; then
4500 if $pkg_config --atleast-version=1.9.3 libnfs; then
4501 libnfs="yes"
4502 libnfs_libs=$($pkg_config --libs libnfs)
4503 LIBS="$LIBS $libnfs_libs"
4504 else
4505 if test "$libnfs" = "yes" ; then
4506 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4508 libnfs="no"
4512 # Disable zero malloc errors for official releases unless explicitly told to
4513 # enable/disable
4514 if test -z "$zero_malloc" ; then
4515 if test "$z_version" = "50" ; then
4516 zero_malloc="no"
4517 else
4518 zero_malloc="yes"
4522 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4523 if test "$werror" = "yes"; then
4524 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4527 if test "$solaris" = "no" ; then
4528 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4529 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4533 # test if pod2man has --utf8 option
4534 if pod2man --help | grep -q utf8; then
4535 POD2MAN="pod2man --utf8"
4536 else
4537 POD2MAN="pod2man"
4540 # Use large addresses, ASLR, no-SEH and DEP if available.
4541 if test "$mingw32" = "yes" ; then
4542 if test "$cpu" = i386; then
4543 LDFLAGS="-Wl,--large-address-aware $LDFLAGS"
4545 for flag in --dynamicbase --no-seh --nxcompat; do
4546 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4547 LDFLAGS="-Wl,$flag $LDFLAGS"
4549 done
4552 qemu_confdir=$sysconfdir$confsuffix
4553 qemu_moddir=$libdir$confsuffix
4554 qemu_datadir=$datadir$confsuffix
4555 qemu_localedir="$datadir/locale"
4557 tools=""
4558 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4559 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4560 tools="qemu-nbd\$(EXESUF) $tools"
4561 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4563 if test "$softmmu" = yes ; then
4564 if test "$virtfs" != no ; then
4565 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4566 virtfs=yes
4567 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4568 else
4569 if test "$virtfs" = yes; then
4570 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4572 virtfs=no
4577 # Probe for guest agent support/options
4579 if [ "$guest_agent" != "no" ]; then
4580 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4581 tools="qemu-ga $tools"
4582 guest_agent=yes
4583 elif [ "$guest_agent" != yes ]; then
4584 guest_agent=no
4585 else
4586 error_exit "Guest agent is not supported on this platform"
4590 # Guest agent Window MSI package
4592 if test "$guest_agent" != yes; then
4593 if test "$guest_agent_msi" = yes; then
4594 error_exit "MSI guest agent package requires guest agent enabled"
4596 guest_agent_msi=no
4597 elif test "$mingw32" != "yes"; then
4598 if test "$guest_agent_msi" = "yes"; then
4599 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4601 guest_agent_msi=no
4602 elif ! has wixl; then
4603 if test "$guest_agent_msi" = "yes"; then
4604 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4606 guest_agent_msi=no
4607 else
4608 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4609 # disabled explicitly
4610 if test "$guest_agent_msi" != "no"; then
4611 guest_agent_msi=yes
4615 if test "$guest_agent_msi" = "yes"; then
4616 if test "$guest_agent_with_vss" = "yes"; then
4617 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4620 if test "$QEMU_GA_MANUFACTURER" = ""; then
4621 QEMU_GA_MANUFACTURER=QEMU
4624 if test "$QEMU_GA_DISTRO" = ""; then
4625 QEMU_GA_DISTRO=Linux
4628 if test "$QEMU_GA_VERSION" = ""; then
4629 QEMU_GA_VERSION=`cat $source_path/VERSION`
4632 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
4634 case "$cpu" in
4635 x86_64)
4636 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4638 i386)
4639 QEMU_GA_MSI_ARCH="-D Arch=32"
4642 error_exit "CPU $cpu not supported for building installation package"
4644 esac
4647 # Mac OS X ships with a broken assembler
4648 roms=
4649 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4650 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4651 "$softmmu" = yes ; then
4652 roms="optionrom"
4654 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4655 roms="$roms spapr-rtas"
4658 if test "$cpu" = "s390x" ; then
4659 roms="$roms s390-ccw"
4662 # Probe for the need for relocating the user-only binary.
4663 if test "$pie" = "no" ; then
4664 textseg_addr=
4665 case "$cpu" in
4666 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4667 # ??? Rationale for choosing this address
4668 textseg_addr=0x60000000
4670 mips)
4671 # A 256M aligned address, high in the address space, with enough
4672 # room for the code_gen_buffer above it before the stack.
4673 textseg_addr=0x60000000
4675 esac
4676 if [ -n "$textseg_addr" ]; then
4677 cat > $TMPC <<EOF
4678 int main(void) { return 0; }
4680 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4681 if ! compile_prog "" "$textseg_ldflags"; then
4682 # In case ld does not support -Ttext-segment, edit the default linker
4683 # script via sed to set the .text start addr. This is needed on FreeBSD
4684 # at least.
4685 $ld --verbose | sed \
4686 -e '1,/==================================================/d' \
4687 -e '/==================================================/,$d' \
4688 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4689 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4690 textseg_ldflags="-Wl,-T../config-host.ld"
4695 # prepend pixman and ftd flags after all config tests are done
4696 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4697 libs_softmmu="$pixman_libs $libs_softmmu"
4699 echo "Install prefix $prefix"
4700 echo "BIOS directory `eval echo $qemu_datadir`"
4701 echo "binary directory `eval echo $bindir`"
4702 echo "library directory `eval echo $libdir`"
4703 echo "module directory `eval echo $qemu_moddir`"
4704 echo "libexec directory `eval echo $libexecdir`"
4705 echo "include directory `eval echo $includedir`"
4706 echo "config directory `eval echo $sysconfdir`"
4707 if test "$mingw32" = "no" ; then
4708 echo "local state directory `eval echo $local_statedir`"
4709 echo "Manual directory `eval echo $mandir`"
4710 echo "ELF interp prefix $interp_prefix"
4711 else
4712 echo "local state directory queried at runtime"
4713 echo "Windows SDK $win_sdk"
4715 echo "Source path $source_path"
4716 echo "C compiler $cc"
4717 echo "Host C compiler $host_cc"
4718 echo "C++ compiler $cxx"
4719 echo "Objective-C compiler $objcc"
4720 echo "ARFLAGS $ARFLAGS"
4721 echo "CFLAGS $CFLAGS"
4722 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4723 echo "LDFLAGS $LDFLAGS"
4724 echo "make $make"
4725 echo "install $install"
4726 echo "python $python"
4727 if test "$slirp" = "yes" ; then
4728 echo "smbd $smbd"
4730 echo "module support $modules"
4731 echo "host CPU $cpu"
4732 echo "host big endian $bigendian"
4733 echo "target list $target_list"
4734 echo "tcg debug enabled $debug_tcg"
4735 echo "gprof enabled $gprof"
4736 echo "sparse enabled $sparse"
4737 echo "strip binaries $strip_opt"
4738 echo "profiler $profiler"
4739 echo "static build $static"
4740 if test "$darwin" = "yes" ; then
4741 echo "Cocoa support $cocoa"
4743 echo "pixman $pixman"
4744 echo "SDL support $sdl"
4745 echo "GTK support $gtk"
4746 echo "GTK GL support $gtk_gl"
4747 echo "GNUTLS support $gnutls"
4748 echo "GNUTLS hash $gnutls_hash"
4749 if test "$gcrypt" = "yes"; then
4750 echo "encryption libgcrypt"
4751 elif test "$nettle" = "yes"; then
4752 echo "encryption nettle ${nettle+($nettle_version)}"
4753 else
4754 echo "encryption none"
4756 echo "libtasn1 $tasn1"
4757 echo "VTE support $vte"
4758 echo "curses support $curses"
4759 echo "virgl support $virglrenderer"
4760 echo "curl support $curl"
4761 echo "mingw32 support $mingw32"
4762 echo "Audio drivers $audio_drv_list"
4763 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4764 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4765 echo "VirtFS support $virtfs"
4766 echo "VNC support $vnc"
4767 if test "$vnc" = "yes" ; then
4768 echo "VNC SASL support $vnc_sasl"
4769 echo "VNC JPEG support $vnc_jpeg"
4770 echo "VNC PNG support $vnc_png"
4772 if test -n "$sparc_cpu"; then
4773 echo "Target Sparc Arch $sparc_cpu"
4775 echo "xen support $xen"
4776 if test "$xen" = "yes" ; then
4777 echo "xen ctrl version $xen_ctrl_version"
4779 echo "brlapi support $brlapi"
4780 echo "bluez support $bluez"
4781 echo "Documentation $docs"
4782 echo "Tools $tools"
4783 echo "PIE $pie"
4784 echo "vde support $vde"
4785 echo "netmap support $netmap"
4786 echo "Linux AIO support $linux_aio"
4787 echo "(X)ATTR support $attr"
4788 echo "Install blobs $blobs"
4789 echo "KVM support $kvm"
4790 echo "RDMA support $rdma"
4791 echo "TCG interpreter $tcg_interpreter"
4792 echo "fdt support $fdt"
4793 echo "preadv support $preadv"
4794 echo "fdatasync $fdatasync"
4795 echo "madvise $madvise"
4796 echo "posix_madvise $posix_madvise"
4797 echo "sigev_thread_id $sigev_thread_id"
4798 echo "uuid support $uuid"
4799 echo "libcap-ng support $cap_ng"
4800 echo "vhost-net support $vhost_net"
4801 echo "vhost-scsi support $vhost_scsi"
4802 echo "Trace backends $trace_backends"
4803 if test "$trace_backend" = "simple"; then
4804 echo "Trace output file $trace_file-<pid>"
4806 if test "$spice" = "yes"; then
4807 echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
4808 else
4809 echo "spice support $spice"
4811 echo "rbd support $rbd"
4812 echo "xfsctl support $xfs"
4813 echo "smartcard support $smartcard"
4814 echo "libusb $libusb"
4815 echo "usb net redir $usb_redir"
4816 echo "OpenGL support $opengl"
4817 echo "libiscsi support $libiscsi"
4818 echo "libnfs support $libnfs"
4819 echo "build guest agent $guest_agent"
4820 echo "QGA VSS support $guest_agent_with_vss"
4821 echo "QGA w32 disk info $guest_agent_ntddscsi"
4822 echo "QGA MSI support $guest_agent_msi"
4823 echo "seccomp support $seccomp"
4824 echo "coroutine backend $coroutine"
4825 echo "coroutine pool $coroutine_pool"
4826 echo "GlusterFS support $glusterfs"
4827 echo "Archipelago support $archipelago"
4828 echo "gcov $gcov_tool"
4829 echo "gcov enabled $gcov"
4830 echo "TPM support $tpm"
4831 echo "libssh2 support $libssh2"
4832 echo "TPM passthrough $tpm_passthrough"
4833 echo "QOM debugging $qom_cast_debug"
4834 echo "vhdx $vhdx"
4835 echo "lzo support $lzo"
4836 echo "snappy support $snappy"
4837 echo "bzip2 support $bzip2"
4838 echo "NUMA host support $numa"
4839 echo "tcmalloc support $tcmalloc"
4840 echo "jemalloc support $jemalloc"
4842 if test "$sdl_too_old" = "yes"; then
4843 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4846 config_host_mak="config-host.mak"
4848 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4850 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4851 echo >> $config_host_mak
4853 echo all: >> $config_host_mak
4854 echo "prefix=$prefix" >> $config_host_mak
4855 echo "bindir=$bindir" >> $config_host_mak
4856 echo "libdir=$libdir" >> $config_host_mak
4857 echo "libexecdir=$libexecdir" >> $config_host_mak
4858 echo "includedir=$includedir" >> $config_host_mak
4859 echo "mandir=$mandir" >> $config_host_mak
4860 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4861 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4862 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4863 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4864 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4865 if test "$mingw32" = "no" ; then
4866 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4868 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4869 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4870 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4871 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4872 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4874 echo "ARCH=$ARCH" >> $config_host_mak
4876 if test "$debug_tcg" = "yes" ; then
4877 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4879 if test "$strip_opt" = "yes" ; then
4880 echo "STRIP=${strip}" >> $config_host_mak
4882 if test "$bigendian" = "yes" ; then
4883 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4885 if test "$mingw32" = "yes" ; then
4886 echo "CONFIG_WIN32=y" >> $config_host_mak
4887 echo "CONFIG_INSTALLER=y" >> $config_host_mak
4888 rc_version=`cat "$source_path/VERSION"`
4889 version_major=${rc_version%%.*}
4890 rc_version=${rc_version#*.}
4891 version_minor=${rc_version%%.*}
4892 rc_version=${rc_version#*.}
4893 version_subminor=${rc_version%%.*}
4894 version_micro=0
4895 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4896 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4897 if test "$guest_agent_with_vss" = "yes" ; then
4898 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4899 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
4900 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4902 if test "$guest_agent_ntddscsi" = "yes" ; then
4903 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4905 if test "$guest_agent_msi" = "yes"; then
4906 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4907 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4908 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4909 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4910 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4911 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4912 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4914 else
4915 echo "CONFIG_POSIX=y" >> $config_host_mak
4918 if test "$linux" = "yes" ; then
4919 echo "CONFIG_LINUX=y" >> $config_host_mak
4922 if test "$darwin" = "yes" ; then
4923 echo "CONFIG_DARWIN=y" >> $config_host_mak
4926 if test "$aix" = "yes" ; then
4927 echo "CONFIG_AIX=y" >> $config_host_mak
4930 if test "$solaris" = "yes" ; then
4931 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4932 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4933 if test "$needs_libsunmath" = "yes" ; then
4934 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4937 if test "$haiku" = "yes" ; then
4938 echo "CONFIG_HAIKU=y" >> $config_host_mak
4940 if test "$static" = "yes" ; then
4941 echo "CONFIG_STATIC=y" >> $config_host_mak
4943 if test "$profiler" = "yes" ; then
4944 echo "CONFIG_PROFILER=y" >> $config_host_mak
4946 if test "$slirp" = "yes" ; then
4947 echo "CONFIG_SLIRP=y" >> $config_host_mak
4948 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4950 if test "$vde" = "yes" ; then
4951 echo "CONFIG_VDE=y" >> $config_host_mak
4953 if test "$netmap" = "yes" ; then
4954 echo "CONFIG_NETMAP=y" >> $config_host_mak
4956 if test "$l2tpv3" = "yes" ; then
4957 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4959 if test "$cap_ng" = "yes" ; then
4960 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4962 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4963 for drv in $audio_drv_list; do
4964 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4965 echo "$def=y" >> $config_host_mak
4966 done
4967 if test "$audio_pt_int" = "yes" ; then
4968 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4970 if test "$audio_win_int" = "yes" ; then
4971 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4973 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4974 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4975 if test "$vnc" = "yes" ; then
4976 echo "CONFIG_VNC=y" >> $config_host_mak
4978 if test "$vnc_sasl" = "yes" ; then
4979 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4981 if test "$vnc_jpeg" = "yes" ; then
4982 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4984 if test "$vnc_png" = "yes" ; then
4985 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4987 if test "$fnmatch" = "yes" ; then
4988 echo "CONFIG_FNMATCH=y" >> $config_host_mak
4990 if test "$uuid" = "yes" ; then
4991 echo "CONFIG_UUID=y" >> $config_host_mak
4993 if test "$xfs" = "yes" ; then
4994 echo "CONFIG_XFS=y" >> $config_host_mak
4996 qemu_version=`head "$source_path/VERSION"`
4997 echo "VERSION=$qemu_version" >>$config_host_mak
4998 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4999 echo "SRC_PATH=$source_path" >> $config_host_mak
5000 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5001 if [ "$docs" = "yes" ] ; then
5002 echo "BUILD_DOCS=yes" >> $config_host_mak
5004 if [ "$want_tools" = "yes" ] ; then
5005 echo "BUILD_TOOLS=yes" >> $config_host_mak
5007 if test "$modules" = "yes"; then
5008 # $shacmd can generate a hash started with digit, which the compiler doesn't
5009 # like as an symbol. So prefix it with an underscore
5010 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
5011 echo "CONFIG_MODULES=y" >> $config_host_mak
5013 if test "$sdl" = "yes" ; then
5014 echo "CONFIG_SDL=y" >> $config_host_mak
5015 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5016 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5018 if test "$cocoa" = "yes" ; then
5019 echo "CONFIG_COCOA=y" >> $config_host_mak
5021 if test "$curses" = "yes" ; then
5022 echo "CONFIG_CURSES=y" >> $config_host_mak
5024 if test "$utimens" = "yes" ; then
5025 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
5027 if test "$pipe2" = "yes" ; then
5028 echo "CONFIG_PIPE2=y" >> $config_host_mak
5030 if test "$accept4" = "yes" ; then
5031 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5033 if test "$splice" = "yes" ; then
5034 echo "CONFIG_SPLICE=y" >> $config_host_mak
5036 if test "$eventfd" = "yes" ; then
5037 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5039 if test "$memfd" = "yes" ; then
5040 echo "CONFIG_MEMFD=y" >> $config_host_mak
5042 if test "$fallocate" = "yes" ; then
5043 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5045 if test "$fallocate_punch_hole" = "yes" ; then
5046 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5048 if test "$fallocate_zero_range" = "yes" ; then
5049 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5051 if test "$posix_fallocate" = "yes" ; then
5052 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5054 if test "$sync_file_range" = "yes" ; then
5055 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5057 if test "$fiemap" = "yes" ; then
5058 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5060 if test "$dup3" = "yes" ; then
5061 echo "CONFIG_DUP3=y" >> $config_host_mak
5063 if test "$ppoll" = "yes" ; then
5064 echo "CONFIG_PPOLL=y" >> $config_host_mak
5066 if test "$prctl_pr_set_timerslack" = "yes" ; then
5067 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5069 if test "$epoll" = "yes" ; then
5070 echo "CONFIG_EPOLL=y" >> $config_host_mak
5072 if test "$epoll_create1" = "yes" ; then
5073 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5075 if test "$epoll_pwait" = "yes" ; then
5076 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
5078 if test "$sendfile" = "yes" ; then
5079 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5081 if test "$timerfd" = "yes" ; then
5082 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5084 if test "$setns" = "yes" ; then
5085 echo "CONFIG_SETNS=y" >> $config_host_mak
5087 if test "$inotify" = "yes" ; then
5088 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5090 if test "$inotify1" = "yes" ; then
5091 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5093 if test "$byteswap_h" = "yes" ; then
5094 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5096 if test "$bswap_h" = "yes" ; then
5097 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5099 if test "$curl" = "yes" ; then
5100 echo "CONFIG_CURL=m" >> $config_host_mak
5101 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5102 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5104 if test "$brlapi" = "yes" ; then
5105 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5107 if test "$bluez" = "yes" ; then
5108 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5109 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5111 if test "$glib_subprocess" = "yes" ; then
5112 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5114 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
5115 if test "$gtk" = "yes" ; then
5116 echo "CONFIG_GTK=y" >> $config_host_mak
5117 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5118 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5119 if test "$gtk_gl" = "yes" ; then
5120 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5123 if test "$gnutls" = "yes" ; then
5124 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5126 if test "$gnutls_hash" = "yes" ; then
5127 echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
5129 if test "$gcrypt" = "yes" ; then
5130 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5132 if test "$nettle" = "yes" ; then
5133 echo "CONFIG_NETTLE=y" >> $config_host_mak
5134 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5136 if test "$tasn1" = "yes" ; then
5137 echo "CONFIG_TASN1=y" >> $config_host_mak
5139 if test "$vte" = "yes" ; then
5140 echo "CONFIG_VTE=y" >> $config_host_mak
5141 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5143 if test "$virglrenderer" = "yes" ; then
5144 echo "CONFIG_VIRGL=y" >> $config_host_mak
5145 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5146 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5148 if test "$xen" = "yes" ; then
5149 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5150 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5152 if test "$linux_aio" = "yes" ; then
5153 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5155 if test "$attr" = "yes" ; then
5156 echo "CONFIG_ATTR=y" >> $config_host_mak
5158 if test "$libattr" = "yes" ; then
5159 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5161 if test "$virtfs" = "yes" ; then
5162 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5164 if test "$vhost_scsi" = "yes" ; then
5165 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5167 if test "$vhost_net" = "yes" ; then
5168 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5170 if test "$blobs" = "yes" ; then
5171 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5173 if test "$iovec" = "yes" ; then
5174 echo "CONFIG_IOVEC=y" >> $config_host_mak
5176 if test "$preadv" = "yes" ; then
5177 echo "CONFIG_PREADV=y" >> $config_host_mak
5179 if test "$fdt" = "yes" ; then
5180 echo "CONFIG_FDT=y" >> $config_host_mak
5182 if test "$signalfd" = "yes" ; then
5183 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5185 if test "$tcg_interpreter" = "yes" ; then
5186 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5188 if test "$fdatasync" = "yes" ; then
5189 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5191 if test "$madvise" = "yes" ; then
5192 echo "CONFIG_MADVISE=y" >> $config_host_mak
5194 if test "$posix_madvise" = "yes" ; then
5195 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5197 if test "$sigev_thread_id" = "yes" ; then
5198 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
5201 if test "$spice" = "yes" ; then
5202 echo "CONFIG_SPICE=y" >> $config_host_mak
5205 if test "$smartcard" = "yes" ; then
5206 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5209 if test "$libusb" = "yes" ; then
5210 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5213 if test "$usb_redir" = "yes" ; then
5214 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5217 if test "$opengl" = "yes" ; then
5218 echo "CONFIG_OPENGL=y" >> $config_host_mak
5219 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5220 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5223 if test "$lzo" = "yes" ; then
5224 echo "CONFIG_LZO=y" >> $config_host_mak
5227 if test "$snappy" = "yes" ; then
5228 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5231 if test "$bzip2" = "yes" ; then
5232 echo "CONFIG_BZIP2=y" >> $config_host_mak
5233 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5236 if test "$libiscsi" = "yes" ; then
5237 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5238 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5239 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5242 if test "$libnfs" = "yes" ; then
5243 echo "CONFIG_LIBNFS=y" >> $config_host_mak
5246 if test "$seccomp" = "yes"; then
5247 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5250 # XXX: suppress that
5251 if [ "$bsd" = "yes" ] ; then
5252 echo "CONFIG_BSD=y" >> $config_host_mak
5255 if test "$zero_malloc" = "yes" ; then
5256 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
5258 if test "$localtime_r" = "yes" ; then
5259 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5261 if test "$qom_cast_debug" = "yes" ; then
5262 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5264 if test "$rbd" = "yes" ; then
5265 echo "CONFIG_RBD=m" >> $config_host_mak
5266 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5267 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5270 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5271 if test "$coroutine_pool" = "yes" ; then
5272 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5273 else
5274 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5277 if test "$open_by_handle_at" = "yes" ; then
5278 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5281 if test "$linux_magic_h" = "yes" ; then
5282 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5285 if test "$pragma_diagnostic_available" = "yes" ; then
5286 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5289 if test "$valgrind_h" = "yes" ; then
5290 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5293 if test "$has_environ" = "yes" ; then
5294 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5297 if test "$cpuid_h" = "yes" ; then
5298 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5301 if test "$int128" = "yes" ; then
5302 echo "CONFIG_INT128=y" >> $config_host_mak
5305 if test "$getauxval" = "yes" ; then
5306 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5309 if test "$glusterfs" = "yes" ; then
5310 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5311 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5312 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5315 if test "$glusterfs_discard" = "yes" ; then
5316 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5319 if test "$glusterfs_zerofill" = "yes" ; then
5320 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5323 if test "$archipelago" = "yes" ; then
5324 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5325 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5328 if test "$libssh2" = "yes" ; then
5329 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5330 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5331 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5334 if test "$vhdx" = "yes" ; then
5335 echo "CONFIG_VHDX=y" >> $config_host_mak
5338 # USB host support
5339 if test "$libusb" = "yes"; then
5340 echo "HOST_USB=libusb legacy" >> $config_host_mak
5341 else
5342 echo "HOST_USB=stub" >> $config_host_mak
5345 # TPM passthrough support?
5346 if test "$tpm" = "yes"; then
5347 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5348 if test "$tpm_passthrough" = "yes"; then
5349 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5353 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5354 if have_backend "nop"; then
5355 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5357 if have_backend "simple"; then
5358 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5359 # Set the appropriate trace file.
5360 trace_file="\"$trace_file-\" FMT_pid"
5362 if have_backend "stderr"; then
5363 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5365 if have_backend "ust"; then
5366 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5368 if have_backend "dtrace"; then
5369 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5370 if test "$trace_backend_stap" = "yes" ; then
5371 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5374 if have_backend "ftrace"; then
5375 if test "$linux" = "yes" ; then
5376 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5377 else
5378 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5381 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5383 if test "$rdma" = "yes" ; then
5384 echo "CONFIG_RDMA=y" >> $config_host_mak
5387 # Hold two types of flag:
5388 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5389 # a thread we have a handle to
5390 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5391 # platform
5392 if test "$pthread_setname_np" = "yes" ; then
5393 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5394 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5397 if test "$tcg_interpreter" = "yes"; then
5398 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5399 elif test "$ARCH" = "sparc64" ; then
5400 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5401 elif test "$ARCH" = "s390x" ; then
5402 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5403 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5404 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5405 elif test "$ARCH" = "ppc64" ; then
5406 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5407 else
5408 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5410 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5412 echo "TOOLS=$tools" >> $config_host_mak
5413 echo "ROMS=$roms" >> $config_host_mak
5414 echo "MAKE=$make" >> $config_host_mak
5415 echo "INSTALL=$install" >> $config_host_mak
5416 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5417 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5418 if test -n "$libtool"; then
5419 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5420 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5421 else
5422 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5423 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5425 echo "PYTHON=$python" >> $config_host_mak
5426 echo "CC=$cc" >> $config_host_mak
5427 if $iasl -h > /dev/null 2>&1; then
5428 echo "IASL=$iasl" >> $config_host_mak
5430 echo "CC_I386=$cc_i386" >> $config_host_mak
5431 echo "HOST_CC=$host_cc" >> $config_host_mak
5432 echo "CXX=$cxx" >> $config_host_mak
5433 echo "OBJCC=$objcc" >> $config_host_mak
5434 echo "AR=$ar" >> $config_host_mak
5435 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5436 echo "AS=$as" >> $config_host_mak
5437 echo "CPP=$cpp" >> $config_host_mak
5438 echo "OBJCOPY=$objcopy" >> $config_host_mak
5439 echo "LD=$ld" >> $config_host_mak
5440 echo "NM=$nm" >> $config_host_mak
5441 echo "WINDRES=$windres" >> $config_host_mak
5442 echo "LIBTOOL=$libtool" >> $config_host_mak
5443 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5444 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5445 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5446 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5447 if test "$sparse" = "yes" ; then
5448 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5449 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5450 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5451 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5452 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5454 if test "$cross_prefix" != ""; then
5455 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5456 else
5457 echo "AUTOCONF_HOST := " >> $config_host_mak
5459 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5460 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5461 echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5462 echo "LIBS+=$LIBS" >> $config_host_mak
5463 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5464 echo "EXESUF=$EXESUF" >> $config_host_mak
5465 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5466 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5467 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5468 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5469 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5470 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5471 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5472 if test "$gcov" = "yes" ; then
5473 echo "CONFIG_GCOV=y" >> $config_host_mak
5474 echo "GCOV=$gcov_tool" >> $config_host_mak
5477 # use included Linux headers
5478 if test "$linux" = "yes" ; then
5479 mkdir -p linux-headers
5480 case "$cpu" in
5481 i386|x86_64|x32)
5482 linux_arch=x86
5484 ppcemb|ppc|ppc64)
5485 linux_arch=powerpc
5487 s390x)
5488 linux_arch=s390
5490 aarch64)
5491 linux_arch=arm64
5493 mips64)
5494 linux_arch=mips
5497 # For most CPUs the kernel architecture name and QEMU CPU name match.
5498 linux_arch="$cpu"
5500 esac
5501 # For non-KVM architectures we will not have asm headers
5502 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5503 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5507 for target in $target_list; do
5508 target_dir="$target"
5509 config_target_mak=$target_dir/config-target.mak
5510 target_name=`echo $target | cut -d '-' -f 1`
5511 target_bigendian="no"
5513 case "$target_name" in
5514 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5515 target_bigendian=yes
5517 esac
5518 target_softmmu="no"
5519 target_user_only="no"
5520 target_linux_user="no"
5521 target_bsd_user="no"
5522 case "$target" in
5523 ${target_name}-softmmu)
5524 target_softmmu="yes"
5526 ${target_name}-linux-user)
5527 if test "$linux" != "yes" ; then
5528 error_exit "Target '$target' is only available on a Linux host"
5530 target_user_only="yes"
5531 target_linux_user="yes"
5533 ${target_name}-bsd-user)
5534 if test "$bsd" != "yes" ; then
5535 error_exit "Target '$target' is only available on a BSD host"
5537 target_user_only="yes"
5538 target_bsd_user="yes"
5541 error_exit "Target '$target' not recognised"
5542 exit 1
5544 esac
5546 mkdir -p $target_dir
5547 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5549 bflt="no"
5550 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5551 gdb_xml_files=""
5553 TARGET_ARCH="$target_name"
5554 TARGET_BASE_ARCH=""
5555 TARGET_ABI_DIR=""
5557 case "$target_name" in
5558 i386)
5560 x86_64)
5561 TARGET_BASE_ARCH=i386
5563 alpha)
5565 arm|armeb)
5566 TARGET_ARCH=arm
5567 bflt="yes"
5568 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5570 aarch64)
5571 TARGET_BASE_ARCH=arm
5572 bflt="yes"
5573 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5575 cris)
5577 lm32)
5579 m68k)
5580 bflt="yes"
5581 gdb_xml_files="cf-core.xml cf-fp.xml"
5583 microblaze|microblazeel)
5584 TARGET_ARCH=microblaze
5585 bflt="yes"
5587 mips|mipsel)
5588 TARGET_ARCH=mips
5589 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5591 mipsn32|mipsn32el)
5592 TARGET_ARCH=mips64
5593 TARGET_BASE_ARCH=mips
5594 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5595 echo "TARGET_ABI32=y" >> $config_target_mak
5597 mips64|mips64el)
5598 TARGET_ARCH=mips64
5599 TARGET_BASE_ARCH=mips
5600 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5602 moxie)
5604 or32)
5605 TARGET_ARCH=openrisc
5606 TARGET_BASE_ARCH=openrisc
5608 ppc)
5609 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5611 ppcemb)
5612 TARGET_BASE_ARCH=ppc
5613 TARGET_ABI_DIR=ppc
5614 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5616 ppc64)
5617 TARGET_BASE_ARCH=ppc
5618 TARGET_ABI_DIR=ppc
5619 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5621 ppc64le)
5622 TARGET_ARCH=ppc64
5623 TARGET_BASE_ARCH=ppc
5624 TARGET_ABI_DIR=ppc
5625 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5627 ppc64abi32)
5628 TARGET_ARCH=ppc64
5629 TARGET_BASE_ARCH=ppc
5630 TARGET_ABI_DIR=ppc
5631 echo "TARGET_ABI32=y" >> $config_target_mak
5632 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5634 sh4|sh4eb)
5635 TARGET_ARCH=sh4
5636 bflt="yes"
5638 sparc)
5640 sparc64)
5641 TARGET_BASE_ARCH=sparc
5643 sparc32plus)
5644 TARGET_ARCH=sparc64
5645 TARGET_BASE_ARCH=sparc
5646 TARGET_ABI_DIR=sparc
5647 echo "TARGET_ABI32=y" >> $config_target_mak
5649 s390x)
5650 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
5652 tilegx)
5654 tricore)
5656 unicore32)
5658 xtensa|xtensaeb)
5659 TARGET_ARCH=xtensa
5662 error_exit "Unsupported target CPU"
5664 esac
5665 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5666 if [ "$TARGET_BASE_ARCH" = "" ]; then
5667 TARGET_BASE_ARCH=$TARGET_ARCH
5670 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5672 upper() {
5673 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5676 target_arch_name="`upper $TARGET_ARCH`"
5677 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5678 echo "TARGET_NAME=$target_name" >> $config_target_mak
5679 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5680 if [ "$TARGET_ABI_DIR" = "" ]; then
5681 TARGET_ABI_DIR=$TARGET_ARCH
5683 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5684 if [ "$HOST_VARIANT_DIR" != "" ]; then
5685 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5687 case "$target_name" in
5688 i386|x86_64)
5689 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5690 echo "CONFIG_XEN=y" >> $config_target_mak
5691 if test "$xen_pci_passthrough" = yes; then
5692 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5697 esac
5698 case "$target_name" in
5699 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5700 # Make sure the target and host cpus are compatible
5701 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5702 \( "$target_name" = "$cpu" -o \
5703 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5704 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5705 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5706 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5707 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5708 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5709 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5710 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5711 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5712 echo "CONFIG_KVM=y" >> $config_target_mak
5713 if test "$vhost_net" = "yes" ; then
5714 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5717 esac
5718 if test "$target_bigendian" = "yes" ; then
5719 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5721 if test "$target_softmmu" = "yes" ; then
5722 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5724 if test "$target_user_only" = "yes" ; then
5725 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5726 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5728 if test "$target_linux_user" = "yes" ; then
5729 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5731 list=""
5732 if test ! -z "$gdb_xml_files" ; then
5733 for x in $gdb_xml_files; do
5734 list="$list $source_path/gdb-xml/$x"
5735 done
5736 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5739 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5740 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5742 if test "$target_bsd_user" = "yes" ; then
5743 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5746 # generate QEMU_CFLAGS/LDFLAGS for targets
5748 cflags=""
5749 ldflags=""
5751 disas_config() {
5752 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5753 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5756 for i in $ARCH $TARGET_BASE_ARCH ; do
5757 case "$i" in
5758 alpha)
5759 disas_config "ALPHA"
5761 aarch64)
5762 if test -n "${cxx}"; then
5763 disas_config "ARM_A64"
5766 arm)
5767 disas_config "ARM"
5768 if test -n "${cxx}"; then
5769 disas_config "ARM_A64"
5772 cris)
5773 disas_config "CRIS"
5775 hppa)
5776 disas_config "HPPA"
5778 i386|x86_64|x32)
5779 disas_config "I386"
5781 ia64*)
5782 disas_config "IA64"
5784 lm32)
5785 disas_config "LM32"
5787 m68k)
5788 disas_config "M68K"
5790 microblaze*)
5791 disas_config "MICROBLAZE"
5793 mips*)
5794 disas_config "MIPS"
5796 moxie*)
5797 disas_config "MOXIE"
5799 or32)
5800 disas_config "OPENRISC"
5802 ppc*)
5803 disas_config "PPC"
5805 s390*)
5806 disas_config "S390"
5808 sh4)
5809 disas_config "SH4"
5811 sparc*)
5812 disas_config "SPARC"
5814 xtensa*)
5815 disas_config "XTENSA"
5817 esac
5818 done
5819 if test "$tcg_interpreter" = "yes" ; then
5820 disas_config "TCI"
5823 case "$ARCH" in
5824 alpha)
5825 # Ensure there's only a single GP
5826 cflags="-msmall-data $cflags"
5828 esac
5830 if test "$gprof" = "yes" ; then
5831 echo "TARGET_GPROF=yes" >> $config_target_mak
5832 if test "$target_linux_user" = "yes" ; then
5833 cflags="-p $cflags"
5834 ldflags="-p $ldflags"
5836 if test "$target_softmmu" = "yes" ; then
5837 ldflags="-p $ldflags"
5838 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5842 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5843 ldflags="$ldflags $textseg_ldflags"
5846 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5847 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5849 done # for target in $targets
5851 if [ "$pixman" = "internal" ]; then
5852 echo "config-host.h: subdir-pixman" >> $config_host_mak
5855 if [ "$dtc_internal" = "yes" ]; then
5856 echo "config-host.h: subdir-dtc" >> $config_host_mak
5859 if test "$numa" = "yes"; then
5860 echo "CONFIG_NUMA=y" >> $config_host_mak
5863 if test "$ccache_cpp2" = "yes"; then
5864 echo "export CCACHE_CPP2=y" >> $config_host_mak
5867 # build tree in object directory in case the source is not in the current directory
5868 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5869 DIRS="$DIRS fsdev"
5870 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5871 DIRS="$DIRS roms/seabios roms/vgabios"
5872 DIRS="$DIRS qapi-generated"
5873 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5874 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5875 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5876 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5877 FILES="$FILES pc-bios/spapr-rtas/Makefile"
5878 FILES="$FILES pc-bios/s390-ccw/Makefile"
5879 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5880 FILES="$FILES pc-bios/qemu-icon.bmp"
5881 for bios_file in \
5882 $source_path/pc-bios/*.bin \
5883 $source_path/pc-bios/*.aml \
5884 $source_path/pc-bios/*.rom \
5885 $source_path/pc-bios/*.dtb \
5886 $source_path/pc-bios/*.img \
5887 $source_path/pc-bios/openbios-* \
5888 $source_path/pc-bios/u-boot.* \
5889 $source_path/pc-bios/palcode-*
5891 FILES="$FILES pc-bios/`basename $bios_file`"
5892 done
5893 for test_file in `find $source_path/tests/acpi-test-data -type f`
5895 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5896 done
5897 mkdir -p $DIRS
5898 for f in $FILES ; do
5899 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5900 symlink "$source_path/$f" "$f"
5902 done
5904 # temporary config to build submodules
5905 for rom in seabios vgabios ; do
5906 config_mak=roms/$rom/config.mak
5907 echo "# Automatically generated by configure - do not modify" > $config_mak
5908 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5909 echo "AS=$as" >> $config_mak
5910 echo "CC=$cc" >> $config_mak
5911 echo "BCC=bcc" >> $config_mak
5912 echo "CPP=$cpp" >> $config_mak
5913 echo "OBJCOPY=objcopy" >> $config_mak
5914 echo "IASL=$iasl" >> $config_mak
5915 echo "LD=$ld" >> $config_mak
5916 done
5918 # set up qemu-iotests in this build directory
5919 iotests_common_env="tests/qemu-iotests/common.env"
5920 iotests_check="tests/qemu-iotests/check"
5922 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5923 echo >> "$iotests_common_env"
5924 echo "export PYTHON='$python'" >> "$iotests_common_env"
5926 if [ ! -e "$iotests_check" ]; then
5927 symlink "$source_path/$iotests_check" "$iotests_check"
5930 # Save the configure command line for later reuse.
5931 cat <<EOD >config.status
5932 #!/bin/sh
5933 # Generated by configure.
5934 # Run this file to recreate the current configuration.
5935 # Compiler output produced by configure, useful for debugging
5936 # configure, is in config.log if it exists.
5938 printf "exec" >>config.status
5939 printf " '%s'" "$0" "$@" >>config.status
5940 echo >>config.status
5941 chmod +x config.status
5943 rm -r "$TMPDIR1"