Merge tag 'v2.7.0-rc3'
[qemu/ar7.git] / configure
blob2fe015f936ada2a9ea9fd0300944396e1fb2d591
1 #!/bin/sh
3 # qemu configure script (c) 2003 Fabrice Bellard
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
14 # Temporary directory used for files created while
15 # configure runs. Since it is in the build directory
16 # we can safely blow away any previous version of it
17 # (and we need not jump through hoops to try to delete
18 # it when configure exits.)
19 TMPDIR1="config-temp"
20 rm -rf "${TMPDIR1}"
21 mkdir -p "${TMPDIR1}"
22 if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPL="${TMPDIR1}/${TMPB}.lo"
32 TMPA="${TMPDIR1}/lib${TMPB}.la"
33 TMPE="${TMPDIR1}/${TMPB}.exe"
34 TMPMO="${TMPDIR1}/${TMPB}.mo"
36 rm -f config.log
38 # Print a helpful header at the top of config.log
39 echo "# QEMU configure log $(date)" >> config.log
40 printf "# Configured with:" >> config.log
41 printf " '%s'" "$0" "$@" >> config.log
42 echo >> config.log
43 echo "#" >> config.log
45 error_exit() {
46 echo
47 echo "ERROR: $1"
48 while test -n "$2"; do
49 echo " $2"
50 shift
51 done
52 echo
53 exit 1
56 do_compiler() {
57 # Run the compiler, capturing its output to the log. First argument
58 # is compiler binary to execute.
59 local compiler="$1"
60 shift
61 echo $compiler "$@" >> config.log
62 $compiler "$@" >> config.log 2>&1 || return $?
63 # Test passed. If this is an --enable-werror build, rerun
64 # the test with -Werror and bail out if it fails. This
65 # makes warning-generating-errors in configure test code
66 # obvious to developers.
67 if test "$werror" != "yes"; then
68 return 0
70 # Don't bother rerunning the compile if we were already using -Werror
71 case "$*" in
72 *-Werror*)
73 return 0
75 esac
76 echo $compiler -Werror "$@" >> config.log
77 $compiler -Werror "$@" >> config.log 2>&1 && return $?
78 error_exit "configure test passed without -Werror but failed with -Werror." \
79 "This is probably a bug in the configure script. The failing command" \
80 "will be at the bottom of config.log." \
81 "You can run configure with --disable-werror to bypass this check."
84 do_cc() {
85 do_compiler "$cc" "$@"
88 do_cxx() {
89 do_compiler "$cxx" "$@"
92 update_cxxflags() {
93 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
94 # options which some versions of GCC's C++ compiler complain about
95 # because they only make sense for C programs.
96 QEMU_CXXFLAGS=
97 for arg in $QEMU_CFLAGS; do
98 case $arg in
99 -Wno-override-init|\
100 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
101 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
104 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
106 esac
107 done
110 compile_object() {
111 local_cflags="$1"
112 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
115 compile_prog() {
116 local_cflags="$1"
117 local_ldflags="$2"
118 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
121 # symbolically link $1 to $2. Portable version of "ln -sf".
122 symlink() {
123 rm -rf "$2"
124 mkdir -p "$(dirname "$2")"
125 ln -s "$1" "$2"
128 # check whether a command is available to this shell (may be either an
129 # executable or a builtin)
130 has() {
131 type "$1" >/dev/null 2>&1
134 # search for an executable in PATH
135 path_of() {
136 local_command="$1"
137 local_ifs="$IFS"
138 local_dir=""
140 # pathname has a dir component?
141 if [ "${local_command#*/}" != "$local_command" ]; then
142 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
143 echo "$local_command"
144 return 0
147 if [ -z "$local_command" ]; then
148 return 1
151 IFS=:
152 for local_dir in $PATH; do
153 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
154 echo "$local_dir/$local_command"
155 IFS="${local_ifs:-$(printf ' \t\n')}"
156 return 0
158 done
159 # not found
160 IFS="${local_ifs:-$(printf ' \t\n')}"
161 return 1
164 have_backend () {
165 echo "$trace_backends" | grep "$1" >/dev/null
168 # default parameters
169 source_path=$(dirname "$0")
170 cpu=""
171 iasl="iasl"
172 interp_prefix="/usr/gnemul/qemu-%M"
173 static="no"
174 cross_prefix=""
175 audio_drv_list=""
176 block_drv_rw_whitelist=""
177 block_drv_ro_whitelist=""
178 host_cc="cc"
179 libs_softmmu=""
180 libs_tools=""
181 audio_pt_int=""
182 audio_win_int=""
183 cc_i386=i386-pc-linux-gnu-gcc
184 libs_qga=""
185 debug_info="yes"
186 stack_protector=""
188 # Don't accept a target_list environment variable.
189 unset target_list
191 # Default value for a variable defining feature "foo".
192 # * foo="no" feature will only be used if --enable-foo arg is given
193 # * foo="" feature will be searched for, and if found, will be used
194 # unless --disable-foo is given
195 # * foo="yes" this value will only be set by --enable-foo flag.
196 # feature will searched for,
197 # if not found, configure exits with error
199 # Always add --enable-foo and --disable-foo command line args.
200 # Distributions want to ensure that several features are compiled in, and it
201 # is impossible without a --enable-foo that exits if a feature is not found.
203 bluez=""
204 brlapi=""
205 curl=""
206 curses=""
207 docs=""
208 fdt=""
209 netmap="no"
210 pixman=""
211 sdl=""
212 sdlabi=""
213 virtfs=""
214 vnc="yes"
215 sparse="no"
216 uuid=""
217 vde=""
218 vnc_sasl=""
219 vnc_jpeg=""
220 vnc_png=""
221 xen=""
222 xen_ctrl_version=""
223 xen_pv_domain_build="no"
224 xen_pci_passthrough=""
225 linux_aio=""
226 cap_ng=""
227 attr=""
228 libattr=""
229 xfs=""
231 vhost_net="no"
232 vhost_scsi="no"
233 kvm="no"
234 rdma=""
235 gprof="no"
236 debug_tcg="no"
237 debug="no"
238 fortify_source=""
239 strip_opt="yes"
240 tcg_interpreter="no"
241 bigendian="no"
242 mingw32="no"
243 gcov="no"
244 gcov_tool="gcov"
245 EXESUF=""
246 DSOSUF=".so"
247 LDFLAGS_SHARED="-shared"
248 modules="no"
249 prefix="/usr/local"
250 mandir="\${prefix}/share/man"
251 datadir="\${prefix}/share"
252 qemu_docdir="\${prefix}/share/doc/qemu"
253 bindir="\${prefix}/bin"
254 libdir="\${prefix}/lib"
255 libexecdir="\${prefix}/libexec"
256 includedir="\${prefix}/include"
257 sysconfdir="\${prefix}/etc"
258 local_statedir="\${prefix}/var"
259 confsuffix="/qemu"
260 slirp="yes"
261 oss_lib=""
262 bsd="no"
263 haiku="no"
264 linux="no"
265 solaris="no"
266 profiler="no"
267 cocoa="no"
268 softmmu="yes"
269 linux_user="no"
270 bsd_user="no"
271 aix="no"
272 blobs="yes"
273 pkgversion=""
274 pie=""
275 qom_cast_debug="yes"
276 trace_backends="log"
277 trace_file="trace"
278 spice=""
279 rbd=""
280 smartcard=""
281 libusb=""
282 usb_redir=""
283 opengl=""
284 opengl_dmabuf="no"
285 avx2_opt="no"
286 zlib="yes"
287 lzo=""
288 snappy=""
289 bzip2=""
290 guest_agent=""
291 guest_agent_with_vss="no"
292 guest_agent_ntddscsi="no"
293 guest_agent_msi=""
294 vss_win32_sdk=""
295 win_sdk="no"
296 want_tools="yes"
297 libiscsi=""
298 libnfs=""
299 coroutine=""
300 coroutine_pool=""
301 seccomp=""
302 glusterfs=""
303 glusterfs_xlator_opt="no"
304 glusterfs_discard="no"
305 glusterfs_zerofill="no"
306 archipelago="no"
307 gtk=""
308 gtkabi=""
309 gtk_gl="no"
310 tls_priority="NORMAL"
311 gnutls=""
312 gnutls_rnd=""
313 nettle=""
314 nettle_kdf="no"
315 gcrypt=""
316 gcrypt_kdf="no"
317 vte=""
318 virglrenderer=""
319 tpm="yes"
320 libssh2=""
321 vhdx=""
322 numa=""
323 tcmalloc="no"
324 jemalloc="no"
326 # parse CC options first
327 for opt do
328 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
329 case "$opt" in
330 --cross-prefix=*) cross_prefix="$optarg"
332 --cc=*) CC="$optarg"
334 --cxx=*) CXX="$optarg"
336 --source-path=*) source_path="$optarg"
338 --cpu=*) cpu="$optarg"
340 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
341 EXTRA_CFLAGS="$optarg"
343 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
344 EXTRA_LDFLAGS="$optarg"
346 --enable-debug-info) debug_info="yes"
348 --disable-debug-info) debug_info="no"
350 esac
351 done
352 # OS specific
353 # Using uname is really, really broken. Once we have the right set of checks
354 # we can eliminate its usage altogether.
356 # Preferred compiler:
357 # ${CC} (if set)
358 # ${cross_prefix}gcc (if cross-prefix specified)
359 # system compiler
360 if test -z "${CC}${cross_prefix}"; then
361 cc="$host_cc"
362 else
363 cc="${CC-${cross_prefix}gcc}"
366 if test -z "${CXX}${cross_prefix}"; then
367 cxx="c++"
368 else
369 cxx="${CXX-${cross_prefix}g++}"
372 ar="${AR-${cross_prefix}ar}"
373 as="${AS-${cross_prefix}as}"
374 ccas="${CCAS-$cc}"
375 cpp="${CPP-$cc -E}"
376 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
377 ld="${LD-${cross_prefix}ld}"
378 nm="${NM-${cross_prefix}nm}"
379 strip="${STRIP-${cross_prefix}strip}"
380 windres="${WINDRES-${cross_prefix}windres}"
381 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
382 query_pkg_config() {
383 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
385 pkg_config=query_pkg_config
386 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
387 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
389 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
390 ARFLAGS="${ARFLAGS-rv}"
392 # default flags for all hosts
393 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
394 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
395 QEMU_CFLAGS="-Wmissing-format-attribute $QEMU_CFLAGS"
396 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
397 QEMU_CFLAGS="-Wno-unused-parameter $QEMU_CFLAGS"
398 QEMU_CFLAGS="-Wno-missing-field-initializers $QEMU_CFLAGS"
399 QEMU_CFLAGS="-Wno-sign-compare $QEMU_CFLAGS"
400 QEMU_CFLAGS="-Wno-override-init $QEMU_CFLAGS"
401 QEMU_CFLAGS="-Wno-error=format $QEMU_CFLAGS"
402 QEMU_CFLAGS="-Wno-error=format-extra-args $QEMU_CFLAGS"
403 QEMU_CFLAGS="-Wno-error=parentheses $QEMU_CFLAGS"
404 QEMU_CFLAGS="-Wextra $QEMU_CFLAGS"
405 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
406 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
407 if test "$debug_info" = "yes"; then
408 CFLAGS="-g $CFLAGS"
409 LDFLAGS="-g $LDFLAGS"
412 # make source path absolute
413 source_path=$(cd "$source_path"; pwd)
415 cc_macros=$($cc $QEMU_CFLAGS -E -dD - </dev/null)
417 # running configure in the source tree?
418 # we know that's the case if configure is there.
419 if test -f "./configure"; then
420 pwd_is_source_path="y"
421 else
422 pwd_is_source_path="n"
425 check_define() {
426 rm -f $TMPC
427 cat > $TMPC <<EOF
428 #if !defined($1)
429 #error $1 not defined
430 #endif
431 int main(void) { return 0; }
433 compile_object
436 check_include() {
437 cat > $TMPC <<EOF
438 #include <$1>
439 int main(void) { return 0; }
441 compile_object
444 write_c_skeleton() {
445 cat > $TMPC <<EOF
446 int main(void) { return 0; }
450 if check_define __linux__ ; then
451 targetos="Linux"
452 elif check_define _WIN32 ; then
453 targetos='MINGW32'
454 elif check_define __OpenBSD__ ; then
455 targetos='OpenBSD'
456 elif check_define __sun__ ; then
457 targetos='SunOS'
458 elif check_define __HAIKU__ ; then
459 targetos='Haiku'
460 else
461 targetos=$(uname -s)
464 # Some host OSes need non-standard checks for which CPU to use.
465 # Note that these checks are broken for cross-compilation: if you're
466 # cross-compiling to one of these OSes then you'll need to specify
467 # the correct CPU with the --cpu option.
468 case $targetos in
469 Darwin)
470 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
471 # run 64-bit userspace code.
472 # If the user didn't specify a CPU explicitly and the kernel says this is
473 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
474 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
475 cpu="x86_64"
478 SunOS)
479 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
480 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
481 cpu="x86_64"
483 esac
485 if test ! -z "$cpu" ; then
486 # command line argument
488 elif check_define __i386__ ; then
489 cpu="i386"
490 elif check_define __x86_64__ ; then
491 if check_define __ILP32__ ; then
492 cpu="x32"
493 else
494 cpu="x86_64"
496 elif check_define __sparc__ ; then
497 if check_define __arch64__ ; then
498 cpu="sparc64"
499 else
500 cpu="sparc"
502 elif check_define _ARCH_PPC ; then
503 if check_define _ARCH_PPC64 ; then
504 cpu="ppc64"
505 else
506 cpu="ppc"
508 elif check_define __mips__ ; then
509 if check_define __mips64 ; then
510 cpu="mips64"
511 else
512 cpu="mips"
514 elif check_define __ia64__ ; then
515 cpu="ia64"
516 elif check_define __s390__ ; then
517 if check_define __s390x__ ; then
518 cpu="s390x"
519 else
520 cpu="s390"
522 elif check_define __arm__ ; then
523 cpu="arm"
524 elif check_define __aarch64__ ; then
525 cpu="aarch64"
526 elif check_define __hppa__ ; then
527 cpu="hppa"
528 else
529 cpu=$(uname -m)
532 ARCH=
533 # Normalise host CPU name and set ARCH.
534 # Note that this case should only have supported host CPUs, not guests.
535 case "$cpu" in
536 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
537 cpu="$cpu"
539 i386|i486|i586|i686|i86pc|BePC)
540 cpu="i386"
542 x86_64|amd64)
543 cpu="x86_64"
545 armv*b|armv*l|arm)
546 cpu="arm"
548 aarch64)
549 cpu="aarch64"
551 mips*)
552 cpu="mips"
553 if check_define __MIPSEL__ ; then
554 cpu="${cpu}el"
557 sparc|sun4[cdmuv])
558 cpu="sparc"
560 sh4)
561 cpu="sh4"
564 # This will result in either an error or falling back to TCI later
565 ARCH=unknown
567 esac
568 if test -z "$ARCH"; then
569 ARCH="$cpu"
572 # OS specific
574 # host *BSD for user mode
575 HOST_VARIANT_DIR=""
577 case $targetos in
578 CYGWIN*)
579 mingw32="yes"
580 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
581 audio_possible_drivers="sdl"
582 audio_drv_list="sdl"
584 MINGW32*)
585 mingw32="yes"
586 audio_possible_drivers="dsound sdl"
587 if check_include dsound.h; then
588 audio_drv_list="dsound"
589 else
590 audio_drv_list=""
593 GNU/kFreeBSD)
594 bsd="yes"
595 audio_drv_list="oss"
596 audio_possible_drivers="oss sdl pa"
598 FreeBSD)
599 bsd="yes"
600 make="${MAKE-gmake}"
601 audio_drv_list="oss"
602 audio_possible_drivers="oss sdl pa"
603 # needed for kinfo_getvmmap(3) in libutil.h
604 LIBS="-lutil $LIBS"
605 netmap="" # enable netmap autodetect
606 HOST_VARIANT_DIR="freebsd"
608 DragonFly)
609 bsd="yes"
610 make="${MAKE-gmake}"
611 audio_drv_list="oss"
612 audio_possible_drivers="oss sdl pa"
613 HOST_VARIANT_DIR="dragonfly"
615 NetBSD)
616 bsd="yes"
617 make="${MAKE-gmake}"
618 audio_drv_list="oss"
619 audio_possible_drivers="oss sdl"
620 oss_lib="-lossaudio"
621 HOST_VARIANT_DIR="netbsd"
623 OpenBSD)
624 bsd="yes"
625 make="${MAKE-gmake}"
626 audio_drv_list="sdl"
627 audio_possible_drivers="sdl"
628 HOST_VARIANT_DIR="openbsd"
630 Darwin)
631 bsd="yes"
632 darwin="yes"
633 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
634 if [ "$cpu" = "x86_64" ] ; then
635 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
636 LDFLAGS="-arch x86_64 $LDFLAGS"
638 cocoa="yes"
639 audio_drv_list="coreaudio"
640 audio_possible_drivers="coreaudio sdl"
641 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
642 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
643 # Disable attempts to use ObjectiveC features in os/object.h since they
644 # won't work when we're compiling with gcc as a C compiler.
645 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
646 HOST_VARIANT_DIR="darwin"
648 SunOS)
649 solaris="yes"
650 make="${MAKE-gmake}"
651 install="${INSTALL-ginstall}"
652 ld="gld"
653 smbd="${SMBD-/usr/sfw/sbin/smbd}"
654 needs_libsunmath="no"
655 solarisrev=$(uname -r | cut -f2 -d.)
656 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
657 if test "$solarisrev" -le 9 ; then
658 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
659 needs_libsunmath="yes"
660 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
661 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
662 LIBS="-lsunmath $LIBS"
663 else
664 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
665 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
666 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
667 "Studio 11 can be downloaded from www.sun.com."
671 if test -f /usr/include/sys/soundcard.h ; then
672 audio_drv_list="oss"
674 audio_possible_drivers="oss sdl"
675 # needed for CMSG_ macros in sys/socket.h
676 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
677 # needed for TIOCWIN* defines in termios.h
678 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
679 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
680 solarisnetlibs="-lsocket -lnsl -lresolv"
681 LIBS="$solarisnetlibs $LIBS"
682 libs_qga="$solarisnetlibs $libs_qga"
684 AIX)
685 aix="yes"
686 make="${MAKE-gmake}"
688 Haiku)
689 haiku="yes"
690 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
691 LIBS="-lposix_error_mapper -lnetwork $LIBS"
694 audio_drv_list="oss"
695 audio_possible_drivers="oss alsa sdl pa"
696 linux="yes"
697 linux_user="yes"
698 kvm="yes"
699 vhost_net="yes"
700 vhost_scsi="yes"
701 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
703 esac
705 if [ "$bsd" = "yes" ] ; then
706 if [ "$darwin" != "yes" ] ; then
707 bsd_user="yes"
711 : ${make=${MAKE-make}}
712 : ${install=${INSTALL-install}}
713 : ${python=${PYTHON-python}}
714 : ${smbd=${SMBD-/usr/sbin/smbd}}
716 # Default objcc to clang if available, otherwise use CC
717 if has clang; then
718 objcc=clang
719 else
720 objcc="$cc"
723 if test "$mingw32" = "yes" ; then
724 EXESUF=".exe"
725 DSOSUF=".dll"
726 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
727 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
728 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
729 # MinGW-w64 needs _POSIX defined.
730 QEMU_CFLAGS="-D_POSIX=1 $QEMU_CFLAGS"
731 # MinGW needs -mthreads for TLS and macro _MT.
732 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
733 QEMU_CFLAGS="-I\$(SRC_PATH)/hosts/w32/include $QEMU_CFLAGS"
734 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
735 write_c_skeleton;
736 if compile_prog "" "-liberty" ; then
737 LIBS="-liberty $LIBS"
739 prefix="c:/Program Files/QEMU"
740 mandir="\${prefix}"
741 datadir="\${prefix}"
742 qemu_docdir="\${prefix}"
743 bindir="\${prefix}"
744 sysconfdir="\${prefix}"
745 local_statedir=
746 confsuffix=""
747 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
750 werror=""
752 for opt do
753 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
754 case "$opt" in
755 --help|-h) show_help=yes
757 --version|-V) exec cat $source_path/VERSION
759 --prefix=*) prefix="$optarg"
761 --interp-prefix=*) interp_prefix="$optarg"
763 --source-path=*)
765 --cross-prefix=*)
767 --cc=*)
769 --host-cc=*) host_cc="$optarg"
771 --cxx=*)
773 --iasl=*) iasl="$optarg"
775 --objcc=*) objcc="$optarg"
777 --make=*) make="$optarg"
779 --install=*) install="$optarg"
781 --python=*) python="$optarg"
783 --gcov=*) gcov_tool="$optarg"
785 --smbd=*) smbd="$optarg"
787 --extra-cflags=*)
789 --extra-ldflags=*)
791 --enable-debug-info)
793 --disable-debug-info)
795 --enable-modules)
796 modules="yes"
798 --disable-modules)
799 modules="no"
801 --cpu=*)
803 --target-list=*) target_list="$optarg"
805 --enable-trace-backends=*) trace_backends="$optarg"
807 # XXX: backwards compatibility
808 --enable-trace-backend=*) trace_backends="$optarg"
810 --with-trace-file=*) trace_file="$optarg"
812 --enable-gprof) gprof="yes"
814 --enable-gcov) gcov="yes"
816 --static)
817 static="yes"
818 LDFLAGS="-static $LDFLAGS"
819 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
821 --mandir=*) mandir="$optarg"
823 --bindir=*) bindir="$optarg"
825 --libdir=*) libdir="$optarg"
827 --libexecdir=*) libexecdir="$optarg"
829 --includedir=*) includedir="$optarg"
831 --datadir=*) datadir="$optarg"
833 --with-confsuffix=*) confsuffix="$optarg"
835 --docdir=*) qemu_docdir="$optarg"
837 --sysconfdir=*) sysconfdir="$optarg"
839 --localstatedir=*) local_statedir="$optarg"
841 --sbindir=*|--sharedstatedir=*|\
842 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
843 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
844 # These switches are silently ignored, for compatibility with
845 # autoconf-generated configure scripts. This allows QEMU's
846 # configure to be used by RPM and similar macros that set
847 # lots of directory switches by default.
849 --with-system-pixman) pixman="system"
851 --without-system-pixman) pixman="internal"
853 --without-pixman) pixman="none"
855 --disable-sdl) sdl="no"
857 --enable-sdl) sdl="yes"
859 --with-sdlabi=*) sdlabi="$optarg"
861 --disable-qom-cast-debug) qom_cast_debug="no"
863 --enable-qom-cast-debug) qom_cast_debug="yes"
865 --disable-virtfs) virtfs="no"
867 --enable-virtfs) virtfs="yes"
869 --disable-vnc) vnc="no"
871 --enable-vnc) vnc="yes"
873 --oss-lib=*) oss_lib="$optarg"
875 --audio-drv-list=*) audio_drv_list="$optarg"
877 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
879 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
881 --enable-debug-tcg) debug_tcg="yes"
883 --disable-debug-tcg) debug_tcg="no"
885 --enable-debug)
886 # Enable debugging options that aren't excessively noisy
887 debug_tcg="yes"
888 debug="yes"
889 strip_opt="no"
890 fortify_source="no"
892 --enable-sparse) sparse="yes"
894 --disable-sparse) sparse="no"
896 --disable-strip) strip_opt="no"
898 --disable-vnc-sasl) vnc_sasl="no"
900 --enable-vnc-sasl) vnc_sasl="yes"
902 --disable-vnc-jpeg) vnc_jpeg="no"
904 --enable-vnc-jpeg) vnc_jpeg="yes"
906 --disable-vnc-png) vnc_png="no"
908 --enable-vnc-png) vnc_png="yes"
910 --disable-slirp) slirp="no"
912 --disable-uuid) uuid="no"
914 --enable-uuid) uuid="yes"
916 --disable-vde) vde="no"
918 --enable-vde) vde="yes"
920 --disable-netmap) netmap="no"
922 --enable-netmap) netmap="yes"
924 --disable-xen) xen="no"
926 --enable-xen) xen="yes"
928 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
930 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
932 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
934 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
936 --disable-brlapi) brlapi="no"
938 --enable-brlapi) brlapi="yes"
940 --disable-bluez) bluez="no"
942 --enable-bluez) bluez="yes"
944 --disable-kvm) kvm="no"
946 --enable-kvm) kvm="yes"
948 --disable-tcg-interpreter) tcg_interpreter="no"
950 --enable-tcg-interpreter) tcg_interpreter="yes"
952 --disable-cap-ng) cap_ng="no"
954 --enable-cap-ng) cap_ng="yes"
956 --disable-spice) spice="no"
958 --enable-spice) spice="yes"
960 --disable-libiscsi) libiscsi="no"
962 --enable-libiscsi) libiscsi="yes"
964 --disable-libnfs) libnfs="no"
966 --enable-libnfs) libnfs="yes"
968 --enable-profiler) profiler="yes"
970 --disable-cocoa) cocoa="no"
972 --enable-cocoa)
973 cocoa="yes" ;
974 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
976 --disable-system) softmmu="no"
978 --enable-system) softmmu="yes"
980 --disable-user)
981 linux_user="no" ;
982 bsd_user="no" ;
984 --enable-user) ;;
985 --disable-linux-user) linux_user="no"
987 --enable-linux-user) linux_user="yes"
989 --disable-bsd-user) bsd_user="no"
991 --enable-bsd-user) bsd_user="yes"
993 --enable-pie) pie="yes"
995 --disable-pie) pie="no"
997 --enable-werror) werror="yes"
999 --disable-werror) werror="no"
1001 --enable-stack-protector) stack_protector="yes"
1003 --disable-stack-protector) stack_protector="no"
1005 --disable-curses) curses="no"
1007 --enable-curses) curses="yes"
1009 --disable-curl) curl="no"
1011 --enable-curl) curl="yes"
1013 --disable-fdt) fdt="no"
1015 --enable-fdt) fdt="yes"
1017 --disable-linux-aio) linux_aio="no"
1019 --enable-linux-aio) linux_aio="yes"
1021 --disable-attr) attr="no"
1023 --enable-attr) attr="yes"
1025 --disable-blobs) blobs="no"
1027 --with-pkgversion=*) pkgversion=" ($optarg)"
1029 --with-coroutine=*) coroutine="$optarg"
1031 --disable-coroutine-pool) coroutine_pool="no"
1033 --enable-coroutine-pool) coroutine_pool="yes"
1035 --disable-docs) docs="no"
1037 --enable-docs) docs="yes"
1039 --disable-vhost-net) vhost_net="no"
1041 --enable-vhost-net) vhost_net="yes"
1043 --disable-vhost-scsi) vhost_scsi="no"
1045 --enable-vhost-scsi) vhost_scsi="yes"
1047 --disable-opengl) opengl="no"
1049 --enable-opengl) opengl="yes"
1051 --disable-rbd) rbd="no"
1053 --enable-rbd) rbd="yes"
1055 --disable-xfsctl) xfs="no"
1057 --enable-xfsctl) xfs="yes"
1059 --disable-smartcard) smartcard="no"
1061 --enable-smartcard) smartcard="yes"
1063 --disable-libusb) libusb="no"
1065 --enable-libusb) libusb="yes"
1067 --disable-usb-redir) usb_redir="no"
1069 --enable-usb-redir) usb_redir="yes"
1071 --disable-zlib-test) zlib="no"
1073 --disable-lzo) lzo="no"
1075 --enable-lzo) lzo="yes"
1077 --disable-snappy) snappy="no"
1079 --enable-snappy) snappy="yes"
1081 --disable-bzip2) bzip2="no"
1083 --enable-bzip2) bzip2="yes"
1085 --enable-guest-agent) guest_agent="yes"
1087 --disable-guest-agent) guest_agent="no"
1089 --enable-guest-agent-msi) guest_agent_msi="yes"
1091 --disable-guest-agent-msi) guest_agent_msi="no"
1093 --with-vss-sdk) vss_win32_sdk=""
1095 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1097 --without-vss-sdk) vss_win32_sdk="no"
1099 --with-win-sdk) win_sdk=""
1101 --with-win-sdk=*) win_sdk="$optarg"
1103 --without-win-sdk) win_sdk="no"
1105 --enable-tools) want_tools="yes"
1107 --disable-tools) want_tools="no"
1109 --enable-seccomp) seccomp="yes"
1111 --disable-seccomp) seccomp="no"
1113 --disable-glusterfs) glusterfs="no"
1115 --enable-glusterfs) glusterfs="yes"
1117 --disable-archipelago) archipelago="no"
1119 --enable-archipelago) archipelago="yes"
1121 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1122 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1124 --disable-gtk) gtk="no"
1126 --enable-gtk) gtk="yes"
1128 --tls-priority=*) tls_priority="$optarg"
1130 --disable-gnutls) gnutls="no"
1132 --enable-gnutls) gnutls="yes"
1134 --disable-nettle) nettle="no"
1136 --enable-nettle) nettle="yes"
1138 --disable-gcrypt) gcrypt="no"
1140 --enable-gcrypt) gcrypt="yes"
1142 --enable-rdma) rdma="yes"
1144 --disable-rdma) rdma="no"
1146 --with-gtkabi=*) gtkabi="$optarg"
1148 --disable-vte) vte="no"
1150 --enable-vte) vte="yes"
1152 --disable-virglrenderer) virglrenderer="no"
1154 --enable-virglrenderer) virglrenderer="yes"
1156 --disable-tpm) tpm="no"
1158 --enable-tpm) tpm="yes"
1160 --disable-libssh2) libssh2="no"
1162 --enable-libssh2) libssh2="yes"
1164 --enable-vhdx) vhdx="yes"
1166 --disable-vhdx) vhdx="no"
1168 --disable-numa) numa="no"
1170 --enable-numa) numa="yes"
1172 --disable-tcmalloc) tcmalloc="no"
1174 --enable-tcmalloc) tcmalloc="yes"
1176 --disable-jemalloc) jemalloc="no"
1178 --enable-jemalloc) jemalloc="yes"
1181 echo "ERROR: unknown option $opt"
1182 echo "Try '$0 --help' for more information"
1183 exit 1
1185 esac
1186 done
1188 if ! has $python; then
1189 error_exit "Python not found. Use --python=/path/to/python"
1192 # Note that if the Python conditional here evaluates True we will exit
1193 # with status 1 which is a shell 'false' value.
1194 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1195 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1196 "Note that Python 3 or later is not yet supported." \
1197 "Use --python=/path/to/python to specify a supported Python."
1200 # Suppress writing compiled files
1201 python="$python -B"
1203 case "$cpu" in
1204 ppc)
1205 CPU_CFLAGS="-m32"
1206 LDFLAGS="-m32 $LDFLAGS"
1208 ppc64)
1209 CPU_CFLAGS="-m64"
1210 LDFLAGS="-m64 $LDFLAGS"
1212 sparc)
1213 LDFLAGS="-m32 $LDFLAGS"
1214 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1216 sparc64)
1217 LDFLAGS="-m64 $LDFLAGS"
1218 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1220 s390)
1221 CPU_CFLAGS="-m31"
1222 LDFLAGS="-m31 $LDFLAGS"
1224 s390x)
1225 CPU_CFLAGS="-m64"
1226 LDFLAGS="-m64 $LDFLAGS"
1228 i386)
1229 CPU_CFLAGS="-m32"
1230 LDFLAGS="-m32 $LDFLAGS"
1231 cc_i386='$(CC) -m32'
1233 x86_64)
1234 CPU_CFLAGS="-m64"
1235 LDFLAGS="-m64 $LDFLAGS"
1236 cc_i386='$(CC) -m32'
1238 x32)
1239 CPU_CFLAGS="-mx32"
1240 LDFLAGS="-mx32 $LDFLAGS"
1241 cc_i386='$(CC) -m32'
1243 # No special flags required for other host CPUs
1244 esac
1246 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1247 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1249 # For user-mode emulation the host arch has to be one we explicitly
1250 # support, even if we're using TCI.
1251 if [ "$ARCH" = "unknown" ]; then
1252 bsd_user="no"
1253 linux_user="no"
1256 default_target_list=""
1258 mak_wilds=""
1260 if [ "$softmmu" = "yes" ]; then
1261 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1263 if [ "$linux_user" = "yes" ]; then
1264 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1266 if [ "$bsd_user" = "yes" ]; then
1267 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1270 for config in $mak_wilds; do
1271 default_target_list="${default_target_list} $(basename "$config" .mak)"
1272 done
1274 if test x"$show_help" = x"yes" ; then
1275 cat << EOF
1277 Usage: configure [options]
1278 Options: [defaults in brackets after descriptions]
1280 Standard options:
1281 --help print this message
1282 --prefix=PREFIX install in PREFIX [$prefix]
1283 --interp-prefix=PREFIX where to find shared libraries, etc.
1284 use %M for cpu name [$interp_prefix]
1285 --target-list=LIST set target list (default: build everything)
1286 $(echo Available targets: $default_target_list | \
1287 fold -s -w 53 | sed -e 's/^/ /')
1289 Advanced options (experts only):
1290 --source-path=PATH path of source code [$source_path]
1291 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1292 --cc=CC use C compiler CC [$cc]
1293 --iasl=IASL use ACPI compiler IASL [$iasl]
1294 --host-cc=CC use C compiler CC [$host_cc] for code run at
1295 build time
1296 --cxx=CXX use C++ compiler CXX [$cxx]
1297 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1298 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1299 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1300 --make=MAKE use specified make [$make]
1301 --install=INSTALL use specified install [$install]
1302 --python=PYTHON use specified python [$python]
1303 --smbd=SMBD use specified smbd [$smbd]
1304 --static enable static build [$static]
1305 --mandir=PATH install man pages in PATH
1306 --datadir=PATH install firmware in PATH$confsuffix
1307 --docdir=PATH install documentation in PATH$confsuffix
1308 --bindir=PATH install binaries in PATH
1309 --libdir=PATH install libraries in PATH
1310 --sysconfdir=PATH install config in PATH$confsuffix
1311 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1312 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1313 --enable-debug enable common debug build options
1314 --disable-strip disable stripping binaries
1315 --disable-werror disable compilation abort on warning
1316 --disable-stack-protector disable compiler-provided stack protection
1317 --audio-drv-list=LIST set audio drivers list:
1318 Available drivers: $audio_possible_drivers
1319 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1320 --block-drv-rw-whitelist=L
1321 set block driver read-write whitelist
1322 (affects only QEMU, not qemu-img)
1323 --block-drv-ro-whitelist=L
1324 set block driver read-only whitelist
1325 (affects only QEMU, not qemu-img)
1326 --enable-trace-backends=B Set trace backend
1327 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1328 --with-trace-file=NAME Full PATH,NAME of file to store traces
1329 Default:trace-<pid>
1330 --disable-slirp disable SLIRP userspace network connectivity
1331 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1332 --oss-lib path to OSS library
1333 --cpu=CPU Build for host CPU [$cpu]
1334 --with-coroutine=BACKEND coroutine backend. Supported options:
1335 gthread, ucontext, sigaltstack, windows
1336 --enable-gcov enable test coverage analysis with gcov
1337 --gcov=GCOV use specified gcov [$gcov_tool]
1338 --disable-blobs disable installing provided firmware blobs
1339 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1340 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1341 --tls-priority default TLS protocol/cipher priority string
1343 Optional features, enabled with --enable-FEATURE and
1344 disabled with --disable-FEATURE, default is enabled if available:
1346 system all system emulation targets
1347 user supported user emulation targets
1348 linux-user all linux usermode emulation targets
1349 bsd-user all BSD usermode emulation targets
1350 docs build documentation
1351 guest-agent build the QEMU Guest Agent
1352 guest-agent-msi build guest agent Windows MSI installation package
1353 pie Position Independent Executables
1354 modules modules support
1355 debug-tcg TCG debugging (default is disabled)
1356 debug-info debugging information
1357 sparse sparse checker
1359 gnutls GNUTLS cryptography support
1360 nettle nettle cryptography support
1361 gcrypt libgcrypt cryptography support
1362 sdl SDL UI
1363 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1364 gtk gtk UI
1365 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1366 vte vte support for the gtk UI
1367 curses curses UI
1368 vnc VNC UI support
1369 vnc-sasl SASL encryption for VNC server
1370 vnc-jpeg JPEG lossy compression for VNC server
1371 vnc-png PNG compression for VNC server
1372 cocoa Cocoa UI (Mac OS X only)
1373 virtfs VirtFS
1374 xen xen backend driver support
1375 xen-pci-passthrough
1376 brlapi BrlAPI (Braile)
1377 curl curl connectivity
1378 fdt fdt device tree
1379 bluez bluez stack connectivity
1380 kvm KVM acceleration support
1381 rdma RDMA-based migration support
1382 uuid uuid support
1383 vde support for vde network
1384 netmap support for netmap network
1385 linux-aio Linux AIO support
1386 cap-ng libcap-ng support
1387 attr attr and xattr support
1388 vhost-net vhost-net acceleration support
1389 spice spice
1390 rbd rados block device (rbd)
1391 libiscsi iscsi support
1392 libnfs nfs support
1393 smartcard smartcard support (libcacard)
1394 libusb libusb (for usb passthrough)
1395 usb-redir usb network redirection support
1396 lzo support of lzo compression library
1397 snappy support of snappy compression library
1398 bzip2 support of bzip2 compression library
1399 (for reading bzip2-compressed dmg images)
1400 seccomp seccomp support
1401 coroutine-pool coroutine freelist (better performance)
1402 glusterfs GlusterFS backend
1403 archipelago Archipelago backend
1404 tpm TPM support
1405 libssh2 ssh block device support
1406 vhdx support for the Microsoft VHDX image format
1407 numa libnuma support
1408 tcmalloc tcmalloc support
1409 jemalloc jemalloc support
1411 NOTE: The object files are built at the place where configure is launched
1413 exit 0
1416 # Now we have handled --enable-tcg-interpreter and know we're not just
1417 # printing the help message, bail out if the host CPU isn't supported.
1418 if test "$ARCH" = "unknown"; then
1419 if test "$tcg_interpreter" = "yes" ; then
1420 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1421 else
1422 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1426 # Consult white-list to determine whether to enable werror
1427 # by default. Only enable by default for git builds
1428 if test -z "$werror" ; then
1429 if test -d "$source_path/.git" -a \
1430 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1431 werror="yes"
1432 else
1433 werror="no"
1437 # check that the C compiler works.
1438 write_c_skeleton;
1439 if compile_object ; then
1440 : C compiler works ok
1441 else
1442 error_exit "\"$cc\" either does not exist or does not work"
1444 if ! compile_prog ; then
1445 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1448 # Check that the C++ compiler exists and works with the C compiler
1449 if has $cxx; then
1450 cat > $TMPC <<EOF
1451 int c_function(void);
1452 int main(void) { return c_function(); }
1455 compile_object
1457 cat > $TMPCXX <<EOF
1458 extern "C" {
1459 int c_function(void);
1461 int c_function(void) { return 42; }
1464 update_cxxflags
1466 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1467 # C++ compiler $cxx works ok with C compiler $cc
1469 else
1470 echo "C++ compiler $cxx does not work with C compiler $cc"
1471 echo "Disabling C++ specific optional code"
1472 cxx=
1474 else
1475 echo "No C++ compiler available; disabling C++ specific optional code"
1476 cxx=
1479 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1480 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1481 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1482 gcc_flags="-Wunused-but-set-variable $gcc_flags"
1483 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1484 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1485 gcc_flags="-Wno-string-plus-int $gcc_flags"
1486 # Note that we do not add -Werror to gcc_flags here, because that would
1487 # enable it for all configure tests. If a configure test failed due
1488 # to -Werror this would just silently disable some features,
1489 # so it's too error prone.
1491 cc_has_warning_flag() {
1492 write_c_skeleton;
1494 # Use the positive sense of the flag when testing for -Wno-wombat
1495 # support (gcc will happily accept the -Wno- form of unknown
1496 # warning options).
1497 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1498 compile_prog "-Werror $optflag" ""
1501 for flag in $gcc_flags; do
1502 if cc_has_warning_flag $flag ; then
1503 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1505 done
1507 if test "$mingw32" = "yes"; then
1508 stack_protector="no"
1510 if test "$stack_protector" != "no"; then
1511 cat > $TMPC << EOF
1512 int main(int argc, char *argv[])
1514 char arr[64], *p = arr, *c = argv[0];
1515 while (*c) {
1516 *p++ = *c++;
1518 return 0;
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 sp_on=1
1530 break
1532 done
1533 if test "$stack_protector" = yes; then
1534 if test $sp_on = 0; then
1535 error_exit "Stack protector not supported"
1540 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1541 # large functions that use global variables. The bug is in all releases of
1542 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1543 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1544 cat > $TMPC << EOF
1545 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1546 int main(void) { return 0; }
1547 #else
1548 #error No bug in this compiler.
1549 #endif
1551 if compile_prog "-Werror -fno-gcse" "" ; then
1552 TRANSLATE_OPT_CFLAGS=-fno-gcse
1555 if test "$static" = "yes" ; then
1556 if test "$modules" = "yes" ; then
1557 error_exit "static and modules are mutually incompatible"
1559 if test "$pie" = "yes" ; then
1560 error_exit "static and pie are mutually incompatible"
1561 else
1562 pie="no"
1566 # Unconditional check for compiler __thread support
1567 cat > $TMPC << EOF
1568 static __thread int tls_var;
1569 int main(void) { return tls_var; }
1572 if ! compile_prog "-Werror" "" ; then
1573 error_exit "Your compiler does not support the __thread specifier for " \
1574 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1577 if test "$pie" = ""; then
1578 case "$cpu-$targetos" in
1579 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1582 pie="no"
1584 esac
1587 if test "$pie" != "no" ; then
1588 cat > $TMPC << EOF
1590 #ifdef __linux__
1591 # define THREAD __thread
1592 #else
1593 # define THREAD
1594 #endif
1596 static THREAD int tls_var;
1598 int main(void) { return tls_var; }
1601 if compile_prog "-fPIE -DPIE" "-pie"; then
1602 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1603 LDFLAGS="-pie $LDFLAGS"
1604 pie="yes"
1605 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1606 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1608 else
1609 if test "$pie" = "yes"; then
1610 error_exit "PIE not available due to missing toolchain support"
1611 else
1612 echo "Disabling PIE due to missing toolchain support"
1613 pie="no"
1617 if compile_prog "-Werror -fno-pie" "-nopie"; then
1618 CFLAGS_NOPIE="-fno-pie"
1619 LDFLAGS_NOPIE="-nopie"
1623 ##########################################
1624 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1625 # use i686 as default anyway, but for those that don't, an explicit
1626 # specification is necessary
1628 if test "$cpu" = "i386"; then
1629 cat > $TMPC << EOF
1630 static int sfaa(int *ptr)
1632 return __sync_fetch_and_and(ptr, 0);
1635 int main(void)
1637 int val = 42;
1638 val = __sync_val_compare_and_swap(&val, 0, 1);
1639 sfaa(&val);
1640 return val;
1643 if ! compile_prog "" "" ; then
1644 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1648 #########################################
1649 # Solaris specific configure tool chain decisions
1651 if test "$solaris" = "yes" ; then
1652 if has $install; then
1654 else
1655 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1656 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1657 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1659 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1660 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1661 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1662 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1664 if has ar; then
1666 else
1667 if test -f /usr/ccs/bin/ar ; then
1668 error_exit "No path includes ar" \
1669 "Add /usr/ccs/bin to your path and rerun configure"
1671 error_exit "No path includes ar"
1675 if test -z "${target_list+xxx}" ; then
1676 target_list="$default_target_list"
1677 else
1678 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1681 # Check that we recognised the target name; this allows a more
1682 # friendly error message than if we let it fall through.
1683 for target in $target_list; do
1684 case " $default_target_list " in
1685 *" $target "*)
1688 error_exit "Unknown target name '$target'"
1690 esac
1691 done
1693 # see if system emulation was really requested
1694 case " $target_list " in
1695 *"-softmmu "*) softmmu=yes
1697 *) softmmu=no
1699 esac
1701 feature_not_found() {
1702 feature=$1
1703 remedy=$2
1705 error_exit "User requested feature $feature" \
1706 "configure was not able to find it." \
1707 "$remedy"
1710 # ---
1711 # big/little endian test
1712 cat > $TMPC << EOF
1713 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1714 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1715 extern int foo(short *, short *);
1716 int main(int argc, char *argv[]) {
1717 return foo(big_endian, little_endian);
1721 if compile_object ; then
1722 if grep -q BiGeNdIaN $TMPO ; then
1723 bigendian="yes"
1724 elif grep -q LiTtLeEnDiAn $TMPO ; then
1725 bigendian="no"
1726 else
1727 echo big/little test failed
1729 else
1730 echo big/little test failed
1733 ##########################################
1734 # cocoa implies not SDL or GTK
1735 # (the cocoa UI code currently assumes it is always the active UI
1736 # and doesn't interact well with other UI frontend code)
1737 if test "$cocoa" = "yes"; then
1738 if test "$sdl" = "yes"; then
1739 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1741 if test "$gtk" = "yes"; then
1742 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1744 gtk=no
1745 sdl=no
1748 ##########################################
1749 # L2TPV3 probe
1751 cat > $TMPC <<EOF
1752 #include <sys/socket.h>
1753 #include <linux/ip.h>
1754 int main(void) { return sizeof(struct mmsghdr); }
1756 if compile_prog "" "" ; then
1757 l2tpv3=yes
1758 else
1759 l2tpv3=no
1762 ##########################################
1763 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1765 if test "$mingw32" = "yes"; then
1766 # Some versions of MinGW / Mingw-w64 lack localtime_r
1767 # and gmtime_r entirely.
1769 # Some versions of Mingw-w64 define a macro for
1770 # localtime_r/gmtime_r.
1772 # Some versions of Mingw-w64 will define functions
1773 # for localtime_r/gmtime_r, but only if you have
1774 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1775 # though, unistd.h and pthread.h both define
1776 # that for you.
1778 # So this #undef localtime_r and #include <unistd.h>
1779 # are not in fact redundant.
1780 cat > $TMPC << EOF
1781 #include <unistd.h>
1782 #include <time.h>
1783 #undef localtime_r
1784 int main(void) { localtime_r(NULL, NULL); return 0; }
1786 if compile_prog "" "" ; then
1787 localtime_r="yes"
1788 else
1789 localtime_r="no"
1793 ##########################################
1794 # pkg-config probe
1796 if ! has "$pkg_config_exe"; then
1797 error_exit "pkg-config binary '$pkg_config_exe' not found"
1800 ##########################################
1801 # NPTL probe
1803 if test "$linux_user" = "yes"; then
1804 cat > $TMPC <<EOF
1805 #include <sched.h>
1806 #include <linux/futex.h>
1807 int main(void) {
1808 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1809 #error bork
1810 #endif
1811 return 0;
1814 if ! compile_object ; then
1815 feature_not_found "nptl" "Install glibc and linux kernel headers."
1819 ##########################################
1820 # avx2 optimization requirement check
1823 if test "$static" = "no" ; then
1824 cat > $TMPC << EOF
1825 #pragma GCC push_options
1826 #pragma GCC target("avx2")
1827 #include <cpuid.h>
1828 #include <immintrin.h>
1830 static int bar(void *a) {
1831 return _mm256_movemask_epi8(_mm256_cmpeq_epi8(*(__m256i *)a, (__m256i){0}));
1833 static void *bar_ifunc(void) {return (void*) bar;}
1834 int foo(void *a) __attribute__((ifunc("bar_ifunc")));
1835 int main(int argc, char *argv[]) { return foo(argv[0]);}
1837 if compile_object "" ; then
1838 if has readelf; then
1839 if readelf --syms $TMPO 2>/dev/null |grep -q "IFUNC.*foo"; then
1840 avx2_opt="yes"
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 case "$cpu" in
1924 i386|x86_64)
1925 libseccomp_minver="2.1.0"
1927 mips)
1928 libseccomp_minver="2.2.0"
1930 arm|aarch64)
1931 libseccomp_minver="2.2.3"
1933 ppc|ppc64)
1934 libseccomp_minver="2.3.0"
1937 libseccomp_minver=""
1939 esac
1941 if test "$libseccomp_minver" != "" &&
1942 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
1943 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1944 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
1945 seccomp="yes"
1946 else
1947 if test "$seccomp" = "yes" ; then
1948 if test "$libseccomp_minver" != "" ; then
1949 feature_not_found "libseccomp" \
1950 "Install libseccomp devel >= $libseccomp_minver"
1951 else
1952 feature_not_found "libseccomp" \
1953 "libseccomp is not supported for host cpu $cpu"
1956 seccomp="no"
1959 ##########################################
1960 # xen probe
1962 if test "$xen" != "no" ; then
1963 xen_libs="-lxenstore -lxenctrl -lxenguest"
1964 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1966 # First we test whether Xen headers and libraries are available.
1967 # If no, we are done and there is no Xen support.
1968 # If yes, more tests are run to detect the Xen version.
1970 # Xen (any)
1971 cat > $TMPC <<EOF
1972 #include <xenctrl.h>
1973 int main(void) {
1974 return 0;
1977 if ! compile_prog "" "$xen_libs" ; then
1978 # Xen not found
1979 if test "$xen" = "yes" ; then
1980 feature_not_found "xen" "Install xen devel"
1982 xen=no
1984 # Xen unstable
1985 elif
1986 cat > $TMPC <<EOF &&
1988 * If we have stable libs the we don't want the libxc compat
1989 * layers, regardless of what CFLAGS we may have been given.
1991 #undef XC_WANT_COMPAT_EVTCHN_API
1992 #undef XC_WANT_COMPAT_GNTTAB_API
1993 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
1994 #include <xenctrl.h>
1995 #include <xenstore.h>
1996 #include <xenevtchn.h>
1997 #include <xengnttab.h>
1998 #include <xenforeignmemory.h>
1999 #include <stdint.h>
2000 #include <xen/hvm/hvm_info_table.h>
2001 #if !defined(HVM_MAX_VCPUS)
2002 # error HVM_MAX_VCPUS not defined
2003 #endif
2004 int main(void) {
2005 xc_interface *xc = NULL;
2006 xenforeignmemory_handle *xfmem;
2007 xenevtchn_handle *xe;
2008 xengnttab_handle *xg;
2009 xen_domain_handle_t handle;
2011 xs_daemon_open();
2013 xc = xc_interface_open(0, 0, 0);
2014 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2015 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2016 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2017 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2018 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2020 xfmem = xenforeignmemory_open(0, 0);
2021 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2023 xe = xenevtchn_open(0, 0);
2024 xenevtchn_fd(xe);
2026 xg = xengnttab_open(0, 0);
2027 xengnttab_map_grant_ref(xg, 0, 0, 0);
2029 return 0;
2032 compile_prog "" "$xen_libs $xen_stable_libs"
2033 then
2034 xen_ctrl_version=471
2035 xen=yes
2036 elif
2037 cat > $TMPC <<EOF &&
2038 #include <xenctrl.h>
2039 #include <stdint.h>
2040 int main(void) {
2041 xc_interface *xc = NULL;
2042 xen_domain_handle_t handle;
2043 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2044 return 0;
2047 compile_prog "" "$xen_libs"
2048 then
2049 xen_ctrl_version=470
2050 xen=yes
2052 # Xen 4.6
2053 elif
2054 cat > $TMPC <<EOF &&
2055 #include <xenctrl.h>
2056 #include <xenstore.h>
2057 #include <stdint.h>
2058 #include <xen/hvm/hvm_info_table.h>
2059 #if !defined(HVM_MAX_VCPUS)
2060 # error HVM_MAX_VCPUS not defined
2061 #endif
2062 int main(void) {
2063 xc_interface *xc;
2064 xs_daemon_open();
2065 xc = xc_interface_open(0, 0, 0);
2066 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2067 xc_gnttab_open(NULL, 0);
2068 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2069 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2070 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2071 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2072 return 0;
2075 compile_prog "" "$xen_libs"
2076 then
2077 xen_ctrl_version=460
2078 xen=yes
2080 # Xen 4.5
2081 elif
2082 cat > $TMPC <<EOF &&
2083 #include <xenctrl.h>
2084 #include <xenstore.h>
2085 #include <stdint.h>
2086 #include <xen/hvm/hvm_info_table.h>
2087 #if !defined(HVM_MAX_VCPUS)
2088 # error HVM_MAX_VCPUS not defined
2089 #endif
2090 int main(void) {
2091 xc_interface *xc;
2092 xs_daemon_open();
2093 xc = xc_interface_open(0, 0, 0);
2094 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2095 xc_gnttab_open(NULL, 0);
2096 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2097 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2098 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2099 return 0;
2102 compile_prog "" "$xen_libs"
2103 then
2104 xen_ctrl_version=450
2105 xen=yes
2107 elif
2108 cat > $TMPC <<EOF &&
2109 #include <xenctrl.h>
2110 #include <xenstore.h>
2111 #include <stdint.h>
2112 #include <xen/hvm/hvm_info_table.h>
2113 #if !defined(HVM_MAX_VCPUS)
2114 # error HVM_MAX_VCPUS not defined
2115 #endif
2116 int main(void) {
2117 xc_interface *xc;
2118 xs_daemon_open();
2119 xc = xc_interface_open(0, 0, 0);
2120 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2121 xc_gnttab_open(NULL, 0);
2122 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2123 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2124 return 0;
2127 compile_prog "" "$xen_libs"
2128 then
2129 xen_ctrl_version=420
2130 xen=yes
2132 else
2133 if test "$xen" = "yes" ; then
2134 feature_not_found "xen (unsupported version)" \
2135 "Install a supported xen (xen 4.2 or newer)"
2137 xen=no
2140 if test "$xen" = yes; then
2141 if test $xen_ctrl_version -ge 471 ; then
2142 libs_softmmu="$xen_stable_libs $libs_softmmu"
2144 libs_softmmu="$xen_libs $libs_softmmu"
2148 if test "$xen_pci_passthrough" != "no"; then
2149 if test "$xen" = "yes" && test "$linux" = "yes"; then
2150 xen_pci_passthrough=yes
2151 else
2152 if test "$xen_pci_passthrough" = "yes"; then
2153 error_exit "User requested feature Xen PCI Passthrough" \
2154 " but this feature requires /sys from Linux"
2156 xen_pci_passthrough=no
2160 if test "$xen_pv_domain_build" = "yes" &&
2161 test "$xen" != "yes"; then
2162 error_exit "User requested Xen PV domain builder support" \
2163 "which requires Xen support."
2166 ##########################################
2167 # Sparse probe
2168 if test "$sparse" != "no" ; then
2169 if has cgcc; then
2170 sparse=yes
2171 else
2172 if test "$sparse" = "yes" ; then
2173 feature_not_found "sparse" "Install sparse binary"
2175 sparse=no
2179 ##########################################
2180 # X11 probe
2181 x11_cflags=
2182 x11_libs=-lX11
2183 if $pkg_config --exists "x11"; then
2184 x11_cflags=$($pkg_config --cflags x11)
2185 x11_libs=$($pkg_config --libs x11)
2188 ##########################################
2189 # GTK probe
2191 if test "$gtkabi" = ""; then
2192 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2193 # Use 3.0 as a fallback if that is available.
2194 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2195 gtkabi=2.0
2196 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2197 gtkabi=3.0
2198 else
2199 gtkabi=2.0
2203 if test "$gtk" != "no"; then
2204 gtkpackage="gtk+-$gtkabi"
2205 gtkx11package="gtk+-x11-$gtkabi"
2206 if test "$gtkabi" = "3.0" ; then
2207 gtkversion="3.0.0"
2208 else
2209 gtkversion="2.18.0"
2211 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2212 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2213 gtk_libs=$($pkg_config --libs $gtkpackage)
2214 gtk_version=$($pkg_config --modversion $gtkpackage)
2215 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2216 gtk_cflags="$gtk_cflags $x11_cflags"
2217 gtk_libs="$gtk_libs $x11_libs"
2219 libs_softmmu="$gtk_libs $libs_softmmu"
2220 gtk="yes"
2221 elif test "$gtk" = "yes"; then
2222 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2223 else
2224 gtk="no"
2229 ##########################################
2230 # GNUTLS probe
2232 gnutls_works() {
2233 # Unfortunately some distros have bad pkg-config information for gnutls
2234 # such that it claims to exist but you get a compiler error if you try
2235 # to use the options returned by --libs. Specifically, Ubuntu for --static
2236 # builds doesn't work:
2237 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2239 # So sanity check the cflags/libs before assuming gnutls can be used.
2240 if ! $pkg_config --exists "gnutls"; then
2241 return 1
2244 write_c_skeleton
2245 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2248 gnutls_gcrypt=no
2249 gnutls_nettle=no
2250 if test "$gnutls" != "no"; then
2251 if gnutls_works; then
2252 gnutls_cflags=$($pkg_config --cflags gnutls)
2253 gnutls_libs=$($pkg_config --libs gnutls)
2254 libs_softmmu="$gnutls_libs $libs_softmmu"
2255 libs_tools="$gnutls_libs $libs_tools"
2256 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2257 gnutls="yes"
2259 # gnutls_rnd requires >= 2.11.0
2260 if $pkg_config --exists "gnutls >= 2.11.0"; then
2261 gnutls_rnd="yes"
2262 else
2263 gnutls_rnd="no"
2266 if $pkg_config --exists 'gnutls >= 3.0'; then
2267 gnutls_gcrypt=no
2268 gnutls_nettle=yes
2269 elif $pkg_config --exists 'gnutls >= 2.12'; then
2270 case $($pkg_config --libs --static gnutls) in
2271 *gcrypt*)
2272 gnutls_gcrypt=yes
2273 gnutls_nettle=no
2275 *nettle*)
2276 gnutls_gcrypt=no
2277 gnutls_nettle=yes
2280 gnutls_gcrypt=yes
2281 gnutls_nettle=no
2283 esac
2284 else
2285 gnutls_gcrypt=yes
2286 gnutls_nettle=no
2288 elif test "$gnutls" = "yes"; then
2289 feature_not_found "gnutls" "Install gnutls devel"
2290 else
2291 gnutls="no"
2292 gnutls_rnd="no"
2294 else
2295 gnutls_rnd="no"
2299 # If user didn't give a --disable/enable-gcrypt flag,
2300 # then mark as disabled if user requested nettle
2301 # explicitly, or if gnutls links to nettle
2302 if test -z "$gcrypt"
2303 then
2304 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2305 then
2306 gcrypt="no"
2310 # If user didn't give a --disable/enable-nettle flag,
2311 # then mark as disabled if user requested gcrypt
2312 # explicitly, or if gnutls links to gcrypt
2313 if test -z "$nettle"
2314 then
2315 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2316 then
2317 nettle="no"
2321 has_libgcrypt_config() {
2322 if ! has "libgcrypt-config"
2323 then
2324 return 1
2327 if test -n "$cross_prefix"
2328 then
2329 host=$(libgcrypt-config --host)
2330 if test "$host-" != $cross_prefix
2331 then
2332 return 1
2336 return 0
2339 if test "$gcrypt" != "no"; then
2340 if has_libgcrypt_config; then
2341 gcrypt_cflags=$(libgcrypt-config --cflags)
2342 gcrypt_libs=$(libgcrypt-config --libs)
2343 # Debian has remove -lgpg-error from libgcrypt-config
2344 # as it "spreads unnecessary dependencies" which in
2345 # turn breaks static builds...
2346 if test "$static" = "yes"
2347 then
2348 gcrypt_libs="$gcrypt_libs -lgpg-error"
2350 libs_softmmu="$gcrypt_libs $libs_softmmu"
2351 libs_tools="$gcrypt_libs $libs_tools"
2352 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2353 gcrypt="yes"
2354 if test -z "$nettle"; then
2355 nettle="no"
2358 cat > $TMPC << EOF
2359 #include <gcrypt.h>
2360 int main(void) {
2361 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2362 GCRY_MD_SHA256,
2363 NULL, 0, 0, 0, NULL);
2364 return 0;
2367 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2368 gcrypt_kdf=yes
2370 else
2371 if test "$gcrypt" = "yes"; then
2372 feature_not_found "gcrypt" "Install gcrypt devel"
2373 else
2374 gcrypt="no"
2380 if test "$nettle" != "no"; then
2381 if $pkg_config --exists "nettle"; then
2382 nettle_cflags=$($pkg_config --cflags nettle)
2383 nettle_libs=$($pkg_config --libs nettle)
2384 nettle_version=$($pkg_config --modversion nettle)
2385 libs_softmmu="$nettle_libs $libs_softmmu"
2386 libs_tools="$nettle_libs $libs_tools"
2387 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2388 nettle="yes"
2390 cat > $TMPC << EOF
2391 #include <stddef.h>
2392 #include <nettle/pbkdf2.h>
2393 int main(void) {
2394 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2395 return 0;
2398 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2399 nettle_kdf=yes
2401 else
2402 if test "$nettle" = "yes"; then
2403 feature_not_found "nettle" "Install nettle devel"
2404 else
2405 nettle="no"
2410 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2411 then
2412 error_exit "Only one of gcrypt & nettle can be enabled"
2415 ##########################################
2416 # libtasn1 - only for the TLS creds/session test suite
2418 tasn1=yes
2419 tasn1_cflags=""
2420 tasn1_libs=""
2421 if $pkg_config --exists "libtasn1"; then
2422 tasn1_cflags=$($pkg_config --cflags libtasn1)
2423 tasn1_libs=$($pkg_config --libs libtasn1)
2424 else
2425 tasn1=no
2429 ##########################################
2430 # getifaddrs (for tests/test-io-channel-socket )
2432 have_ifaddrs_h=yes
2433 if ! check_include "ifaddrs.h" ; then
2434 have_ifaddrs_h=no
2437 ##########################################
2438 # VTE probe
2440 if test "$vte" != "no"; then
2441 if test "$gtkabi" = "3.0"; then
2442 vteminversion="0.32.0"
2443 if $pkg_config --exists "vte-2.91"; then
2444 vtepackage="vte-2.91"
2445 else
2446 vtepackage="vte-2.90"
2448 else
2449 vtepackage="vte"
2450 vteminversion="0.24.0"
2452 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2453 vte_cflags=$($pkg_config --cflags $vtepackage)
2454 vte_libs=$($pkg_config --libs $vtepackage)
2455 vteversion=$($pkg_config --modversion $vtepackage)
2456 libs_softmmu="$vte_libs $libs_softmmu"
2457 vte="yes"
2458 elif test "$vte" = "yes"; then
2459 if test "$gtkabi" = "3.0"; then
2460 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2461 else
2462 feature_not_found "vte" "Install libvte devel"
2464 else
2465 vte="no"
2469 ##########################################
2470 # SDL probe
2472 # Look for sdl configuration program (pkg-config or sdl-config). Try
2473 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2475 if test "$sdlabi" = ""; then
2476 if $pkg_config --exists "sdl"; then
2477 sdlabi=1.2
2478 elif $pkg_config --exists "sdl2"; then
2479 sdlabi=2.0
2480 else
2481 sdlabi=1.2
2485 if test $sdlabi = "2.0"; then
2486 sdl_config=$sdl2_config
2487 sdlname=sdl2
2488 sdlconfigname=sdl2_config
2489 elif test $sdlabi = "1.2"; then
2490 sdlname=sdl
2491 sdlconfigname=sdl_config
2492 else
2493 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2496 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2497 sdl_config=$sdlconfigname
2500 if $pkg_config $sdlname --exists; then
2501 sdlconfig="$pkg_config $sdlname"
2502 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2503 elif has ${sdl_config}; then
2504 sdlconfig="$sdl_config"
2505 sdlversion=$($sdlconfig --version)
2506 else
2507 if test "$sdl" = "yes" ; then
2508 feature_not_found "sdl" "Install SDL devel"
2510 sdl=no
2512 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2513 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2516 sdl_too_old=no
2517 if test "$sdl" != "no" ; then
2518 cat > $TMPC << EOF
2519 #include <SDL.h>
2520 #undef main /* We don't want SDL to override our main() */
2521 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2523 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2524 if test "$static" = "yes" ; then
2525 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2526 else
2527 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2529 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2530 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2531 sdl_too_old=yes
2532 else
2533 sdl=yes
2536 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2537 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2538 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2539 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2540 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2542 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2544 else
2545 sdl=no
2547 fi # static link
2548 else # sdl not found
2549 if test "$sdl" = "yes" ; then
2550 feature_not_found "sdl" "Install SDL devel"
2552 sdl=no
2553 fi # sdl compile test
2556 if test "$sdl" = "yes" ; then
2557 cat > $TMPC <<EOF
2558 #include <SDL.h>
2559 #if defined(SDL_VIDEO_DRIVER_X11)
2560 #include <X11/XKBlib.h>
2561 #else
2562 #error No x11 support
2563 #endif
2564 int main(void) { return 0; }
2566 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2567 sdl_cflags="$sdl_cflags $x11_cflags"
2568 sdl_libs="$sdl_libs $x11_libs"
2570 libs_softmmu="$sdl_libs $libs_softmmu"
2573 ##########################################
2574 # RDMA needs OpenFabrics libraries
2575 if test "$rdma" != "no" ; then
2576 cat > $TMPC <<EOF
2577 #include <rdma/rdma_cma.h>
2578 int main(void) { return 0; }
2580 rdma_libs="-lrdmacm -libverbs"
2581 if compile_prog "" "$rdma_libs" ; then
2582 rdma="yes"
2583 libs_softmmu="$libs_softmmu $rdma_libs"
2584 else
2585 if test "$rdma" = "yes" ; then
2586 error_exit \
2587 " OpenFabrics librdmacm/libibverbs not present." \
2588 " Your options:" \
2589 " (1) Fast: Install infiniband packages from your distro." \
2590 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2591 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2593 rdma="no"
2597 ##########################################
2598 # VNC SASL detection
2599 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2600 cat > $TMPC <<EOF
2601 #include <sasl/sasl.h>
2602 #include <stdio.h>
2603 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2605 # Assuming Cyrus-SASL installed in /usr prefix
2606 vnc_sasl_cflags=""
2607 vnc_sasl_libs="-lsasl2"
2608 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2609 vnc_sasl=yes
2610 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2611 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2612 else
2613 if test "$vnc_sasl" = "yes" ; then
2614 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2616 vnc_sasl=no
2620 ##########################################
2621 # VNC JPEG detection
2622 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2623 cat > $TMPC <<EOF
2624 #include <stdio.h>
2625 #include <jpeglib.h>
2626 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2628 vnc_jpeg_cflags=""
2629 vnc_jpeg_libs="-ljpeg"
2630 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2631 vnc_jpeg=yes
2632 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2633 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2634 else
2635 if test "$vnc_jpeg" = "yes" ; then
2636 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2638 vnc_jpeg=no
2642 ##########################################
2643 # VNC PNG detection
2644 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2645 cat > $TMPC <<EOF
2646 //#include <stdio.h>
2647 #include <png.h>
2648 #include <stddef.h>
2649 int main(void) {
2650 png_structp png_ptr;
2651 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2652 return png_ptr != 0;
2655 if $pkg_config libpng --exists; then
2656 vnc_png_cflags=$($pkg_config libpng --cflags)
2657 vnc_png_libs=$($pkg_config libpng --libs)
2658 else
2659 vnc_png_cflags=""
2660 vnc_png_libs="-lpng"
2662 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2663 vnc_png=yes
2664 libs_softmmu="$vnc_png_libs $libs_softmmu"
2665 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2666 else
2667 if test "$vnc_png" = "yes" ; then
2668 feature_not_found "vnc-png" "Install libpng devel"
2670 vnc_png=no
2674 ##########################################
2675 # fnmatch() probe, used for ACL routines
2676 fnmatch="no"
2677 cat > $TMPC << EOF
2678 #include <fnmatch.h>
2679 int main(void)
2681 fnmatch("foo", "foo", 0);
2682 return 0;
2685 if compile_prog "" "" ; then
2686 fnmatch="yes"
2689 ##########################################
2690 # uuid_generate() probe, used for vdi block driver
2691 # Note that on some systems (notably MacOSX) no extra library
2692 # need be linked to get the uuid functions.
2693 if test "$uuid" != "no" ; then
2694 uuid_libs="-luuid"
2695 cat > $TMPC << EOF
2696 #include <uuid/uuid.h>
2697 int main(void)
2699 uuid_t my_uuid;
2700 uuid_generate(my_uuid);
2701 return 0;
2704 if compile_prog "" "" ; then
2705 uuid="yes"
2706 elif compile_prog "" "$uuid_libs" ; then
2707 uuid="yes"
2708 libs_softmmu="$uuid_libs $libs_softmmu"
2709 libs_tools="$uuid_libs $libs_tools"
2710 else
2711 if test "$uuid" = "yes" ; then
2712 feature_not_found "uuid" "Install libuuid devel"
2714 uuid=no
2718 if test "$vhdx" = "yes" ; then
2719 if test "$uuid" = "no" ; then
2720 error_exit "uuid required for VHDX support"
2722 elif test "$vhdx" != "no" ; then
2723 if test "$uuid" = "yes" ; then
2724 vhdx=yes
2725 else
2726 vhdx=no
2730 ##########################################
2731 # xfsctl() probe, used for raw-posix
2732 if test "$xfs" != "no" ; then
2733 cat > $TMPC << EOF
2734 #include <stddef.h> /* NULL */
2735 #include <xfs/xfs.h>
2736 int main(void)
2738 xfsctl(NULL, 0, 0, NULL);
2739 return 0;
2742 if compile_prog "" "" ; then
2743 xfs="yes"
2744 else
2745 if test "$xfs" = "yes" ; then
2746 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2748 xfs=no
2752 ##########################################
2753 # vde libraries probe
2754 if test "$vde" != "no" ; then
2755 vde_libs="-lvdeplug"
2756 cat > $TMPC << EOF
2757 #include <stddef.h>
2758 #include <libvdeplug.h>
2759 int main(void)
2761 struct vde_open_args a = {0, 0, 0};
2762 char s[] = "";
2763 vde_open(s, s, &a);
2764 return 0;
2767 if compile_prog "" "$vde_libs" ; then
2768 vde=yes
2769 libs_softmmu="$vde_libs $libs_softmmu"
2770 libs_tools="$vde_libs $libs_tools"
2771 else
2772 if test "$vde" = "yes" ; then
2773 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2775 vde=no
2779 ##########################################
2780 # netmap support probe
2781 # Apart from looking for netmap headers, we make sure that the host API version
2782 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2783 # a minor/major version number. Minor new features will be marked with values up
2784 # to 15, and if something happens that requires a change to the backend we will
2785 # move above 15, submit the backend fixes and modify this two bounds.
2786 if test "$netmap" != "no" ; then
2787 cat > $TMPC << EOF
2788 #include <inttypes.h>
2789 #include <net/if.h>
2790 #include <net/netmap.h>
2791 #include <net/netmap_user.h>
2792 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2793 #error
2794 #endif
2795 int main(void) { return 0; }
2797 if compile_prog "" "" ; then
2798 netmap=yes
2799 else
2800 if test "$netmap" = "yes" ; then
2801 feature_not_found "netmap"
2803 netmap=no
2807 ##########################################
2808 # libcap-ng library probe
2809 if test "$cap_ng" != "no" ; then
2810 cap_libs="-lcap-ng"
2811 cat > $TMPC << EOF
2812 #include <cap-ng.h>
2813 int main(void)
2815 capng_capability_to_name(CAPNG_EFFECTIVE);
2816 return 0;
2819 if compile_prog "" "$cap_libs" ; then
2820 cap_ng=yes
2821 libs_tools="$cap_libs $libs_tools"
2822 else
2823 if test "$cap_ng" = "yes" ; then
2824 feature_not_found "cap_ng" "Install libcap-ng devel"
2826 cap_ng=no
2830 ##########################################
2831 # Sound support libraries probe
2833 audio_drv_probe()
2835 drv=$1
2836 hdr=$2
2837 lib=$3
2838 exp=$4
2839 cfl=$5
2840 cat > $TMPC << EOF
2841 #include <$hdr>
2842 int main(void) { $exp }
2844 if compile_prog "$cfl" "$lib" ; then
2846 else
2847 error_exit "$drv check failed" \
2848 "Make sure to have the $drv libs and headers installed."
2852 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
2853 for drv in $audio_drv_list; do
2854 case $drv in
2855 alsa)
2856 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2857 "return snd_pcm_close((snd_pcm_t *)0);"
2858 libs_softmmu="-lasound $libs_softmmu"
2862 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2863 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
2864 libs_softmmu="-lpulse $libs_softmmu"
2865 audio_pt_int="yes"
2868 coreaudio)
2869 libs_softmmu="-framework CoreAudio $libs_softmmu"
2872 dsound)
2873 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2874 audio_win_int="yes"
2877 oss)
2878 libs_softmmu="$oss_lib $libs_softmmu"
2881 sdl|wav)
2882 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2886 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2887 error_exit "Unknown driver '$drv' selected" \
2888 "Possible drivers are: $audio_possible_drivers"
2891 esac
2892 done
2894 ##########################################
2895 # BrlAPI probe
2897 if test "$brlapi" != "no" ; then
2898 brlapi_libs="-lbrlapi"
2899 cat > $TMPC << EOF
2900 #include <brlapi.h>
2901 #include <stddef.h>
2902 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2904 if compile_prog "" "$brlapi_libs" ; then
2905 brlapi=yes
2906 libs_softmmu="$brlapi_libs $libs_softmmu"
2907 else
2908 if test "$brlapi" = "yes" ; then
2909 feature_not_found "brlapi" "Install brlapi devel"
2911 brlapi=no
2915 ##########################################
2916 # curses probe
2917 if test "$curses" != "no" ; then
2918 if test "$mingw32" = "yes" ; then
2919 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
2920 else
2921 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2923 curses_found=no
2924 cat > $TMPC << EOF
2925 #include <curses.h>
2926 int main(void) {
2927 const char *s = curses_version();
2928 resize_term(0, 0);
2929 return s != 0;
2932 IFS=:
2933 for curses_lib in $curses_list; do
2934 unset IFS
2935 if compile_prog "" "$curses_lib" ; then
2936 curses_found=yes
2937 libs_softmmu="$curses_lib $libs_softmmu"
2938 break
2940 done
2941 unset IFS
2942 if test "$curses_found" = "yes" ; then
2943 curses=yes
2944 else
2945 if test "$curses" = "yes" ; then
2946 feature_not_found "curses" "Install ncurses devel"
2948 curses=no
2952 ##########################################
2953 # curl probe
2954 if test "$curl" != "no" ; then
2955 if $pkg_config libcurl --exists; then
2956 curlconfig="$pkg_config libcurl"
2957 else
2958 curlconfig=curl-config
2960 cat > $TMPC << EOF
2961 #include <curl/curl.h>
2962 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2964 curl_cflags=$($curlconfig --cflags 2>/dev/null)
2965 curl_libs=$($curlconfig --libs 2>/dev/null)
2966 if compile_prog "$curl_cflags" "$curl_libs" ; then
2967 curl=yes
2968 else
2969 if test "$curl" = "yes" ; then
2970 feature_not_found "curl" "Install libcurl devel"
2972 curl=no
2974 fi # test "$curl"
2976 ##########################################
2977 # bluez support probe
2978 if test "$bluez" != "no" ; then
2979 cat > $TMPC << EOF
2980 #include <bluetooth/bluetooth.h>
2981 int main(void) { return bt_error(0); }
2983 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
2984 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
2985 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2986 bluez=yes
2987 libs_softmmu="$bluez_libs $libs_softmmu"
2988 else
2989 if test "$bluez" = "yes" ; then
2990 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2992 bluez="no"
2996 ##########################################
2997 # glib support probe
2999 glib_req_ver=2.22
3000 glib_modules=gthread-2.0
3001 if test "$modules" = yes; then
3002 glib_modules="$glib_modules gmodule-2.0"
3005 for i in $glib_modules; do
3006 if $pkg_config --atleast-version=$glib_req_ver $i; then
3007 glib_cflags=$($pkg_config --cflags $i)
3008 glib_libs=$($pkg_config --libs $i)
3009 CFLAGS="$glib_cflags $CFLAGS"
3010 LIBS="$glib_libs $LIBS"
3011 libs_qga="$glib_libs $libs_qga"
3012 else
3013 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3015 done
3017 # Sanity check that the current size_t matches the
3018 # size that glib thinks it should be. This catches
3019 # problems on multi-arch where people try to build
3020 # 32-bit QEMU while pointing at 64-bit glib headers
3021 cat > $TMPC <<EOF
3022 #include <glib.h>
3023 #include <unistd.h>
3025 #define QEMU_BUILD_BUG_ON(x) \
3026 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3028 int main(void) {
3029 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3030 return 0;
3034 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3035 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3036 "You probably need to set PKG_CONFIG_LIBDIR"\
3037 "to point to the right pkg-config files for your"\
3038 "build target"
3041 # g_test_trap_subprocess added in 2.38. Used by some tests.
3042 glib_subprocess=yes
3043 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3044 glib_subprocess=no
3047 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3048 cat > $TMPC << EOF
3049 #include <glib.h>
3050 int main(void) { return 0; }
3052 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3053 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3054 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3055 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3059 ##########################################
3060 # SHA command probe for modules
3061 if test "$modules" = yes; then
3062 shacmd_probe="sha1sum sha1 shasum"
3063 for c in $shacmd_probe; do
3064 if has $c; then
3065 shacmd="$c"
3066 break
3068 done
3069 if test "$shacmd" = ""; then
3070 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3074 ##########################################
3075 # pixman support probe
3077 if test "$pixman" = ""; then
3078 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3079 pixman="none"
3080 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3081 pixman="system"
3082 else
3083 pixman="internal"
3086 if test "$pixman" = "none"; then
3087 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3088 error_exit "pixman disabled but system emulation or tools build" \
3089 "enabled. You can turn off pixman only if you also" \
3090 "disable all system emulation targets and the tools" \
3091 "build with '--disable-tools --disable-system'."
3093 pixman_cflags=
3094 pixman_libs=
3095 elif test "$pixman" = "system"; then
3096 # pixman version has been checked above
3097 pixman_cflags=$($pkg_config --cflags pixman-1)
3098 pixman_libs=$($pkg_config --libs pixman-1)
3099 else
3100 if test ! -d ${source_path}/pixman/pixman; then
3101 error_exit "pixman >= 0.21.8 not present. Your options:" \
3102 " (1) Preferred: Install the pixman devel package (any recent" \
3103 " distro should have packages as Xorg needs pixman too)." \
3104 " (2) Fetch the pixman submodule, using:" \
3105 " git submodule update --init pixman"
3107 mkdir -p pixman/pixman
3108 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3109 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3112 ##########################################
3113 # libcap probe
3115 if test "$cap" != "no" ; then
3116 cat > $TMPC <<EOF
3117 #include <stdio.h>
3118 #include <sys/capability.h>
3119 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3121 if compile_prog "" "-lcap" ; then
3122 cap=yes
3123 else
3124 cap=no
3128 ##########################################
3129 # pthread probe
3130 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3132 pthread=no
3133 cat > $TMPC << EOF
3134 #include <pthread.h>
3135 static void *f(void *p) { return NULL; }
3136 int main(void) {
3137 pthread_t thread;
3138 pthread_create(&thread, 0, f, 0);
3139 return 0;
3142 if compile_prog "" "" ; then
3143 pthread=yes
3144 else
3145 for pthread_lib in $PTHREADLIBS_LIST; do
3146 if compile_prog "" "$pthread_lib" ; then
3147 pthread=yes
3148 found=no
3149 for lib_entry in $LIBS; do
3150 if test "$lib_entry" = "$pthread_lib"; then
3151 found=yes
3152 break
3154 done
3155 if test "$found" = "no"; then
3156 LIBS="$pthread_lib $LIBS"
3158 PTHREAD_LIB="$pthread_lib"
3159 break
3161 done
3164 if test "$mingw32" != yes -a "$pthread" = no; then
3165 error_exit "pthread check failed" \
3166 "Make sure to have the pthread libs and headers installed."
3169 # check for pthread_setname_np
3170 pthread_setname_np=no
3171 cat > $TMPC << EOF
3172 #include <pthread.h>
3174 static void *f(void *p) { return NULL; }
3175 int main(void)
3177 pthread_t thread;
3178 pthread_create(&thread, 0, f, 0);
3179 pthread_setname_np(thread, "QEMU");
3180 return 0;
3183 if compile_prog "" "$pthread_lib" ; then
3184 pthread_setname_np=yes
3187 ##########################################
3188 # rbd probe
3189 if test "$rbd" != "no" ; then
3190 cat > $TMPC <<EOF
3191 #include <stdio.h>
3192 #include <rbd/librbd.h>
3193 int main(void) {
3194 rados_t cluster;
3195 rados_create(&cluster, NULL);
3196 return 0;
3199 rbd_libs="-lrbd -lrados"
3200 if compile_prog "" "$rbd_libs" ; then
3201 rbd=yes
3202 else
3203 if test "$rbd" = "yes" ; then
3204 feature_not_found "rados block device" "Install librbd/ceph devel"
3206 rbd=no
3210 ##########################################
3211 # libssh2 probe
3212 min_libssh2_version=1.2.8
3213 if test "$libssh2" != "no" ; then
3214 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3215 libssh2_cflags=$($pkg_config libssh2 --cflags)
3216 libssh2_libs=$($pkg_config libssh2 --libs)
3217 libssh2=yes
3218 else
3219 if test "$libssh2" = "yes" ; then
3220 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3222 libssh2=no
3226 ##########################################
3227 # libssh2_sftp_fsync probe
3229 if test "$libssh2" = "yes"; then
3230 cat > $TMPC <<EOF
3231 #include <stdio.h>
3232 #include <libssh2.h>
3233 #include <libssh2_sftp.h>
3234 int main(void) {
3235 LIBSSH2_SESSION *session;
3236 LIBSSH2_SFTP *sftp;
3237 LIBSSH2_SFTP_HANDLE *sftp_handle;
3238 session = libssh2_session_init ();
3239 sftp = libssh2_sftp_init (session);
3240 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3241 libssh2_sftp_fsync (sftp_handle);
3242 return 0;
3245 # libssh2_cflags/libssh2_libs defined in previous test.
3246 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3247 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3251 ##########################################
3252 # linux-aio probe
3254 if test "$linux_aio" != "no" ; then
3255 cat > $TMPC <<EOF
3256 #include <libaio.h>
3257 #include <sys/eventfd.h>
3258 #include <stddef.h>
3259 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3261 if compile_prog "" "-laio" ; then
3262 linux_aio=yes
3263 else
3264 if test "$linux_aio" = "yes" ; then
3265 feature_not_found "linux AIO" "Install libaio devel"
3267 linux_aio=no
3271 ##########################################
3272 # TPM passthrough is only on x86 Linux
3274 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3275 tpm_passthrough=$tpm
3276 else
3277 tpm_passthrough=no
3280 ##########################################
3281 # attr probe
3283 if test "$attr" != "no" ; then
3284 cat > $TMPC <<EOF
3285 #include <stdio.h>
3286 #include <sys/types.h>
3287 #ifdef CONFIG_LIBATTR
3288 #include <attr/xattr.h>
3289 #else
3290 #include <sys/xattr.h>
3291 #endif
3292 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3294 if compile_prog "" "" ; then
3295 attr=yes
3296 # Older distros have <attr/xattr.h>, and need -lattr:
3297 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3298 attr=yes
3299 LIBS="-lattr $LIBS"
3300 libattr=yes
3301 else
3302 if test "$attr" = "yes" ; then
3303 feature_not_found "ATTR" "Install libc6 or libattr devel"
3305 attr=no
3309 ##########################################
3310 # iovec probe
3311 cat > $TMPC <<EOF
3312 #include <sys/types.h>
3313 #include <sys/uio.h>
3314 #include <unistd.h>
3315 int main(void) { return sizeof(struct iovec); }
3317 iovec=no
3318 if compile_prog "" "" ; then
3319 iovec=yes
3322 ##########################################
3323 # preadv probe
3324 cat > $TMPC <<EOF
3325 #include <sys/types.h>
3326 #include <sys/uio.h>
3327 #include <unistd.h>
3328 int main(void) { return preadv(0, 0, 0, 0); }
3330 preadv=no
3331 if compile_prog "" "" ; then
3332 preadv=yes
3335 ##########################################
3336 # fdt probe
3337 # fdt support is mandatory for at least some target architectures,
3338 # so insist on it if we're building those system emulators.
3339 fdt_required=no
3340 for target in $target_list; do
3341 case $target in
3342 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3343 fdt_required=yes
3345 esac
3346 done
3348 if test "$fdt_required" = "yes"; then
3349 if test "$fdt" = "no"; then
3350 error_exit "fdt disabled but some requested targets require it." \
3351 "You can turn off fdt only if you also disable all the system emulation" \
3352 "targets which need it (by specifying a cut down --target-list)."
3354 fdt=yes
3357 if test "$fdt" != "no" ; then
3358 fdt_libs="-lfdt"
3359 # explicitly check for libfdt_env.h as it is missing in some stable installs
3360 # and test for required functions to make sure we are on a version >= 1.4.0
3361 cat > $TMPC << EOF
3362 #include <libfdt.h>
3363 #include <libfdt_env.h>
3364 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3366 if compile_prog "" "$fdt_libs" ; then
3367 # system DTC is good - use it
3368 fdt=yes
3369 elif test -d ${source_path}/dtc/libfdt ; then
3370 # have submodule DTC - use it
3371 fdt=yes
3372 dtc_internal="yes"
3373 mkdir -p dtc
3374 if [ "$pwd_is_source_path" != "y" ] ; then
3375 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3376 symlink "$source_path/dtc/scripts" "dtc/scripts"
3378 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3379 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3380 elif test "$fdt" = "yes" ; then
3381 # have neither and want - prompt for system/submodule install
3382 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3383 " (1) Preferred: Install the DTC (libfdt) devel package" \
3384 " (2) Fetch the DTC submodule, using:" \
3385 " git submodule update --init dtc"
3386 else
3387 # don't have and don't want
3388 fdt_libs=
3389 fdt=no
3393 libs_softmmu="$libs_softmmu $fdt_libs"
3395 ##########################################
3396 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3398 if test "$opengl" != "no" ; then
3399 opengl_pkgs="epoxy libdrm gbm"
3400 if $pkg_config $opengl_pkgs x11; then
3401 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3402 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3403 opengl=yes
3404 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3405 gtk_gl="yes"
3407 else
3408 if test "$opengl" = "yes" ; then
3409 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3411 opengl_cflags=""
3412 opengl_libs=""
3413 opengl=no
3417 if test "$opengl" = "yes"; then
3418 cat > $TMPC << EOF
3419 #include <epoxy/egl.h>
3420 #ifndef EGL_MESA_image_dma_buf_export
3421 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3422 #endif
3423 int main(void) { return 0; }
3425 if compile_prog "" "" ; then
3426 opengl_dmabuf=yes
3430 ##########################################
3431 # archipelago probe
3432 if test "$archipelago" != "no" ; then
3433 cat > $TMPC <<EOF
3434 #include <stdio.h>
3435 #include <xseg/xseg.h>
3436 #include <xseg/protocol.h>
3437 int main(void) {
3438 xseg_initialize();
3439 return 0;
3442 archipelago_libs=-lxseg
3443 if compile_prog "" "$archipelago_libs"; then
3444 archipelago="yes"
3445 libs_tools="$archipelago_libs $libs_tools"
3446 libs_softmmu="$archipelago_libs $libs_softmmu"
3448 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3449 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3450 echo "license and therefore prevent redistribution."
3451 echo
3452 echo "To disable Archipelago, use --disable-archipelago"
3453 else
3454 if test "$archipelago" = "yes" ; then
3455 feature_not_found "Archipelago backend support" "Install libxseg devel"
3457 archipelago="no"
3462 ##########################################
3463 # glusterfs probe
3464 if test "$glusterfs" != "no" ; then
3465 if $pkg_config --atleast-version=3 glusterfs-api; then
3466 glusterfs="yes"
3467 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3468 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3469 if $pkg_config --atleast-version=4 glusterfs-api; then
3470 glusterfs_xlator_opt="yes"
3472 if $pkg_config --atleast-version=5 glusterfs-api; then
3473 glusterfs_discard="yes"
3475 if $pkg_config --atleast-version=6 glusterfs-api; then
3476 glusterfs_zerofill="yes"
3478 else
3479 if test "$glusterfs" = "yes" ; then
3480 feature_not_found "GlusterFS backend support" \
3481 "Install glusterfs-api devel >= 3"
3483 glusterfs="no"
3487 # Check for inotify functions when we are building linux-user
3488 # emulator. This is done because older glibc versions don't
3489 # have syscall stubs for these implemented. In that case we
3490 # don't provide them even if kernel supports them.
3492 inotify=no
3493 cat > $TMPC << EOF
3494 #include <sys/inotify.h>
3497 main(void)
3499 /* try to start inotify */
3500 return inotify_init();
3503 if compile_prog "" "" ; then
3504 inotify=yes
3507 inotify1=no
3508 cat > $TMPC << EOF
3509 #include <sys/inotify.h>
3512 main(void)
3514 /* try to start inotify */
3515 return inotify_init1(0);
3518 if compile_prog "" "" ; then
3519 inotify1=yes
3522 # check if utimensat and futimens are supported
3523 utimens=no
3524 cat > $TMPC << EOF
3525 #define _ATFILE_SOURCE
3526 #include <stddef.h>
3527 #include <fcntl.h>
3528 #include <sys/stat.h>
3530 int main(void)
3532 utimensat(AT_FDCWD, "foo", NULL, 0);
3533 futimens(0, NULL);
3534 return 0;
3537 if compile_prog "" "" ; then
3538 utimens=yes
3541 # check if pipe2 is there
3542 pipe2=no
3543 cat > $TMPC << EOF
3544 #include <unistd.h>
3545 #include <fcntl.h>
3547 int main(void)
3549 int pipefd[2];
3550 return pipe2(pipefd, O_CLOEXEC);
3553 if compile_prog "" "" ; then
3554 pipe2=yes
3557 # check if accept4 is there
3558 accept4=no
3559 cat > $TMPC << EOF
3560 #include <sys/socket.h>
3561 #include <stddef.h>
3563 int main(void)
3565 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3566 return 0;
3569 if compile_prog "" "" ; then
3570 accept4=yes
3573 # check if tee/splice is there. vmsplice was added same time.
3574 splice=no
3575 cat > $TMPC << EOF
3576 #include <unistd.h>
3577 #include <fcntl.h>
3578 #include <limits.h>
3580 int main(void)
3582 int len, fd = 0;
3583 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3584 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3585 return 0;
3588 if compile_prog "" "" ; then
3589 splice=yes
3592 ##########################################
3593 # libnuma probe
3595 if test "$numa" != "no" ; then
3596 cat > $TMPC << EOF
3597 #include <numa.h>
3598 int main(void) { return numa_available(); }
3601 if compile_prog "" "-lnuma" ; then
3602 numa=yes
3603 libs_softmmu="-lnuma $libs_softmmu"
3604 else
3605 if test "$numa" = "yes" ; then
3606 feature_not_found "numa" "install numactl devel"
3608 numa=no
3612 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3613 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3614 exit 1
3617 ##########################################
3618 # tcmalloc probe
3620 if test "$tcmalloc" = "yes" ; then
3621 cat > $TMPC << EOF
3622 #include <stdlib.h>
3623 int main(void) { malloc(1); return 0; }
3626 if compile_prog "" "-ltcmalloc" ; then
3627 LIBS="-ltcmalloc $LIBS"
3628 else
3629 feature_not_found "tcmalloc" "install gperftools devel"
3633 ##########################################
3634 # jemalloc probe
3636 if test "$jemalloc" = "yes" ; then
3637 cat > $TMPC << EOF
3638 #include <stdlib.h>
3639 int main(void) { malloc(1); return 0; }
3642 if compile_prog "" "-ljemalloc" ; then
3643 LIBS="-ljemalloc $LIBS"
3644 else
3645 feature_not_found "jemalloc" "install jemalloc devel"
3649 ##########################################
3650 # signalfd probe
3651 signalfd="no"
3652 cat > $TMPC << EOF
3653 #include <unistd.h>
3654 #include <sys/syscall.h>
3655 #include <signal.h>
3656 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3659 if compile_prog "" "" ; then
3660 signalfd=yes
3663 # check if eventfd is supported
3664 eventfd=no
3665 cat > $TMPC << EOF
3666 #include <sys/eventfd.h>
3668 int main(void)
3670 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3673 if compile_prog "" "" ; then
3674 eventfd=yes
3677 # check if memfd is supported
3678 memfd=no
3679 cat > $TMPC << EOF
3680 #include <sys/memfd.h>
3682 int main(void)
3684 return memfd_create("foo", MFD_ALLOW_SEALING);
3687 if compile_prog "" "" ; then
3688 memfd=yes
3693 # check for fallocate
3694 fallocate=no
3695 cat > $TMPC << EOF
3696 #include <fcntl.h>
3698 int main(void)
3700 fallocate(0, 0, 0, 0);
3701 return 0;
3704 if compile_prog "" "" ; then
3705 fallocate=yes
3708 # check for fallocate hole punching
3709 fallocate_punch_hole=no
3710 cat > $TMPC << EOF
3711 #include <fcntl.h>
3712 #include <linux/falloc.h>
3714 int main(void)
3716 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3717 return 0;
3720 if compile_prog "" "" ; then
3721 fallocate_punch_hole=yes
3724 # check that fallocate supports range zeroing inside the file
3725 fallocate_zero_range=no
3726 cat > $TMPC << EOF
3727 #include <fcntl.h>
3728 #include <linux/falloc.h>
3730 int main(void)
3732 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3733 return 0;
3736 if compile_prog "" "" ; then
3737 fallocate_zero_range=yes
3740 # check for posix_fallocate
3741 posix_fallocate=no
3742 cat > $TMPC << EOF
3743 #include <fcntl.h>
3745 int main(void)
3747 posix_fallocate(0, 0, 0);
3748 return 0;
3751 if compile_prog "" "" ; then
3752 posix_fallocate=yes
3755 # check for sync_file_range
3756 sync_file_range=no
3757 cat > $TMPC << EOF
3758 #include <fcntl.h>
3760 int main(void)
3762 sync_file_range(0, 0, 0, 0);
3763 return 0;
3766 if compile_prog "" "" ; then
3767 sync_file_range=yes
3770 # check for linux/fiemap.h and FS_IOC_FIEMAP
3771 fiemap=no
3772 cat > $TMPC << EOF
3773 #include <sys/ioctl.h>
3774 #include <linux/fs.h>
3775 #include <linux/fiemap.h>
3777 int main(void)
3779 ioctl(0, FS_IOC_FIEMAP, 0);
3780 return 0;
3783 if compile_prog "" "" ; then
3784 fiemap=yes
3787 # check for dup3
3788 dup3=no
3789 cat > $TMPC << EOF
3790 #include <unistd.h>
3792 int main(void)
3794 dup3(0, 0, 0);
3795 return 0;
3798 if compile_prog "" "" ; then
3799 dup3=yes
3802 # check for ppoll support
3803 ppoll=no
3804 cat > $TMPC << EOF
3805 #include <poll.h>
3807 int main(void)
3809 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3810 ppoll(&pfd, 1, 0, 0);
3811 return 0;
3814 if compile_prog "" "" ; then
3815 ppoll=yes
3818 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3819 prctl_pr_set_timerslack=no
3820 cat > $TMPC << EOF
3821 #include <sys/prctl.h>
3823 int main(void)
3825 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3826 return 0;
3829 if compile_prog "" "" ; then
3830 prctl_pr_set_timerslack=yes
3833 # check for epoll support
3834 epoll=no
3835 cat > $TMPC << EOF
3836 #include <sys/epoll.h>
3838 int main(void)
3840 epoll_create(0);
3841 return 0;
3844 if compile_prog "" "" ; then
3845 epoll=yes
3848 # epoll_create1 is a later addition
3849 # so we must check separately for its presence
3850 epoll_create1=no
3851 cat > $TMPC << EOF
3852 #include <sys/epoll.h>
3854 int main(void)
3856 /* Note that we use epoll_create1 as a value, not as
3857 * a function being called. This is necessary so that on
3858 * old SPARC glibc versions where the function was present in
3859 * the library but not declared in the header file we will
3860 * fail the configure check. (Otherwise we will get a compiler
3861 * warning but not an error, and will proceed to fail the
3862 * qemu compile where we compile with -Werror.)
3864 return (int)(uintptr_t)&epoll_create1;
3867 if compile_prog "" "" ; then
3868 epoll_create1=yes
3871 # check for sendfile support
3872 sendfile=no
3873 cat > $TMPC << EOF
3874 #include <sys/sendfile.h>
3876 int main(void)
3878 return sendfile(0, 0, 0, 0);
3881 if compile_prog "" "" ; then
3882 sendfile=yes
3885 # check for timerfd support (glibc 2.8 and newer)
3886 timerfd=no
3887 cat > $TMPC << EOF
3888 #include <sys/timerfd.h>
3890 int main(void)
3892 return(timerfd_create(CLOCK_REALTIME, 0));
3895 if compile_prog "" "" ; then
3896 timerfd=yes
3899 # check for setns and unshare support
3900 setns=no
3901 cat > $TMPC << EOF
3902 #include <sched.h>
3904 int main(void)
3906 int ret;
3907 ret = setns(0, 0);
3908 ret = unshare(0);
3909 return ret;
3912 if compile_prog "" "" ; then
3913 setns=yes
3916 # Check if tools are available to build documentation.
3917 if test "$docs" != "no" ; then
3918 if has makeinfo && has pod2man; then
3919 docs=yes
3920 else
3921 if test "$docs" = "yes" ; then
3922 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3924 docs=no
3928 if test "$want_tools" = ""; then
3929 if test $(expr "$target_list" : ".*softmmu.*") != 0; then
3930 want_tools=yes
3931 else
3932 want_tools=no
3936 # Search for bswap_32 function
3937 byteswap_h=no
3938 cat > $TMPC << EOF
3939 #include <byteswap.h>
3940 int main(void) { return bswap_32(0); }
3942 if compile_prog "" "" ; then
3943 byteswap_h=yes
3946 # Search for bswap32 function
3947 bswap_h=no
3948 cat > $TMPC << EOF
3949 #include <sys/endian.h>
3950 #include <sys/types.h>
3951 #include <machine/bswap.h>
3952 int main(void) { return bswap32(0); }
3954 if compile_prog "" "" ; then
3955 bswap_h=yes
3958 ##########################################
3959 # Do we have libiscsi >= 1.9.0
3960 if test "$libiscsi" != "no" ; then
3961 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3962 libiscsi="yes"
3963 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3964 libiscsi_libs=$($pkg_config --libs libiscsi)
3965 else
3966 if test "$libiscsi" = "yes" ; then
3967 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3969 libiscsi="no"
3973 ##########################################
3974 # Do we need libm
3975 cat > $TMPC << EOF
3976 #include <math.h>
3977 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3979 if compile_prog "" "" ; then
3981 elif compile_prog "" "-lm" ; then
3982 LIBS="-lm $LIBS"
3983 libs_qga="-lm $libs_qga"
3984 else
3985 error_exit "libm check failed"
3988 ##########################################
3989 # Do we need librt
3990 # uClibc provides 2 versions of clock_gettime(), one with realtime
3991 # support and one without. This means that the clock_gettime() don't
3992 # need -lrt. We still need it for timer_create() so we check for this
3993 # function in addition.
3994 cat > $TMPC <<EOF
3995 #include <signal.h>
3996 #include <time.h>
3997 int main(void) {
3998 timer_create(CLOCK_REALTIME, NULL, NULL);
3999 return clock_gettime(CLOCK_REALTIME, NULL);
4003 if compile_prog "" "" ; then
4005 # we need pthread for static linking. use previous pthread test result
4006 elif compile_prog "" "$pthread_lib -lrt" ; then
4007 LIBS="$LIBS -lrt"
4008 libs_qga="$libs_qga -lrt"
4011 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4012 "$aix" != "yes" -a "$haiku" != "yes" ; then
4013 libs_softmmu="-lutil $libs_softmmu"
4016 ##########################################
4017 # spice probe
4018 if test "$spice" != "no" ; then
4019 cat > $TMPC << EOF
4020 #include <spice.h>
4021 int main(void) { spice_server_new(); return 0; }
4023 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4024 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4025 if $pkg_config --atleast-version=0.12.0 spice-server && \
4026 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4027 compile_prog "$spice_cflags" "$spice_libs" ; then
4028 spice="yes"
4029 libs_softmmu="$libs_softmmu $spice_libs"
4030 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4031 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4032 spice_server_version=$($pkg_config --modversion spice-server)
4033 else
4034 if test "$spice" = "yes" ; then
4035 feature_not_found "spice" \
4036 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4038 spice="no"
4042 # check for smartcard support
4043 smartcard_cflags=""
4044 if test "$smartcard" != "no"; then
4045 if $pkg_config libcacard; then
4046 libcacard_cflags=$($pkg_config --cflags libcacard)
4047 libcacard_libs=$($pkg_config --libs libcacard)
4048 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4049 libs_softmmu="$libs_softmmu $libcacard_libs"
4050 smartcard="yes"
4051 else
4052 if test "$smartcard" = "yes"; then
4053 feature_not_found "smartcard" "Install libcacard devel"
4055 smartcard="no"
4059 # check for libusb
4060 if test "$libusb" != "no" ; then
4061 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4062 libusb="yes"
4063 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4064 libusb_libs=$($pkg_config --libs libusb-1.0)
4065 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4066 libs_softmmu="$libs_softmmu $libusb_libs"
4067 else
4068 if test "$libusb" = "yes"; then
4069 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4071 libusb="no"
4075 # check for usbredirparser for usb network redirection support
4076 if test "$usb_redir" != "no" ; then
4077 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4078 usb_redir="yes"
4079 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4080 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4081 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4082 libs_softmmu="$libs_softmmu $usb_redir_libs"
4083 else
4084 if test "$usb_redir" = "yes"; then
4085 feature_not_found "usb-redir" "Install usbredir devel"
4087 usb_redir="no"
4091 ##########################################
4092 # check if we have VSS SDK headers for win
4094 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4095 case "$vss_win32_sdk" in
4096 "") vss_win32_include="-isystem $source_path" ;;
4097 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4098 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4099 vss_win32_include="-isystem $source_path/.sdk/vss"
4100 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4102 *) vss_win32_include="-isystem $vss_win32_sdk"
4103 esac
4104 cat > $TMPC << EOF
4105 #define __MIDL_user_allocate_free_DEFINED__
4106 #include <inc/win2003/vss.h>
4107 int main(void) { return VSS_CTX_BACKUP; }
4109 if compile_prog "$vss_win32_include" "" ; then
4110 guest_agent_with_vss="yes"
4111 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4112 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4113 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4114 else
4115 if test "$vss_win32_sdk" != "" ; then
4116 echo "ERROR: Please download and install Microsoft VSS SDK:"
4117 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4118 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4119 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4120 echo "ERROR: The headers are extracted in the directory \`inc'."
4121 feature_not_found "VSS support"
4123 guest_agent_with_vss="no"
4127 ##########################################
4128 # lookup Windows platform SDK (if not specified)
4129 # The SDK is needed only to build .tlb (type library) file of guest agent
4130 # VSS provider from the source. It is usually unnecessary because the
4131 # pre-compiled .tlb file is included.
4133 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4134 if test -z "$win_sdk"; then
4135 programfiles="$PROGRAMFILES"
4136 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4137 if test -n "$programfiles"; then
4138 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4139 else
4140 feature_not_found "Windows SDK"
4142 elif test "$win_sdk" = "no"; then
4143 win_sdk=""
4147 ##########################################
4148 # check if mingw environment provides a recent ntddscsi.h
4149 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4150 cat > $TMPC << EOF
4151 #include <windows.h>
4152 #include <ntddscsi.h>
4153 int main(void) {
4154 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4155 #error Missing required ioctl definitions
4156 #endif
4157 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4158 return addr.Lun;
4161 if compile_prog "" "" ; then
4162 guest_agent_ntddscsi=yes
4163 libs_qga="-lsetupapi $libs_qga"
4167 ##########################################
4168 # virgl renderer probe
4170 if test "$virglrenderer" != "no" ; then
4171 cat > $TMPC << EOF
4172 #include <virglrenderer.h>
4173 int main(void) { virgl_renderer_poll(); return 0; }
4175 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4176 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4177 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4178 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4179 virglrenderer="yes"
4180 else
4181 if test "$virglrenderer" = "yes" ; then
4182 feature_not_found "virglrenderer"
4184 virglrenderer="no"
4188 ##########################################
4189 # check if we have fdatasync
4191 fdatasync=no
4192 cat > $TMPC << EOF
4193 #include <unistd.h>
4194 int main(void) {
4195 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4196 return fdatasync(0);
4197 #else
4198 #error Not supported
4199 #endif
4202 if compile_prog "" "" ; then
4203 fdatasync=yes
4206 ##########################################
4207 # check if we have madvise
4209 madvise=no
4210 cat > $TMPC << EOF
4211 #include <sys/types.h>
4212 #include <sys/mman.h>
4213 #include <stddef.h>
4214 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4216 if compile_prog "" "" ; then
4217 madvise=yes
4220 ##########################################
4221 # check if we have posix_madvise
4223 posix_madvise=no
4224 cat > $TMPC << EOF
4225 #include <sys/mman.h>
4226 #include <stddef.h>
4227 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4229 if compile_prog "" "" ; then
4230 posix_madvise=yes
4233 ##########################################
4234 # check if trace backend exists
4236 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4237 if test "$?" -ne 0 ; then
4238 error_exit "invalid trace backends" \
4239 "Please choose supported trace backends."
4242 ##########################################
4243 # For 'ust' backend, test if ust headers are present
4244 if have_backend "ust"; then
4245 cat > $TMPC << EOF
4246 #include <lttng/tracepoint.h>
4247 int main(void) { return 0; }
4249 if compile_prog "" "" ; then
4250 if $pkg_config lttng-ust --exists; then
4251 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4252 else
4253 lttng_ust_libs="-llttng-ust"
4255 if $pkg_config liburcu-bp --exists; then
4256 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4257 else
4258 urcu_bp_libs="-lurcu-bp"
4261 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4262 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4263 else
4264 error_exit "Trace backend 'ust' missing lttng-ust header files"
4268 ##########################################
4269 # For 'dtrace' backend, test if 'dtrace' command is present
4270 if have_backend "dtrace"; then
4271 if ! has 'dtrace' ; then
4272 error_exit "dtrace command is not found in PATH $PATH"
4274 trace_backend_stap="no"
4275 if has 'stap' ; then
4276 trace_backend_stap="yes"
4280 ##########################################
4281 # check and set a backend for coroutine
4283 # We prefer ucontext, but it's not always possible. The fallback
4284 # is sigcontext. gthread is not selectable except explicitly, because
4285 # it is not functional enough to run QEMU proper. (It is occasionally
4286 # useful for debugging purposes.) On Windows the only valid backend
4287 # is the Windows-specific one.
4289 ucontext_works=no
4290 if test "$darwin" != "yes"; then
4291 cat > $TMPC << EOF
4292 #include <ucontext.h>
4293 #ifdef __stub_makecontext
4294 #error Ignoring glibc stub makecontext which will always fail
4295 #endif
4296 int main(void) { makecontext(0, 0, 0); return 0; }
4298 if compile_prog "" "" ; then
4299 ucontext_works=yes
4303 if test "$coroutine" = ""; then
4304 if test "$mingw32" = "yes"; then
4305 coroutine=win32
4306 elif test "$ucontext_works" = "yes"; then
4307 coroutine=ucontext
4308 else
4309 coroutine=sigaltstack
4311 else
4312 case $coroutine in
4313 windows)
4314 if test "$mingw32" != "yes"; then
4315 error_exit "'windows' coroutine backend only valid for Windows"
4317 # Unfortunately the user visible backend name doesn't match the
4318 # coroutine-*.c filename for this case, so we have to adjust it here.
4319 coroutine=win32
4321 ucontext)
4322 if test "$ucontext_works" != "yes"; then
4323 feature_not_found "ucontext"
4326 gthread|sigaltstack)
4327 if test "$mingw32" = "yes"; then
4328 error_exit "only the 'windows' coroutine backend is valid for Windows"
4332 error_exit "unknown coroutine backend $coroutine"
4334 esac
4337 if test "$coroutine_pool" = ""; then
4338 if test "$coroutine" = "gthread" -o "$coroutine" = "win32"; then
4339 coroutine_pool=no
4340 else
4341 coroutine_pool=yes
4344 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4345 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4348 ##########################################
4349 # check if we have open_by_handle_at
4351 open_by_handle_at=no
4352 cat > $TMPC << EOF
4353 #include <fcntl.h>
4354 #if !defined(AT_EMPTY_PATH)
4355 # error missing definition
4356 #else
4357 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4358 #endif
4360 if compile_prog "" "" ; then
4361 open_by_handle_at=yes
4364 ########################################
4365 # check if we have linux/magic.h
4367 linux_magic_h=no
4368 cat > $TMPC << EOF
4369 #include <linux/magic.h>
4370 int main(void) {
4371 return 0;
4374 if compile_prog "" "" ; then
4375 linux_magic_h=yes
4378 ########################################
4379 # check whether we can disable warning option with a pragma (this is needed
4380 # to silence warnings in the headers of some versions of external libraries).
4381 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4382 # only a warning.
4384 # If we can't selectively disable warning in the code, disable -Werror so that
4385 # the build doesn't fail anyway.
4387 pragma_disable_unused_but_set=no
4388 cat > $TMPC << EOF
4389 #pragma GCC diagnostic push
4390 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4391 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4392 #pragma GCC diagnostic pop
4394 int main(void) {
4395 return 0;
4398 if compile_prog "-Werror" "" ; then
4399 pragma_diagnostic_available=yes
4402 ########################################
4403 # check if we have valgrind/valgrind.h
4405 valgrind_h=no
4406 cat > $TMPC << EOF
4407 #include <valgrind/valgrind.h>
4408 int main(void) {
4409 return 0;
4412 if compile_prog "" "" ; then
4413 valgrind_h=yes
4416 ########################################
4417 # check if environ is declared
4419 has_environ=no
4420 cat > $TMPC << EOF
4421 #include <unistd.h>
4422 int main(void) {
4423 environ = 0;
4424 return 0;
4427 if compile_prog "" "" ; then
4428 has_environ=yes
4431 ########################################
4432 # check if cpuid.h is usable.
4434 cpuid_h=no
4435 cat > $TMPC << EOF
4436 #include <cpuid.h>
4437 int main(void) {
4438 unsigned a, b, c, d;
4439 int max = __get_cpuid_max(0, 0);
4441 if (max >= 1) {
4442 __cpuid(1, a, b, c, d);
4445 if (max >= 7) {
4446 __cpuid_count(7, 0, a, b, c, d);
4449 return 0;
4452 if compile_prog "" "" ; then
4453 cpuid_h=yes
4456 ########################################
4457 # check if __[u]int128_t is usable.
4459 int128=no
4460 cat > $TMPC << EOF
4461 #if defined(__clang_major__) && defined(__clang_minor__)
4462 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4463 # error __int128_t does not work in CLANG before 3.2
4464 # endif
4465 #endif
4466 __int128_t a;
4467 __uint128_t b;
4468 int main (void) {
4469 a = a + b;
4470 b = a * b;
4471 a = a * a;
4472 return 0;
4475 if compile_prog "" "" ; then
4476 int128=yes
4479 ########################################
4480 # check if getauxval is available.
4482 getauxval=no
4483 cat > $TMPC << EOF
4484 #include <sys/auxv.h>
4485 int main(void) {
4486 return getauxval(AT_HWCAP) == 0;
4489 if compile_prog "" "" ; then
4490 getauxval=yes
4493 ########################################
4494 # check if ccache is interfering with
4495 # semantic analysis of macros
4497 unset CCACHE_CPP2
4498 ccache_cpp2=no
4499 cat > $TMPC << EOF
4500 static const int Z = 1;
4501 #define fn() ({ Z; })
4502 #define TAUT(X) ((X) == Z)
4503 #define PAREN(X, Y) (X == Y)
4504 #define ID(X) (X)
4505 int main(int argc, char *argv[])
4507 int x = 0, y = 0;
4508 x = ID(x);
4509 x = fn();
4510 fn();
4511 if (PAREN(x, y)) return 0;
4512 if (TAUT(Z)) return 0;
4513 return 0;
4517 if ! compile_object "-Werror"; then
4518 ccache_cpp2=yes
4521 #################################################
4522 # clang does not support glibc + FORTIFY_SOURCE.
4524 if test "$fortify_source" != "no"; then
4525 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4526 fortify_source="no";
4527 elif test -n "$cxx" &&
4528 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4529 fortify_source="no";
4530 else
4531 fortify_source="yes"
4535 ##########################################
4536 # check if struct fsxattr is available via linux/fs.h
4538 have_fsxattr=no
4539 cat > $TMPC << EOF
4540 #include <linux/fs.h>
4541 struct fsxattr foo;
4542 int main(void) {
4543 return 0;
4546 if compile_prog "" "" ; then
4547 have_fsxattr=yes
4550 ##########################################
4551 # check if rtnetlink.h exists and is useful
4552 have_rtnetlink=no
4553 cat > $TMPC << EOF
4554 #include <linux/rtnetlink.h>
4555 int main(void) {
4556 return IFLA_PROTO_DOWN;
4559 if compile_prog "" "" ; then
4560 have_rtnetlink=yes
4563 #################################################
4564 # Sparc implicitly links with --relax, which is
4565 # incompatible with -r, so --no-relax should be
4566 # given. It does no harm to give it on other
4567 # platforms too.
4569 # Note: the prototype is needed since QEMU_CFLAGS
4570 # contains -Wmissing-prototypes
4571 cat > $TMPC << EOF
4572 extern int foo(void);
4573 int foo(void) { return 0; }
4575 if ! compile_object ""; then
4576 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4578 if do_cc -nostdlib -Wl,-r -Wl,--no-relax -o $TMPMO $TMPO; then
4579 LD_REL_FLAGS="-Wl,--no-relax"
4582 ##########################################
4583 # End of CC checks
4584 # After here, no more $cc or $ld runs
4586 if test "$gcov" = "yes" ; then
4587 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4588 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4589 elif test "$fortify_source" = "yes" ; then
4590 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4591 elif test "$debug" = "no"; then
4592 CFLAGS="-O2 $CFLAGS"
4595 ##########################################
4596 # Do we have libnfs
4597 if test "$libnfs" != "no" ; then
4598 if $pkg_config --atleast-version=1.9.3 libnfs; then
4599 libnfs="yes"
4600 libnfs_libs=$($pkg_config --libs libnfs)
4601 LIBS="$LIBS $libnfs_libs"
4602 else
4603 if test "$libnfs" = "yes" ; then
4604 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4606 libnfs="no"
4610 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4611 if test "$werror" = "yes"; then
4612 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4615 if test "$solaris" = "no" ; then
4616 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4617 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4621 # test if pod2man has --utf8 option
4622 if pod2man --help | grep -q utf8; then
4623 POD2MAN="pod2man --utf8"
4624 else
4625 POD2MAN="pod2man"
4628 # Use large addresses, ASLR, no-SEH and DEP if available.
4629 if test "$mingw32" = "yes" ; then
4630 if test "$cpu" = i386; then
4631 LDFLAGS="-Wl,--large-address-aware $LDFLAGS"
4633 for flag in --dynamicbase --no-seh --nxcompat; do
4634 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4635 LDFLAGS="-Wl,$flag $LDFLAGS"
4637 done
4640 qemu_confdir=$sysconfdir$confsuffix
4641 qemu_moddir=$libdir$confsuffix
4642 qemu_datadir=$datadir$confsuffix
4643 qemu_localedir="$datadir/locale"
4645 tools=""
4646 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4647 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4648 tools="qemu-nbd\$(EXESUF) $tools"
4649 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4651 if test "$softmmu" = yes ; then
4652 if test "$virtfs" != no ; then
4653 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4654 virtfs=yes
4655 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4656 else
4657 if test "$virtfs" = yes; then
4658 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
4660 virtfs=no
4665 # Probe for guest agent support/options
4667 if [ "$guest_agent" != "no" ]; then
4668 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4669 tools="qemu-ga $tools"
4670 guest_agent=yes
4671 elif [ "$guest_agent" != yes ]; then
4672 guest_agent=no
4673 else
4674 error_exit "Guest agent is not supported on this platform"
4678 # Guest agent Window MSI package
4680 if test "$guest_agent" != yes; then
4681 if test "$guest_agent_msi" = yes; then
4682 error_exit "MSI guest agent package requires guest agent enabled"
4684 guest_agent_msi=no
4685 elif test "$mingw32" != "yes"; then
4686 if test "$guest_agent_msi" = "yes"; then
4687 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4689 guest_agent_msi=no
4690 elif ! has wixl; then
4691 if test "$guest_agent_msi" = "yes"; then
4692 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4694 guest_agent_msi=no
4695 else
4696 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4697 # disabled explicitly
4698 if test "$guest_agent_msi" != "no"; then
4699 guest_agent_msi=yes
4703 if test "$guest_agent_msi" = "yes"; then
4704 if test "$guest_agent_with_vss" = "yes"; then
4705 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4708 if test "$QEMU_GA_MANUFACTURER" = ""; then
4709 QEMU_GA_MANUFACTURER=QEMU
4712 if test "$QEMU_GA_DISTRO" = ""; then
4713 QEMU_GA_DISTRO=Linux
4716 if test "$QEMU_GA_VERSION" = ""; then
4717 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4720 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
4722 case "$cpu" in
4723 x86_64)
4724 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4726 i386)
4727 QEMU_GA_MSI_ARCH="-D Arch=32"
4730 error_exit "CPU $cpu not supported for building installation package"
4732 esac
4735 # Mac OS X ships with a broken assembler
4736 roms=
4737 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4738 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4739 "$softmmu" = yes ; then
4740 # Different host OS linkers have different ideas about the name of the ELF
4741 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
4742 # variant; and Windows uses i386pe.
4743 for emu in elf_i386 elf_i386_fbsd i386pe; do
4744 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4745 ld_i386_emulation="$emu"
4746 roms="optionrom"
4747 break
4749 done
4751 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4752 roms="$roms spapr-rtas"
4755 if test "$cpu" = "s390x" ; then
4756 roms="$roms s390-ccw"
4759 # Probe for the need for relocating the user-only binary.
4760 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
4761 textseg_addr=
4762 case "$cpu" in
4763 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4764 # ??? Rationale for choosing this address
4765 textseg_addr=0x60000000
4767 mips)
4768 # A 256M aligned address, high in the address space, with enough
4769 # room for the code_gen_buffer above it before the stack.
4770 textseg_addr=0x60000000
4772 esac
4773 if [ -n "$textseg_addr" ]; then
4774 cat > $TMPC <<EOF
4775 int main(void) { return 0; }
4777 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4778 if ! compile_prog "" "$textseg_ldflags"; then
4779 # In case ld does not support -Ttext-segment, edit the default linker
4780 # script via sed to set the .text start addr. This is needed on FreeBSD
4781 # at least.
4782 if ! $ld --verbose >/dev/null 2>&1; then
4783 error_exit \
4784 "We need to link the QEMU user mode binaries at a" \
4785 "specific text address. Unfortunately your linker" \
4786 "doesn't support either the -Ttext-segment option or" \
4787 "printing the default linker script with --verbose." \
4788 "If you don't want the user mode binaries, pass the" \
4789 "--disable-user option to configure."
4792 $ld --verbose | sed \
4793 -e '1,/==================================================/d' \
4794 -e '/==================================================/,$d' \
4795 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4796 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4797 textseg_ldflags="-Wl,-T../config-host.ld"
4802 echo_version() {
4803 if test "$1" = "yes" ; then
4804 echo "($2)"
4808 # prepend pixman and ftd flags after all config tests are done
4809 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4810 libs_softmmu="$pixman_libs $libs_softmmu"
4812 echo "Install prefix $prefix"
4813 echo "BIOS directory $(eval echo $qemu_datadir)"
4814 echo "binary directory $(eval echo $bindir)"
4815 echo "library directory $(eval echo $libdir)"
4816 echo "module directory $(eval echo $qemu_moddir)"
4817 echo "libexec directory $(eval echo $libexecdir)"
4818 echo "include directory $(eval echo $includedir)"
4819 echo "config directory $(eval echo $sysconfdir)"
4820 if test "$mingw32" = "no" ; then
4821 echo "local state directory $(eval echo $local_statedir)"
4822 echo "Manual directory $(eval echo $mandir)"
4823 echo "ELF interp prefix $interp_prefix"
4824 else
4825 echo "local state directory queried at runtime"
4826 echo "Windows SDK $win_sdk"
4828 echo "Source path $source_path"
4829 echo "C compiler $cc"
4830 echo "Host C compiler $host_cc"
4831 echo "C++ compiler $cxx"
4832 echo "Objective-C compiler $objcc"
4833 echo "ARFLAGS $ARFLAGS"
4834 echo "CFLAGS $CFLAGS"
4835 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4836 echo "LDFLAGS $LDFLAGS"
4837 echo "make $make"
4838 echo "install $install"
4839 echo "python $python"
4840 if test "$slirp" = "yes" ; then
4841 echo "smbd $smbd"
4843 echo "module support $modules"
4844 echo "host CPU $cpu"
4845 echo "host big endian $bigendian"
4846 echo "target list $target_list"
4847 echo "tcg debug enabled $debug_tcg"
4848 echo "gprof enabled $gprof"
4849 echo "sparse enabled $sparse"
4850 echo "strip binaries $strip_opt"
4851 echo "profiler $profiler"
4852 echo "static build $static"
4853 if test "$darwin" = "yes" ; then
4854 echo "Cocoa support $cocoa"
4856 echo "pixman $pixman"
4857 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
4858 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
4859 echo "GTK GL support $gtk_gl"
4860 echo "VTE support $vte $(echo_version $vte $vteversion)"
4861 echo "TLS priority $tls_priority"
4862 echo "GNUTLS support $gnutls"
4863 echo "GNUTLS rnd $gnutls_rnd"
4864 if test "$gcrypt" = "yes"; then
4865 echo "encryption libgcrypt"
4866 echo "libgcrypt kdf $gcrypt_kdf"
4867 elif test "$nettle" = "yes"; then
4868 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
4869 else
4870 echo "encryption none"
4872 echo "nettle kdf $nettle_kdf"
4873 echo "libtasn1 $tasn1"
4874 echo "curses support $curses"
4875 echo "virgl support $virglrenderer"
4876 echo "curl support $curl"
4877 echo "mingw32 support $mingw32"
4878 echo "Audio drivers $audio_drv_list"
4879 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4880 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4881 echo "VirtFS support $virtfs"
4882 echo "VNC support $vnc"
4883 if test "$vnc" = "yes" ; then
4884 echo "VNC SASL support $vnc_sasl"
4885 echo "VNC JPEG support $vnc_jpeg"
4886 echo "VNC PNG support $vnc_png"
4888 if test -n "$sparc_cpu"; then
4889 echo "Target Sparc Arch $sparc_cpu"
4891 echo "xen support $xen"
4892 if test "$xen" = "yes" ; then
4893 echo "xen ctrl version $xen_ctrl_version"
4894 echo "pv dom build $xen_pv_domain_build"
4896 echo "brlapi support $brlapi"
4897 echo "bluez support $bluez"
4898 echo "Documentation $docs"
4899 echo "Tools $tools"
4900 echo "PIE $pie"
4901 echo "vde support $vde"
4902 echo "netmap support $netmap"
4903 echo "Linux AIO support $linux_aio"
4904 echo "(X)ATTR support $attr"
4905 echo "Install blobs $blobs"
4906 echo "KVM support $kvm"
4907 echo "RDMA support $rdma"
4908 echo "TCG interpreter $tcg_interpreter"
4909 echo "fdt support $fdt"
4910 echo "preadv support $preadv"
4911 echo "fdatasync $fdatasync"
4912 echo "madvise $madvise"
4913 echo "posix_madvise $posix_madvise"
4914 echo "uuid support $uuid"
4915 echo "libcap-ng support $cap_ng"
4916 echo "vhost-net support $vhost_net"
4917 echo "vhost-scsi support $vhost_scsi"
4918 echo "Trace backends $trace_backends"
4919 if have_backend "simple"; then
4920 echo "Trace output file $trace_file-<pid>"
4922 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
4923 echo "rbd support $rbd"
4924 echo "xfsctl support $xfs"
4925 echo "smartcard support $smartcard"
4926 echo "libusb $libusb"
4927 echo "usb net redir $usb_redir"
4928 echo "OpenGL support $opengl"
4929 echo "OpenGL dmabufs $opengl_dmabuf"
4930 echo "libiscsi support $libiscsi"
4931 echo "libnfs support $libnfs"
4932 echo "build guest agent $guest_agent"
4933 echo "QGA VSS support $guest_agent_with_vss"
4934 echo "QGA w32 disk info $guest_agent_ntddscsi"
4935 echo "QGA MSI support $guest_agent_msi"
4936 echo "seccomp support $seccomp"
4937 echo "coroutine backend $coroutine"
4938 echo "coroutine pool $coroutine_pool"
4939 echo "GlusterFS support $glusterfs"
4940 echo "Archipelago support $archipelago"
4941 echo "gcov $gcov_tool"
4942 echo "gcov enabled $gcov"
4943 echo "TPM support $tpm"
4944 echo "libssh2 support $libssh2"
4945 echo "TPM passthrough $tpm_passthrough"
4946 echo "QOM debugging $qom_cast_debug"
4947 echo "vhdx $vhdx"
4948 echo "lzo support $lzo"
4949 echo "snappy support $snappy"
4950 echo "bzip2 support $bzip2"
4951 echo "NUMA host support $numa"
4952 echo "tcmalloc support $tcmalloc"
4953 echo "jemalloc support $jemalloc"
4954 echo "avx2 optimization $avx2_opt"
4956 if test "$sdl_too_old" = "yes"; then
4957 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4960 config_host_mak="config-host.mak"
4962 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4964 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4965 echo >> $config_host_mak
4967 echo all: >> $config_host_mak
4968 echo "prefix=$prefix" >> $config_host_mak
4969 echo "bindir=$bindir" >> $config_host_mak
4970 echo "libdir=$libdir" >> $config_host_mak
4971 echo "libexecdir=$libexecdir" >> $config_host_mak
4972 echo "includedir=$includedir" >> $config_host_mak
4973 echo "mandir=$mandir" >> $config_host_mak
4974 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4975 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4976 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4977 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4978 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4979 if test "$mingw32" = "no" ; then
4980 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4982 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4983 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4984 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4985 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4986 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4988 echo "ARCH=$ARCH" >> $config_host_mak
4990 if test "$debug_tcg" = "yes" ; then
4991 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4993 if test "$strip_opt" = "yes" ; then
4994 echo "STRIP=${strip}" >> $config_host_mak
4996 if test "$bigendian" = "yes" ; then
4997 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4999 if test "$mingw32" = "yes" ; then
5000 echo "CONFIG_WIN32=y" >> $config_host_mak
5001 echo "CONFIG_INSTALLER=y" >> $config_host_mak
5002 rc_version=$(cat $source_path/VERSION)
5003 version_major=${rc_version%%.*}
5004 rc_version=${rc_version#*.}
5005 version_minor=${rc_version%%.*}
5006 rc_version=${rc_version#*.}
5007 version_subminor=${rc_version%%.*}
5008 version_micro=0
5009 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5010 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5011 if test "$guest_agent_with_vss" = "yes" ; then
5012 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5013 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5014 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5016 if test "$guest_agent_ntddscsi" = "yes" ; then
5017 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5019 if test "$guest_agent_msi" = "yes"; then
5020 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5021 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5022 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5023 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5024 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5025 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5026 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5028 else
5029 echo "CONFIG_POSIX=y" >> $config_host_mak
5032 if test "$linux" = "yes" ; then
5033 echo "CONFIG_LINUX=y" >> $config_host_mak
5036 if test "$darwin" = "yes" ; then
5037 echo "CONFIG_DARWIN=y" >> $config_host_mak
5040 if test "$aix" = "yes" ; then
5041 echo "CONFIG_AIX=y" >> $config_host_mak
5044 if test "$solaris" = "yes" ; then
5045 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5046 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
5047 if test "$needs_libsunmath" = "yes" ; then
5048 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
5051 if test "$haiku" = "yes" ; then
5052 echo "CONFIG_HAIKU=y" >> $config_host_mak
5054 if test "$static" = "yes" ; then
5055 echo "CONFIG_STATIC=y" >> $config_host_mak
5057 if test "$profiler" = "yes" ; then
5058 echo "CONFIG_PROFILER=y" >> $config_host_mak
5060 if test "$slirp" = "yes" ; then
5061 echo "CONFIG_SLIRP=y" >> $config_host_mak
5062 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5064 if test "$vde" = "yes" ; then
5065 echo "CONFIG_VDE=y" >> $config_host_mak
5067 if test "$netmap" = "yes" ; then
5068 echo "CONFIG_NETMAP=y" >> $config_host_mak
5070 if test "$l2tpv3" = "yes" ; then
5071 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5073 if test "$cap_ng" = "yes" ; then
5074 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5076 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5077 for drv in $audio_drv_list; do
5078 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5079 echo "$def=y" >> $config_host_mak
5080 done
5081 if test "$audio_pt_int" = "yes" ; then
5082 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5084 if test "$audio_win_int" = "yes" ; then
5085 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5087 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5088 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5089 if test "$vnc" = "yes" ; then
5090 echo "CONFIG_VNC=y" >> $config_host_mak
5092 if test "$vnc_sasl" = "yes" ; then
5093 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5095 if test "$vnc_jpeg" = "yes" ; then
5096 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5098 if test "$vnc_png" = "yes" ; then
5099 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5101 if test "$fnmatch" = "yes" ; then
5102 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5104 if test "$uuid" = "yes" ; then
5105 echo "CONFIG_UUID=y" >> $config_host_mak
5107 if test "$xfs" = "yes" ; then
5108 echo "CONFIG_XFS=y" >> $config_host_mak
5110 qemu_version=$(head $source_path/VERSION)
5111 echo "VERSION=$qemu_version" >>$config_host_mak
5112 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5113 echo "SRC_PATH=$source_path" >> $config_host_mak
5114 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5115 if [ "$docs" = "yes" ] ; then
5116 echo "BUILD_DOCS=yes" >> $config_host_mak
5118 if [ "$want_tools" = "yes" ] ; then
5119 echo "BUILD_TOOLS=yes" >> $config_host_mak
5121 if test "$modules" = "yes"; then
5122 # $shacmd can generate a hash started with digit, which the compiler doesn't
5123 # like as an symbol. So prefix it with an underscore
5124 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5125 echo "CONFIG_MODULES=y" >> $config_host_mak
5127 if test "$sdl" = "yes" ; then
5128 echo "CONFIG_SDL=y" >> $config_host_mak
5129 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5130 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5132 if test "$cocoa" = "yes" ; then
5133 echo "CONFIG_COCOA=y" >> $config_host_mak
5135 if test "$curses" = "yes" ; then
5136 echo "CONFIG_CURSES=y" >> $config_host_mak
5138 if test "$utimens" = "yes" ; then
5139 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
5141 if test "$pipe2" = "yes" ; then
5142 echo "CONFIG_PIPE2=y" >> $config_host_mak
5144 if test "$accept4" = "yes" ; then
5145 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5147 if test "$splice" = "yes" ; then
5148 echo "CONFIG_SPLICE=y" >> $config_host_mak
5150 if test "$eventfd" = "yes" ; then
5151 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5153 if test "$memfd" = "yes" ; then
5154 echo "CONFIG_MEMFD=y" >> $config_host_mak
5156 if test "$fallocate" = "yes" ; then
5157 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5159 if test "$fallocate_punch_hole" = "yes" ; then
5160 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5162 if test "$fallocate_zero_range" = "yes" ; then
5163 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5165 if test "$posix_fallocate" = "yes" ; then
5166 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5168 if test "$sync_file_range" = "yes" ; then
5169 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5171 if test "$fiemap" = "yes" ; then
5172 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5174 if test "$dup3" = "yes" ; then
5175 echo "CONFIG_DUP3=y" >> $config_host_mak
5177 if test "$ppoll" = "yes" ; then
5178 echo "CONFIG_PPOLL=y" >> $config_host_mak
5180 if test "$prctl_pr_set_timerslack" = "yes" ; then
5181 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5183 if test "$epoll" = "yes" ; then
5184 echo "CONFIG_EPOLL=y" >> $config_host_mak
5186 if test "$epoll_create1" = "yes" ; then
5187 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5189 if test "$sendfile" = "yes" ; then
5190 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5192 if test "$timerfd" = "yes" ; then
5193 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5195 if test "$setns" = "yes" ; then
5196 echo "CONFIG_SETNS=y" >> $config_host_mak
5198 if test "$inotify" = "yes" ; then
5199 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5201 if test "$inotify1" = "yes" ; then
5202 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5204 if test "$byteswap_h" = "yes" ; then
5205 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5207 if test "$bswap_h" = "yes" ; then
5208 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5210 if test "$curl" = "yes" ; then
5211 echo "CONFIG_CURL=m" >> $config_host_mak
5212 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5213 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5215 if test "$brlapi" = "yes" ; then
5216 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5218 if test "$bluez" = "yes" ; then
5219 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5220 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5222 if test "$glib_subprocess" = "yes" ; then
5223 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5225 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
5226 if test "$gtk" = "yes" ; then
5227 echo "CONFIG_GTK=y" >> $config_host_mak
5228 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5229 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5230 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5231 if test "$gtk_gl" = "yes" ; then
5232 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5235 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5236 if test "$gnutls" = "yes" ; then
5237 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5239 if test "$gnutls_rnd" = "yes" ; then
5240 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5242 if test "$gcrypt" = "yes" ; then
5243 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5244 if test "$gcrypt_kdf" = "yes" ; then
5245 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5248 if test "$nettle" = "yes" ; then
5249 echo "CONFIG_NETTLE=y" >> $config_host_mak
5250 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5251 if test "$nettle_kdf" = "yes" ; then
5252 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5255 if test "$tasn1" = "yes" ; then
5256 echo "CONFIG_TASN1=y" >> $config_host_mak
5258 if test "$have_ifaddrs_h" = "yes" ; then
5259 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5262 # Work around a system header bug with some kernel/XFS header
5263 # versions where they both try to define 'struct fsxattr':
5264 # xfs headers will not try to redefine structs from linux headers
5265 # if this macro is set.
5266 if test "$have_fsxattr" = "yes" ; then
5267 echo "HAVE_FSXATTR=y" >> $config_host_mak
5269 if test "$vte" = "yes" ; then
5270 echo "CONFIG_VTE=y" >> $config_host_mak
5271 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5273 if test "$virglrenderer" = "yes" ; then
5274 echo "CONFIG_VIRGL=y" >> $config_host_mak
5275 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5276 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5278 if test "$xen" = "yes" ; then
5279 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5280 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5281 if test "$xen_pv_domain_build" = "yes" ; then
5282 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5285 if test "$linux_aio" = "yes" ; then
5286 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5288 if test "$attr" = "yes" ; then
5289 echo "CONFIG_ATTR=y" >> $config_host_mak
5291 if test "$libattr" = "yes" ; then
5292 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5294 if test "$virtfs" = "yes" ; then
5295 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5297 if test "$vhost_scsi" = "yes" ; then
5298 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5300 if test "$vhost_net" = "yes" ; then
5301 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5303 if test "$blobs" = "yes" ; then
5304 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5306 if test "$iovec" = "yes" ; then
5307 echo "CONFIG_IOVEC=y" >> $config_host_mak
5309 if test "$preadv" = "yes" ; then
5310 echo "CONFIG_PREADV=y" >> $config_host_mak
5312 if test "$fdt" = "yes" ; then
5313 echo "CONFIG_FDT=y" >> $config_host_mak
5315 if test "$signalfd" = "yes" ; then
5316 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5318 if test "$tcg_interpreter" = "yes" ; then
5319 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5321 if test "$fdatasync" = "yes" ; then
5322 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5324 if test "$madvise" = "yes" ; then
5325 echo "CONFIG_MADVISE=y" >> $config_host_mak
5327 if test "$posix_madvise" = "yes" ; then
5328 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5331 if test "$spice" = "yes" ; then
5332 echo "CONFIG_SPICE=y" >> $config_host_mak
5335 if test "$smartcard" = "yes" ; then
5336 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5339 if test "$libusb" = "yes" ; then
5340 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5343 if test "$usb_redir" = "yes" ; then
5344 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5347 if test "$opengl" = "yes" ; then
5348 echo "CONFIG_OPENGL=y" >> $config_host_mak
5349 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5350 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5351 if test "$opengl_dmabuf" = "yes" ; then
5352 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5356 if test "$avx2_opt" = "yes" ; then
5357 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5360 if test "$lzo" = "yes" ; then
5361 echo "CONFIG_LZO=y" >> $config_host_mak
5364 if test "$snappy" = "yes" ; then
5365 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5368 if test "$bzip2" = "yes" ; then
5369 echo "CONFIG_BZIP2=y" >> $config_host_mak
5370 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5373 if test "$libiscsi" = "yes" ; then
5374 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5375 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5376 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5379 if test "$libnfs" = "yes" ; then
5380 echo "CONFIG_LIBNFS=y" >> $config_host_mak
5383 if test "$seccomp" = "yes"; then
5384 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5387 # XXX: suppress that
5388 if [ "$bsd" = "yes" ] ; then
5389 echo "CONFIG_BSD=y" >> $config_host_mak
5392 if test "$localtime_r" = "yes" ; then
5393 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5395 if test "$qom_cast_debug" = "yes" ; then
5396 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5398 if test "$rbd" = "yes" ; then
5399 echo "CONFIG_RBD=m" >> $config_host_mak
5400 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5401 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5404 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5405 if test "$coroutine_pool" = "yes" ; then
5406 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5407 else
5408 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5411 if test "$open_by_handle_at" = "yes" ; then
5412 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5415 if test "$linux_magic_h" = "yes" ; then
5416 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5419 if test "$pragma_diagnostic_available" = "yes" ; then
5420 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5423 if test "$valgrind_h" = "yes" ; then
5424 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5427 if test "$has_environ" = "yes" ; then
5428 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5431 if test "$cpuid_h" = "yes" ; then
5432 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5435 if test "$int128" = "yes" ; then
5436 echo "CONFIG_INT128=y" >> $config_host_mak
5439 if test "$getauxval" = "yes" ; then
5440 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5443 if test "$glusterfs" = "yes" ; then
5444 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5445 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5446 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5449 if test "$glusterfs_xlator_opt" = "yes" ; then
5450 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5453 if test "$glusterfs_discard" = "yes" ; then
5454 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5457 if test "$glusterfs_zerofill" = "yes" ; then
5458 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5461 if test "$archipelago" = "yes" ; then
5462 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5463 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5466 if test "$libssh2" = "yes" ; then
5467 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5468 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5469 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5472 if test "$vhdx" = "yes" ; then
5473 echo "CONFIG_VHDX=y" >> $config_host_mak
5476 # USB host support
5477 if test "$libusb" = "yes"; then
5478 echo "HOST_USB=libusb legacy" >> $config_host_mak
5479 else
5480 echo "HOST_USB=stub" >> $config_host_mak
5483 # TPM passthrough support?
5484 if test "$tpm" = "yes"; then
5485 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5486 if test "$tpm_passthrough" = "yes"; then
5487 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5491 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5492 if have_backend "nop"; then
5493 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5495 if have_backend "simple"; then
5496 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5497 # Set the appropriate trace file.
5498 trace_file="\"$trace_file-\" FMT_pid"
5500 if have_backend "log"; then
5501 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5503 if have_backend "ust"; then
5504 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5506 if have_backend "dtrace"; then
5507 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5508 if test "$trace_backend_stap" = "yes" ; then
5509 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5512 if have_backend "ftrace"; then
5513 if test "$linux" = "yes" ; then
5514 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5515 else
5516 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5519 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5521 if test "$rdma" = "yes" ; then
5522 echo "CONFIG_RDMA=y" >> $config_host_mak
5525 if test "$have_rtnetlink" = "yes" ; then
5526 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5529 # Hold two types of flag:
5530 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5531 # a thread we have a handle to
5532 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5533 # platform
5534 if test "$pthread_setname_np" = "yes" ; then
5535 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5536 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5539 if test "$tcg_interpreter" = "yes"; then
5540 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5541 elif test "$ARCH" = "sparc64" ; then
5542 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5543 elif test "$ARCH" = "s390x" ; then
5544 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5545 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5546 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5547 elif test "$ARCH" = "ppc64" ; then
5548 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5549 else
5550 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5552 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5554 echo "TOOLS=$tools" >> $config_host_mak
5555 echo "ROMS=$roms" >> $config_host_mak
5556 echo "MAKE=$make" >> $config_host_mak
5557 echo "INSTALL=$install" >> $config_host_mak
5558 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5559 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5560 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5561 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5562 echo "PYTHON=$python" >> $config_host_mak
5563 echo "CC=$cc" >> $config_host_mak
5564 if $iasl -h > /dev/null 2>&1; then
5565 echo "IASL=$iasl" >> $config_host_mak
5567 echo "CC_I386=$cc_i386" >> $config_host_mak
5568 echo "HOST_CC=$host_cc" >> $config_host_mak
5569 echo "CXX=$cxx" >> $config_host_mak
5570 echo "OBJCC=$objcc" >> $config_host_mak
5571 echo "AR=$ar" >> $config_host_mak
5572 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5573 echo "AS=$as" >> $config_host_mak
5574 echo "CCAS=$ccas" >> $config_host_mak
5575 echo "CPP=$cpp" >> $config_host_mak
5576 echo "OBJCOPY=$objcopy" >> $config_host_mak
5577 echo "LD=$ld" >> $config_host_mak
5578 echo "NM=$nm" >> $config_host_mak
5579 echo "WINDRES=$windres" >> $config_host_mak
5580 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5581 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5582 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5583 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5584 if test "$sparse" = "yes" ; then
5585 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5586 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5587 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5588 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5589 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5591 if test "$cross_prefix" != ""; then
5592 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5593 else
5594 echo "AUTOCONF_HOST := " >> $config_host_mak
5596 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5597 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5598 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
5599 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
5600 echo "LIBS+=$LIBS" >> $config_host_mak
5601 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5602 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
5603 echo "EXESUF=$EXESUF" >> $config_host_mak
5604 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5605 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5606 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5607 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5608 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5609 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5610 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5611 if test "$gcov" = "yes" ; then
5612 echo "CONFIG_GCOV=y" >> $config_host_mak
5613 echo "GCOV=$gcov_tool" >> $config_host_mak
5616 # use included Linux headers
5617 if test "$linux" = "yes" ; then
5618 mkdir -p linux-headers
5619 case "$cpu" in
5620 i386|x86_64|x32)
5621 linux_arch=x86
5623 ppcemb|ppc|ppc64)
5624 linux_arch=powerpc
5626 s390x)
5627 linux_arch=s390
5629 aarch64)
5630 linux_arch=arm64
5632 mips64)
5633 linux_arch=mips
5636 # For most CPUs the kernel architecture name and QEMU CPU name match.
5637 linux_arch="$cpu"
5639 esac
5640 # For non-KVM architectures we will not have asm headers
5641 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5642 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5646 for target in $target_list; do
5647 target_dir="$target"
5648 config_target_mak=$target_dir/config-target.mak
5649 target_name=$(echo $target | cut -d '-' -f 1)
5650 target_bigendian="no"
5652 case "$target_name" in
5653 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5654 target_bigendian=yes
5656 esac
5657 target_softmmu="no"
5658 target_user_only="no"
5659 target_linux_user="no"
5660 target_bsd_user="no"
5661 case "$target" in
5662 ${target_name}-softmmu)
5663 target_softmmu="yes"
5665 ${target_name}-linux-user)
5666 if test "$linux" != "yes" ; then
5667 error_exit "Target '$target' is only available on a Linux host"
5669 target_user_only="yes"
5670 target_linux_user="yes"
5672 ${target_name}-bsd-user)
5673 if test "$bsd" != "yes" ; then
5674 error_exit "Target '$target' is only available on a BSD host"
5676 target_user_only="yes"
5677 target_bsd_user="yes"
5680 error_exit "Target '$target' not recognised"
5681 exit 1
5683 esac
5685 mkdir -p $target_dir
5686 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5688 bflt="no"
5689 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
5690 gdb_xml_files=""
5692 TARGET_ARCH="$target_name"
5693 TARGET_BASE_ARCH=""
5694 TARGET_ABI_DIR=""
5696 case "$target_name" in
5697 i386)
5699 x86_64)
5700 TARGET_BASE_ARCH=i386
5702 alpha)
5704 arm|armeb)
5705 TARGET_ARCH=arm
5706 bflt="yes"
5707 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5709 aarch64)
5710 TARGET_BASE_ARCH=arm
5711 bflt="yes"
5712 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5714 cris)
5716 lm32)
5718 m68k)
5719 bflt="yes"
5720 gdb_xml_files="cf-core.xml cf-fp.xml"
5722 microblaze|microblazeel)
5723 TARGET_ARCH=microblaze
5724 bflt="yes"
5726 mips|mipsel)
5727 TARGET_ARCH=mips
5728 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5730 mipsn32|mipsn32el)
5731 TARGET_ARCH=mips64
5732 TARGET_BASE_ARCH=mips
5733 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5734 echo "TARGET_ABI32=y" >> $config_target_mak
5736 mips64|mips64el)
5737 TARGET_ARCH=mips64
5738 TARGET_BASE_ARCH=mips
5739 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5741 moxie)
5743 or32)
5744 TARGET_ARCH=openrisc
5745 TARGET_BASE_ARCH=openrisc
5747 ppc)
5748 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5750 ppcemb)
5751 TARGET_BASE_ARCH=ppc
5752 TARGET_ABI_DIR=ppc
5753 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5755 ppc64)
5756 TARGET_BASE_ARCH=ppc
5757 TARGET_ABI_DIR=ppc
5758 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5760 ppc64le)
5761 TARGET_ARCH=ppc64
5762 TARGET_BASE_ARCH=ppc
5763 TARGET_ABI_DIR=ppc
5764 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5766 ppc64abi32)
5767 TARGET_ARCH=ppc64
5768 TARGET_BASE_ARCH=ppc
5769 TARGET_ABI_DIR=ppc
5770 echo "TARGET_ABI32=y" >> $config_target_mak
5771 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5773 sh4|sh4eb)
5774 TARGET_ARCH=sh4
5775 bflt="yes"
5777 sparc)
5779 sparc64)
5780 TARGET_BASE_ARCH=sparc
5782 sparc32plus)
5783 TARGET_ARCH=sparc64
5784 TARGET_BASE_ARCH=sparc
5785 TARGET_ABI_DIR=sparc
5786 echo "TARGET_ABI32=y" >> $config_target_mak
5788 s390x)
5789 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
5791 tilegx)
5793 tricore)
5795 unicore32)
5797 xtensa|xtensaeb)
5798 TARGET_ARCH=xtensa
5801 error_exit "Unsupported target CPU"
5803 esac
5804 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5805 if [ "$TARGET_BASE_ARCH" = "" ]; then
5806 TARGET_BASE_ARCH=$TARGET_ARCH
5809 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5811 upper() {
5812 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5815 target_arch_name="$(upper $TARGET_ARCH)"
5816 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5817 echo "TARGET_NAME=$target_name" >> $config_target_mak
5818 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5819 if [ "$TARGET_ABI_DIR" = "" ]; then
5820 TARGET_ABI_DIR=$TARGET_ARCH
5822 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5823 if [ "$HOST_VARIANT_DIR" != "" ]; then
5824 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5826 case "$target_name" in
5827 i386|x86_64)
5828 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5829 echo "CONFIG_XEN=y" >> $config_target_mak
5830 if test "$xen_pci_passthrough" = yes; then
5831 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5836 esac
5837 case "$target_name" in
5838 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5839 # Make sure the target and host cpus are compatible
5840 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5841 \( "$target_name" = "$cpu" -o \
5842 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5843 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5844 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5845 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5846 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5847 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5848 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5849 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5850 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5851 echo "CONFIG_KVM=y" >> $config_target_mak
5852 if test "$vhost_net" = "yes" ; then
5853 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5854 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
5857 esac
5858 if test "$target_bigendian" = "yes" ; then
5859 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5861 if test "$target_softmmu" = "yes" ; then
5862 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5864 if test "$target_user_only" = "yes" ; then
5865 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5866 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5868 if test "$target_linux_user" = "yes" ; then
5869 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5871 list=""
5872 if test ! -z "$gdb_xml_files" ; then
5873 for x in $gdb_xml_files; do
5874 list="$list $source_path/gdb-xml/$x"
5875 done
5876 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5879 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5880 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5882 if test "$target_bsd_user" = "yes" ; then
5883 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5886 # generate QEMU_CFLAGS/LDFLAGS for targets
5888 cflags=""
5889 ldflags=""
5891 disas_config() {
5892 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5893 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5896 for i in $ARCH $TARGET_BASE_ARCH ; do
5897 case "$i" in
5898 alpha)
5899 disas_config "ALPHA"
5901 aarch64)
5902 if test -n "${cxx}"; then
5903 disas_config "ARM_A64"
5906 arm)
5907 disas_config "ARM"
5908 if test -n "${cxx}"; then
5909 disas_config "ARM_A64"
5912 cris)
5913 disas_config "CRIS"
5915 hppa)
5916 disas_config "HPPA"
5918 i386|x86_64|x32)
5919 disas_config "I386"
5921 ia64*)
5922 disas_config "IA64"
5924 lm32)
5925 disas_config "LM32"
5927 m68k)
5928 disas_config "M68K"
5930 microblaze*)
5931 disas_config "MICROBLAZE"
5933 mips*)
5934 disas_config "MIPS"
5936 moxie*)
5937 disas_config "MOXIE"
5939 or32)
5940 disas_config "OPENRISC"
5942 ppc*)
5943 disas_config "PPC"
5945 s390*)
5946 disas_config "S390"
5948 sh4)
5949 disas_config "SH4"
5951 sparc*)
5952 disas_config "SPARC"
5954 xtensa*)
5955 disas_config "XTENSA"
5957 esac
5958 done
5959 if test "$tcg_interpreter" = "yes" ; then
5960 disas_config "TCI"
5963 case "$ARCH" in
5964 alpha)
5965 # Ensure there's only a single GP
5966 cflags="-msmall-data $cflags"
5968 esac
5970 if test "$gprof" = "yes" ; then
5971 echo "TARGET_GPROF=yes" >> $config_target_mak
5972 if test "$target_linux_user" = "yes" ; then
5973 cflags="-p $cflags"
5974 ldflags="-p $ldflags"
5976 if test "$target_softmmu" = "yes" ; then
5977 ldflags="-p $ldflags"
5978 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5982 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5983 ldflags="$ldflags $textseg_ldflags"
5986 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5987 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5989 done # for target in $targets
5991 if [ "$pixman" = "internal" ]; then
5992 echo "config-host.h: subdir-pixman" >> $config_host_mak
5995 if [ "$dtc_internal" = "yes" ]; then
5996 echo "config-host.h: subdir-dtc" >> $config_host_mak
5999 if test "$numa" = "yes"; then
6000 echo "CONFIG_NUMA=y" >> $config_host_mak
6003 if test "$ccache_cpp2" = "yes"; then
6004 echo "export CCACHE_CPP2=y" >> $config_host_mak
6007 # build tree in object directory in case the source is not in the current directory
6008 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
6009 DIRS="$DIRS fsdev"
6010 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6011 DIRS="$DIRS roms/seabios roms/vgabios"
6012 DIRS="$DIRS qapi-generated"
6013 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6014 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6015 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6016 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6017 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6018 FILES="$FILES pc-bios/s390-ccw/Makefile"
6019 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6020 FILES="$FILES pc-bios/qemu-icon.bmp"
6021 for bios_file in \
6022 $source_path/pc-bios/*.bin \
6023 $source_path/pc-bios/*.aml \
6024 $source_path/pc-bios/*.rom \
6025 $source_path/pc-bios/*.dtb \
6026 $source_path/pc-bios/*.img \
6027 $source_path/pc-bios/openbios-* \
6028 $source_path/pc-bios/u-boot.* \
6029 $source_path/pc-bios/palcode-*
6031 FILES="$FILES pc-bios/$(basename $bios_file)"
6032 done
6033 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6035 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6036 done
6037 mkdir -p $DIRS
6038 for f in $FILES ; do
6039 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6040 symlink "$source_path/$f" "$f"
6042 done
6044 # temporary config to build submodules
6045 for rom in seabios vgabios ; do
6046 config_mak=roms/$rom/config.mak
6047 echo "# Automatically generated by configure - do not modify" > $config_mak
6048 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6049 echo "AS=$as" >> $config_mak
6050 echo "CCAS=$ccas" >> $config_mak
6051 echo "CC=$cc" >> $config_mak
6052 echo "BCC=bcc" >> $config_mak
6053 echo "CPP=$cpp" >> $config_mak
6054 echo "OBJCOPY=objcopy" >> $config_mak
6055 echo "IASL=$iasl" >> $config_mak
6056 echo "LD=$ld" >> $config_mak
6057 done
6059 # set up tests data directory
6060 if [ ! -e tests/data ]; then
6061 symlink "$source_path/tests/data" tests/data
6064 # set up qemu-iotests in this build directory
6065 iotests_common_env="tests/qemu-iotests/common.env"
6066 iotests_check="tests/qemu-iotests/check"
6068 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6069 echo >> "$iotests_common_env"
6070 echo "export PYTHON='$python'" >> "$iotests_common_env"
6072 if [ ! -e "$iotests_check" ]; then
6073 symlink "$source_path/$iotests_check" "$iotests_check"
6076 # Save the configure command line for later reuse.
6077 cat <<EOD >config.status
6078 #!/bin/sh
6079 # Generated by configure.
6080 # Run this file to recreate the current configuration.
6081 # Compiler output produced by configure, useful for debugging
6082 # configure, is in config.log if it exists.
6084 printf "exec" >>config.status
6085 printf " '%s'" "$0" "$@" >>config.status
6086 echo ' "$@"' >>config.status
6087 chmod +x config.status
6089 rm -r "$TMPDIR1"