Merge remote-tracking branch 'qemu/master'
[qemu/ar7.git] / configure
blobcf92653a4adfd65e25c40b61e2cb61a4d884bf47
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 $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
1822 cat > $TMPC << EOF
1823 #pragma GCC push_options
1824 #pragma GCC target("avx2")
1825 #include <cpuid.h>
1826 #include <immintrin.h>
1828 static int bar(void *a) {
1829 return _mm256_movemask_epi8(_mm256_cmpeq_epi8(*(__m256i *)a, (__m256i){0}));
1831 static void *bar_ifunc(void) {return (void*) bar;}
1832 int foo(void *a) __attribute__((ifunc("bar_ifunc")));
1833 int main(int argc, char *argv[]) { return foo(argv[0]);}
1835 if compile_object "" ; then
1836 if has readelf; then
1837 if readelf --syms $TMPO 2>/dev/null |grep -q "IFUNC.*foo"; then
1838 avx2_opt="yes"
1843 #########################################
1844 # zlib check
1846 if test "$zlib" != "no" ; then
1847 cat > $TMPC << EOF
1848 #include <zlib.h>
1849 int main(void) { zlibVersion(); return 0; }
1851 if compile_prog "" "-lz" ; then
1853 else
1854 error_exit "zlib check failed" \
1855 "Make sure to have the zlib libs and headers installed."
1858 LIBS="$LIBS -lz"
1860 ##########################################
1861 # lzo check
1863 if test "$lzo" != "no" ; then
1864 cat > $TMPC << EOF
1865 #include <lzo/lzo1x.h>
1866 int main(void) { lzo_version(); return 0; }
1868 if compile_prog "" "-llzo2" ; then
1869 libs_softmmu="$libs_softmmu -llzo2"
1870 lzo="yes"
1871 else
1872 if test "$lzo" = "yes"; then
1873 feature_not_found "liblzo2" "Install liblzo2 devel"
1875 lzo="no"
1879 ##########################################
1880 # snappy check
1882 if test "$snappy" != "no" ; then
1883 cat > $TMPC << EOF
1884 #include <snappy-c.h>
1885 int main(void) { snappy_max_compressed_length(4096); return 0; }
1887 if compile_prog "" "-lsnappy" ; then
1888 libs_softmmu="$libs_softmmu -lsnappy"
1889 snappy="yes"
1890 else
1891 if test "$snappy" = "yes"; then
1892 feature_not_found "libsnappy" "Install libsnappy devel"
1894 snappy="no"
1898 ##########################################
1899 # bzip2 check
1901 if test "$bzip2" != "no" ; then
1902 cat > $TMPC << EOF
1903 #include <bzlib.h>
1904 int main(void) { BZ2_bzlibVersion(); return 0; }
1906 if compile_prog "" "-lbz2" ; then
1907 bzip2="yes"
1908 else
1909 if test "$bzip2" = "yes"; then
1910 feature_not_found "libbzip2" "Install libbzip2 devel"
1912 bzip2="no"
1916 ##########################################
1917 # libseccomp check
1919 if test "$seccomp" != "no" ; then
1920 case "$cpu" in
1921 i386|x86_64)
1922 libseccomp_minver="2.1.0"
1924 mips)
1925 libseccomp_minver="2.2.0"
1927 arm|aarch64)
1928 libseccomp_minver="2.2.3"
1930 ppc|ppc64)
1931 libseccomp_minver="2.3.0"
1934 libseccomp_minver=""
1936 esac
1938 if test "$libseccomp_minver" != "" &&
1939 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
1940 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1941 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
1942 seccomp="yes"
1943 else
1944 if test "$seccomp" = "yes" ; then
1945 if test "$libseccomp_minver" != "" ; then
1946 feature_not_found "libseccomp" \
1947 "Install libseccomp devel >= $libseccomp_minver"
1948 else
1949 feature_not_found "libseccomp" \
1950 "libseccomp is not supported for host cpu $cpu"
1953 seccomp="no"
1956 ##########################################
1957 # xen probe
1959 if test "$xen" != "no" ; then
1960 xen_libs="-lxenstore -lxenctrl -lxenguest"
1961 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1963 # First we test whether Xen headers and libraries are available.
1964 # If no, we are done and there is no Xen support.
1965 # If yes, more tests are run to detect the Xen version.
1967 # Xen (any)
1968 cat > $TMPC <<EOF
1969 #include <xenctrl.h>
1970 int main(void) {
1971 return 0;
1974 if ! compile_prog "" "$xen_libs" ; then
1975 # Xen not found
1976 if test "$xen" = "yes" ; then
1977 feature_not_found "xen" "Install xen devel"
1979 xen=no
1981 # Xen unstable
1982 elif
1983 cat > $TMPC <<EOF &&
1985 * If we have stable libs the we don't want the libxc compat
1986 * layers, regardless of what CFLAGS we may have been given.
1988 #undef XC_WANT_COMPAT_EVTCHN_API
1989 #undef XC_WANT_COMPAT_GNTTAB_API
1990 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
1991 #include <xenctrl.h>
1992 #include <xenstore.h>
1993 #include <xenevtchn.h>
1994 #include <xengnttab.h>
1995 #include <xenforeignmemory.h>
1996 #include <stdint.h>
1997 #include <xen/hvm/hvm_info_table.h>
1998 #if !defined(HVM_MAX_VCPUS)
1999 # error HVM_MAX_VCPUS not defined
2000 #endif
2001 int main(void) {
2002 xc_interface *xc = NULL;
2003 xenforeignmemory_handle *xfmem;
2004 xenevtchn_handle *xe;
2005 xengnttab_handle *xg;
2006 xen_domain_handle_t handle;
2008 xs_daemon_open();
2010 xc = xc_interface_open(0, 0, 0);
2011 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2012 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2013 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2014 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2015 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2017 xfmem = xenforeignmemory_open(0, 0);
2018 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2020 xe = xenevtchn_open(0, 0);
2021 xenevtchn_fd(xe);
2023 xg = xengnttab_open(0, 0);
2024 xengnttab_map_grant_ref(xg, 0, 0, 0);
2026 return 0;
2029 compile_prog "" "$xen_libs $xen_stable_libs"
2030 then
2031 xen_ctrl_version=471
2032 xen=yes
2033 elif
2034 cat > $TMPC <<EOF &&
2035 #include <xenctrl.h>
2036 #include <stdint.h>
2037 int main(void) {
2038 xc_interface *xc = NULL;
2039 xen_domain_handle_t handle;
2040 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2041 return 0;
2044 compile_prog "" "$xen_libs"
2045 then
2046 xen_ctrl_version=470
2047 xen=yes
2049 # Xen 4.6
2050 elif
2051 cat > $TMPC <<EOF &&
2052 #include <xenctrl.h>
2053 #include <xenstore.h>
2054 #include <stdint.h>
2055 #include <xen/hvm/hvm_info_table.h>
2056 #if !defined(HVM_MAX_VCPUS)
2057 # error HVM_MAX_VCPUS not defined
2058 #endif
2059 int main(void) {
2060 xc_interface *xc;
2061 xs_daemon_open();
2062 xc = xc_interface_open(0, 0, 0);
2063 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2064 xc_gnttab_open(NULL, 0);
2065 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2066 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2067 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2068 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2069 return 0;
2072 compile_prog "" "$xen_libs"
2073 then
2074 xen_ctrl_version=460
2075 xen=yes
2077 # Xen 4.5
2078 elif
2079 cat > $TMPC <<EOF &&
2080 #include <xenctrl.h>
2081 #include <xenstore.h>
2082 #include <stdint.h>
2083 #include <xen/hvm/hvm_info_table.h>
2084 #if !defined(HVM_MAX_VCPUS)
2085 # error HVM_MAX_VCPUS not defined
2086 #endif
2087 int main(void) {
2088 xc_interface *xc;
2089 xs_daemon_open();
2090 xc = xc_interface_open(0, 0, 0);
2091 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2092 xc_gnttab_open(NULL, 0);
2093 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2094 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2095 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2096 return 0;
2099 compile_prog "" "$xen_libs"
2100 then
2101 xen_ctrl_version=450
2102 xen=yes
2104 elif
2105 cat > $TMPC <<EOF &&
2106 #include <xenctrl.h>
2107 #include <xenstore.h>
2108 #include <stdint.h>
2109 #include <xen/hvm/hvm_info_table.h>
2110 #if !defined(HVM_MAX_VCPUS)
2111 # error HVM_MAX_VCPUS not defined
2112 #endif
2113 int main(void) {
2114 xc_interface *xc;
2115 xs_daemon_open();
2116 xc = xc_interface_open(0, 0, 0);
2117 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2118 xc_gnttab_open(NULL, 0);
2119 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2120 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2121 return 0;
2124 compile_prog "" "$xen_libs"
2125 then
2126 xen_ctrl_version=420
2127 xen=yes
2129 else
2130 if test "$xen" = "yes" ; then
2131 feature_not_found "xen (unsupported version)" \
2132 "Install a supported xen (xen 4.2 or newer)"
2134 xen=no
2137 if test "$xen" = yes; then
2138 if test $xen_ctrl_version -ge 471 ; then
2139 libs_softmmu="$xen_stable_libs $libs_softmmu"
2141 libs_softmmu="$xen_libs $libs_softmmu"
2145 if test "$xen_pci_passthrough" != "no"; then
2146 if test "$xen" = "yes" && test "$linux" = "yes"; then
2147 xen_pci_passthrough=yes
2148 else
2149 if test "$xen_pci_passthrough" = "yes"; then
2150 error_exit "User requested feature Xen PCI Passthrough" \
2151 " but this feature requires /sys from Linux"
2153 xen_pci_passthrough=no
2157 if test "$xen_pv_domain_build" = "yes" &&
2158 test "$xen" != "yes"; then
2159 error_exit "User requested Xen PV domain builder support" \
2160 "which requires Xen support."
2163 ##########################################
2164 # Sparse probe
2165 if test "$sparse" != "no" ; then
2166 if has cgcc; then
2167 sparse=yes
2168 else
2169 if test "$sparse" = "yes" ; then
2170 feature_not_found "sparse" "Install sparse binary"
2172 sparse=no
2176 ##########################################
2177 # X11 probe
2178 x11_cflags=
2179 x11_libs=-lX11
2180 if $pkg_config --exists "x11"; then
2181 x11_cflags=$($pkg_config --cflags x11)
2182 x11_libs=$($pkg_config --libs x11)
2185 ##########################################
2186 # GTK probe
2188 if test "$gtkabi" = ""; then
2189 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2190 # Use 3.0 as a fallback if that is available.
2191 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2192 gtkabi=2.0
2193 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2194 gtkabi=3.0
2195 else
2196 gtkabi=2.0
2200 if test "$gtk" != "no"; then
2201 gtkpackage="gtk+-$gtkabi"
2202 gtkx11package="gtk+-x11-$gtkabi"
2203 if test "$gtkabi" = "3.0" ; then
2204 gtkversion="3.0.0"
2205 else
2206 gtkversion="2.18.0"
2208 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2209 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2210 gtk_libs=$($pkg_config --libs $gtkpackage)
2211 gtk_version=$($pkg_config --modversion $gtkpackage)
2212 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2213 gtk_cflags="$gtk_cflags $x11_cflags"
2214 gtk_libs="$gtk_libs $x11_libs"
2216 libs_softmmu="$gtk_libs $libs_softmmu"
2217 gtk="yes"
2218 elif test "$gtk" = "yes"; then
2219 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2220 else
2221 gtk="no"
2226 ##########################################
2227 # GNUTLS probe
2229 gnutls_works() {
2230 # Unfortunately some distros have bad pkg-config information for gnutls
2231 # such that it claims to exist but you get a compiler error if you try
2232 # to use the options returned by --libs. Specifically, Ubuntu for --static
2233 # builds doesn't work:
2234 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2236 # So sanity check the cflags/libs before assuming gnutls can be used.
2237 if ! $pkg_config --exists "gnutls"; then
2238 return 1
2241 write_c_skeleton
2242 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2245 gnutls_gcrypt=no
2246 gnutls_nettle=no
2247 if test "$gnutls" != "no"; then
2248 if gnutls_works; then
2249 gnutls_cflags=$($pkg_config --cflags gnutls)
2250 gnutls_libs=$($pkg_config --libs gnutls)
2251 libs_softmmu="$gnutls_libs $libs_softmmu"
2252 libs_tools="$gnutls_libs $libs_tools"
2253 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2254 gnutls="yes"
2256 # gnutls_rnd requires >= 2.11.0
2257 if $pkg_config --exists "gnutls >= 2.11.0"; then
2258 gnutls_rnd="yes"
2259 else
2260 gnutls_rnd="no"
2263 if $pkg_config --exists 'gnutls >= 3.0'; then
2264 gnutls_gcrypt=no
2265 gnutls_nettle=yes
2266 elif $pkg_config --exists 'gnutls >= 2.12'; then
2267 case $($pkg_config --libs --static gnutls) in
2268 *gcrypt*)
2269 gnutls_gcrypt=yes
2270 gnutls_nettle=no
2272 *nettle*)
2273 gnutls_gcrypt=no
2274 gnutls_nettle=yes
2277 gnutls_gcrypt=yes
2278 gnutls_nettle=no
2280 esac
2281 else
2282 gnutls_gcrypt=yes
2283 gnutls_nettle=no
2285 elif test "$gnutls" = "yes"; then
2286 feature_not_found "gnutls" "Install gnutls devel"
2287 else
2288 gnutls="no"
2289 gnutls_rnd="no"
2291 else
2292 gnutls_rnd="no"
2296 # If user didn't give a --disable/enable-gcrypt flag,
2297 # then mark as disabled if user requested nettle
2298 # explicitly, or if gnutls links to nettle
2299 if test -z "$gcrypt"
2300 then
2301 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2302 then
2303 gcrypt="no"
2307 # If user didn't give a --disable/enable-nettle flag,
2308 # then mark as disabled if user requested gcrypt
2309 # explicitly, or if gnutls links to gcrypt
2310 if test -z "$nettle"
2311 then
2312 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2313 then
2314 nettle="no"
2318 has_libgcrypt_config() {
2319 if ! has "libgcrypt-config"
2320 then
2321 return 1
2324 if test -n "$cross_prefix"
2325 then
2326 host=$(libgcrypt-config --host)
2327 if test "$host-" != $cross_prefix
2328 then
2329 return 1
2333 return 0
2336 if test "$gcrypt" != "no"; then
2337 if has_libgcrypt_config; then
2338 gcrypt_cflags=$(libgcrypt-config --cflags)
2339 gcrypt_libs=$(libgcrypt-config --libs)
2340 # Debian has remove -lgpg-error from libgcrypt-config
2341 # as it "spreads unnecessary dependencies" which in
2342 # turn breaks static builds...
2343 if test "$static" = "yes"
2344 then
2345 gcrypt_libs="$gcrypt_libs -lgpg-error"
2347 libs_softmmu="$gcrypt_libs $libs_softmmu"
2348 libs_tools="$gcrypt_libs $libs_tools"
2349 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2350 gcrypt="yes"
2351 if test -z "$nettle"; then
2352 nettle="no"
2355 cat > $TMPC << EOF
2356 #include <gcrypt.h>
2357 int main(void) {
2358 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2359 GCRY_MD_SHA256,
2360 NULL, 0, 0, 0, NULL);
2361 return 0;
2364 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2365 gcrypt_kdf=yes
2367 else
2368 if test "$gcrypt" = "yes"; then
2369 feature_not_found "gcrypt" "Install gcrypt devel"
2370 else
2371 gcrypt="no"
2377 if test "$nettle" != "no"; then
2378 if $pkg_config --exists "nettle"; then
2379 nettle_cflags=$($pkg_config --cflags nettle)
2380 nettle_libs=$($pkg_config --libs nettle)
2381 nettle_version=$($pkg_config --modversion nettle)
2382 libs_softmmu="$nettle_libs $libs_softmmu"
2383 libs_tools="$nettle_libs $libs_tools"
2384 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2385 nettle="yes"
2387 cat > $TMPC << EOF
2388 #include <stddef.h>
2389 #include <nettle/pbkdf2.h>
2390 int main(void) {
2391 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2392 return 0;
2395 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2396 nettle_kdf=yes
2398 else
2399 if test "$nettle" = "yes"; then
2400 feature_not_found "nettle" "Install nettle devel"
2401 else
2402 nettle="no"
2407 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2408 then
2409 error_exit "Only one of gcrypt & nettle can be enabled"
2412 ##########################################
2413 # libtasn1 - only for the TLS creds/session test suite
2415 tasn1=yes
2416 tasn1_cflags=""
2417 tasn1_libs=""
2418 if $pkg_config --exists "libtasn1"; then
2419 tasn1_cflags=$($pkg_config --cflags libtasn1)
2420 tasn1_libs=$($pkg_config --libs libtasn1)
2421 else
2422 tasn1=no
2426 ##########################################
2427 # getifaddrs (for tests/test-io-channel-socket )
2429 have_ifaddrs_h=yes
2430 if ! check_include "ifaddrs.h" ; then
2431 have_ifaddrs_h=no
2434 ##########################################
2435 # VTE probe
2437 if test "$vte" != "no"; then
2438 if test "$gtkabi" = "3.0"; then
2439 vteminversion="0.32.0"
2440 if $pkg_config --exists "vte-2.91"; then
2441 vtepackage="vte-2.91"
2442 else
2443 vtepackage="vte-2.90"
2445 else
2446 vtepackage="vte"
2447 vteminversion="0.24.0"
2449 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2450 vte_cflags=$($pkg_config --cflags $vtepackage)
2451 vte_libs=$($pkg_config --libs $vtepackage)
2452 vteversion=$($pkg_config --modversion $vtepackage)
2453 libs_softmmu="$vte_libs $libs_softmmu"
2454 vte="yes"
2455 elif test "$vte" = "yes"; then
2456 if test "$gtkabi" = "3.0"; then
2457 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2458 else
2459 feature_not_found "vte" "Install libvte devel"
2461 else
2462 vte="no"
2466 ##########################################
2467 # SDL probe
2469 # Look for sdl configuration program (pkg-config or sdl-config). Try
2470 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2472 if test "$sdlabi" = ""; then
2473 if $pkg_config --exists "sdl"; then
2474 sdlabi=1.2
2475 elif $pkg_config --exists "sdl2"; then
2476 sdlabi=2.0
2477 else
2478 sdlabi=1.2
2482 if test $sdlabi = "2.0"; then
2483 sdl_config=$sdl2_config
2484 sdlname=sdl2
2485 sdlconfigname=sdl2_config
2486 elif test $sdlabi = "1.2"; then
2487 sdlname=sdl
2488 sdlconfigname=sdl_config
2489 else
2490 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2493 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2494 sdl_config=$sdlconfigname
2497 if $pkg_config $sdlname --exists; then
2498 sdlconfig="$pkg_config $sdlname"
2499 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2500 elif has ${sdl_config}; then
2501 sdlconfig="$sdl_config"
2502 sdlversion=$($sdlconfig --version)
2503 else
2504 if test "$sdl" = "yes" ; then
2505 feature_not_found "sdl" "Install SDL devel"
2507 sdl=no
2509 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2510 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2513 sdl_too_old=no
2514 if test "$sdl" != "no" ; then
2515 cat > $TMPC << EOF
2516 #include <SDL.h>
2517 #undef main /* We don't want SDL to override our main() */
2518 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2520 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2521 if test "$static" = "yes" ; then
2522 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2523 else
2524 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2526 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2527 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2528 sdl_too_old=yes
2529 else
2530 sdl=yes
2533 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2534 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2535 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2536 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2537 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2539 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2541 else
2542 sdl=no
2544 fi # static link
2545 else # sdl not found
2546 if test "$sdl" = "yes" ; then
2547 feature_not_found "sdl" "Install SDL devel"
2549 sdl=no
2550 fi # sdl compile test
2553 if test "$sdl" = "yes" ; then
2554 cat > $TMPC <<EOF
2555 #include <SDL.h>
2556 #if defined(SDL_VIDEO_DRIVER_X11)
2557 #include <X11/XKBlib.h>
2558 #else
2559 #error No x11 support
2560 #endif
2561 int main(void) { return 0; }
2563 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2564 sdl_cflags="$sdl_cflags $x11_cflags"
2565 sdl_libs="$sdl_libs $x11_libs"
2567 libs_softmmu="$sdl_libs $libs_softmmu"
2570 ##########################################
2571 # RDMA needs OpenFabrics libraries
2572 if test "$rdma" != "no" ; then
2573 cat > $TMPC <<EOF
2574 #include <rdma/rdma_cma.h>
2575 int main(void) { return 0; }
2577 rdma_libs="-lrdmacm -libverbs"
2578 if compile_prog "" "$rdma_libs" ; then
2579 rdma="yes"
2580 libs_softmmu="$libs_softmmu $rdma_libs"
2581 else
2582 if test "$rdma" = "yes" ; then
2583 error_exit \
2584 " OpenFabrics librdmacm/libibverbs not present." \
2585 " Your options:" \
2586 " (1) Fast: Install infiniband packages from your distro." \
2587 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2588 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2590 rdma="no"
2594 ##########################################
2595 # VNC SASL detection
2596 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2597 cat > $TMPC <<EOF
2598 #include <sasl/sasl.h>
2599 #include <stdio.h>
2600 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2602 # Assuming Cyrus-SASL installed in /usr prefix
2603 vnc_sasl_cflags=""
2604 vnc_sasl_libs="-lsasl2"
2605 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2606 vnc_sasl=yes
2607 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2608 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2609 else
2610 if test "$vnc_sasl" = "yes" ; then
2611 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2613 vnc_sasl=no
2617 ##########################################
2618 # VNC JPEG detection
2619 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2620 cat > $TMPC <<EOF
2621 #include <stdio.h>
2622 #include <jpeglib.h>
2623 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2625 vnc_jpeg_cflags=""
2626 vnc_jpeg_libs="-ljpeg"
2627 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2628 vnc_jpeg=yes
2629 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2630 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2631 else
2632 if test "$vnc_jpeg" = "yes" ; then
2633 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2635 vnc_jpeg=no
2639 ##########################################
2640 # VNC PNG detection
2641 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2642 cat > $TMPC <<EOF
2643 //#include <stdio.h>
2644 #include <png.h>
2645 #include <stddef.h>
2646 int main(void) {
2647 png_structp png_ptr;
2648 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2649 return png_ptr != 0;
2652 if $pkg_config libpng --exists; then
2653 vnc_png_cflags=$($pkg_config libpng --cflags)
2654 vnc_png_libs=$($pkg_config libpng --libs)
2655 else
2656 vnc_png_cflags=""
2657 vnc_png_libs="-lpng"
2659 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2660 vnc_png=yes
2661 libs_softmmu="$vnc_png_libs $libs_softmmu"
2662 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2663 else
2664 if test "$vnc_png" = "yes" ; then
2665 feature_not_found "vnc-png" "Install libpng devel"
2667 vnc_png=no
2671 ##########################################
2672 # fnmatch() probe, used for ACL routines
2673 fnmatch="no"
2674 cat > $TMPC << EOF
2675 #include <fnmatch.h>
2676 int main(void)
2678 fnmatch("foo", "foo", 0);
2679 return 0;
2682 if compile_prog "" "" ; then
2683 fnmatch="yes"
2686 ##########################################
2687 # uuid_generate() probe, used for vdi block driver
2688 # Note that on some systems (notably MacOSX) no extra library
2689 # need be linked to get the uuid functions.
2690 if test "$uuid" != "no" ; then
2691 uuid_libs="-luuid"
2692 cat > $TMPC << EOF
2693 #include <uuid/uuid.h>
2694 int main(void)
2696 uuid_t my_uuid;
2697 uuid_generate(my_uuid);
2698 return 0;
2701 if compile_prog "" "" ; then
2702 uuid="yes"
2703 elif compile_prog "" "$uuid_libs" ; then
2704 uuid="yes"
2705 libs_softmmu="$uuid_libs $libs_softmmu"
2706 libs_tools="$uuid_libs $libs_tools"
2707 else
2708 if test "$uuid" = "yes" ; then
2709 feature_not_found "uuid" "Install libuuid devel"
2711 uuid=no
2715 if test "$vhdx" = "yes" ; then
2716 if test "$uuid" = "no" ; then
2717 error_exit "uuid required for VHDX support"
2719 elif test "$vhdx" != "no" ; then
2720 if test "$uuid" = "yes" ; then
2721 vhdx=yes
2722 else
2723 vhdx=no
2727 ##########################################
2728 # xfsctl() probe, used for raw-posix
2729 if test "$xfs" != "no" ; then
2730 cat > $TMPC << EOF
2731 #include <stddef.h> /* NULL */
2732 #include <xfs/xfs.h>
2733 int main(void)
2735 xfsctl(NULL, 0, 0, NULL);
2736 return 0;
2739 if compile_prog "" "" ; then
2740 xfs="yes"
2741 else
2742 if test "$xfs" = "yes" ; then
2743 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2745 xfs=no
2749 ##########################################
2750 # vde libraries probe
2751 if test "$vde" != "no" ; then
2752 vde_libs="-lvdeplug"
2753 cat > $TMPC << EOF
2754 #include <stddef.h>
2755 #include <libvdeplug.h>
2756 int main(void)
2758 struct vde_open_args a = {0, 0, 0};
2759 char s[] = "";
2760 vde_open(s, s, &a);
2761 return 0;
2764 if compile_prog "" "$vde_libs" ; then
2765 vde=yes
2766 libs_softmmu="$vde_libs $libs_softmmu"
2767 libs_tools="$vde_libs $libs_tools"
2768 else
2769 if test "$vde" = "yes" ; then
2770 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2772 vde=no
2776 ##########################################
2777 # netmap support probe
2778 # Apart from looking for netmap headers, we make sure that the host API version
2779 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2780 # a minor/major version number. Minor new features will be marked with values up
2781 # to 15, and if something happens that requires a change to the backend we will
2782 # move above 15, submit the backend fixes and modify this two bounds.
2783 if test "$netmap" != "no" ; then
2784 cat > $TMPC << EOF
2785 #include <inttypes.h>
2786 #include <net/if.h>
2787 #include <net/netmap.h>
2788 #include <net/netmap_user.h>
2789 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2790 #error
2791 #endif
2792 int main(void) { return 0; }
2794 if compile_prog "" "" ; then
2795 netmap=yes
2796 else
2797 if test "$netmap" = "yes" ; then
2798 feature_not_found "netmap"
2800 netmap=no
2804 ##########################################
2805 # libcap-ng library probe
2806 if test "$cap_ng" != "no" ; then
2807 cap_libs="-lcap-ng"
2808 cat > $TMPC << EOF
2809 #include <cap-ng.h>
2810 int main(void)
2812 capng_capability_to_name(CAPNG_EFFECTIVE);
2813 return 0;
2816 if compile_prog "" "$cap_libs" ; then
2817 cap_ng=yes
2818 libs_tools="$cap_libs $libs_tools"
2819 else
2820 if test "$cap_ng" = "yes" ; then
2821 feature_not_found "cap_ng" "Install libcap-ng devel"
2823 cap_ng=no
2827 ##########################################
2828 # Sound support libraries probe
2830 audio_drv_probe()
2832 drv=$1
2833 hdr=$2
2834 lib=$3
2835 exp=$4
2836 cfl=$5
2837 cat > $TMPC << EOF
2838 #include <$hdr>
2839 int main(void) { $exp }
2841 if compile_prog "$cfl" "$lib" ; then
2843 else
2844 error_exit "$drv check failed" \
2845 "Make sure to have the $drv libs and headers installed."
2849 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
2850 for drv in $audio_drv_list; do
2851 case $drv in
2852 alsa)
2853 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2854 "return snd_pcm_close((snd_pcm_t *)0);"
2855 libs_softmmu="-lasound $libs_softmmu"
2859 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2860 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
2861 libs_softmmu="-lpulse $libs_softmmu"
2862 audio_pt_int="yes"
2865 coreaudio)
2866 libs_softmmu="-framework CoreAudio $libs_softmmu"
2869 dsound)
2870 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2871 audio_win_int="yes"
2874 oss)
2875 libs_softmmu="$oss_lib $libs_softmmu"
2878 sdl|wav)
2879 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2883 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2884 error_exit "Unknown driver '$drv' selected" \
2885 "Possible drivers are: $audio_possible_drivers"
2888 esac
2889 done
2891 ##########################################
2892 # BrlAPI probe
2894 if test "$brlapi" != "no" ; then
2895 brlapi_libs="-lbrlapi"
2896 cat > $TMPC << EOF
2897 #include <brlapi.h>
2898 #include <stddef.h>
2899 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2901 if compile_prog "" "$brlapi_libs" ; then
2902 brlapi=yes
2903 libs_softmmu="$brlapi_libs $libs_softmmu"
2904 else
2905 if test "$brlapi" = "yes" ; then
2906 feature_not_found "brlapi" "Install brlapi devel"
2908 brlapi=no
2912 ##########################################
2913 # curses probe
2914 if test "$curses" != "no" ; then
2915 if test "$mingw32" = "yes" ; then
2916 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
2917 else
2918 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2920 curses_found=no
2921 cat > $TMPC << EOF
2922 #include <curses.h>
2923 int main(void) {
2924 const char *s = curses_version();
2925 resize_term(0, 0);
2926 return s != 0;
2929 IFS=:
2930 for curses_lib in $curses_list; do
2931 unset IFS
2932 if compile_prog "" "$curses_lib" ; then
2933 curses_found=yes
2934 libs_softmmu="$curses_lib $libs_softmmu"
2935 break
2937 done
2938 unset IFS
2939 if test "$curses_found" = "yes" ; then
2940 curses=yes
2941 else
2942 if test "$curses" = "yes" ; then
2943 feature_not_found "curses" "Install ncurses devel"
2945 curses=no
2949 ##########################################
2950 # curl probe
2951 if test "$curl" != "no" ; then
2952 if $pkg_config libcurl --exists; then
2953 curlconfig="$pkg_config libcurl"
2954 else
2955 curlconfig=curl-config
2957 cat > $TMPC << EOF
2958 #include <curl/curl.h>
2959 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2961 curl_cflags=$($curlconfig --cflags 2>/dev/null)
2962 curl_libs=$($curlconfig --libs 2>/dev/null)
2963 if compile_prog "$curl_cflags" "$curl_libs" ; then
2964 curl=yes
2965 else
2966 if test "$curl" = "yes" ; then
2967 feature_not_found "curl" "Install libcurl devel"
2969 curl=no
2971 fi # test "$curl"
2973 ##########################################
2974 # bluez support probe
2975 if test "$bluez" != "no" ; then
2976 cat > $TMPC << EOF
2977 #include <bluetooth/bluetooth.h>
2978 int main(void) { return bt_error(0); }
2980 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
2981 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
2982 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2983 bluez=yes
2984 libs_softmmu="$bluez_libs $libs_softmmu"
2985 else
2986 if test "$bluez" = "yes" ; then
2987 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2989 bluez="no"
2993 ##########################################
2994 # glib support probe
2996 glib_req_ver=2.22
2997 glib_modules=gthread-2.0
2998 if test "$modules" = yes; then
2999 glib_modules="$glib_modules gmodule-2.0"
3002 for i in $glib_modules; do
3003 if $pkg_config --atleast-version=$glib_req_ver $i; then
3004 glib_cflags=$($pkg_config --cflags $i)
3005 glib_libs=$($pkg_config --libs $i)
3006 CFLAGS="$glib_cflags $CFLAGS"
3007 LIBS="$glib_libs $LIBS"
3008 libs_qga="$glib_libs $libs_qga"
3009 else
3010 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3012 done
3014 # Sanity check that the current size_t matches the
3015 # size that glib thinks it should be. This catches
3016 # problems on multi-arch where people try to build
3017 # 32-bit QEMU while pointing at 64-bit glib headers
3018 cat > $TMPC <<EOF
3019 #include <glib.h>
3020 #include <unistd.h>
3022 #define QEMU_BUILD_BUG_ON(x) \
3023 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3025 int main(void) {
3026 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3027 return 0;
3031 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3032 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3033 "You probably need to set PKG_CONFIG_LIBDIR"\
3034 "to point to the right pkg-config files for your"\
3035 "build target"
3038 # g_test_trap_subprocess added in 2.38. Used by some tests.
3039 glib_subprocess=yes
3040 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3041 glib_subprocess=no
3044 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3045 cat > $TMPC << EOF
3046 #include <glib.h>
3047 int main(void) { return 0; }
3049 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3050 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3051 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3052 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3056 ##########################################
3057 # SHA command probe for modules
3058 if test "$modules" = yes; then
3059 shacmd_probe="sha1sum sha1 shasum"
3060 for c in $shacmd_probe; do
3061 if has $c; then
3062 shacmd="$c"
3063 break
3065 done
3066 if test "$shacmd" = ""; then
3067 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3071 ##########################################
3072 # pixman support probe
3074 if test "$pixman" = ""; then
3075 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3076 pixman="none"
3077 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3078 pixman="system"
3079 else
3080 pixman="internal"
3083 if test "$pixman" = "none"; then
3084 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3085 error_exit "pixman disabled but system emulation or tools build" \
3086 "enabled. You can turn off pixman only if you also" \
3087 "disable all system emulation targets and the tools" \
3088 "build with '--disable-tools --disable-system'."
3090 pixman_cflags=
3091 pixman_libs=
3092 elif test "$pixman" = "system"; then
3093 # pixman version has been checked above
3094 pixman_cflags=$($pkg_config --cflags pixman-1)
3095 pixman_libs=$($pkg_config --libs pixman-1)
3096 else
3097 if test ! -d ${source_path}/pixman/pixman; then
3098 error_exit "pixman >= 0.21.8 not present. Your options:" \
3099 " (1) Preferred: Install the pixman devel package (any recent" \
3100 " distro should have packages as Xorg needs pixman too)." \
3101 " (2) Fetch the pixman submodule, using:" \
3102 " git submodule update --init pixman"
3104 mkdir -p pixman/pixman
3105 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3106 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3109 ##########################################
3110 # libcap probe
3112 if test "$cap" != "no" ; then
3113 cat > $TMPC <<EOF
3114 #include <stdio.h>
3115 #include <sys/capability.h>
3116 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3118 if compile_prog "" "-lcap" ; then
3119 cap=yes
3120 else
3121 cap=no
3125 ##########################################
3126 # pthread probe
3127 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3129 pthread=no
3130 cat > $TMPC << EOF
3131 #include <pthread.h>
3132 static void *f(void *p) { return NULL; }
3133 int main(void) {
3134 pthread_t thread;
3135 pthread_create(&thread, 0, f, 0);
3136 return 0;
3139 if compile_prog "" "" ; then
3140 pthread=yes
3141 else
3142 for pthread_lib in $PTHREADLIBS_LIST; do
3143 if compile_prog "" "$pthread_lib" ; then
3144 pthread=yes
3145 found=no
3146 for lib_entry in $LIBS; do
3147 if test "$lib_entry" = "$pthread_lib"; then
3148 found=yes
3149 break
3151 done
3152 if test "$found" = "no"; then
3153 LIBS="$pthread_lib $LIBS"
3155 break
3157 done
3160 if test "$mingw32" != yes -a "$pthread" = no; then
3161 error_exit "pthread check failed" \
3162 "Make sure to have the pthread libs and headers installed."
3165 # check for pthread_setname_np
3166 pthread_setname_np=no
3167 cat > $TMPC << EOF
3168 #include <pthread.h>
3170 static void *f(void *p) { return NULL; }
3171 int main(void)
3173 pthread_t thread;
3174 pthread_create(&thread, 0, f, 0);
3175 pthread_setname_np(thread, "QEMU");
3176 return 0;
3179 if compile_prog "" "$pthread_lib" ; then
3180 pthread_setname_np=yes
3183 ##########################################
3184 # rbd probe
3185 if test "$rbd" != "no" ; then
3186 cat > $TMPC <<EOF
3187 #include <stdio.h>
3188 #include <rbd/librbd.h>
3189 int main(void) {
3190 rados_t cluster;
3191 rados_create(&cluster, NULL);
3192 return 0;
3195 rbd_libs="-lrbd -lrados"
3196 if compile_prog "" "$rbd_libs" ; then
3197 rbd=yes
3198 else
3199 if test "$rbd" = "yes" ; then
3200 feature_not_found "rados block device" "Install librbd/ceph devel"
3202 rbd=no
3206 ##########################################
3207 # libssh2 probe
3208 min_libssh2_version=1.2.8
3209 if test "$libssh2" != "no" ; then
3210 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3211 libssh2_cflags=$($pkg_config libssh2 --cflags)
3212 libssh2_libs=$($pkg_config libssh2 --libs)
3213 libssh2=yes
3214 else
3215 if test "$libssh2" = "yes" ; then
3216 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3218 libssh2=no
3222 ##########################################
3223 # libssh2_sftp_fsync probe
3225 if test "$libssh2" = "yes"; then
3226 cat > $TMPC <<EOF
3227 #include <stdio.h>
3228 #include <libssh2.h>
3229 #include <libssh2_sftp.h>
3230 int main(void) {
3231 LIBSSH2_SESSION *session;
3232 LIBSSH2_SFTP *sftp;
3233 LIBSSH2_SFTP_HANDLE *sftp_handle;
3234 session = libssh2_session_init ();
3235 sftp = libssh2_sftp_init (session);
3236 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3237 libssh2_sftp_fsync (sftp_handle);
3238 return 0;
3241 # libssh2_cflags/libssh2_libs defined in previous test.
3242 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3243 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3247 ##########################################
3248 # linux-aio probe
3250 if test "$linux_aio" != "no" ; then
3251 cat > $TMPC <<EOF
3252 #include <libaio.h>
3253 #include <sys/eventfd.h>
3254 #include <stddef.h>
3255 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3257 if compile_prog "" "-laio" ; then
3258 linux_aio=yes
3259 else
3260 if test "$linux_aio" = "yes" ; then
3261 feature_not_found "linux AIO" "Install libaio devel"
3263 linux_aio=no
3267 ##########################################
3268 # TPM passthrough is only on x86 Linux
3270 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3271 tpm_passthrough=$tpm
3272 else
3273 tpm_passthrough=no
3276 ##########################################
3277 # attr probe
3279 if test "$attr" != "no" ; then
3280 cat > $TMPC <<EOF
3281 #include <stdio.h>
3282 #include <sys/types.h>
3283 #ifdef CONFIG_LIBATTR
3284 #include <attr/xattr.h>
3285 #else
3286 #include <sys/xattr.h>
3287 #endif
3288 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3290 if compile_prog "" "" ; then
3291 attr=yes
3292 # Older distros have <attr/xattr.h>, and need -lattr:
3293 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3294 attr=yes
3295 LIBS="-lattr $LIBS"
3296 libattr=yes
3297 else
3298 if test "$attr" = "yes" ; then
3299 feature_not_found "ATTR" "Install libc6 or libattr devel"
3301 attr=no
3305 ##########################################
3306 # iovec probe
3307 cat > $TMPC <<EOF
3308 #include <sys/types.h>
3309 #include <sys/uio.h>
3310 #include <unistd.h>
3311 int main(void) { return sizeof(struct iovec); }
3313 iovec=no
3314 if compile_prog "" "" ; then
3315 iovec=yes
3318 ##########################################
3319 # preadv probe
3320 cat > $TMPC <<EOF
3321 #include <sys/types.h>
3322 #include <sys/uio.h>
3323 #include <unistd.h>
3324 int main(void) { return preadv(0, 0, 0, 0); }
3326 preadv=no
3327 if compile_prog "" "" ; then
3328 preadv=yes
3331 ##########################################
3332 # fdt probe
3333 # fdt support is mandatory for at least some target architectures,
3334 # so insist on it if we're building those system emulators.
3335 fdt_required=no
3336 for target in $target_list; do
3337 case $target in
3338 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3339 fdt_required=yes
3341 esac
3342 done
3344 if test "$fdt_required" = "yes"; then
3345 if test "$fdt" = "no"; then
3346 error_exit "fdt disabled but some requested targets require it." \
3347 "You can turn off fdt only if you also disable all the system emulation" \
3348 "targets which need it (by specifying a cut down --target-list)."
3350 fdt=yes
3353 if test "$fdt" != "no" ; then
3354 fdt_libs="-lfdt"
3355 # explicitly check for libfdt_env.h as it is missing in some stable installs
3356 # and test for required functions to make sure we are on a version >= 1.4.0
3357 cat > $TMPC << EOF
3358 #include <libfdt.h>
3359 #include <libfdt_env.h>
3360 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3362 if compile_prog "" "$fdt_libs" ; then
3363 # system DTC is good - use it
3364 fdt=yes
3365 elif test -d ${source_path}/dtc/libfdt ; then
3366 # have submodule DTC - use it
3367 fdt=yes
3368 dtc_internal="yes"
3369 mkdir -p dtc
3370 if [ "$pwd_is_source_path" != "y" ] ; then
3371 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3372 symlink "$source_path/dtc/scripts" "dtc/scripts"
3374 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3375 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3376 elif test "$fdt" = "yes" ; then
3377 # have neither and want - prompt for system/submodule install
3378 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3379 " (1) Preferred: Install the DTC (libfdt) devel package" \
3380 " (2) Fetch the DTC submodule, using:" \
3381 " git submodule update --init dtc"
3382 else
3383 # don't have and don't want
3384 fdt_libs=
3385 fdt=no
3389 libs_softmmu="$libs_softmmu $fdt_libs"
3391 ##########################################
3392 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3394 if test "$opengl" != "no" ; then
3395 opengl_pkgs="epoxy libdrm gbm"
3396 if $pkg_config $opengl_pkgs x11; then
3397 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3398 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3399 opengl=yes
3400 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3401 gtk_gl="yes"
3403 else
3404 if test "$opengl" = "yes" ; then
3405 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3407 opengl_cflags=""
3408 opengl_libs=""
3409 opengl=no
3413 if test "$opengl" = "yes"; then
3414 cat > $TMPC << EOF
3415 #include <epoxy/egl.h>
3416 #ifndef EGL_MESA_image_dma_buf_export
3417 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3418 #endif
3419 int main(void) { return 0; }
3421 if compile_prog "" "" ; then
3422 opengl_dmabuf=yes
3426 ##########################################
3427 # archipelago probe
3428 if test "$archipelago" != "no" ; then
3429 cat > $TMPC <<EOF
3430 #include <stdio.h>
3431 #include <xseg/xseg.h>
3432 #include <xseg/protocol.h>
3433 int main(void) {
3434 xseg_initialize();
3435 return 0;
3438 archipelago_libs=-lxseg
3439 if compile_prog "" "$archipelago_libs"; then
3440 archipelago="yes"
3441 libs_tools="$archipelago_libs $libs_tools"
3442 libs_softmmu="$archipelago_libs $libs_softmmu"
3444 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3445 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3446 echo "license and therefore prevent redistribution."
3447 echo
3448 echo "To disable Archipelago, use --disable-archipelago"
3449 else
3450 if test "$archipelago" = "yes" ; then
3451 feature_not_found "Archipelago backend support" "Install libxseg devel"
3453 archipelago="no"
3458 ##########################################
3459 # glusterfs probe
3460 if test "$glusterfs" != "no" ; then
3461 if $pkg_config --atleast-version=3 glusterfs-api; then
3462 glusterfs="yes"
3463 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3464 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3465 if $pkg_config --atleast-version=4 glusterfs-api; then
3466 glusterfs_xlator_opt="yes"
3468 if $pkg_config --atleast-version=5 glusterfs-api; then
3469 glusterfs_discard="yes"
3471 if $pkg_config --atleast-version=6 glusterfs-api; then
3472 glusterfs_zerofill="yes"
3474 else
3475 if test "$glusterfs" = "yes" ; then
3476 feature_not_found "GlusterFS backend support" \
3477 "Install glusterfs-api devel >= 3"
3479 glusterfs="no"
3483 # Check for inotify functions when we are building linux-user
3484 # emulator. This is done because older glibc versions don't
3485 # have syscall stubs for these implemented. In that case we
3486 # don't provide them even if kernel supports them.
3488 inotify=no
3489 cat > $TMPC << EOF
3490 #include <sys/inotify.h>
3493 main(void)
3495 /* try to start inotify */
3496 return inotify_init();
3499 if compile_prog "" "" ; then
3500 inotify=yes
3503 inotify1=no
3504 cat > $TMPC << EOF
3505 #include <sys/inotify.h>
3508 main(void)
3510 /* try to start inotify */
3511 return inotify_init1(0);
3514 if compile_prog "" "" ; then
3515 inotify1=yes
3518 # check if utimensat and futimens are supported
3519 utimens=no
3520 cat > $TMPC << EOF
3521 #define _ATFILE_SOURCE
3522 #include <stddef.h>
3523 #include <fcntl.h>
3524 #include <sys/stat.h>
3526 int main(void)
3528 utimensat(AT_FDCWD, "foo", NULL, 0);
3529 futimens(0, NULL);
3530 return 0;
3533 if compile_prog "" "" ; then
3534 utimens=yes
3537 # check if pipe2 is there
3538 pipe2=no
3539 cat > $TMPC << EOF
3540 #include <unistd.h>
3541 #include <fcntl.h>
3543 int main(void)
3545 int pipefd[2];
3546 return pipe2(pipefd, O_CLOEXEC);
3549 if compile_prog "" "" ; then
3550 pipe2=yes
3553 # check if accept4 is there
3554 accept4=no
3555 cat > $TMPC << EOF
3556 #include <sys/socket.h>
3557 #include <stddef.h>
3559 int main(void)
3561 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3562 return 0;
3565 if compile_prog "" "" ; then
3566 accept4=yes
3569 # check if tee/splice is there. vmsplice was added same time.
3570 splice=no
3571 cat > $TMPC << EOF
3572 #include <unistd.h>
3573 #include <fcntl.h>
3574 #include <limits.h>
3576 int main(void)
3578 int len, fd = 0;
3579 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3580 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3581 return 0;
3584 if compile_prog "" "" ; then
3585 splice=yes
3588 ##########################################
3589 # libnuma probe
3591 if test "$numa" != "no" ; then
3592 cat > $TMPC << EOF
3593 #include <numa.h>
3594 int main(void) { return numa_available(); }
3597 if compile_prog "" "-lnuma" ; then
3598 numa=yes
3599 libs_softmmu="-lnuma $libs_softmmu"
3600 else
3601 if test "$numa" = "yes" ; then
3602 feature_not_found "numa" "install numactl devel"
3604 numa=no
3608 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3609 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3610 exit 1
3613 ##########################################
3614 # tcmalloc probe
3616 if test "$tcmalloc" = "yes" ; then
3617 cat > $TMPC << EOF
3618 #include <stdlib.h>
3619 int main(void) { malloc(1); return 0; }
3622 if compile_prog "" "-ltcmalloc" ; then
3623 LIBS="-ltcmalloc $LIBS"
3624 else
3625 feature_not_found "tcmalloc" "install gperftools devel"
3629 ##########################################
3630 # jemalloc probe
3632 if test "$jemalloc" = "yes" ; then
3633 cat > $TMPC << EOF
3634 #include <stdlib.h>
3635 int main(void) { malloc(1); return 0; }
3638 if compile_prog "" "-ljemalloc" ; then
3639 LIBS="-ljemalloc $LIBS"
3640 else
3641 feature_not_found "jemalloc" "install jemalloc devel"
3645 ##########################################
3646 # signalfd probe
3647 signalfd="no"
3648 cat > $TMPC << EOF
3649 #include <unistd.h>
3650 #include <sys/syscall.h>
3651 #include <signal.h>
3652 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3655 if compile_prog "" "" ; then
3656 signalfd=yes
3659 # check if eventfd is supported
3660 eventfd=no
3661 cat > $TMPC << EOF
3662 #include <sys/eventfd.h>
3664 int main(void)
3666 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3669 if compile_prog "" "" ; then
3670 eventfd=yes
3673 # check if memfd is supported
3674 memfd=no
3675 cat > $TMPC << EOF
3676 #include <sys/memfd.h>
3678 int main(void)
3680 return memfd_create("foo", MFD_ALLOW_SEALING);
3683 if compile_prog "" "" ; then
3684 memfd=yes
3689 # check for fallocate
3690 fallocate=no
3691 cat > $TMPC << EOF
3692 #include <fcntl.h>
3694 int main(void)
3696 fallocate(0, 0, 0, 0);
3697 return 0;
3700 if compile_prog "" "" ; then
3701 fallocate=yes
3704 # check for fallocate hole punching
3705 fallocate_punch_hole=no
3706 cat > $TMPC << EOF
3707 #include <fcntl.h>
3708 #include <linux/falloc.h>
3710 int main(void)
3712 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3713 return 0;
3716 if compile_prog "" "" ; then
3717 fallocate_punch_hole=yes
3720 # check that fallocate supports range zeroing inside the file
3721 fallocate_zero_range=no
3722 cat > $TMPC << EOF
3723 #include <fcntl.h>
3724 #include <linux/falloc.h>
3726 int main(void)
3728 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3729 return 0;
3732 if compile_prog "" "" ; then
3733 fallocate_zero_range=yes
3736 # check for posix_fallocate
3737 posix_fallocate=no
3738 cat > $TMPC << EOF
3739 #include <fcntl.h>
3741 int main(void)
3743 posix_fallocate(0, 0, 0);
3744 return 0;
3747 if compile_prog "" "" ; then
3748 posix_fallocate=yes
3751 # check for sync_file_range
3752 sync_file_range=no
3753 cat > $TMPC << EOF
3754 #include <fcntl.h>
3756 int main(void)
3758 sync_file_range(0, 0, 0, 0);
3759 return 0;
3762 if compile_prog "" "" ; then
3763 sync_file_range=yes
3766 # check for linux/fiemap.h and FS_IOC_FIEMAP
3767 fiemap=no
3768 cat > $TMPC << EOF
3769 #include <sys/ioctl.h>
3770 #include <linux/fs.h>
3771 #include <linux/fiemap.h>
3773 int main(void)
3775 ioctl(0, FS_IOC_FIEMAP, 0);
3776 return 0;
3779 if compile_prog "" "" ; then
3780 fiemap=yes
3783 # check for dup3
3784 dup3=no
3785 cat > $TMPC << EOF
3786 #include <unistd.h>
3788 int main(void)
3790 dup3(0, 0, 0);
3791 return 0;
3794 if compile_prog "" "" ; then
3795 dup3=yes
3798 # check for ppoll support
3799 ppoll=no
3800 cat > $TMPC << EOF
3801 #include <poll.h>
3803 int main(void)
3805 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3806 ppoll(&pfd, 1, 0, 0);
3807 return 0;
3810 if compile_prog "" "" ; then
3811 ppoll=yes
3814 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3815 prctl_pr_set_timerslack=no
3816 cat > $TMPC << EOF
3817 #include <sys/prctl.h>
3819 int main(void)
3821 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3822 return 0;
3825 if compile_prog "" "" ; then
3826 prctl_pr_set_timerslack=yes
3829 # check for epoll support
3830 epoll=no
3831 cat > $TMPC << EOF
3832 #include <sys/epoll.h>
3834 int main(void)
3836 epoll_create(0);
3837 return 0;
3840 if compile_prog "" "" ; then
3841 epoll=yes
3844 # epoll_create1 is a later addition
3845 # so we must check separately for its presence
3846 epoll_create1=no
3847 cat > $TMPC << EOF
3848 #include <sys/epoll.h>
3850 int main(void)
3852 /* Note that we use epoll_create1 as a value, not as
3853 * a function being called. This is necessary so that on
3854 * old SPARC glibc versions where the function was present in
3855 * the library but not declared in the header file we will
3856 * fail the configure check. (Otherwise we will get a compiler
3857 * warning but not an error, and will proceed to fail the
3858 * qemu compile where we compile with -Werror.)
3860 return (int)(uintptr_t)&epoll_create1;
3863 if compile_prog "" "" ; then
3864 epoll_create1=yes
3867 # check for sendfile support
3868 sendfile=no
3869 cat > $TMPC << EOF
3870 #include <sys/sendfile.h>
3872 int main(void)
3874 return sendfile(0, 0, 0, 0);
3877 if compile_prog "" "" ; then
3878 sendfile=yes
3881 # check for timerfd support (glibc 2.8 and newer)
3882 timerfd=no
3883 cat > $TMPC << EOF
3884 #include <sys/timerfd.h>
3886 int main(void)
3888 return(timerfd_create(CLOCK_REALTIME, 0));
3891 if compile_prog "" "" ; then
3892 timerfd=yes
3895 # check for setns and unshare support
3896 setns=no
3897 cat > $TMPC << EOF
3898 #include <sched.h>
3900 int main(void)
3902 int ret;
3903 ret = setns(0, 0);
3904 ret = unshare(0);
3905 return ret;
3908 if compile_prog "" "" ; then
3909 setns=yes
3912 # Check if tools are available to build documentation.
3913 if test "$docs" != "no" ; then
3914 if has makeinfo && has pod2man; then
3915 docs=yes
3916 else
3917 if test "$docs" = "yes" ; then
3918 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3920 docs=no
3924 if test "$want_tools" = ""; then
3925 if test $(expr "$target_list" : ".*softmmu.*") != 0; then
3926 want_tools=yes
3927 else
3928 want_tools=no
3932 # Search for bswap_32 function
3933 byteswap_h=no
3934 cat > $TMPC << EOF
3935 #include <byteswap.h>
3936 int main(void) { return bswap_32(0); }
3938 if compile_prog "" "" ; then
3939 byteswap_h=yes
3942 # Search for bswap32 function
3943 bswap_h=no
3944 cat > $TMPC << EOF
3945 #include <sys/endian.h>
3946 #include <sys/types.h>
3947 #include <machine/bswap.h>
3948 int main(void) { return bswap32(0); }
3950 if compile_prog "" "" ; then
3951 bswap_h=yes
3954 ##########################################
3955 # Do we have libiscsi >= 1.9.0
3956 if test "$libiscsi" != "no" ; then
3957 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3958 libiscsi="yes"
3959 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3960 libiscsi_libs=$($pkg_config --libs libiscsi)
3961 else
3962 if test "$libiscsi" = "yes" ; then
3963 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3965 libiscsi="no"
3969 ##########################################
3970 # Do we need libm
3971 cat > $TMPC << EOF
3972 #include <math.h>
3973 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3975 if compile_prog "" "" ; then
3977 elif compile_prog "" "-lm" ; then
3978 LIBS="-lm $LIBS"
3979 libs_qga="-lm $libs_qga"
3980 else
3981 error_exit "libm check failed"
3984 ##########################################
3985 # Do we need librt
3986 # uClibc provides 2 versions of clock_gettime(), one with realtime
3987 # support and one without. This means that the clock_gettime() don't
3988 # need -lrt. We still need it for timer_create() so we check for this
3989 # function in addition.
3990 cat > $TMPC <<EOF
3991 #include <signal.h>
3992 #include <time.h>
3993 int main(void) {
3994 timer_create(CLOCK_REALTIME, NULL, NULL);
3995 return clock_gettime(CLOCK_REALTIME, NULL);
3999 if compile_prog "" "" ; then
4001 # we need pthread for static linking. use previous pthread test result
4002 elif compile_prog "" "$pthread_lib -lrt" ; then
4003 LIBS="$LIBS -lrt"
4004 libs_qga="$libs_qga -lrt"
4007 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4008 "$aix" != "yes" -a "$haiku" != "yes" ; then
4009 libs_softmmu="-lutil $libs_softmmu"
4012 ##########################################
4013 # spice probe
4014 if test "$spice" != "no" ; then
4015 cat > $TMPC << EOF
4016 #include <spice.h>
4017 int main(void) { spice_server_new(); return 0; }
4019 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4020 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4021 if $pkg_config --atleast-version=0.12.0 spice-server && \
4022 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4023 compile_prog "$spice_cflags" "$spice_libs" ; then
4024 spice="yes"
4025 libs_softmmu="$libs_softmmu $spice_libs"
4026 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4027 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4028 spice_server_version=$($pkg_config --modversion spice-server)
4029 else
4030 if test "$spice" = "yes" ; then
4031 feature_not_found "spice" \
4032 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4034 spice="no"
4038 # check for smartcard support
4039 smartcard_cflags=""
4040 if test "$smartcard" != "no"; then
4041 if $pkg_config libcacard; then
4042 libcacard_cflags=$($pkg_config --cflags libcacard)
4043 libcacard_libs=$($pkg_config --libs libcacard)
4044 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4045 libs_softmmu="$libs_softmmu $libcacard_libs"
4046 smartcard="yes"
4047 else
4048 if test "$smartcard" = "yes"; then
4049 feature_not_found "smartcard" "Install libcacard devel"
4051 smartcard="no"
4055 # check for libusb
4056 if test "$libusb" != "no" ; then
4057 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4058 libusb="yes"
4059 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4060 libusb_libs=$($pkg_config --libs libusb-1.0)
4061 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4062 libs_softmmu="$libs_softmmu $libusb_libs"
4063 else
4064 if test "$libusb" = "yes"; then
4065 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4067 libusb="no"
4071 # check for usbredirparser for usb network redirection support
4072 if test "$usb_redir" != "no" ; then
4073 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4074 usb_redir="yes"
4075 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4076 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4077 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4078 libs_softmmu="$libs_softmmu $usb_redir_libs"
4079 else
4080 if test "$usb_redir" = "yes"; then
4081 feature_not_found "usb-redir" "Install usbredir devel"
4083 usb_redir="no"
4087 ##########################################
4088 # check if we have VSS SDK headers for win
4090 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4091 case "$vss_win32_sdk" in
4092 "") vss_win32_include="-I$source_path" ;;
4093 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4094 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4095 vss_win32_include="-I$source_path/.sdk/vss"
4096 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4098 *) vss_win32_include="-I$vss_win32_sdk"
4099 esac
4100 cat > $TMPC << EOF
4101 #define __MIDL_user_allocate_free_DEFINED__
4102 #include <inc/win2003/vss.h>
4103 int main(void) { return VSS_CTX_BACKUP; }
4105 if compile_prog "$vss_win32_include" "" ; then
4106 guest_agent_with_vss="yes"
4107 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4108 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4109 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4110 else
4111 if test "$vss_win32_sdk" != "" ; then
4112 echo "ERROR: Please download and install Microsoft VSS SDK:"
4113 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4114 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4115 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4116 echo "ERROR: The headers are extracted in the directory \`inc'."
4117 feature_not_found "VSS support"
4119 guest_agent_with_vss="no"
4123 ##########################################
4124 # lookup Windows platform SDK (if not specified)
4125 # The SDK is needed only to build .tlb (type library) file of guest agent
4126 # VSS provider from the source. It is usually unnecessary because the
4127 # pre-compiled .tlb file is included.
4129 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4130 if test -z "$win_sdk"; then
4131 programfiles="$PROGRAMFILES"
4132 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4133 if test -n "$programfiles"; then
4134 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4135 else
4136 feature_not_found "Windows SDK"
4138 elif test "$win_sdk" = "no"; then
4139 win_sdk=""
4143 ##########################################
4144 # check if mingw environment provides a recent ntddscsi.h
4145 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4146 cat > $TMPC << EOF
4147 #include <windows.h>
4148 #include <ntddscsi.h>
4149 int main(void) {
4150 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4151 #error Missing required ioctl definitions
4152 #endif
4153 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4154 return addr.Lun;
4157 if compile_prog "" "" ; then
4158 guest_agent_ntddscsi=yes
4159 libs_qga="-lsetupapi $libs_qga"
4163 ##########################################
4164 # virgl renderer probe
4166 if test "$virglrenderer" != "no" ; then
4167 cat > $TMPC << EOF
4168 #include <virglrenderer.h>
4169 int main(void) { virgl_renderer_poll(); return 0; }
4171 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4172 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4173 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4174 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4175 virglrenderer="yes"
4176 else
4177 if test "$virglrenderer" = "yes" ; then
4178 feature_not_found "virglrenderer"
4180 virglrenderer="no"
4184 ##########################################
4185 # check if we have fdatasync
4187 fdatasync=no
4188 cat > $TMPC << EOF
4189 #include <unistd.h>
4190 int main(void) {
4191 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4192 return fdatasync(0);
4193 #else
4194 #error Not supported
4195 #endif
4198 if compile_prog "" "" ; then
4199 fdatasync=yes
4202 ##########################################
4203 # check if we have madvise
4205 madvise=no
4206 cat > $TMPC << EOF
4207 #include <sys/types.h>
4208 #include <sys/mman.h>
4209 #include <stddef.h>
4210 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4212 if compile_prog "" "" ; then
4213 madvise=yes
4216 ##########################################
4217 # check if we have posix_madvise
4219 posix_madvise=no
4220 cat > $TMPC << EOF
4221 #include <sys/mman.h>
4222 #include <stddef.h>
4223 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4225 if compile_prog "" "" ; then
4226 posix_madvise=yes
4229 ##########################################
4230 # check if trace backend exists
4232 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4233 if test "$?" -ne 0 ; then
4234 error_exit "invalid trace backends" \
4235 "Please choose supported trace backends."
4238 ##########################################
4239 # For 'ust' backend, test if ust headers are present
4240 if have_backend "ust"; then
4241 cat > $TMPC << EOF
4242 #include <lttng/tracepoint.h>
4243 int main(void) { return 0; }
4245 if compile_prog "" "" ; then
4246 if $pkg_config lttng-ust --exists; then
4247 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4248 else
4249 lttng_ust_libs="-llttng-ust"
4251 if $pkg_config liburcu-bp --exists; then
4252 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4253 else
4254 urcu_bp_libs="-lurcu-bp"
4257 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4258 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4259 else
4260 error_exit "Trace backend 'ust' missing lttng-ust header files"
4264 ##########################################
4265 # For 'dtrace' backend, test if 'dtrace' command is present
4266 if have_backend "dtrace"; then
4267 if ! has 'dtrace' ; then
4268 error_exit "dtrace command is not found in PATH $PATH"
4270 trace_backend_stap="no"
4271 if has 'stap' ; then
4272 trace_backend_stap="yes"
4276 ##########################################
4277 # check and set a backend for coroutine
4279 # We prefer ucontext, but it's not always possible. The fallback
4280 # is sigcontext. gthread is not selectable except explicitly, because
4281 # it is not functional enough to run QEMU proper. (It is occasionally
4282 # useful for debugging purposes.) On Windows the only valid backend
4283 # is the Windows-specific one.
4285 ucontext_works=no
4286 if test "$darwin" != "yes"; then
4287 cat > $TMPC << EOF
4288 #include <ucontext.h>
4289 #ifdef __stub_makecontext
4290 #error Ignoring glibc stub makecontext which will always fail
4291 #endif
4292 int main(void) { makecontext(0, 0, 0); return 0; }
4294 if compile_prog "" "" ; then
4295 ucontext_works=yes
4299 if test "$coroutine" = ""; then
4300 if test "$mingw32" = "yes"; then
4301 coroutine=win32
4302 elif test "$ucontext_works" = "yes"; then
4303 coroutine=ucontext
4304 else
4305 coroutine=sigaltstack
4307 else
4308 case $coroutine in
4309 windows)
4310 if test "$mingw32" != "yes"; then
4311 error_exit "'windows' coroutine backend only valid for Windows"
4313 # Unfortunately the user visible backend name doesn't match the
4314 # coroutine-*.c filename for this case, so we have to adjust it here.
4315 coroutine=win32
4317 ucontext)
4318 if test "$ucontext_works" != "yes"; then
4319 feature_not_found "ucontext"
4322 gthread|sigaltstack)
4323 if test "$mingw32" = "yes"; then
4324 error_exit "only the 'windows' coroutine backend is valid for Windows"
4328 error_exit "unknown coroutine backend $coroutine"
4330 esac
4333 if test "$coroutine_pool" = ""; then
4334 if test "$coroutine" = "gthread" -o "$coroutine" = "win32"; then
4335 coroutine_pool=no
4336 else
4337 coroutine_pool=yes
4340 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4341 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4344 ##########################################
4345 # check if we have open_by_handle_at
4347 open_by_handle_at=no
4348 cat > $TMPC << EOF
4349 #include <fcntl.h>
4350 #if !defined(AT_EMPTY_PATH)
4351 # error missing definition
4352 #else
4353 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4354 #endif
4356 if compile_prog "" "" ; then
4357 open_by_handle_at=yes
4360 ########################################
4361 # check if we have linux/magic.h
4363 linux_magic_h=no
4364 cat > $TMPC << EOF
4365 #include <linux/magic.h>
4366 int main(void) {
4367 return 0;
4370 if compile_prog "" "" ; then
4371 linux_magic_h=yes
4374 ########################################
4375 # check whether we can disable warning option with a pragma (this is needed
4376 # to silence warnings in the headers of some versions of external libraries).
4377 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4378 # only a warning.
4380 # If we can't selectively disable warning in the code, disable -Werror so that
4381 # the build doesn't fail anyway.
4383 pragma_disable_unused_but_set=no
4384 cat > $TMPC << EOF
4385 #pragma GCC diagnostic push
4386 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4387 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4388 #pragma GCC diagnostic pop
4390 int main(void) {
4391 return 0;
4394 if compile_prog "-Werror" "" ; then
4395 pragma_diagnostic_available=yes
4398 ########################################
4399 # check if we have valgrind/valgrind.h
4401 valgrind_h=no
4402 cat > $TMPC << EOF
4403 #include <valgrind/valgrind.h>
4404 int main(void) {
4405 return 0;
4408 if compile_prog "" "" ; then
4409 valgrind_h=yes
4412 ########################################
4413 # check if environ is declared
4415 has_environ=no
4416 cat > $TMPC << EOF
4417 #include <unistd.h>
4418 int main(void) {
4419 environ = 0;
4420 return 0;
4423 if compile_prog "" "" ; then
4424 has_environ=yes
4427 ########################################
4428 # check if cpuid.h is usable.
4430 cpuid_h=no
4431 cat > $TMPC << EOF
4432 #include <cpuid.h>
4433 int main(void) {
4434 unsigned a, b, c, d;
4435 int max = __get_cpuid_max(0, 0);
4437 if (max >= 1) {
4438 __cpuid(1, a, b, c, d);
4441 if (max >= 7) {
4442 __cpuid_count(7, 0, a, b, c, d);
4445 return 0;
4448 if compile_prog "" "" ; then
4449 cpuid_h=yes
4452 ########################################
4453 # check if __[u]int128_t is usable.
4455 int128=no
4456 cat > $TMPC << EOF
4457 #if defined(__clang_major__) && defined(__clang_minor__)
4458 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4459 # error __int128_t does not work in CLANG before 3.2
4460 # endif
4461 #endif
4462 __int128_t a;
4463 __uint128_t b;
4464 int main (void) {
4465 a = a + b;
4466 b = a * b;
4467 a = a * a;
4468 return 0;
4471 if compile_prog "" "" ; then
4472 int128=yes
4475 ########################################
4476 # check if getauxval is available.
4478 getauxval=no
4479 cat > $TMPC << EOF
4480 #include <sys/auxv.h>
4481 int main(void) {
4482 return getauxval(AT_HWCAP) == 0;
4485 if compile_prog "" "" ; then
4486 getauxval=yes
4489 ########################################
4490 # check if ccache is interfering with
4491 # semantic analysis of macros
4493 unset CCACHE_CPP2
4494 ccache_cpp2=no
4495 cat > $TMPC << EOF
4496 static const int Z = 1;
4497 #define fn() ({ Z; })
4498 #define TAUT(X) ((X) == Z)
4499 #define PAREN(X, Y) (X == Y)
4500 #define ID(X) (X)
4501 int main(int argc, char *argv[])
4503 int x = 0, y = 0;
4504 x = ID(x);
4505 x = fn();
4506 fn();
4507 if (PAREN(x, y)) return 0;
4508 if (TAUT(Z)) return 0;
4509 return 0;
4513 if ! compile_object "-Werror"; then
4514 ccache_cpp2=yes
4517 #################################################
4518 # clang does not support glibc + FORTIFY_SOURCE.
4520 if test "$fortify_source" != "no"; then
4521 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4522 fortify_source="no";
4523 elif test -n "$cxx" &&
4524 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4525 fortify_source="no";
4526 else
4527 fortify_source="yes"
4531 ##########################################
4532 # check if struct fsxattr is available via linux/fs.h
4534 have_fsxattr=no
4535 cat > $TMPC << EOF
4536 #include <linux/fs.h>
4537 struct fsxattr foo;
4538 int main(void) {
4539 return 0;
4542 if compile_prog "" "" ; then
4543 have_fsxattr=yes
4546 ##########################################
4547 # check if rtnetlink.h exists and is useful
4548 have_rtnetlink=no
4549 cat > $TMPC << EOF
4550 #include <linux/rtnetlink.h>
4551 int main(void) {
4552 return IFLA_PROTO_DOWN;
4555 if compile_prog "" "" ; then
4556 have_rtnetlink=yes
4559 #################################################
4560 # Sparc implicitly links with --relax, which is
4561 # incompatible with -r, so --no-relax should be
4562 # given. It does no harm to give it on other
4563 # platforms too.
4565 # Note: the prototype is needed since QEMU_CFLAGS
4566 # contains -Wmissing-prototypes
4567 cat > $TMPC << EOF
4568 extern int foo(void);
4569 int foo(void) { return 0; }
4571 if ! compile_object ""; then
4572 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4574 if do_cc -nostdlib -Wl,-r -Wl,--no-relax -o $TMPMO $TMPO; then
4575 LD_REL_FLAGS="-Wl,--no-relax"
4578 ##########################################
4579 # End of CC checks
4580 # After here, no more $cc or $ld runs
4582 if test "$gcov" = "yes" ; then
4583 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4584 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4585 elif test "$fortify_source" = "yes" ; then
4586 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4587 elif test "$debug" = "no"; then
4588 CFLAGS="-O2 $CFLAGS"
4591 ##########################################
4592 # Do we have libnfs
4593 if test "$libnfs" != "no" ; then
4594 if $pkg_config --atleast-version=1.9.3 libnfs; then
4595 libnfs="yes"
4596 libnfs_libs=$($pkg_config --libs libnfs)
4597 LIBS="$LIBS $libnfs_libs"
4598 else
4599 if test "$libnfs" = "yes" ; then
4600 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4602 libnfs="no"
4606 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4607 if test "$werror" = "yes"; then
4608 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4611 if test "$solaris" = "no" ; then
4612 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4613 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4617 # test if pod2man has --utf8 option
4618 if pod2man --help | grep -q utf8; then
4619 POD2MAN="pod2man --utf8"
4620 else
4621 POD2MAN="pod2man"
4624 # Use large addresses, ASLR, no-SEH and DEP if available.
4625 if test "$mingw32" = "yes" ; then
4626 if test "$cpu" = i386; then
4627 LDFLAGS="-Wl,--large-address-aware $LDFLAGS"
4629 for flag in --dynamicbase --no-seh --nxcompat; do
4630 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4631 LDFLAGS="-Wl,$flag $LDFLAGS"
4633 done
4636 qemu_confdir=$sysconfdir$confsuffix
4637 qemu_moddir=$libdir$confsuffix
4638 qemu_datadir=$datadir$confsuffix
4639 qemu_localedir="$datadir/locale"
4641 tools=""
4642 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4643 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4644 tools="qemu-nbd\$(EXESUF) $tools"
4645 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4647 if test "$softmmu" = yes ; then
4648 if test "$virtfs" != no ; then
4649 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4650 virtfs=yes
4651 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4652 else
4653 if test "$virtfs" = yes; then
4654 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
4656 virtfs=no
4661 # Probe for guest agent support/options
4663 if [ "$guest_agent" != "no" ]; then
4664 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4665 tools="qemu-ga $tools"
4666 guest_agent=yes
4667 elif [ "$guest_agent" != yes ]; then
4668 guest_agent=no
4669 else
4670 error_exit "Guest agent is not supported on this platform"
4674 # Guest agent Window MSI package
4676 if test "$guest_agent" != yes; then
4677 if test "$guest_agent_msi" = yes; then
4678 error_exit "MSI guest agent package requires guest agent enabled"
4680 guest_agent_msi=no
4681 elif test "$mingw32" != "yes"; then
4682 if test "$guest_agent_msi" = "yes"; then
4683 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4685 guest_agent_msi=no
4686 elif ! has wixl; then
4687 if test "$guest_agent_msi" = "yes"; then
4688 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4690 guest_agent_msi=no
4691 else
4692 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4693 # disabled explicitly
4694 if test "$guest_agent_msi" != "no"; then
4695 guest_agent_msi=yes
4699 if test "$guest_agent_msi" = "yes"; then
4700 if test "$guest_agent_with_vss" = "yes"; then
4701 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4704 if test "$QEMU_GA_MANUFACTURER" = ""; then
4705 QEMU_GA_MANUFACTURER=QEMU
4708 if test "$QEMU_GA_DISTRO" = ""; then
4709 QEMU_GA_DISTRO=Linux
4712 if test "$QEMU_GA_VERSION" = ""; then
4713 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4716 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
4718 case "$cpu" in
4719 x86_64)
4720 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4722 i386)
4723 QEMU_GA_MSI_ARCH="-D Arch=32"
4726 error_exit "CPU $cpu not supported for building installation package"
4728 esac
4731 # Mac OS X ships with a broken assembler
4732 roms=
4733 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4734 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4735 "$softmmu" = yes ; then
4736 roms="optionrom"
4738 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4739 roms="$roms spapr-rtas"
4742 if test "$cpu" = "s390x" ; then
4743 roms="$roms s390-ccw"
4746 # Probe for the need for relocating the user-only binary.
4747 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
4748 textseg_addr=
4749 case "$cpu" in
4750 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4751 # ??? Rationale for choosing this address
4752 textseg_addr=0x60000000
4754 mips)
4755 # A 256M aligned address, high in the address space, with enough
4756 # room for the code_gen_buffer above it before the stack.
4757 textseg_addr=0x60000000
4759 esac
4760 if [ -n "$textseg_addr" ]; then
4761 cat > $TMPC <<EOF
4762 int main(void) { return 0; }
4764 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4765 if ! compile_prog "" "$textseg_ldflags"; then
4766 # In case ld does not support -Ttext-segment, edit the default linker
4767 # script via sed to set the .text start addr. This is needed on FreeBSD
4768 # at least.
4769 if ! $ld --verbose >/dev/null 2>&1; then
4770 error_exit \
4771 "We need to link the QEMU user mode binaries at a" \
4772 "specific text address. Unfortunately your linker" \
4773 "doesn't support either the -Ttext-segment option or" \
4774 "printing the default linker script with --verbose." \
4775 "If you don't want the user mode binaries, pass the" \
4776 "--disable-user option to configure."
4779 $ld --verbose | sed \
4780 -e '1,/==================================================/d' \
4781 -e '/==================================================/,$d' \
4782 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4783 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4784 textseg_ldflags="-Wl,-T../config-host.ld"
4789 echo_version() {
4790 if test "$1" = "yes" ; then
4791 echo "($2)"
4795 # prepend pixman and ftd flags after all config tests are done
4796 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4797 libs_softmmu="$pixman_libs $libs_softmmu"
4799 echo "Install prefix $prefix"
4800 echo "BIOS directory $(eval echo $qemu_datadir)"
4801 echo "binary directory $(eval echo $bindir)"
4802 echo "library directory $(eval echo $libdir)"
4803 echo "module directory $(eval echo $qemu_moddir)"
4804 echo "libexec directory $(eval echo $libexecdir)"
4805 echo "include directory $(eval echo $includedir)"
4806 echo "config directory $(eval echo $sysconfdir)"
4807 if test "$mingw32" = "no" ; then
4808 echo "local state directory $(eval echo $local_statedir)"
4809 echo "Manual directory $(eval echo $mandir)"
4810 echo "ELF interp prefix $interp_prefix"
4811 else
4812 echo "local state directory queried at runtime"
4813 echo "Windows SDK $win_sdk"
4815 echo "Source path $source_path"
4816 echo "C compiler $cc"
4817 echo "Host C compiler $host_cc"
4818 echo "C++ compiler $cxx"
4819 echo "Objective-C compiler $objcc"
4820 echo "ARFLAGS $ARFLAGS"
4821 echo "CFLAGS $CFLAGS"
4822 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4823 echo "LDFLAGS $LDFLAGS"
4824 echo "make $make"
4825 echo "install $install"
4826 echo "python $python"
4827 if test "$slirp" = "yes" ; then
4828 echo "smbd $smbd"
4830 echo "module support $modules"
4831 echo "host CPU $cpu"
4832 echo "host big endian $bigendian"
4833 echo "target list $target_list"
4834 echo "tcg debug enabled $debug_tcg"
4835 echo "gprof enabled $gprof"
4836 echo "sparse enabled $sparse"
4837 echo "strip binaries $strip_opt"
4838 echo "profiler $profiler"
4839 echo "static build $static"
4840 if test "$darwin" = "yes" ; then
4841 echo "Cocoa support $cocoa"
4843 echo "pixman $pixman"
4844 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
4845 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
4846 echo "GTK GL support $gtk_gl"
4847 echo "VTE support $vte $(echo_version $vte $vteversion)"
4848 echo "TLS priority $tls_priority"
4849 echo "GNUTLS support $gnutls"
4850 echo "GNUTLS rnd $gnutls_rnd"
4851 if test "$gcrypt" = "yes"; then
4852 echo "encryption libgcrypt"
4853 echo "libgcrypt kdf $gcrypt_kdf"
4854 elif test "$nettle" = "yes"; then
4855 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
4856 else
4857 echo "encryption none"
4859 echo "nettle kdf $nettle_kdf"
4860 echo "libtasn1 $tasn1"
4861 echo "curses support $curses"
4862 echo "virgl support $virglrenderer"
4863 echo "curl support $curl"
4864 echo "mingw32 support $mingw32"
4865 echo "Audio drivers $audio_drv_list"
4866 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4867 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4868 echo "VirtFS support $virtfs"
4869 echo "VNC support $vnc"
4870 if test "$vnc" = "yes" ; then
4871 echo "VNC SASL support $vnc_sasl"
4872 echo "VNC JPEG support $vnc_jpeg"
4873 echo "VNC PNG support $vnc_png"
4875 if test -n "$sparc_cpu"; then
4876 echo "Target Sparc Arch $sparc_cpu"
4878 echo "xen support $xen"
4879 if test "$xen" = "yes" ; then
4880 echo "xen ctrl version $xen_ctrl_version"
4881 echo "pv dom build $xen_pv_domain_build"
4883 echo "brlapi support $brlapi"
4884 echo "bluez support $bluez"
4885 echo "Documentation $docs"
4886 echo "Tools $tools"
4887 echo "PIE $pie"
4888 echo "vde support $vde"
4889 echo "netmap support $netmap"
4890 echo "Linux AIO support $linux_aio"
4891 echo "(X)ATTR support $attr"
4892 echo "Install blobs $blobs"
4893 echo "KVM support $kvm"
4894 echo "RDMA support $rdma"
4895 echo "TCG interpreter $tcg_interpreter"
4896 echo "fdt support $fdt"
4897 echo "preadv support $preadv"
4898 echo "fdatasync $fdatasync"
4899 echo "madvise $madvise"
4900 echo "posix_madvise $posix_madvise"
4901 echo "uuid support $uuid"
4902 echo "libcap-ng support $cap_ng"
4903 echo "vhost-net support $vhost_net"
4904 echo "vhost-scsi support $vhost_scsi"
4905 echo "Trace backends $trace_backends"
4906 if have_backend "simple"; then
4907 echo "Trace output file $trace_file-<pid>"
4909 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
4910 echo "rbd support $rbd"
4911 echo "xfsctl support $xfs"
4912 echo "smartcard support $smartcard"
4913 echo "libusb $libusb"
4914 echo "usb net redir $usb_redir"
4915 echo "OpenGL support $opengl"
4916 echo "OpenGL dmabufs $opengl_dmabuf"
4917 echo "libiscsi support $libiscsi"
4918 echo "libnfs support $libnfs"
4919 echo "build guest agent $guest_agent"
4920 echo "QGA VSS support $guest_agent_with_vss"
4921 echo "QGA w32 disk info $guest_agent_ntddscsi"
4922 echo "QGA MSI support $guest_agent_msi"
4923 echo "seccomp support $seccomp"
4924 echo "coroutine backend $coroutine"
4925 echo "coroutine pool $coroutine_pool"
4926 echo "GlusterFS support $glusterfs"
4927 echo "Archipelago support $archipelago"
4928 echo "gcov $gcov_tool"
4929 echo "gcov enabled $gcov"
4930 echo "TPM support $tpm"
4931 echo "libssh2 support $libssh2"
4932 echo "TPM passthrough $tpm_passthrough"
4933 echo "QOM debugging $qom_cast_debug"
4934 echo "vhdx $vhdx"
4935 echo "lzo support $lzo"
4936 echo "snappy support $snappy"
4937 echo "bzip2 support $bzip2"
4938 echo "NUMA host support $numa"
4939 echo "tcmalloc support $tcmalloc"
4940 echo "jemalloc support $jemalloc"
4941 echo "avx2 optimization $avx2_opt"
4943 if test "$sdl_too_old" = "yes"; then
4944 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4947 config_host_mak="config-host.mak"
4949 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4951 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4952 echo >> $config_host_mak
4954 echo all: >> $config_host_mak
4955 echo "prefix=$prefix" >> $config_host_mak
4956 echo "bindir=$bindir" >> $config_host_mak
4957 echo "libdir=$libdir" >> $config_host_mak
4958 echo "libexecdir=$libexecdir" >> $config_host_mak
4959 echo "includedir=$includedir" >> $config_host_mak
4960 echo "mandir=$mandir" >> $config_host_mak
4961 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4962 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4963 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4964 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4965 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4966 if test "$mingw32" = "no" ; then
4967 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4969 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4970 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4971 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4972 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4973 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4975 echo "ARCH=$ARCH" >> $config_host_mak
4977 if test "$debug_tcg" = "yes" ; then
4978 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4980 if test "$strip_opt" = "yes" ; then
4981 echo "STRIP=${strip}" >> $config_host_mak
4983 if test "$bigendian" = "yes" ; then
4984 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4986 if test "$mingw32" = "yes" ; then
4987 echo "CONFIG_WIN32=y" >> $config_host_mak
4988 echo "CONFIG_INSTALLER=y" >> $config_host_mak
4989 rc_version=$(cat $source_path/VERSION)
4990 version_major=${rc_version%%.*}
4991 rc_version=${rc_version#*.}
4992 version_minor=${rc_version%%.*}
4993 rc_version=${rc_version#*.}
4994 version_subminor=${rc_version%%.*}
4995 version_micro=0
4996 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4997 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4998 if test "$guest_agent_with_vss" = "yes" ; then
4999 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5000 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5001 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5003 if test "$guest_agent_ntddscsi" = "yes" ; then
5004 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5006 if test "$guest_agent_msi" = "yes"; then
5007 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5008 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5009 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5010 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5011 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5012 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5013 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5015 else
5016 echo "CONFIG_POSIX=y" >> $config_host_mak
5019 if test "$linux" = "yes" ; then
5020 echo "CONFIG_LINUX=y" >> $config_host_mak
5023 if test "$darwin" = "yes" ; then
5024 echo "CONFIG_DARWIN=y" >> $config_host_mak
5027 if test "$aix" = "yes" ; then
5028 echo "CONFIG_AIX=y" >> $config_host_mak
5031 if test "$solaris" = "yes" ; then
5032 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5033 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
5034 if test "$needs_libsunmath" = "yes" ; then
5035 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
5038 if test "$haiku" = "yes" ; then
5039 echo "CONFIG_HAIKU=y" >> $config_host_mak
5041 if test "$static" = "yes" ; then
5042 echo "CONFIG_STATIC=y" >> $config_host_mak
5044 if test "$profiler" = "yes" ; then
5045 echo "CONFIG_PROFILER=y" >> $config_host_mak
5047 if test "$slirp" = "yes" ; then
5048 echo "CONFIG_SLIRP=y" >> $config_host_mak
5049 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5051 if test "$vde" = "yes" ; then
5052 echo "CONFIG_VDE=y" >> $config_host_mak
5054 if test "$netmap" = "yes" ; then
5055 echo "CONFIG_NETMAP=y" >> $config_host_mak
5057 if test "$l2tpv3" = "yes" ; then
5058 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5060 if test "$cap_ng" = "yes" ; then
5061 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5063 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5064 for drv in $audio_drv_list; do
5065 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5066 echo "$def=y" >> $config_host_mak
5067 done
5068 if test "$audio_pt_int" = "yes" ; then
5069 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5071 if test "$audio_win_int" = "yes" ; then
5072 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5074 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5075 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5076 if test "$vnc" = "yes" ; then
5077 echo "CONFIG_VNC=y" >> $config_host_mak
5079 if test "$vnc_sasl" = "yes" ; then
5080 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5082 if test "$vnc_jpeg" = "yes" ; then
5083 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5085 if test "$vnc_png" = "yes" ; then
5086 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5088 if test "$fnmatch" = "yes" ; then
5089 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5091 if test "$uuid" = "yes" ; then
5092 echo "CONFIG_UUID=y" >> $config_host_mak
5094 if test "$xfs" = "yes" ; then
5095 echo "CONFIG_XFS=y" >> $config_host_mak
5097 qemu_version=$(head $source_path/VERSION)
5098 echo "VERSION=$qemu_version" >>$config_host_mak
5099 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5100 echo "SRC_PATH=$source_path" >> $config_host_mak
5101 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5102 if [ "$docs" = "yes" ] ; then
5103 echo "BUILD_DOCS=yes" >> $config_host_mak
5105 if [ "$want_tools" = "yes" ] ; then
5106 echo "BUILD_TOOLS=yes" >> $config_host_mak
5108 if test "$modules" = "yes"; then
5109 # $shacmd can generate a hash started with digit, which the compiler doesn't
5110 # like as an symbol. So prefix it with an underscore
5111 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5112 echo "CONFIG_MODULES=y" >> $config_host_mak
5114 if test "$sdl" = "yes" ; then
5115 echo "CONFIG_SDL=y" >> $config_host_mak
5116 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5117 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5119 if test "$cocoa" = "yes" ; then
5120 echo "CONFIG_COCOA=y" >> $config_host_mak
5122 if test "$curses" = "yes" ; then
5123 echo "CONFIG_CURSES=y" >> $config_host_mak
5125 if test "$utimens" = "yes" ; then
5126 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
5128 if test "$pipe2" = "yes" ; then
5129 echo "CONFIG_PIPE2=y" >> $config_host_mak
5131 if test "$accept4" = "yes" ; then
5132 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5134 if test "$splice" = "yes" ; then
5135 echo "CONFIG_SPLICE=y" >> $config_host_mak
5137 if test "$eventfd" = "yes" ; then
5138 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5140 if test "$memfd" = "yes" ; then
5141 echo "CONFIG_MEMFD=y" >> $config_host_mak
5143 if test "$fallocate" = "yes" ; then
5144 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5146 if test "$fallocate_punch_hole" = "yes" ; then
5147 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5149 if test "$fallocate_zero_range" = "yes" ; then
5150 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5152 if test "$posix_fallocate" = "yes" ; then
5153 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5155 if test "$sync_file_range" = "yes" ; then
5156 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5158 if test "$fiemap" = "yes" ; then
5159 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5161 if test "$dup3" = "yes" ; then
5162 echo "CONFIG_DUP3=y" >> $config_host_mak
5164 if test "$ppoll" = "yes" ; then
5165 echo "CONFIG_PPOLL=y" >> $config_host_mak
5167 if test "$prctl_pr_set_timerslack" = "yes" ; then
5168 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5170 if test "$epoll" = "yes" ; then
5171 echo "CONFIG_EPOLL=y" >> $config_host_mak
5173 if test "$epoll_create1" = "yes" ; then
5174 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5176 if test "$sendfile" = "yes" ; then
5177 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5179 if test "$timerfd" = "yes" ; then
5180 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5182 if test "$setns" = "yes" ; then
5183 echo "CONFIG_SETNS=y" >> $config_host_mak
5185 if test "$inotify" = "yes" ; then
5186 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5188 if test "$inotify1" = "yes" ; then
5189 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5191 if test "$byteswap_h" = "yes" ; then
5192 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5194 if test "$bswap_h" = "yes" ; then
5195 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5197 if test "$curl" = "yes" ; then
5198 echo "CONFIG_CURL=m" >> $config_host_mak
5199 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5200 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5202 if test "$brlapi" = "yes" ; then
5203 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5205 if test "$bluez" = "yes" ; then
5206 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5207 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5209 if test "$glib_subprocess" = "yes" ; then
5210 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5212 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
5213 if test "$gtk" = "yes" ; then
5214 echo "CONFIG_GTK=y" >> $config_host_mak
5215 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5216 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5217 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5218 if test "$gtk_gl" = "yes" ; then
5219 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5222 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5223 if test "$gnutls" = "yes" ; then
5224 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5226 if test "$gnutls_rnd" = "yes" ; then
5227 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5229 if test "$gcrypt" = "yes" ; then
5230 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5231 if test "$gcrypt_kdf" = "yes" ; then
5232 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5235 if test "$nettle" = "yes" ; then
5236 echo "CONFIG_NETTLE=y" >> $config_host_mak
5237 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5238 if test "$nettle_kdf" = "yes" ; then
5239 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5242 if test "$tasn1" = "yes" ; then
5243 echo "CONFIG_TASN1=y" >> $config_host_mak
5245 if test "$have_ifaddrs_h" = "yes" ; then
5246 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5249 # Work around a system header bug with some kernel/XFS header
5250 # versions where they both try to define 'struct fsxattr':
5251 # xfs headers will not try to redefine structs from linux headers
5252 # if this macro is set.
5253 if test "$have_fsxattr" = "yes" ; then
5254 echo "HAVE_FSXATTR=y" >> $config_host_mak
5256 if test "$vte" = "yes" ; then
5257 echo "CONFIG_VTE=y" >> $config_host_mak
5258 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5260 if test "$virglrenderer" = "yes" ; then
5261 echo "CONFIG_VIRGL=y" >> $config_host_mak
5262 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5263 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5265 if test "$xen" = "yes" ; then
5266 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5267 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5268 if test "$xen_pv_domain_build" = "yes" ; then
5269 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5272 if test "$linux_aio" = "yes" ; then
5273 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5275 if test "$attr" = "yes" ; then
5276 echo "CONFIG_ATTR=y" >> $config_host_mak
5278 if test "$libattr" = "yes" ; then
5279 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5281 if test "$virtfs" = "yes" ; then
5282 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5284 if test "$vhost_scsi" = "yes" ; then
5285 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5287 if test "$vhost_net" = "yes" ; then
5288 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5290 if test "$blobs" = "yes" ; then
5291 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5293 if test "$iovec" = "yes" ; then
5294 echo "CONFIG_IOVEC=y" >> $config_host_mak
5296 if test "$preadv" = "yes" ; then
5297 echo "CONFIG_PREADV=y" >> $config_host_mak
5299 if test "$fdt" = "yes" ; then
5300 echo "CONFIG_FDT=y" >> $config_host_mak
5302 if test "$signalfd" = "yes" ; then
5303 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5305 if test "$tcg_interpreter" = "yes" ; then
5306 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5308 if test "$fdatasync" = "yes" ; then
5309 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5311 if test "$madvise" = "yes" ; then
5312 echo "CONFIG_MADVISE=y" >> $config_host_mak
5314 if test "$posix_madvise" = "yes" ; then
5315 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5318 if test "$spice" = "yes" ; then
5319 echo "CONFIG_SPICE=y" >> $config_host_mak
5322 if test "$smartcard" = "yes" ; then
5323 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5326 if test "$libusb" = "yes" ; then
5327 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5330 if test "$usb_redir" = "yes" ; then
5331 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5334 if test "$opengl" = "yes" ; then
5335 echo "CONFIG_OPENGL=y" >> $config_host_mak
5336 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5337 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5338 if test "$opengl_dmabuf" = "yes" ; then
5339 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5343 if test "$avx2_opt" = "yes" ; then
5344 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5347 if test "$lzo" = "yes" ; then
5348 echo "CONFIG_LZO=y" >> $config_host_mak
5351 if test "$snappy" = "yes" ; then
5352 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5355 if test "$bzip2" = "yes" ; then
5356 echo "CONFIG_BZIP2=y" >> $config_host_mak
5357 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5360 if test "$libiscsi" = "yes" ; then
5361 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5362 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5363 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5366 if test "$libnfs" = "yes" ; then
5367 echo "CONFIG_LIBNFS=y" >> $config_host_mak
5370 if test "$seccomp" = "yes"; then
5371 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5374 # XXX: suppress that
5375 if [ "$bsd" = "yes" ] ; then
5376 echo "CONFIG_BSD=y" >> $config_host_mak
5379 if test "$localtime_r" = "yes" ; then
5380 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5382 if test "$qom_cast_debug" = "yes" ; then
5383 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5385 if test "$rbd" = "yes" ; then
5386 echo "CONFIG_RBD=m" >> $config_host_mak
5387 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5388 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5391 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5392 if test "$coroutine_pool" = "yes" ; then
5393 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5394 else
5395 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5398 if test "$open_by_handle_at" = "yes" ; then
5399 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5402 if test "$linux_magic_h" = "yes" ; then
5403 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5406 if test "$pragma_diagnostic_available" = "yes" ; then
5407 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5410 if test "$valgrind_h" = "yes" ; then
5411 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5414 if test "$has_environ" = "yes" ; then
5415 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5418 if test "$cpuid_h" = "yes" ; then
5419 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5422 if test "$int128" = "yes" ; then
5423 echo "CONFIG_INT128=y" >> $config_host_mak
5426 if test "$getauxval" = "yes" ; then
5427 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5430 if test "$glusterfs" = "yes" ; then
5431 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5432 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5433 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5436 if test "$glusterfs_xlator_opt" = "yes" ; then
5437 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5440 if test "$glusterfs_discard" = "yes" ; then
5441 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5444 if test "$glusterfs_zerofill" = "yes" ; then
5445 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5448 if test "$archipelago" = "yes" ; then
5449 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5450 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5453 if test "$libssh2" = "yes" ; then
5454 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5455 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5456 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5459 if test "$vhdx" = "yes" ; then
5460 echo "CONFIG_VHDX=y" >> $config_host_mak
5463 # USB host support
5464 if test "$libusb" = "yes"; then
5465 echo "HOST_USB=libusb legacy" >> $config_host_mak
5466 else
5467 echo "HOST_USB=stub" >> $config_host_mak
5470 # TPM passthrough support?
5471 if test "$tpm" = "yes"; then
5472 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5473 if test "$tpm_passthrough" = "yes"; then
5474 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5478 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5479 if have_backend "nop"; then
5480 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5482 if have_backend "simple"; then
5483 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5484 # Set the appropriate trace file.
5485 trace_file="\"$trace_file-\" FMT_pid"
5487 if have_backend "log"; then
5488 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5490 if have_backend "ust"; then
5491 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5493 if have_backend "dtrace"; then
5494 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5495 if test "$trace_backend_stap" = "yes" ; then
5496 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5499 if have_backend "ftrace"; then
5500 if test "$linux" = "yes" ; then
5501 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5502 else
5503 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5506 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5508 if test "$rdma" = "yes" ; then
5509 echo "CONFIG_RDMA=y" >> $config_host_mak
5512 if test "$have_rtnetlink" = "yes" ; then
5513 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5516 # Hold two types of flag:
5517 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5518 # a thread we have a handle to
5519 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5520 # platform
5521 if test "$pthread_setname_np" = "yes" ; then
5522 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5523 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5526 if test "$tcg_interpreter" = "yes"; then
5527 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5528 elif test "$ARCH" = "sparc64" ; then
5529 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5530 elif test "$ARCH" = "s390x" ; then
5531 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5532 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5533 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5534 elif test "$ARCH" = "ppc64" ; then
5535 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5536 else
5537 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5539 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5541 echo "TOOLS=$tools" >> $config_host_mak
5542 echo "ROMS=$roms" >> $config_host_mak
5543 echo "MAKE=$make" >> $config_host_mak
5544 echo "INSTALL=$install" >> $config_host_mak
5545 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5546 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5547 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5548 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5549 echo "PYTHON=$python" >> $config_host_mak
5550 echo "CC=$cc" >> $config_host_mak
5551 if $iasl -h > /dev/null 2>&1; then
5552 echo "IASL=$iasl" >> $config_host_mak
5554 echo "CC_I386=$cc_i386" >> $config_host_mak
5555 echo "HOST_CC=$host_cc" >> $config_host_mak
5556 echo "CXX=$cxx" >> $config_host_mak
5557 echo "OBJCC=$objcc" >> $config_host_mak
5558 echo "AR=$ar" >> $config_host_mak
5559 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5560 echo "AS=$as" >> $config_host_mak
5561 echo "CCAS=$ccas" >> $config_host_mak
5562 echo "CPP=$cpp" >> $config_host_mak
5563 echo "OBJCOPY=$objcopy" >> $config_host_mak
5564 echo "LD=$ld" >> $config_host_mak
5565 echo "NM=$nm" >> $config_host_mak
5566 echo "WINDRES=$windres" >> $config_host_mak
5567 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5568 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5569 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5570 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5571 if test "$sparse" = "yes" ; then
5572 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5573 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5574 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5575 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5576 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5578 if test "$cross_prefix" != ""; then
5579 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5580 else
5581 echo "AUTOCONF_HOST := " >> $config_host_mak
5583 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5584 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5585 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
5586 echo "LIBS+=$LIBS" >> $config_host_mak
5587 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5588 echo "EXESUF=$EXESUF" >> $config_host_mak
5589 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5590 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5591 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5592 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5593 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5594 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5595 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5596 if test "$gcov" = "yes" ; then
5597 echo "CONFIG_GCOV=y" >> $config_host_mak
5598 echo "GCOV=$gcov_tool" >> $config_host_mak
5601 # use included Linux headers
5602 if test "$linux" = "yes" ; then
5603 mkdir -p linux-headers
5604 case "$cpu" in
5605 i386|x86_64|x32)
5606 linux_arch=x86
5608 ppcemb|ppc|ppc64)
5609 linux_arch=powerpc
5611 s390x)
5612 linux_arch=s390
5614 aarch64)
5615 linux_arch=arm64
5617 mips64)
5618 linux_arch=mips
5621 # For most CPUs the kernel architecture name and QEMU CPU name match.
5622 linux_arch="$cpu"
5624 esac
5625 # For non-KVM architectures we will not have asm headers
5626 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5627 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5631 for target in $target_list; do
5632 target_dir="$target"
5633 config_target_mak=$target_dir/config-target.mak
5634 target_name=$(echo $target | cut -d '-' -f 1)
5635 target_bigendian="no"
5637 case "$target_name" in
5638 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5639 target_bigendian=yes
5641 esac
5642 target_softmmu="no"
5643 target_user_only="no"
5644 target_linux_user="no"
5645 target_bsd_user="no"
5646 case "$target" in
5647 ${target_name}-softmmu)
5648 target_softmmu="yes"
5650 ${target_name}-linux-user)
5651 if test "$linux" != "yes" ; then
5652 error_exit "Target '$target' is only available on a Linux host"
5654 target_user_only="yes"
5655 target_linux_user="yes"
5657 ${target_name}-bsd-user)
5658 if test "$bsd" != "yes" ; then
5659 error_exit "Target '$target' is only available on a BSD host"
5661 target_user_only="yes"
5662 target_bsd_user="yes"
5665 error_exit "Target '$target' not recognised"
5666 exit 1
5668 esac
5670 mkdir -p $target_dir
5671 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5673 bflt="no"
5674 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
5675 gdb_xml_files=""
5677 TARGET_ARCH="$target_name"
5678 TARGET_BASE_ARCH=""
5679 TARGET_ABI_DIR=""
5681 case "$target_name" in
5682 i386)
5684 x86_64)
5685 TARGET_BASE_ARCH=i386
5687 alpha)
5689 arm|armeb)
5690 TARGET_ARCH=arm
5691 bflt="yes"
5692 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5694 aarch64)
5695 TARGET_BASE_ARCH=arm
5696 bflt="yes"
5697 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5699 cris)
5701 lm32)
5703 m68k)
5704 bflt="yes"
5705 gdb_xml_files="cf-core.xml cf-fp.xml"
5707 microblaze|microblazeel)
5708 TARGET_ARCH=microblaze
5709 bflt="yes"
5711 mips|mipsel)
5712 TARGET_ARCH=mips
5713 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5715 mipsn32|mipsn32el)
5716 TARGET_ARCH=mips64
5717 TARGET_BASE_ARCH=mips
5718 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5719 echo "TARGET_ABI32=y" >> $config_target_mak
5721 mips64|mips64el)
5722 TARGET_ARCH=mips64
5723 TARGET_BASE_ARCH=mips
5724 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5726 moxie)
5728 or32)
5729 TARGET_ARCH=openrisc
5730 TARGET_BASE_ARCH=openrisc
5732 ppc)
5733 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5735 ppcemb)
5736 TARGET_BASE_ARCH=ppc
5737 TARGET_ABI_DIR=ppc
5738 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5740 ppc64)
5741 TARGET_BASE_ARCH=ppc
5742 TARGET_ABI_DIR=ppc
5743 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5745 ppc64le)
5746 TARGET_ARCH=ppc64
5747 TARGET_BASE_ARCH=ppc
5748 TARGET_ABI_DIR=ppc
5749 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5751 ppc64abi32)
5752 TARGET_ARCH=ppc64
5753 TARGET_BASE_ARCH=ppc
5754 TARGET_ABI_DIR=ppc
5755 echo "TARGET_ABI32=y" >> $config_target_mak
5756 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5758 sh4|sh4eb)
5759 TARGET_ARCH=sh4
5760 bflt="yes"
5762 sparc)
5764 sparc64)
5765 TARGET_BASE_ARCH=sparc
5767 sparc32plus)
5768 TARGET_ARCH=sparc64
5769 TARGET_BASE_ARCH=sparc
5770 TARGET_ABI_DIR=sparc
5771 echo "TARGET_ABI32=y" >> $config_target_mak
5773 s390x)
5774 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
5776 tilegx)
5778 tricore)
5780 unicore32)
5782 xtensa|xtensaeb)
5783 TARGET_ARCH=xtensa
5786 error_exit "Unsupported target CPU"
5788 esac
5789 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5790 if [ "$TARGET_BASE_ARCH" = "" ]; then
5791 TARGET_BASE_ARCH=$TARGET_ARCH
5794 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5796 upper() {
5797 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5800 target_arch_name="$(upper $TARGET_ARCH)"
5801 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5802 echo "TARGET_NAME=$target_name" >> $config_target_mak
5803 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5804 if [ "$TARGET_ABI_DIR" = "" ]; then
5805 TARGET_ABI_DIR=$TARGET_ARCH
5807 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5808 if [ "$HOST_VARIANT_DIR" != "" ]; then
5809 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5811 case "$target_name" in
5812 i386|x86_64)
5813 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5814 echo "CONFIG_XEN=y" >> $config_target_mak
5815 if test "$xen_pci_passthrough" = yes; then
5816 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5821 esac
5822 case "$target_name" in
5823 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5824 # Make sure the target and host cpus are compatible
5825 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5826 \( "$target_name" = "$cpu" -o \
5827 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5828 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5829 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5830 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5831 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5832 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5833 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5834 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5835 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5836 echo "CONFIG_KVM=y" >> $config_target_mak
5837 if test "$vhost_net" = "yes" ; then
5838 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5839 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
5842 esac
5843 if test "$target_bigendian" = "yes" ; then
5844 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5846 if test "$target_softmmu" = "yes" ; then
5847 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5849 if test "$target_user_only" = "yes" ; then
5850 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5851 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5853 if test "$target_linux_user" = "yes" ; then
5854 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5856 list=""
5857 if test ! -z "$gdb_xml_files" ; then
5858 for x in $gdb_xml_files; do
5859 list="$list $source_path/gdb-xml/$x"
5860 done
5861 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5864 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5865 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5867 if test "$target_bsd_user" = "yes" ; then
5868 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5871 # generate QEMU_CFLAGS/LDFLAGS for targets
5873 cflags=""
5874 ldflags=""
5876 disas_config() {
5877 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5878 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5881 for i in $ARCH $TARGET_BASE_ARCH ; do
5882 case "$i" in
5883 alpha)
5884 disas_config "ALPHA"
5886 aarch64)
5887 if test -n "${cxx}"; then
5888 disas_config "ARM_A64"
5891 arm)
5892 disas_config "ARM"
5893 if test -n "${cxx}"; then
5894 disas_config "ARM_A64"
5897 cris)
5898 disas_config "CRIS"
5900 hppa)
5901 disas_config "HPPA"
5903 i386|x86_64|x32)
5904 disas_config "I386"
5906 ia64*)
5907 disas_config "IA64"
5909 lm32)
5910 disas_config "LM32"
5912 m68k)
5913 disas_config "M68K"
5915 microblaze*)
5916 disas_config "MICROBLAZE"
5918 mips*)
5919 disas_config "MIPS"
5921 moxie*)
5922 disas_config "MOXIE"
5924 or32)
5925 disas_config "OPENRISC"
5927 ppc*)
5928 disas_config "PPC"
5930 s390*)
5931 disas_config "S390"
5933 sh4)
5934 disas_config "SH4"
5936 sparc*)
5937 disas_config "SPARC"
5939 xtensa*)
5940 disas_config "XTENSA"
5942 esac
5943 done
5944 if test "$tcg_interpreter" = "yes" ; then
5945 disas_config "TCI"
5948 case "$ARCH" in
5949 alpha)
5950 # Ensure there's only a single GP
5951 cflags="-msmall-data $cflags"
5953 esac
5955 if test "$gprof" = "yes" ; then
5956 echo "TARGET_GPROF=yes" >> $config_target_mak
5957 if test "$target_linux_user" = "yes" ; then
5958 cflags="-p $cflags"
5959 ldflags="-p $ldflags"
5961 if test "$target_softmmu" = "yes" ; then
5962 ldflags="-p $ldflags"
5963 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5967 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5968 ldflags="$ldflags $textseg_ldflags"
5971 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5972 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5974 done # for target in $targets
5976 if [ "$pixman" = "internal" ]; then
5977 echo "config-host.h: subdir-pixman" >> $config_host_mak
5980 if [ "$dtc_internal" = "yes" ]; then
5981 echo "config-host.h: subdir-dtc" >> $config_host_mak
5984 if test "$numa" = "yes"; then
5985 echo "CONFIG_NUMA=y" >> $config_host_mak
5988 if test "$ccache_cpp2" = "yes"; then
5989 echo "export CCACHE_CPP2=y" >> $config_host_mak
5992 # build tree in object directory in case the source is not in the current directory
5993 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5994 DIRS="$DIRS fsdev"
5995 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5996 DIRS="$DIRS roms/seabios roms/vgabios"
5997 DIRS="$DIRS qapi-generated"
5998 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5999 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6000 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6001 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6002 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6003 FILES="$FILES pc-bios/s390-ccw/Makefile"
6004 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6005 FILES="$FILES pc-bios/qemu-icon.bmp"
6006 for bios_file in \
6007 $source_path/pc-bios/*.bin \
6008 $source_path/pc-bios/*.aml \
6009 $source_path/pc-bios/*.rom \
6010 $source_path/pc-bios/*.dtb \
6011 $source_path/pc-bios/*.img \
6012 $source_path/pc-bios/openbios-* \
6013 $source_path/pc-bios/u-boot.* \
6014 $source_path/pc-bios/palcode-*
6016 FILES="$FILES pc-bios/$(basename $bios_file)"
6017 done
6018 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6020 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6021 done
6022 mkdir -p $DIRS
6023 for f in $FILES ; do
6024 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6025 symlink "$source_path/$f" "$f"
6027 done
6029 # temporary config to build submodules
6030 for rom in seabios vgabios ; do
6031 config_mak=roms/$rom/config.mak
6032 echo "# Automatically generated by configure - do not modify" > $config_mak
6033 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6034 echo "AS=$as" >> $config_mak
6035 echo "CCAS=$ccas" >> $config_mak
6036 echo "CC=$cc" >> $config_mak
6037 echo "BCC=bcc" >> $config_mak
6038 echo "CPP=$cpp" >> $config_mak
6039 echo "OBJCOPY=objcopy" >> $config_mak
6040 echo "IASL=$iasl" >> $config_mak
6041 echo "LD=$ld" >> $config_mak
6042 done
6044 # set up qemu-iotests in this build directory
6045 iotests_common_env="tests/qemu-iotests/common.env"
6046 iotests_check="tests/qemu-iotests/check"
6048 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6049 echo >> "$iotests_common_env"
6050 echo "export PYTHON='$python'" >> "$iotests_common_env"
6052 if [ ! -e "$iotests_check" ]; then
6053 symlink "$source_path/$iotests_check" "$iotests_check"
6056 # Save the configure command line for later reuse.
6057 cat <<EOD >config.status
6058 #!/bin/sh
6059 # Generated by configure.
6060 # Run this file to recreate the current configuration.
6061 # Compiler output produced by configure, useful for debugging
6062 # configure, is in config.log if it exists.
6064 printf "exec" >>config.status
6065 printf " '%s'" "$0" "$@" >>config.status
6066 echo ' "$@"' >>config.status
6067 chmod +x config.status
6069 rm -r "$TMPDIR1"