]> git.proxmox.com Git - mirror_qemu.git/blob - configure
Merge remote-tracking branch 'remotes/berrange/tags/pull-qcrypto-2016-12-21-2' into...
[mirror_qemu.git] / configure
1 #!/bin/sh
2 #
3 # qemu configure script (c) 2003 Fabrice Bellard
4 #
5
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
10
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
13
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
25 fi
26
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"
35
36 rm -f config.log
37
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
44
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
54 }
55
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
69 fi
70 # Don't bother rerunning the compile if we were already using -Werror
71 case "$*" in
72 *-Werror*)
73 return 0
74 ;;
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."
82 }
83
84 do_cc() {
85 do_compiler "$cc" "$@"
86 }
87
88 do_cxx() {
89 do_compiler "$cxx" "$@"
90 }
91
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 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
100 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
101 ;;
102 *)
103 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
104 ;;
105 esac
106 done
107 }
108
109 compile_object() {
110 local_cflags="$1"
111 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
112 }
113
114 compile_prog() {
115 local_cflags="$1"
116 local_ldflags="$2"
117 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
118 }
119
120 # symbolically link $1 to $2. Portable version of "ln -sf".
121 symlink() {
122 rm -rf "$2"
123 mkdir -p "$(dirname "$2")"
124 ln -s "$1" "$2"
125 }
126
127 # check whether a command is available to this shell (may be either an
128 # executable or a builtin)
129 has() {
130 type "$1" >/dev/null 2>&1
131 }
132
133 # search for an executable in PATH
134 path_of() {
135 local_command="$1"
136 local_ifs="$IFS"
137 local_dir=""
138
139 # pathname has a dir component?
140 if [ "${local_command#*/}" != "$local_command" ]; then
141 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
142 echo "$local_command"
143 return 0
144 fi
145 fi
146 if [ -z "$local_command" ]; then
147 return 1
148 fi
149
150 IFS=:
151 for local_dir in $PATH; do
152 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
153 echo "$local_dir/$local_command"
154 IFS="${local_ifs:-$(printf ' \t\n')}"
155 return 0
156 fi
157 done
158 # not found
159 IFS="${local_ifs:-$(printf ' \t\n')}"
160 return 1
161 }
162
163 have_backend () {
164 echo "$trace_backends" | grep "$1" >/dev/null
165 }
166
167 # default parameters
168 source_path=$(dirname "$0")
169 cpu=""
170 iasl="iasl"
171 interp_prefix="/usr/gnemul/qemu-%M"
172 static="no"
173 cross_prefix=""
174 audio_drv_list=""
175 block_drv_rw_whitelist=""
176 block_drv_ro_whitelist=""
177 host_cc="cc"
178 libs_softmmu=""
179 libs_tools=""
180 audio_pt_int=""
181 audio_win_int=""
182 cc_i386=i386-pc-linux-gnu-gcc
183 libs_qga=""
184 debug_info="yes"
185 stack_protector=""
186
187 # Don't accept a target_list environment variable.
188 unset target_list
189
190 # Default value for a variable defining feature "foo".
191 # * foo="no" feature will only be used if --enable-foo arg is given
192 # * foo="" feature will be searched for, and if found, will be used
193 # unless --disable-foo is given
194 # * foo="yes" this value will only be set by --enable-foo flag.
195 # feature will searched for,
196 # if not found, configure exits with error
197 #
198 # Always add --enable-foo and --disable-foo command line args.
199 # Distributions want to ensure that several features are compiled in, and it
200 # is impossible without a --enable-foo that exits if a feature is not found.
201
202 bluez=""
203 brlapi=""
204 curl=""
205 curses=""
206 docs=""
207 fdt=""
208 netmap="no"
209 pixman=""
210 sdl=""
211 sdlabi=""
212 virtfs=""
213 vnc="yes"
214 sparse="no"
215 vde=""
216 vnc_sasl=""
217 vnc_jpeg=""
218 vnc_png=""
219 xen=""
220 xen_ctrl_version=""
221 xen_pv_domain_build="no"
222 xen_pci_passthrough=""
223 linux_aio=""
224 cap_ng=""
225 attr=""
226 libattr=""
227 xfs=""
228
229 vhost_net="no"
230 vhost_scsi="no"
231 vhost_vsock="no"
232 kvm="no"
233 colo="yes"
234 rdma=""
235 gprof="no"
236 debug_tcg="no"
237 debug="no"
238 fortify_source=""
239 strip_opt="yes"
240 tcg_interpreter="no"
241 bigendian="no"
242 mingw32="no"
243 gcov="no"
244 gcov_tool="gcov"
245 EXESUF=""
246 DSOSUF=".so"
247 LDFLAGS_SHARED="-shared"
248 modules="no"
249 prefix="/usr/local"
250 mandir="\${prefix}/share/man"
251 datadir="\${prefix}/share"
252 qemu_docdir="\${prefix}/share/doc/qemu"
253 bindir="\${prefix}/bin"
254 libdir="\${prefix}/lib"
255 libexecdir="\${prefix}/libexec"
256 includedir="\${prefix}/include"
257 sysconfdir="\${prefix}/etc"
258 local_statedir="\${prefix}/var"
259 confsuffix="/qemu"
260 slirp="yes"
261 oss_lib=""
262 bsd="no"
263 linux="no"
264 solaris="no"
265 profiler="no"
266 cocoa="no"
267 softmmu="yes"
268 linux_user="no"
269 bsd_user="no"
270 aix="no"
271 blobs="yes"
272 pkgversion=""
273 pie=""
274 qom_cast_debug="yes"
275 trace_backends="log"
276 trace_file="trace"
277 spice=""
278 rbd=""
279 smartcard=""
280 libusb=""
281 usb_redir=""
282 opengl=""
283 opengl_dmabuf="no"
284 avx2_opt="no"
285 zlib="yes"
286 lzo=""
287 snappy=""
288 bzip2=""
289 guest_agent=""
290 guest_agent_with_vss="no"
291 guest_agent_ntddscsi="no"
292 guest_agent_msi=""
293 vss_win32_sdk=""
294 win_sdk="no"
295 want_tools="yes"
296 libiscsi=""
297 libnfs=""
298 coroutine=""
299 coroutine_pool=""
300 debug_stack_usage="no"
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_hmac="no"
317 gcrypt_kdf="no"
318 vte=""
319 virglrenderer=""
320 tpm="yes"
321 libssh2=""
322 numa=""
323 tcmalloc="no"
324 jemalloc="no"
325 replication="yes"
326
327 # parse CC options first
328 for opt do
329 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
330 case "$opt" in
331 --cross-prefix=*) cross_prefix="$optarg"
332 ;;
333 --cc=*) CC="$optarg"
334 ;;
335 --cxx=*) CXX="$optarg"
336 ;;
337 --source-path=*) source_path="$optarg"
338 ;;
339 --cpu=*) cpu="$optarg"
340 ;;
341 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
342 EXTRA_CFLAGS="$optarg"
343 ;;
344 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
345 EXTRA_LDFLAGS="$optarg"
346 ;;
347 --enable-debug-info) debug_info="yes"
348 ;;
349 --disable-debug-info) debug_info="no"
350 ;;
351 esac
352 done
353 # OS specific
354 # Using uname is really, really broken. Once we have the right set of checks
355 # we can eliminate its usage altogether.
356
357 # Preferred compiler:
358 # ${CC} (if set)
359 # ${cross_prefix}gcc (if cross-prefix specified)
360 # system compiler
361 if test -z "${CC}${cross_prefix}"; then
362 cc="$host_cc"
363 else
364 cc="${CC-${cross_prefix}gcc}"
365 fi
366
367 if test -z "${CXX}${cross_prefix}"; then
368 cxx="c++"
369 else
370 cxx="${CXX-${cross_prefix}g++}"
371 fi
372
373 ar="${AR-${cross_prefix}ar}"
374 as="${AS-${cross_prefix}as}"
375 ccas="${CCAS-$cc}"
376 cpp="${CPP-$cc -E}"
377 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
378 ld="${LD-${cross_prefix}ld}"
379 nm="${NM-${cross_prefix}nm}"
380 strip="${STRIP-${cross_prefix}strip}"
381 windres="${WINDRES-${cross_prefix}windres}"
382 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
383 query_pkg_config() {
384 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
385 }
386 pkg_config=query_pkg_config
387 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
388 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
389
390 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
391 ARFLAGS="${ARFLAGS-rv}"
392
393 # default flags for all hosts
394 # We use -fwrapv to tell the compiler that we require a C dialect where
395 # left shift of signed integers is well defined and has the expected
396 # 2s-complement style results. (Both clang and gcc agree that it
397 # provides these semantics.)
398 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
399 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
400 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
401 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
402 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
403 if test "$debug_info" = "yes"; then
404 CFLAGS="-g $CFLAGS"
405 LDFLAGS="-g $LDFLAGS"
406 fi
407
408 # make source path absolute
409 source_path=$(cd "$source_path"; pwd)
410
411 # running configure in the source tree?
412 # we know that's the case if configure is there.
413 if test -f "./configure"; then
414 pwd_is_source_path="y"
415 else
416 pwd_is_source_path="n"
417 fi
418
419 check_define() {
420 cat > $TMPC <<EOF
421 #if !defined($1)
422 #error $1 not defined
423 #endif
424 int main(void) { return 0; }
425 EOF
426 compile_object
427 }
428
429 check_include() {
430 cat > $TMPC <<EOF
431 #include <$1>
432 int main(void) { return 0; }
433 EOF
434 compile_object
435 }
436
437 write_c_skeleton() {
438 cat > $TMPC <<EOF
439 int main(void) { return 0; }
440 EOF
441 }
442
443 if check_define __linux__ ; then
444 targetos="Linux"
445 elif check_define _WIN32 ; then
446 targetos='MINGW32'
447 elif check_define __OpenBSD__ ; then
448 targetos='OpenBSD'
449 elif check_define __sun__ ; then
450 targetos='SunOS'
451 elif check_define __HAIKU__ ; then
452 targetos='Haiku'
453 else
454 targetos=$(uname -s)
455 fi
456
457 # Some host OSes need non-standard checks for which CPU to use.
458 # Note that these checks are broken for cross-compilation: if you're
459 # cross-compiling to one of these OSes then you'll need to specify
460 # the correct CPU with the --cpu option.
461 case $targetos in
462 Darwin)
463 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
464 # run 64-bit userspace code.
465 # If the user didn't specify a CPU explicitly and the kernel says this is
466 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
467 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
468 cpu="x86_64"
469 fi
470 ;;
471 SunOS)
472 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
473 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
474 cpu="x86_64"
475 fi
476 esac
477
478 if test ! -z "$cpu" ; then
479 # command line argument
480 :
481 elif check_define __i386__ ; then
482 cpu="i386"
483 elif check_define __x86_64__ ; then
484 if check_define __ILP32__ ; then
485 cpu="x32"
486 else
487 cpu="x86_64"
488 fi
489 elif check_define __sparc__ ; then
490 if check_define __arch64__ ; then
491 cpu="sparc64"
492 else
493 cpu="sparc"
494 fi
495 elif check_define _ARCH_PPC ; then
496 if check_define _ARCH_PPC64 ; then
497 cpu="ppc64"
498 else
499 cpu="ppc"
500 fi
501 elif check_define __mips__ ; then
502 cpu="mips"
503 elif check_define __ia64__ ; then
504 cpu="ia64"
505 elif check_define __s390__ ; then
506 if check_define __s390x__ ; then
507 cpu="s390x"
508 else
509 cpu="s390"
510 fi
511 elif check_define __arm__ ; then
512 cpu="arm"
513 elif check_define __aarch64__ ; then
514 cpu="aarch64"
515 else
516 cpu=$(uname -m)
517 fi
518
519 ARCH=
520 # Normalise host CPU name and set ARCH.
521 # Note that this case should only have supported host CPUs, not guests.
522 case "$cpu" in
523 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
524 cpu="$cpu"
525 ;;
526 i386|i486|i586|i686|i86pc|BePC)
527 cpu="i386"
528 ;;
529 x86_64|amd64)
530 cpu="x86_64"
531 ;;
532 armv*b|armv*l|arm)
533 cpu="arm"
534 ;;
535 aarch64)
536 cpu="aarch64"
537 ;;
538 mips*)
539 cpu="mips"
540 ;;
541 sparc|sun4[cdmuv])
542 cpu="sparc"
543 ;;
544 *)
545 # This will result in either an error or falling back to TCI later
546 ARCH=unknown
547 ;;
548 esac
549 if test -z "$ARCH"; then
550 ARCH="$cpu"
551 fi
552
553 # OS specific
554
555 # host *BSD for user mode
556 HOST_VARIANT_DIR=""
557
558 case $targetos in
559 CYGWIN*)
560 mingw32="yes"
561 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
562 audio_possible_drivers="sdl"
563 audio_drv_list="sdl"
564 ;;
565 MINGW32*)
566 mingw32="yes"
567 audio_possible_drivers="dsound sdl"
568 if check_include dsound.h; then
569 audio_drv_list="dsound"
570 else
571 audio_drv_list=""
572 fi
573 ;;
574 GNU/kFreeBSD)
575 bsd="yes"
576 audio_drv_list="oss"
577 audio_possible_drivers="oss sdl pa"
578 ;;
579 FreeBSD)
580 bsd="yes"
581 make="${MAKE-gmake}"
582 audio_drv_list="oss"
583 audio_possible_drivers="oss sdl pa"
584 # needed for kinfo_getvmmap(3) in libutil.h
585 LIBS="-lutil $LIBS"
586 # needed for kinfo_getproc
587 libs_qga="-lutil $libs_qga"
588 netmap="" # enable netmap autodetect
589 HOST_VARIANT_DIR="freebsd"
590 ;;
591 DragonFly)
592 bsd="yes"
593 make="${MAKE-gmake}"
594 audio_drv_list="oss"
595 audio_possible_drivers="oss sdl pa"
596 HOST_VARIANT_DIR="dragonfly"
597 ;;
598 NetBSD)
599 bsd="yes"
600 make="${MAKE-gmake}"
601 audio_drv_list="oss"
602 audio_possible_drivers="oss sdl"
603 oss_lib="-lossaudio"
604 HOST_VARIANT_DIR="netbsd"
605 ;;
606 OpenBSD)
607 bsd="yes"
608 make="${MAKE-gmake}"
609 audio_drv_list="sdl"
610 audio_possible_drivers="sdl"
611 HOST_VARIANT_DIR="openbsd"
612 ;;
613 Darwin)
614 bsd="yes"
615 darwin="yes"
616 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
617 if [ "$cpu" = "x86_64" ] ; then
618 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
619 LDFLAGS="-arch x86_64 $LDFLAGS"
620 fi
621 cocoa="yes"
622 audio_drv_list="coreaudio"
623 audio_possible_drivers="coreaudio sdl"
624 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
625 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
626 # Disable attempts to use ObjectiveC features in os/object.h since they
627 # won't work when we're compiling with gcc as a C compiler.
628 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
629 HOST_VARIANT_DIR="darwin"
630 ;;
631 SunOS)
632 solaris="yes"
633 make="${MAKE-gmake}"
634 install="${INSTALL-ginstall}"
635 ld="gld"
636 smbd="${SMBD-/usr/sfw/sbin/smbd}"
637 needs_libsunmath="no"
638 solarisrev=$(uname -r | cut -f2 -d.)
639 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
640 if test "$solarisrev" -le 9 ; then
641 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
642 needs_libsunmath="yes"
643 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
644 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
645 LIBS="-lsunmath $LIBS"
646 else
647 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
648 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
649 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
650 "Studio 11 can be downloaded from www.sun.com."
651 fi
652 fi
653 fi
654 if test -f /usr/include/sys/soundcard.h ; then
655 audio_drv_list="oss"
656 fi
657 audio_possible_drivers="oss sdl"
658 # needed for CMSG_ macros in sys/socket.h
659 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
660 # needed for TIOCWIN* defines in termios.h
661 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
662 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
663 solarisnetlibs="-lsocket -lnsl -lresolv"
664 LIBS="$solarisnetlibs $LIBS"
665 libs_qga="$solarisnetlibs $libs_qga"
666 ;;
667 AIX)
668 aix="yes"
669 make="${MAKE-gmake}"
670 ;;
671 Haiku)
672 haiku="yes"
673 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
674 LIBS="-lposix_error_mapper -lnetwork $LIBS"
675 ;;
676 *)
677 audio_drv_list="oss"
678 audio_possible_drivers="oss alsa sdl pa"
679 linux="yes"
680 linux_user="yes"
681 kvm="yes"
682 vhost_net="yes"
683 vhost_scsi="yes"
684 vhost_vsock="yes"
685 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
686 ;;
687 esac
688
689 if [ "$bsd" = "yes" ] ; then
690 if [ "$darwin" != "yes" ] ; then
691 bsd_user="yes"
692 fi
693 fi
694
695 : ${make=${MAKE-make}}
696 : ${install=${INSTALL-install}}
697 : ${python=${PYTHON-python}}
698 : ${smbd=${SMBD-/usr/sbin/smbd}}
699
700 # Default objcc to clang if available, otherwise use CC
701 if has clang; then
702 objcc=clang
703 else
704 objcc="$cc"
705 fi
706
707 if test "$mingw32" = "yes" ; then
708 EXESUF=".exe"
709 DSOSUF=".dll"
710 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
711 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
712 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
713 # MinGW needs -mthreads for TLS and macro _MT.
714 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
715 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
716 write_c_skeleton;
717 if compile_prog "" "-liberty" ; then
718 LIBS="-liberty $LIBS"
719 fi
720 prefix="c:/Program Files/QEMU"
721 mandir="\${prefix}"
722 datadir="\${prefix}"
723 qemu_docdir="\${prefix}"
724 bindir="\${prefix}"
725 sysconfdir="\${prefix}"
726 local_statedir=
727 confsuffix=""
728 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
729 fi
730
731 werror=""
732
733 for opt do
734 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
735 case "$opt" in
736 --help|-h) show_help=yes
737 ;;
738 --version|-V) exec cat $source_path/VERSION
739 ;;
740 --prefix=*) prefix="$optarg"
741 ;;
742 --interp-prefix=*) interp_prefix="$optarg"
743 ;;
744 --source-path=*)
745 ;;
746 --cross-prefix=*)
747 ;;
748 --cc=*)
749 ;;
750 --host-cc=*) host_cc="$optarg"
751 ;;
752 --cxx=*)
753 ;;
754 --iasl=*) iasl="$optarg"
755 ;;
756 --objcc=*) objcc="$optarg"
757 ;;
758 --make=*) make="$optarg"
759 ;;
760 --install=*) install="$optarg"
761 ;;
762 --python=*) python="$optarg"
763 ;;
764 --gcov=*) gcov_tool="$optarg"
765 ;;
766 --smbd=*) smbd="$optarg"
767 ;;
768 --extra-cflags=*)
769 ;;
770 --extra-ldflags=*)
771 ;;
772 --enable-debug-info)
773 ;;
774 --disable-debug-info)
775 ;;
776 --enable-modules)
777 modules="yes"
778 ;;
779 --disable-modules)
780 modules="no"
781 ;;
782 --cpu=*)
783 ;;
784 --target-list=*) target_list="$optarg"
785 ;;
786 --enable-trace-backends=*) trace_backends="$optarg"
787 ;;
788 # XXX: backwards compatibility
789 --enable-trace-backend=*) trace_backends="$optarg"
790 ;;
791 --with-trace-file=*) trace_file="$optarg"
792 ;;
793 --enable-gprof) gprof="yes"
794 ;;
795 --enable-gcov) gcov="yes"
796 ;;
797 --static)
798 static="yes"
799 LDFLAGS="-static $LDFLAGS"
800 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
801 ;;
802 --mandir=*) mandir="$optarg"
803 ;;
804 --bindir=*) bindir="$optarg"
805 ;;
806 --libdir=*) libdir="$optarg"
807 ;;
808 --libexecdir=*) libexecdir="$optarg"
809 ;;
810 --includedir=*) includedir="$optarg"
811 ;;
812 --datadir=*) datadir="$optarg"
813 ;;
814 --with-confsuffix=*) confsuffix="$optarg"
815 ;;
816 --docdir=*) qemu_docdir="$optarg"
817 ;;
818 --sysconfdir=*) sysconfdir="$optarg"
819 ;;
820 --localstatedir=*) local_statedir="$optarg"
821 ;;
822 --sbindir=*|--sharedstatedir=*|\
823 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
824 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
825 # These switches are silently ignored, for compatibility with
826 # autoconf-generated configure scripts. This allows QEMU's
827 # configure to be used by RPM and similar macros that set
828 # lots of directory switches by default.
829 ;;
830 --with-system-pixman) pixman="system"
831 ;;
832 --without-system-pixman) pixman="internal"
833 ;;
834 --without-pixman) pixman="none"
835 ;;
836 --disable-sdl) sdl="no"
837 ;;
838 --enable-sdl) sdl="yes"
839 ;;
840 --with-sdlabi=*) sdlabi="$optarg"
841 ;;
842 --disable-qom-cast-debug) qom_cast_debug="no"
843 ;;
844 --enable-qom-cast-debug) qom_cast_debug="yes"
845 ;;
846 --disable-virtfs) virtfs="no"
847 ;;
848 --enable-virtfs) virtfs="yes"
849 ;;
850 --disable-vnc) vnc="no"
851 ;;
852 --enable-vnc) vnc="yes"
853 ;;
854 --oss-lib=*) oss_lib="$optarg"
855 ;;
856 --audio-drv-list=*) audio_drv_list="$optarg"
857 ;;
858 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
859 ;;
860 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
861 ;;
862 --enable-debug-tcg) debug_tcg="yes"
863 ;;
864 --disable-debug-tcg) debug_tcg="no"
865 ;;
866 --enable-debug)
867 # Enable debugging options that aren't excessively noisy
868 debug_tcg="yes"
869 debug="yes"
870 strip_opt="no"
871 fortify_source="no"
872 ;;
873 --enable-sparse) sparse="yes"
874 ;;
875 --disable-sparse) sparse="no"
876 ;;
877 --disable-strip) strip_opt="no"
878 ;;
879 --disable-vnc-sasl) vnc_sasl="no"
880 ;;
881 --enable-vnc-sasl) vnc_sasl="yes"
882 ;;
883 --disable-vnc-jpeg) vnc_jpeg="no"
884 ;;
885 --enable-vnc-jpeg) vnc_jpeg="yes"
886 ;;
887 --disable-vnc-png) vnc_png="no"
888 ;;
889 --enable-vnc-png) vnc_png="yes"
890 ;;
891 --disable-slirp) slirp="no"
892 ;;
893 --disable-vde) vde="no"
894 ;;
895 --enable-vde) vde="yes"
896 ;;
897 --disable-netmap) netmap="no"
898 ;;
899 --enable-netmap) netmap="yes"
900 ;;
901 --disable-xen) xen="no"
902 ;;
903 --enable-xen) xen="yes"
904 ;;
905 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
906 ;;
907 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
908 ;;
909 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
910 ;;
911 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
912 ;;
913 --disable-brlapi) brlapi="no"
914 ;;
915 --enable-brlapi) brlapi="yes"
916 ;;
917 --disable-bluez) bluez="no"
918 ;;
919 --enable-bluez) bluez="yes"
920 ;;
921 --disable-kvm) kvm="no"
922 ;;
923 --enable-kvm) kvm="yes"
924 ;;
925 --disable-colo) colo="no"
926 ;;
927 --enable-colo) colo="yes"
928 ;;
929 --disable-tcg-interpreter) tcg_interpreter="no"
930 ;;
931 --enable-tcg-interpreter) tcg_interpreter="yes"
932 ;;
933 --disable-cap-ng) cap_ng="no"
934 ;;
935 --enable-cap-ng) cap_ng="yes"
936 ;;
937 --disable-spice) spice="no"
938 ;;
939 --enable-spice) spice="yes"
940 ;;
941 --disable-libiscsi) libiscsi="no"
942 ;;
943 --enable-libiscsi) libiscsi="yes"
944 ;;
945 --disable-libnfs) libnfs="no"
946 ;;
947 --enable-libnfs) libnfs="yes"
948 ;;
949 --enable-profiler) profiler="yes"
950 ;;
951 --disable-cocoa) cocoa="no"
952 ;;
953 --enable-cocoa)
954 cocoa="yes" ;
955 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
956 ;;
957 --disable-system) softmmu="no"
958 ;;
959 --enable-system) softmmu="yes"
960 ;;
961 --disable-user)
962 linux_user="no" ;
963 bsd_user="no" ;
964 ;;
965 --enable-user) ;;
966 --disable-linux-user) linux_user="no"
967 ;;
968 --enable-linux-user) linux_user="yes"
969 ;;
970 --disable-bsd-user) bsd_user="no"
971 ;;
972 --enable-bsd-user) bsd_user="yes"
973 ;;
974 --enable-pie) pie="yes"
975 ;;
976 --disable-pie) pie="no"
977 ;;
978 --enable-werror) werror="yes"
979 ;;
980 --disable-werror) werror="no"
981 ;;
982 --enable-stack-protector) stack_protector="yes"
983 ;;
984 --disable-stack-protector) stack_protector="no"
985 ;;
986 --disable-curses) curses="no"
987 ;;
988 --enable-curses) curses="yes"
989 ;;
990 --disable-curl) curl="no"
991 ;;
992 --enable-curl) curl="yes"
993 ;;
994 --disable-fdt) fdt="no"
995 ;;
996 --enable-fdt) fdt="yes"
997 ;;
998 --disable-linux-aio) linux_aio="no"
999 ;;
1000 --enable-linux-aio) linux_aio="yes"
1001 ;;
1002 --disable-attr) attr="no"
1003 ;;
1004 --enable-attr) attr="yes"
1005 ;;
1006 --disable-blobs) blobs="no"
1007 ;;
1008 --with-pkgversion=*) pkgversion=" ($optarg)"
1009 ;;
1010 --with-coroutine=*) coroutine="$optarg"
1011 ;;
1012 --disable-coroutine-pool) coroutine_pool="no"
1013 ;;
1014 --enable-coroutine-pool) coroutine_pool="yes"
1015 ;;
1016 --enable-debug-stack-usage) debug_stack_usage="yes"
1017 ;;
1018 --disable-docs) docs="no"
1019 ;;
1020 --enable-docs) docs="yes"
1021 ;;
1022 --disable-vhost-net) vhost_net="no"
1023 ;;
1024 --enable-vhost-net) vhost_net="yes"
1025 ;;
1026 --disable-vhost-scsi) vhost_scsi="no"
1027 ;;
1028 --enable-vhost-scsi) vhost_scsi="yes"
1029 ;;
1030 --disable-vhost-vsock) vhost_vsock="no"
1031 ;;
1032 --enable-vhost-vsock) vhost_vsock="yes"
1033 ;;
1034 --disable-opengl) opengl="no"
1035 ;;
1036 --enable-opengl) opengl="yes"
1037 ;;
1038 --disable-rbd) rbd="no"
1039 ;;
1040 --enable-rbd) rbd="yes"
1041 ;;
1042 --disable-xfsctl) xfs="no"
1043 ;;
1044 --enable-xfsctl) xfs="yes"
1045 ;;
1046 --disable-smartcard) smartcard="no"
1047 ;;
1048 --enable-smartcard) smartcard="yes"
1049 ;;
1050 --disable-libusb) libusb="no"
1051 ;;
1052 --enable-libusb) libusb="yes"
1053 ;;
1054 --disable-usb-redir) usb_redir="no"
1055 ;;
1056 --enable-usb-redir) usb_redir="yes"
1057 ;;
1058 --disable-zlib-test) zlib="no"
1059 ;;
1060 --disable-lzo) lzo="no"
1061 ;;
1062 --enable-lzo) lzo="yes"
1063 ;;
1064 --disable-snappy) snappy="no"
1065 ;;
1066 --enable-snappy) snappy="yes"
1067 ;;
1068 --disable-bzip2) bzip2="no"
1069 ;;
1070 --enable-bzip2) bzip2="yes"
1071 ;;
1072 --enable-guest-agent) guest_agent="yes"
1073 ;;
1074 --disable-guest-agent) guest_agent="no"
1075 ;;
1076 --enable-guest-agent-msi) guest_agent_msi="yes"
1077 ;;
1078 --disable-guest-agent-msi) guest_agent_msi="no"
1079 ;;
1080 --with-vss-sdk) vss_win32_sdk=""
1081 ;;
1082 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1083 ;;
1084 --without-vss-sdk) vss_win32_sdk="no"
1085 ;;
1086 --with-win-sdk) win_sdk=""
1087 ;;
1088 --with-win-sdk=*) win_sdk="$optarg"
1089 ;;
1090 --without-win-sdk) win_sdk="no"
1091 ;;
1092 --enable-tools) want_tools="yes"
1093 ;;
1094 --disable-tools) want_tools="no"
1095 ;;
1096 --enable-seccomp) seccomp="yes"
1097 ;;
1098 --disable-seccomp) seccomp="no"
1099 ;;
1100 --disable-glusterfs) glusterfs="no"
1101 ;;
1102 --enable-glusterfs) glusterfs="yes"
1103 ;;
1104 --disable-archipelago) archipelago="no"
1105 ;;
1106 --enable-archipelago) archipelago="yes"
1107 ;;
1108 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1109 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1110 ;;
1111 --enable-vhdx|--disable-vhdx)
1112 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1113 ;;
1114 --enable-uuid|--disable-uuid)
1115 echo "$0: $opt is obsolete, UUID support is always built" >&2
1116 ;;
1117 --disable-gtk) gtk="no"
1118 ;;
1119 --enable-gtk) gtk="yes"
1120 ;;
1121 --tls-priority=*) tls_priority="$optarg"
1122 ;;
1123 --disable-gnutls) gnutls="no"
1124 ;;
1125 --enable-gnutls) gnutls="yes"
1126 ;;
1127 --disable-nettle) nettle="no"
1128 ;;
1129 --enable-nettle) nettle="yes"
1130 ;;
1131 --disable-gcrypt) gcrypt="no"
1132 ;;
1133 --enable-gcrypt) gcrypt="yes"
1134 ;;
1135 --enable-rdma) rdma="yes"
1136 ;;
1137 --disable-rdma) rdma="no"
1138 ;;
1139 --with-gtkabi=*) gtkabi="$optarg"
1140 ;;
1141 --disable-vte) vte="no"
1142 ;;
1143 --enable-vte) vte="yes"
1144 ;;
1145 --disable-virglrenderer) virglrenderer="no"
1146 ;;
1147 --enable-virglrenderer) virglrenderer="yes"
1148 ;;
1149 --disable-tpm) tpm="no"
1150 ;;
1151 --enable-tpm) tpm="yes"
1152 ;;
1153 --disable-libssh2) libssh2="no"
1154 ;;
1155 --enable-libssh2) libssh2="yes"
1156 ;;
1157 --disable-numa) numa="no"
1158 ;;
1159 --enable-numa) numa="yes"
1160 ;;
1161 --disable-tcmalloc) tcmalloc="no"
1162 ;;
1163 --enable-tcmalloc) tcmalloc="yes"
1164 ;;
1165 --disable-jemalloc) jemalloc="no"
1166 ;;
1167 --enable-jemalloc) jemalloc="yes"
1168 ;;
1169 --disable-replication) replication="no"
1170 ;;
1171 --enable-replication) replication="yes"
1172 ;;
1173 *)
1174 echo "ERROR: unknown option $opt"
1175 echo "Try '$0 --help' for more information"
1176 exit 1
1177 ;;
1178 esac
1179 done
1180
1181 if ! has $python; then
1182 error_exit "Python not found. Use --python=/path/to/python"
1183 fi
1184
1185 # Note that if the Python conditional here evaluates True we will exit
1186 # with status 1 which is a shell 'false' value.
1187 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1188 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1189 "Note that Python 3 or later is not yet supported." \
1190 "Use --python=/path/to/python to specify a supported Python."
1191 fi
1192
1193 # Suppress writing compiled files
1194 python="$python -B"
1195
1196 case "$cpu" in
1197 ppc)
1198 CPU_CFLAGS="-m32"
1199 LDFLAGS="-m32 $LDFLAGS"
1200 ;;
1201 ppc64)
1202 CPU_CFLAGS="-m64"
1203 LDFLAGS="-m64 $LDFLAGS"
1204 ;;
1205 sparc)
1206 LDFLAGS="-m32 $LDFLAGS"
1207 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1208 ;;
1209 sparc64)
1210 LDFLAGS="-m64 $LDFLAGS"
1211 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1212 ;;
1213 s390)
1214 CPU_CFLAGS="-m31"
1215 LDFLAGS="-m31 $LDFLAGS"
1216 ;;
1217 s390x)
1218 CPU_CFLAGS="-m64"
1219 LDFLAGS="-m64 $LDFLAGS"
1220 ;;
1221 i386)
1222 CPU_CFLAGS="-m32"
1223 LDFLAGS="-m32 $LDFLAGS"
1224 cc_i386='$(CC) -m32'
1225 ;;
1226 x86_64)
1227 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1228 # If we truly care, we should simply detect this case at
1229 # runtime and generate the fallback to serial emulation.
1230 CPU_CFLAGS="-m64 -mcx16"
1231 LDFLAGS="-m64 $LDFLAGS"
1232 cc_i386='$(CC) -m32'
1233 ;;
1234 x32)
1235 CPU_CFLAGS="-mx32"
1236 LDFLAGS="-mx32 $LDFLAGS"
1237 cc_i386='$(CC) -m32'
1238 ;;
1239 # No special flags required for other host CPUs
1240 esac
1241
1242 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1243 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1244
1245 # For user-mode emulation the host arch has to be one we explicitly
1246 # support, even if we're using TCI.
1247 if [ "$ARCH" = "unknown" ]; then
1248 bsd_user="no"
1249 linux_user="no"
1250 fi
1251
1252 default_target_list=""
1253
1254 mak_wilds=""
1255
1256 if [ "$softmmu" = "yes" ]; then
1257 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1258 fi
1259 if [ "$linux_user" = "yes" ]; then
1260 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1261 fi
1262 if [ "$bsd_user" = "yes" ]; then
1263 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1264 fi
1265
1266 for config in $mak_wilds; do
1267 default_target_list="${default_target_list} $(basename "$config" .mak)"
1268 done
1269
1270 if test x"$show_help" = x"yes" ; then
1271 cat << EOF
1272
1273 Usage: configure [options]
1274 Options: [defaults in brackets after descriptions]
1275
1276 Standard options:
1277 --help print this message
1278 --prefix=PREFIX install in PREFIX [$prefix]
1279 --interp-prefix=PREFIX where to find shared libraries, etc.
1280 use %M for cpu name [$interp_prefix]
1281 --target-list=LIST set target list (default: build everything)
1282 $(echo Available targets: $default_target_list | \
1283 fold -s -w 53 | sed -e 's/^/ /')
1284
1285 Advanced options (experts only):
1286 --source-path=PATH path of source code [$source_path]
1287 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1288 --cc=CC use C compiler CC [$cc]
1289 --iasl=IASL use ACPI compiler IASL [$iasl]
1290 --host-cc=CC use C compiler CC [$host_cc] for code run at
1291 build time
1292 --cxx=CXX use C++ compiler CXX [$cxx]
1293 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1294 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1295 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1296 --make=MAKE use specified make [$make]
1297 --install=INSTALL use specified install [$install]
1298 --python=PYTHON use specified python [$python]
1299 --smbd=SMBD use specified smbd [$smbd]
1300 --static enable static build [$static]
1301 --mandir=PATH install man pages in PATH
1302 --datadir=PATH install firmware in PATH$confsuffix
1303 --docdir=PATH install documentation in PATH$confsuffix
1304 --bindir=PATH install binaries in PATH
1305 --libdir=PATH install libraries in PATH
1306 --sysconfdir=PATH install config in PATH$confsuffix
1307 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1308 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1309 --enable-debug enable common debug build options
1310 --disable-strip disable stripping binaries
1311 --disable-werror disable compilation abort on warning
1312 --disable-stack-protector disable compiler-provided stack protection
1313 --audio-drv-list=LIST set audio drivers list:
1314 Available drivers: $audio_possible_drivers
1315 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1316 --block-drv-rw-whitelist=L
1317 set block driver read-write whitelist
1318 (affects only QEMU, not qemu-img)
1319 --block-drv-ro-whitelist=L
1320 set block driver read-only whitelist
1321 (affects only QEMU, not qemu-img)
1322 --enable-trace-backends=B Set trace backend
1323 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1324 --with-trace-file=NAME Full PATH,NAME of file to store traces
1325 Default:trace-<pid>
1326 --disable-slirp disable SLIRP userspace network connectivity
1327 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1328 --oss-lib path to OSS library
1329 --cpu=CPU Build for host CPU [$cpu]
1330 --with-coroutine=BACKEND coroutine backend. Supported options:
1331 gthread, ucontext, sigaltstack, windows
1332 --enable-gcov enable test coverage analysis with gcov
1333 --gcov=GCOV use specified gcov [$gcov_tool]
1334 --disable-blobs disable installing provided firmware blobs
1335 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1336 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1337 --tls-priority default TLS protocol/cipher priority string
1338
1339 Optional features, enabled with --enable-FEATURE and
1340 disabled with --disable-FEATURE, default is enabled if available:
1341
1342 system all system emulation targets
1343 user supported user emulation targets
1344 linux-user all linux usermode emulation targets
1345 bsd-user all BSD usermode emulation targets
1346 docs build documentation
1347 guest-agent build the QEMU Guest Agent
1348 guest-agent-msi build guest agent Windows MSI installation package
1349 pie Position Independent Executables
1350 modules modules support
1351 debug-tcg TCG debugging (default is disabled)
1352 debug-info debugging information
1353 sparse sparse checker
1354
1355 gnutls GNUTLS cryptography support
1356 nettle nettle cryptography support
1357 gcrypt libgcrypt cryptography support
1358 sdl SDL UI
1359 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1360 gtk gtk UI
1361 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1362 vte vte support for the gtk UI
1363 curses curses UI
1364 vnc VNC UI support
1365 vnc-sasl SASL encryption for VNC server
1366 vnc-jpeg JPEG lossy compression for VNC server
1367 vnc-png PNG compression for VNC server
1368 cocoa Cocoa UI (Mac OS X only)
1369 virtfs VirtFS
1370 xen xen backend driver support
1371 xen-pci-passthrough
1372 brlapi BrlAPI (Braile)
1373 curl curl connectivity
1374 fdt fdt device tree
1375 bluez bluez stack connectivity
1376 kvm KVM acceleration support
1377 colo COarse-grain LOck-stepping VM for Non-stop Service
1378 rdma RDMA-based migration support
1379 vde support for vde network
1380 netmap support for netmap network
1381 linux-aio Linux AIO support
1382 cap-ng libcap-ng support
1383 attr attr and xattr support
1384 vhost-net vhost-net acceleration support
1385 spice spice
1386 rbd rados block device (rbd)
1387 libiscsi iscsi support
1388 libnfs nfs support
1389 smartcard smartcard support (libcacard)
1390 libusb libusb (for usb passthrough)
1391 usb-redir usb network redirection support
1392 lzo support of lzo compression library
1393 snappy support of snappy compression library
1394 bzip2 support of bzip2 compression library
1395 (for reading bzip2-compressed dmg images)
1396 seccomp seccomp support
1397 coroutine-pool coroutine freelist (better performance)
1398 glusterfs GlusterFS backend
1399 archipelago Archipelago backend
1400 tpm TPM support
1401 libssh2 ssh block device support
1402 numa libnuma support
1403 tcmalloc tcmalloc support
1404 jemalloc jemalloc support
1405 replication replication support
1406
1407 NOTE: The object files are built at the place where configure is launched
1408 EOF
1409 exit 0
1410 fi
1411
1412 # Now we have handled --enable-tcg-interpreter and know we're not just
1413 # printing the help message, bail out if the host CPU isn't supported.
1414 if test "$ARCH" = "unknown"; then
1415 if test "$tcg_interpreter" = "yes" ; then
1416 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1417 else
1418 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1419 fi
1420 fi
1421
1422 # Consult white-list to determine whether to enable werror
1423 # by default. Only enable by default for git builds
1424 if test -z "$werror" ; then
1425 if test -d "$source_path/.git" -a \
1426 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1427 werror="yes"
1428 else
1429 werror="no"
1430 fi
1431 fi
1432
1433 # check that the C compiler works.
1434 write_c_skeleton;
1435 if compile_object ; then
1436 : C compiler works ok
1437 else
1438 error_exit "\"$cc\" either does not exist or does not work"
1439 fi
1440 if ! compile_prog ; then
1441 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1442 fi
1443
1444 # Check that the C++ compiler exists and works with the C compiler
1445 if has $cxx; then
1446 cat > $TMPC <<EOF
1447 int c_function(void);
1448 int main(void) { return c_function(); }
1449 EOF
1450
1451 compile_object
1452
1453 cat > $TMPCXX <<EOF
1454 extern "C" {
1455 int c_function(void);
1456 }
1457 int c_function(void) { return 42; }
1458 EOF
1459
1460 update_cxxflags
1461
1462 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1463 # C++ compiler $cxx works ok with C compiler $cc
1464 :
1465 else
1466 echo "C++ compiler $cxx does not work with C compiler $cc"
1467 echo "Disabling C++ specific optional code"
1468 cxx=
1469 fi
1470 else
1471 echo "No C++ compiler available; disabling C++ specific optional code"
1472 cxx=
1473 fi
1474
1475 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1476 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1477 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1478 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1479 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1480 gcc_flags="-Wno-string-plus-int $gcc_flags"
1481 # Note that we do not add -Werror to gcc_flags here, because that would
1482 # enable it for all configure tests. If a configure test failed due
1483 # to -Werror this would just silently disable some features,
1484 # so it's too error prone.
1485
1486 cc_has_warning_flag() {
1487 write_c_skeleton;
1488
1489 # Use the positive sense of the flag when testing for -Wno-wombat
1490 # support (gcc will happily accept the -Wno- form of unknown
1491 # warning options).
1492 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1493 compile_prog "-Werror $optflag" ""
1494 }
1495
1496 for flag in $gcc_flags; do
1497 if cc_has_warning_flag $flag ; then
1498 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1499 fi
1500 done
1501
1502 if test "$stack_protector" != "no"; then
1503 cat > $TMPC << EOF
1504 int main(int argc, char *argv[])
1505 {
1506 char arr[64], *p = arr, *c = argv[0];
1507 while (*c) {
1508 *p++ = *c++;
1509 }
1510 return 0;
1511 }
1512 EOF
1513 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1514 sp_on=0
1515 for flag in $gcc_flags; do
1516 # We need to check both a compile and a link, since some compiler
1517 # setups fail only on a .c->.o compile and some only at link time
1518 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1519 compile_prog "-Werror $flag" ""; then
1520 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1521 sp_on=1
1522 break
1523 fi
1524 done
1525 if test "$stack_protector" = yes; then
1526 if test $sp_on = 0; then
1527 error_exit "Stack protector not supported"
1528 fi
1529 fi
1530 fi
1531
1532 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1533 # large functions that use global variables. The bug is in all releases of
1534 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1535 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1536 cat > $TMPC << EOF
1537 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1538 int main(void) { return 0; }
1539 #else
1540 #error No bug in this compiler.
1541 #endif
1542 EOF
1543 if compile_prog "-Werror -fno-gcse" "" ; then
1544 TRANSLATE_OPT_CFLAGS=-fno-gcse
1545 fi
1546
1547 if test "$static" = "yes" ; then
1548 if test "$modules" = "yes" ; then
1549 error_exit "static and modules are mutually incompatible"
1550 fi
1551 if test "$pie" = "yes" ; then
1552 error_exit "static and pie are mutually incompatible"
1553 else
1554 pie="no"
1555 fi
1556 fi
1557
1558 # Unconditional check for compiler __thread support
1559 cat > $TMPC << EOF
1560 static __thread int tls_var;
1561 int main(void) { return tls_var; }
1562 EOF
1563
1564 if ! compile_prog "-Werror" "" ; then
1565 error_exit "Your compiler does not support the __thread specifier for " \
1566 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1567 fi
1568
1569 if test "$pie" = ""; then
1570 case "$cpu-$targetos" in
1571 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1572 ;;
1573 *)
1574 pie="no"
1575 ;;
1576 esac
1577 fi
1578
1579 if test "$pie" != "no" ; then
1580 cat > $TMPC << EOF
1581
1582 #ifdef __linux__
1583 # define THREAD __thread
1584 #else
1585 # define THREAD
1586 #endif
1587
1588 static THREAD int tls_var;
1589
1590 int main(void) { return tls_var; }
1591
1592 EOF
1593 if compile_prog "-fPIE -DPIE" "-pie"; then
1594 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1595 LDFLAGS="-pie $LDFLAGS"
1596 pie="yes"
1597 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1598 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1599 fi
1600 else
1601 if test "$pie" = "yes"; then
1602 error_exit "PIE not available due to missing toolchain support"
1603 else
1604 echo "Disabling PIE due to missing toolchain support"
1605 pie="no"
1606 fi
1607 fi
1608
1609 if compile_prog "-Werror -fno-pie" "-nopie"; then
1610 CFLAGS_NOPIE="-fno-pie"
1611 LDFLAGS_NOPIE="-nopie"
1612 fi
1613 fi
1614
1615 ##########################################
1616 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1617 # use i686 as default anyway, but for those that don't, an explicit
1618 # specification is necessary
1619
1620 if test "$cpu" = "i386"; then
1621 cat > $TMPC << EOF
1622 static int sfaa(int *ptr)
1623 {
1624 return __sync_fetch_and_and(ptr, 0);
1625 }
1626
1627 int main(void)
1628 {
1629 int val = 42;
1630 val = __sync_val_compare_and_swap(&val, 0, 1);
1631 sfaa(&val);
1632 return val;
1633 }
1634 EOF
1635 if ! compile_prog "" "" ; then
1636 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1637 fi
1638 fi
1639
1640 #########################################
1641 # Solaris specific configure tool chain decisions
1642
1643 if test "$solaris" = "yes" ; then
1644 if has $install; then
1645 :
1646 else
1647 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1648 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1649 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1650 fi
1651 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1652 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1653 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1654 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1655 fi
1656 if has ar; then
1657 :
1658 else
1659 if test -f /usr/ccs/bin/ar ; then
1660 error_exit "No path includes ar" \
1661 "Add /usr/ccs/bin to your path and rerun configure"
1662 fi
1663 error_exit "No path includes ar"
1664 fi
1665 fi
1666
1667 if test -z "${target_list+xxx}" ; then
1668 target_list="$default_target_list"
1669 else
1670 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1671 fi
1672
1673 # Check that we recognised the target name; this allows a more
1674 # friendly error message than if we let it fall through.
1675 for target in $target_list; do
1676 case " $default_target_list " in
1677 *" $target "*)
1678 ;;
1679 *)
1680 error_exit "Unknown target name '$target'"
1681 ;;
1682 esac
1683 done
1684
1685 # see if system emulation was really requested
1686 case " $target_list " in
1687 *"-softmmu "*) softmmu=yes
1688 ;;
1689 *) softmmu=no
1690 ;;
1691 esac
1692
1693 feature_not_found() {
1694 feature=$1
1695 remedy=$2
1696
1697 error_exit "User requested feature $feature" \
1698 "configure was not able to find it." \
1699 "$remedy"
1700 }
1701
1702 # ---
1703 # big/little endian test
1704 cat > $TMPC << EOF
1705 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1706 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1707 extern int foo(short *, short *);
1708 int main(int argc, char *argv[]) {
1709 return foo(big_endian, little_endian);
1710 }
1711 EOF
1712
1713 if compile_object ; then
1714 if grep -q BiGeNdIaN $TMPO ; then
1715 bigendian="yes"
1716 elif grep -q LiTtLeEnDiAn $TMPO ; then
1717 bigendian="no"
1718 else
1719 echo big/little test failed
1720 fi
1721 else
1722 echo big/little test failed
1723 fi
1724
1725 ##########################################
1726 # cocoa implies not SDL or GTK
1727 # (the cocoa UI code currently assumes it is always the active UI
1728 # and doesn't interact well with other UI frontend code)
1729 if test "$cocoa" = "yes"; then
1730 if test "$sdl" = "yes"; then
1731 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1732 fi
1733 if test "$gtk" = "yes"; then
1734 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1735 fi
1736 gtk=no
1737 sdl=no
1738 fi
1739
1740 # Some versions of Mac OS X incorrectly define SIZE_MAX
1741 cat > $TMPC << EOF
1742 #include <stdint.h>
1743 #include <stdio.h>
1744 int main(int argc, char *argv[]) {
1745 return printf("%zu", SIZE_MAX);
1746 }
1747 EOF
1748 have_broken_size_max=no
1749 if ! compile_object -Werror ; then
1750 have_broken_size_max=yes
1751 fi
1752
1753 ##########################################
1754 # L2TPV3 probe
1755
1756 cat > $TMPC <<EOF
1757 #include <sys/socket.h>
1758 #include <linux/ip.h>
1759 int main(void) { return sizeof(struct mmsghdr); }
1760 EOF
1761 if compile_prog "" "" ; then
1762 l2tpv3=yes
1763 else
1764 l2tpv3=no
1765 fi
1766
1767 ##########################################
1768 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1769
1770 if test "$mingw32" = "yes"; then
1771 # Some versions of MinGW / Mingw-w64 lack localtime_r
1772 # and gmtime_r entirely.
1773 #
1774 # Some versions of Mingw-w64 define a macro for
1775 # localtime_r/gmtime_r.
1776 #
1777 # Some versions of Mingw-w64 will define functions
1778 # for localtime_r/gmtime_r, but only if you have
1779 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1780 # though, unistd.h and pthread.h both define
1781 # that for you.
1782 #
1783 # So this #undef localtime_r and #include <unistd.h>
1784 # are not in fact redundant.
1785 cat > $TMPC << EOF
1786 #include <unistd.h>
1787 #include <time.h>
1788 #undef localtime_r
1789 int main(void) { localtime_r(NULL, NULL); return 0; }
1790 EOF
1791 if compile_prog "" "" ; then
1792 localtime_r="yes"
1793 else
1794 localtime_r="no"
1795 fi
1796 fi
1797
1798 ##########################################
1799 # pkg-config probe
1800
1801 if ! has "$pkg_config_exe"; then
1802 error_exit "pkg-config binary '$pkg_config_exe' not found"
1803 fi
1804
1805 ##########################################
1806 # NPTL probe
1807
1808 if test "$linux_user" = "yes"; then
1809 cat > $TMPC <<EOF
1810 #include <sched.h>
1811 #include <linux/futex.h>
1812 int main(void) {
1813 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1814 #error bork
1815 #endif
1816 return 0;
1817 }
1818 EOF
1819 if ! compile_object ; then
1820 feature_not_found "nptl" "Install glibc and linux kernel headers."
1821 fi
1822 fi
1823
1824 ##########################################
1825 # avx2 optimization requirement check
1826
1827 cat > $TMPC << EOF
1828 #pragma GCC push_options
1829 #pragma GCC target("avx2")
1830 #include <cpuid.h>
1831 #include <immintrin.h>
1832 static int bar(void *a) {
1833 __m256i x = *(__m256i *)a;
1834 return _mm256_testz_si256(x, x);
1835 }
1836 int main(int argc, char *argv[]) { return bar(argv[0]); }
1837 EOF
1838 if compile_object "" ; then
1839 avx2_opt="yes"
1840 fi
1841
1842 #########################################
1843 # zlib check
1844
1845 if test "$zlib" != "no" ; then
1846 cat > $TMPC << EOF
1847 #include <zlib.h>
1848 int main(void) { zlibVersion(); return 0; }
1849 EOF
1850 if compile_prog "" "-lz" ; then
1851 :
1852 else
1853 error_exit "zlib check failed" \
1854 "Make sure to have the zlib libs and headers installed."
1855 fi
1856 fi
1857 LIBS="$LIBS -lz"
1858
1859 ##########################################
1860 # lzo check
1861
1862 if test "$lzo" != "no" ; then
1863 cat > $TMPC << EOF
1864 #include <lzo/lzo1x.h>
1865 int main(void) { lzo_version(); return 0; }
1866 EOF
1867 if compile_prog "" "-llzo2" ; then
1868 libs_softmmu="$libs_softmmu -llzo2"
1869 lzo="yes"
1870 else
1871 if test "$lzo" = "yes"; then
1872 feature_not_found "liblzo2" "Install liblzo2 devel"
1873 fi
1874 lzo="no"
1875 fi
1876 fi
1877
1878 ##########################################
1879 # snappy check
1880
1881 if test "$snappy" != "no" ; then
1882 cat > $TMPC << EOF
1883 #include <snappy-c.h>
1884 int main(void) { snappy_max_compressed_length(4096); return 0; }
1885 EOF
1886 if compile_prog "" "-lsnappy" ; then
1887 libs_softmmu="$libs_softmmu -lsnappy"
1888 snappy="yes"
1889 else
1890 if test "$snappy" = "yes"; then
1891 feature_not_found "libsnappy" "Install libsnappy devel"
1892 fi
1893 snappy="no"
1894 fi
1895 fi
1896
1897 ##########################################
1898 # bzip2 check
1899
1900 if test "$bzip2" != "no" ; then
1901 cat > $TMPC << EOF
1902 #include <bzlib.h>
1903 int main(void) { BZ2_bzlibVersion(); return 0; }
1904 EOF
1905 if compile_prog "" "-lbz2" ; then
1906 bzip2="yes"
1907 else
1908 if test "$bzip2" = "yes"; then
1909 feature_not_found "libbzip2" "Install libbzip2 devel"
1910 fi
1911 bzip2="no"
1912 fi
1913 fi
1914
1915 ##########################################
1916 # libseccomp check
1917
1918 if test "$seccomp" != "no" ; then
1919 case "$cpu" in
1920 i386|x86_64)
1921 libseccomp_minver="2.1.0"
1922 ;;
1923 mips)
1924 libseccomp_minver="2.2.0"
1925 ;;
1926 arm|aarch64)
1927 libseccomp_minver="2.2.3"
1928 ;;
1929 ppc|ppc64)
1930 libseccomp_minver="2.3.0"
1931 ;;
1932 *)
1933 libseccomp_minver=""
1934 ;;
1935 esac
1936
1937 if test "$libseccomp_minver" != "" &&
1938 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
1939 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1940 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
1941 seccomp="yes"
1942 else
1943 if test "$seccomp" = "yes" ; then
1944 if test "$libseccomp_minver" != "" ; then
1945 feature_not_found "libseccomp" \
1946 "Install libseccomp devel >= $libseccomp_minver"
1947 else
1948 feature_not_found "libseccomp" \
1949 "libseccomp is not supported for host cpu $cpu"
1950 fi
1951 fi
1952 seccomp="no"
1953 fi
1954 fi
1955 ##########################################
1956 # xen probe
1957
1958 if test "$xen" != "no" ; then
1959 xen_libs="-lxenstore -lxenctrl -lxenguest"
1960 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1961
1962 # First we test whether Xen headers and libraries are available.
1963 # If no, we are done and there is no Xen support.
1964 # If yes, more tests are run to detect the Xen version.
1965
1966 # Xen (any)
1967 cat > $TMPC <<EOF
1968 #include <xenctrl.h>
1969 int main(void) {
1970 return 0;
1971 }
1972 EOF
1973 if ! compile_prog "" "$xen_libs" ; then
1974 # Xen not found
1975 if test "$xen" = "yes" ; then
1976 feature_not_found "xen" "Install xen devel"
1977 fi
1978 xen=no
1979
1980 # Xen unstable
1981 elif
1982 cat > $TMPC <<EOF &&
1983 /*
1984 * If we have stable libs the we don't want the libxc compat
1985 * layers, regardless of what CFLAGS we may have been given.
1986 *
1987 * Also, check if xengnttab_grant_copy_segment_t is defined and
1988 * grant copy operation is implemented.
1989 */
1990 #undef XC_WANT_COMPAT_EVTCHN_API
1991 #undef XC_WANT_COMPAT_GNTTAB_API
1992 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
1993 #include <xenctrl.h>
1994 #include <xenstore.h>
1995 #include <xenevtchn.h>
1996 #include <xengnttab.h>
1997 #include <xenforeignmemory.h>
1998 #include <stdint.h>
1999 #include <xen/hvm/hvm_info_table.h>
2000 #if !defined(HVM_MAX_VCPUS)
2001 # error HVM_MAX_VCPUS not defined
2002 #endif
2003 int main(void) {
2004 xc_interface *xc = NULL;
2005 xenforeignmemory_handle *xfmem;
2006 xenevtchn_handle *xe;
2007 xengnttab_handle *xg;
2008 xen_domain_handle_t handle;
2009 xengnttab_grant_copy_segment_t* seg = NULL;
2010
2011 xs_daemon_open();
2012
2013 xc = xc_interface_open(0, 0, 0);
2014 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2015 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2016 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2017 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2018 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2019
2020 xfmem = xenforeignmemory_open(0, 0);
2021 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2022
2023 xe = xenevtchn_open(0, 0);
2024 xenevtchn_fd(xe);
2025
2026 xg = xengnttab_open(0, 0);
2027 xengnttab_grant_copy(xg, 0, seg);
2028
2029 return 0;
2030 }
2031 EOF
2032 compile_prog "" "$xen_libs $xen_stable_libs"
2033 then
2034 xen_ctrl_version=480
2035 xen=yes
2036 elif
2037 cat > $TMPC <<EOF &&
2038 /*
2039 * If we have stable libs the we don't want the libxc compat
2040 * layers, regardless of what CFLAGS we may have been given.
2041 */
2042 #undef XC_WANT_COMPAT_EVTCHN_API
2043 #undef XC_WANT_COMPAT_GNTTAB_API
2044 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2045 #include <xenctrl.h>
2046 #include <xenstore.h>
2047 #include <xenevtchn.h>
2048 #include <xengnttab.h>
2049 #include <xenforeignmemory.h>
2050 #include <stdint.h>
2051 #include <xen/hvm/hvm_info_table.h>
2052 #if !defined(HVM_MAX_VCPUS)
2053 # error HVM_MAX_VCPUS not defined
2054 #endif
2055 int main(void) {
2056 xc_interface *xc = NULL;
2057 xenforeignmemory_handle *xfmem;
2058 xenevtchn_handle *xe;
2059 xengnttab_handle *xg;
2060 xen_domain_handle_t handle;
2061
2062 xs_daemon_open();
2063
2064 xc = xc_interface_open(0, 0, 0);
2065 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2066 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2067 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2068 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2069 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2070
2071 xfmem = xenforeignmemory_open(0, 0);
2072 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2073
2074 xe = xenevtchn_open(0, 0);
2075 xenevtchn_fd(xe);
2076
2077 xg = xengnttab_open(0, 0);
2078 xengnttab_map_grant_ref(xg, 0, 0, 0);
2079
2080 return 0;
2081 }
2082 EOF
2083 compile_prog "" "$xen_libs $xen_stable_libs"
2084 then
2085 xen_ctrl_version=471
2086 xen=yes
2087 elif
2088 cat > $TMPC <<EOF &&
2089 #include <xenctrl.h>
2090 #include <stdint.h>
2091 int main(void) {
2092 xc_interface *xc = NULL;
2093 xen_domain_handle_t handle;
2094 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2095 return 0;
2096 }
2097 EOF
2098 compile_prog "" "$xen_libs"
2099 then
2100 xen_ctrl_version=470
2101 xen=yes
2102
2103 # Xen 4.6
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 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2122 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2123 return 0;
2124 }
2125 EOF
2126 compile_prog "" "$xen_libs"
2127 then
2128 xen_ctrl_version=460
2129 xen=yes
2130
2131 # Xen 4.5
2132 elif
2133 cat > $TMPC <<EOF &&
2134 #include <xenctrl.h>
2135 #include <xenstore.h>
2136 #include <stdint.h>
2137 #include <xen/hvm/hvm_info_table.h>
2138 #if !defined(HVM_MAX_VCPUS)
2139 # error HVM_MAX_VCPUS not defined
2140 #endif
2141 int main(void) {
2142 xc_interface *xc;
2143 xs_daemon_open();
2144 xc = xc_interface_open(0, 0, 0);
2145 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2146 xc_gnttab_open(NULL, 0);
2147 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2148 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2149 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2150 return 0;
2151 }
2152 EOF
2153 compile_prog "" "$xen_libs"
2154 then
2155 xen_ctrl_version=450
2156 xen=yes
2157
2158 elif
2159 cat > $TMPC <<EOF &&
2160 #include <xenctrl.h>
2161 #include <xenstore.h>
2162 #include <stdint.h>
2163 #include <xen/hvm/hvm_info_table.h>
2164 #if !defined(HVM_MAX_VCPUS)
2165 # error HVM_MAX_VCPUS not defined
2166 #endif
2167 int main(void) {
2168 xc_interface *xc;
2169 xs_daemon_open();
2170 xc = xc_interface_open(0, 0, 0);
2171 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2172 xc_gnttab_open(NULL, 0);
2173 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2174 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2175 return 0;
2176 }
2177 EOF
2178 compile_prog "" "$xen_libs"
2179 then
2180 xen_ctrl_version=420
2181 xen=yes
2182
2183 else
2184 if test "$xen" = "yes" ; then
2185 feature_not_found "xen (unsupported version)" \
2186 "Install a supported xen (xen 4.2 or newer)"
2187 fi
2188 xen=no
2189 fi
2190
2191 if test "$xen" = yes; then
2192 if test $xen_ctrl_version -ge 471 ; then
2193 libs_softmmu="$xen_stable_libs $libs_softmmu"
2194 fi
2195 libs_softmmu="$xen_libs $libs_softmmu"
2196 fi
2197 fi
2198
2199 if test "$xen_pci_passthrough" != "no"; then
2200 if test "$xen" = "yes" && test "$linux" = "yes"; then
2201 xen_pci_passthrough=yes
2202 else
2203 if test "$xen_pci_passthrough" = "yes"; then
2204 error_exit "User requested feature Xen PCI Passthrough" \
2205 " but this feature requires /sys from Linux"
2206 fi
2207 xen_pci_passthrough=no
2208 fi
2209 fi
2210
2211 if test "$xen_pv_domain_build" = "yes" &&
2212 test "$xen" != "yes"; then
2213 error_exit "User requested Xen PV domain builder support" \
2214 "which requires Xen support."
2215 fi
2216
2217 ##########################################
2218 # Sparse probe
2219 if test "$sparse" != "no" ; then
2220 if has cgcc; then
2221 sparse=yes
2222 else
2223 if test "$sparse" = "yes" ; then
2224 feature_not_found "sparse" "Install sparse binary"
2225 fi
2226 sparse=no
2227 fi
2228 fi
2229
2230 ##########################################
2231 # X11 probe
2232 x11_cflags=
2233 x11_libs=-lX11
2234 if $pkg_config --exists "x11"; then
2235 x11_cflags=$($pkg_config --cflags x11)
2236 x11_libs=$($pkg_config --libs x11)
2237 fi
2238
2239 ##########################################
2240 # GTK probe
2241
2242 if test "$gtkabi" = ""; then
2243 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2244 # Use 3.0 as a fallback if that is available.
2245 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2246 gtkabi=2.0
2247 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2248 gtkabi=3.0
2249 else
2250 gtkabi=2.0
2251 fi
2252 fi
2253
2254 if test "$gtk" != "no"; then
2255 gtkpackage="gtk+-$gtkabi"
2256 gtkx11package="gtk+-x11-$gtkabi"
2257 if test "$gtkabi" = "3.0" ; then
2258 gtkversion="3.0.0"
2259 else
2260 gtkversion="2.18.0"
2261 fi
2262 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2263 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2264 gtk_libs=$($pkg_config --libs $gtkpackage)
2265 gtk_version=$($pkg_config --modversion $gtkpackage)
2266 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2267 gtk_cflags="$gtk_cflags $x11_cflags"
2268 gtk_libs="$gtk_libs $x11_libs"
2269 fi
2270 libs_softmmu="$gtk_libs $libs_softmmu"
2271 gtk="yes"
2272 elif test "$gtk" = "yes"; then
2273 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2274 else
2275 gtk="no"
2276 fi
2277 fi
2278
2279
2280 ##########################################
2281 # GNUTLS probe
2282
2283 gnutls_works() {
2284 # Unfortunately some distros have bad pkg-config information for gnutls
2285 # such that it claims to exist but you get a compiler error if you try
2286 # to use the options returned by --libs. Specifically, Ubuntu for --static
2287 # builds doesn't work:
2288 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2289 #
2290 # So sanity check the cflags/libs before assuming gnutls can be used.
2291 if ! $pkg_config --exists "gnutls"; then
2292 return 1
2293 fi
2294
2295 write_c_skeleton
2296 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2297 }
2298
2299 gnutls_gcrypt=no
2300 gnutls_nettle=no
2301 if test "$gnutls" != "no"; then
2302 if gnutls_works; then
2303 gnutls_cflags=$($pkg_config --cflags gnutls)
2304 gnutls_libs=$($pkg_config --libs gnutls)
2305 libs_softmmu="$gnutls_libs $libs_softmmu"
2306 libs_tools="$gnutls_libs $libs_tools"
2307 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2308 gnutls="yes"
2309
2310 # gnutls_rnd requires >= 2.11.0
2311 if $pkg_config --exists "gnutls >= 2.11.0"; then
2312 gnutls_rnd="yes"
2313 else
2314 gnutls_rnd="no"
2315 fi
2316
2317 if $pkg_config --exists 'gnutls >= 3.0'; then
2318 gnutls_gcrypt=no
2319 gnutls_nettle=yes
2320 elif $pkg_config --exists 'gnutls >= 2.12'; then
2321 case $($pkg_config --libs --static gnutls) in
2322 *gcrypt*)
2323 gnutls_gcrypt=yes
2324 gnutls_nettle=no
2325 ;;
2326 *nettle*)
2327 gnutls_gcrypt=no
2328 gnutls_nettle=yes
2329 ;;
2330 *)
2331 gnutls_gcrypt=yes
2332 gnutls_nettle=no
2333 ;;
2334 esac
2335 else
2336 gnutls_gcrypt=yes
2337 gnutls_nettle=no
2338 fi
2339 elif test "$gnutls" = "yes"; then
2340 feature_not_found "gnutls" "Install gnutls devel"
2341 else
2342 gnutls="no"
2343 gnutls_rnd="no"
2344 fi
2345 else
2346 gnutls_rnd="no"
2347 fi
2348
2349
2350 # If user didn't give a --disable/enable-gcrypt flag,
2351 # then mark as disabled if user requested nettle
2352 # explicitly, or if gnutls links to nettle
2353 if test -z "$gcrypt"
2354 then
2355 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2356 then
2357 gcrypt="no"
2358 fi
2359 fi
2360
2361 # If user didn't give a --disable/enable-nettle flag,
2362 # then mark as disabled if user requested gcrypt
2363 # explicitly, or if gnutls links to gcrypt
2364 if test -z "$nettle"
2365 then
2366 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2367 then
2368 nettle="no"
2369 fi
2370 fi
2371
2372 has_libgcrypt_config() {
2373 if ! has "libgcrypt-config"
2374 then
2375 return 1
2376 fi
2377
2378 if test -n "$cross_prefix"
2379 then
2380 host=$(libgcrypt-config --host)
2381 if test "$host-" != $cross_prefix
2382 then
2383 return 1
2384 fi
2385 fi
2386
2387 return 0
2388 }
2389
2390 if test "$gcrypt" != "no"; then
2391 if has_libgcrypt_config; then
2392 gcrypt_cflags=$(libgcrypt-config --cflags)
2393 gcrypt_libs=$(libgcrypt-config --libs)
2394 # Debian has remove -lgpg-error from libgcrypt-config
2395 # as it "spreads unnecessary dependencies" which in
2396 # turn breaks static builds...
2397 if test "$static" = "yes"
2398 then
2399 gcrypt_libs="$gcrypt_libs -lgpg-error"
2400 fi
2401 libs_softmmu="$gcrypt_libs $libs_softmmu"
2402 libs_tools="$gcrypt_libs $libs_tools"
2403 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2404 gcrypt="yes"
2405 if test -z "$nettle"; then
2406 nettle="no"
2407 fi
2408
2409 cat > $TMPC << EOF
2410 #include <gcrypt.h>
2411 int main(void) {
2412 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2413 GCRY_MD_SHA256,
2414 NULL, 0, 0, 0, NULL);
2415 return 0;
2416 }
2417 EOF
2418 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2419 gcrypt_kdf=yes
2420 fi
2421
2422 cat > $TMPC << EOF
2423 #include <gcrypt.h>
2424 int main(void) {
2425 gcry_mac_hd_t handle;
2426 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2427 GCRY_MAC_FLAG_SECURE, NULL);
2428 return 0;
2429 }
2430 EOF
2431 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2432 gcrypt_hmac=yes
2433 fi
2434 else
2435 if test "$gcrypt" = "yes"; then
2436 feature_not_found "gcrypt" "Install gcrypt devel"
2437 else
2438 gcrypt="no"
2439 fi
2440 fi
2441 fi
2442
2443
2444 if test "$nettle" != "no"; then
2445 if $pkg_config --exists "nettle"; then
2446 nettle_cflags=$($pkg_config --cflags nettle)
2447 nettle_libs=$($pkg_config --libs nettle)
2448 nettle_version=$($pkg_config --modversion nettle)
2449 libs_softmmu="$nettle_libs $libs_softmmu"
2450 libs_tools="$nettle_libs $libs_tools"
2451 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2452 nettle="yes"
2453
2454 cat > $TMPC << EOF
2455 #include <stddef.h>
2456 #include <nettle/pbkdf2.h>
2457 int main(void) {
2458 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2459 return 0;
2460 }
2461 EOF
2462 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2463 nettle_kdf=yes
2464 fi
2465 else
2466 if test "$nettle" = "yes"; then
2467 feature_not_found "nettle" "Install nettle devel"
2468 else
2469 nettle="no"
2470 fi
2471 fi
2472 fi
2473
2474 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2475 then
2476 error_exit "Only one of gcrypt & nettle can be enabled"
2477 fi
2478
2479 ##########################################
2480 # libtasn1 - only for the TLS creds/session test suite
2481
2482 tasn1=yes
2483 tasn1_cflags=""
2484 tasn1_libs=""
2485 if $pkg_config --exists "libtasn1"; then
2486 tasn1_cflags=$($pkg_config --cflags libtasn1)
2487 tasn1_libs=$($pkg_config --libs libtasn1)
2488 else
2489 tasn1=no
2490 fi
2491
2492
2493 ##########################################
2494 # getifaddrs (for tests/test-io-channel-socket )
2495
2496 have_ifaddrs_h=yes
2497 if ! check_include "ifaddrs.h" ; then
2498 have_ifaddrs_h=no
2499 fi
2500
2501 ##########################################
2502 # VTE probe
2503
2504 if test "$vte" != "no"; then
2505 if test "$gtkabi" = "3.0"; then
2506 vteminversion="0.32.0"
2507 if $pkg_config --exists "vte-2.91"; then
2508 vtepackage="vte-2.91"
2509 else
2510 vtepackage="vte-2.90"
2511 fi
2512 else
2513 vtepackage="vte"
2514 vteminversion="0.24.0"
2515 fi
2516 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2517 vte_cflags=$($pkg_config --cflags $vtepackage)
2518 vte_libs=$($pkg_config --libs $vtepackage)
2519 vteversion=$($pkg_config --modversion $vtepackage)
2520 libs_softmmu="$vte_libs $libs_softmmu"
2521 vte="yes"
2522 elif test "$vte" = "yes"; then
2523 if test "$gtkabi" = "3.0"; then
2524 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2525 else
2526 feature_not_found "vte" "Install libvte devel"
2527 fi
2528 else
2529 vte="no"
2530 fi
2531 fi
2532
2533 ##########################################
2534 # SDL probe
2535
2536 # Look for sdl configuration program (pkg-config or sdl-config). Try
2537 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2538
2539 if test "$sdlabi" = ""; then
2540 if $pkg_config --exists "sdl"; then
2541 sdlabi=1.2
2542 elif $pkg_config --exists "sdl2"; then
2543 sdlabi=2.0
2544 else
2545 sdlabi=1.2
2546 fi
2547 fi
2548
2549 if test $sdlabi = "2.0"; then
2550 sdl_config=$sdl2_config
2551 sdlname=sdl2
2552 sdlconfigname=sdl2_config
2553 elif test $sdlabi = "1.2"; then
2554 sdlname=sdl
2555 sdlconfigname=sdl_config
2556 else
2557 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2558 fi
2559
2560 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2561 sdl_config=$sdlconfigname
2562 fi
2563
2564 if $pkg_config $sdlname --exists; then
2565 sdlconfig="$pkg_config $sdlname"
2566 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2567 elif has ${sdl_config}; then
2568 sdlconfig="$sdl_config"
2569 sdlversion=$($sdlconfig --version)
2570 else
2571 if test "$sdl" = "yes" ; then
2572 feature_not_found "sdl" "Install SDL devel"
2573 fi
2574 sdl=no
2575 fi
2576 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2577 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2578 fi
2579
2580 sdl_too_old=no
2581 if test "$sdl" != "no" ; then
2582 cat > $TMPC << EOF
2583 #include <SDL.h>
2584 #undef main /* We don't want SDL to override our main() */
2585 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2586 EOF
2587 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2588 if test "$static" = "yes" ; then
2589 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2590 else
2591 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2592 fi
2593 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2594 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2595 sdl_too_old=yes
2596 else
2597 sdl=yes
2598 fi
2599
2600 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2601 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2602 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2603 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2604 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2605 fi
2606 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2607 :
2608 else
2609 sdl=no
2610 fi
2611 fi # static link
2612 else # sdl not found
2613 if test "$sdl" = "yes" ; then
2614 feature_not_found "sdl" "Install SDL devel"
2615 fi
2616 sdl=no
2617 fi # sdl compile test
2618 fi
2619
2620 if test "$sdl" = "yes" ; then
2621 cat > $TMPC <<EOF
2622 #include <SDL.h>
2623 #if defined(SDL_VIDEO_DRIVER_X11)
2624 #include <X11/XKBlib.h>
2625 #else
2626 #error No x11 support
2627 #endif
2628 int main(void) { return 0; }
2629 EOF
2630 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2631 sdl_cflags="$sdl_cflags $x11_cflags"
2632 sdl_libs="$sdl_libs $x11_libs"
2633 fi
2634 libs_softmmu="$sdl_libs $libs_softmmu"
2635 fi
2636
2637 ##########################################
2638 # RDMA needs OpenFabrics libraries
2639 if test "$rdma" != "no" ; then
2640 cat > $TMPC <<EOF
2641 #include <rdma/rdma_cma.h>
2642 int main(void) { return 0; }
2643 EOF
2644 rdma_libs="-lrdmacm -libverbs"
2645 if compile_prog "" "$rdma_libs" ; then
2646 rdma="yes"
2647 libs_softmmu="$libs_softmmu $rdma_libs"
2648 else
2649 if test "$rdma" = "yes" ; then
2650 error_exit \
2651 " OpenFabrics librdmacm/libibverbs not present." \
2652 " Your options:" \
2653 " (1) Fast: Install infiniband packages from your distro." \
2654 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2655 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2656 fi
2657 rdma="no"
2658 fi
2659 fi
2660
2661
2662 ##########################################
2663 # VNC SASL detection
2664 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2665 cat > $TMPC <<EOF
2666 #include <sasl/sasl.h>
2667 #include <stdio.h>
2668 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2669 EOF
2670 # Assuming Cyrus-SASL installed in /usr prefix
2671 vnc_sasl_cflags=""
2672 vnc_sasl_libs="-lsasl2"
2673 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2674 vnc_sasl=yes
2675 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2676 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2677 else
2678 if test "$vnc_sasl" = "yes" ; then
2679 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2680 fi
2681 vnc_sasl=no
2682 fi
2683 fi
2684
2685 ##########################################
2686 # VNC JPEG detection
2687 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2688 cat > $TMPC <<EOF
2689 #include <stdio.h>
2690 #include <jpeglib.h>
2691 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2692 EOF
2693 vnc_jpeg_cflags=""
2694 vnc_jpeg_libs="-ljpeg"
2695 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2696 vnc_jpeg=yes
2697 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2698 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2699 else
2700 if test "$vnc_jpeg" = "yes" ; then
2701 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2702 fi
2703 vnc_jpeg=no
2704 fi
2705 fi
2706
2707 ##########################################
2708 # VNC PNG detection
2709 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2710 cat > $TMPC <<EOF
2711 //#include <stdio.h>
2712 #include <png.h>
2713 #include <stddef.h>
2714 int main(void) {
2715 png_structp png_ptr;
2716 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2717 return png_ptr != 0;
2718 }
2719 EOF
2720 if $pkg_config libpng --exists; then
2721 vnc_png_cflags=$($pkg_config libpng --cflags)
2722 vnc_png_libs=$($pkg_config libpng --libs)
2723 else
2724 vnc_png_cflags=""
2725 vnc_png_libs="-lpng"
2726 fi
2727 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2728 vnc_png=yes
2729 libs_softmmu="$vnc_png_libs $libs_softmmu"
2730 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2731 else
2732 if test "$vnc_png" = "yes" ; then
2733 feature_not_found "vnc-png" "Install libpng devel"
2734 fi
2735 vnc_png=no
2736 fi
2737 fi
2738
2739 ##########################################
2740 # fnmatch() probe, used for ACL routines
2741 fnmatch="no"
2742 cat > $TMPC << EOF
2743 #include <fnmatch.h>
2744 int main(void)
2745 {
2746 fnmatch("foo", "foo", 0);
2747 return 0;
2748 }
2749 EOF
2750 if compile_prog "" "" ; then
2751 fnmatch="yes"
2752 fi
2753
2754 ##########################################
2755 # xfsctl() probe, used for raw-posix
2756 if test "$xfs" != "no" ; then
2757 cat > $TMPC << EOF
2758 #include <stddef.h> /* NULL */
2759 #include <xfs/xfs.h>
2760 int main(void)
2761 {
2762 xfsctl(NULL, 0, 0, NULL);
2763 return 0;
2764 }
2765 EOF
2766 if compile_prog "" "" ; then
2767 xfs="yes"
2768 else
2769 if test "$xfs" = "yes" ; then
2770 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2771 fi
2772 xfs=no
2773 fi
2774 fi
2775
2776 ##########################################
2777 # vde libraries probe
2778 if test "$vde" != "no" ; then
2779 vde_libs="-lvdeplug"
2780 cat > $TMPC << EOF
2781 #include <libvdeplug.h>
2782 int main(void)
2783 {
2784 struct vde_open_args a = {0, 0, 0};
2785 char s[] = "";
2786 vde_open(s, s, &a);
2787 return 0;
2788 }
2789 EOF
2790 if compile_prog "" "$vde_libs" ; then
2791 vde=yes
2792 libs_softmmu="$vde_libs $libs_softmmu"
2793 libs_tools="$vde_libs $libs_tools"
2794 else
2795 if test "$vde" = "yes" ; then
2796 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2797 fi
2798 vde=no
2799 fi
2800 fi
2801
2802 ##########################################
2803 # netmap support probe
2804 # Apart from looking for netmap headers, we make sure that the host API version
2805 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2806 # a minor/major version number. Minor new features will be marked with values up
2807 # to 15, and if something happens that requires a change to the backend we will
2808 # move above 15, submit the backend fixes and modify this two bounds.
2809 if test "$netmap" != "no" ; then
2810 cat > $TMPC << EOF
2811 #include <inttypes.h>
2812 #include <net/if.h>
2813 #include <net/netmap.h>
2814 #include <net/netmap_user.h>
2815 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2816 #error
2817 #endif
2818 int main(void) { return 0; }
2819 EOF
2820 if compile_prog "" "" ; then
2821 netmap=yes
2822 else
2823 if test "$netmap" = "yes" ; then
2824 feature_not_found "netmap"
2825 fi
2826 netmap=no
2827 fi
2828 fi
2829
2830 ##########################################
2831 # libcap-ng library probe
2832 if test "$cap_ng" != "no" ; then
2833 cap_libs="-lcap-ng"
2834 cat > $TMPC << EOF
2835 #include <cap-ng.h>
2836 int main(void)
2837 {
2838 capng_capability_to_name(CAPNG_EFFECTIVE);
2839 return 0;
2840 }
2841 EOF
2842 if compile_prog "" "$cap_libs" ; then
2843 cap_ng=yes
2844 libs_tools="$cap_libs $libs_tools"
2845 else
2846 if test "$cap_ng" = "yes" ; then
2847 feature_not_found "cap_ng" "Install libcap-ng devel"
2848 fi
2849 cap_ng=no
2850 fi
2851 fi
2852
2853 ##########################################
2854 # Sound support libraries probe
2855
2856 audio_drv_probe()
2857 {
2858 drv=$1
2859 hdr=$2
2860 lib=$3
2861 exp=$4
2862 cfl=$5
2863 cat > $TMPC << EOF
2864 #include <$hdr>
2865 int main(void) { $exp }
2866 EOF
2867 if compile_prog "$cfl" "$lib" ; then
2868 :
2869 else
2870 error_exit "$drv check failed" \
2871 "Make sure to have the $drv libs and headers installed."
2872 fi
2873 }
2874
2875 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
2876 for drv in $audio_drv_list; do
2877 case $drv in
2878 alsa)
2879 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2880 "return snd_pcm_close((snd_pcm_t *)0);"
2881 libs_softmmu="-lasound $libs_softmmu"
2882 ;;
2883
2884 pa)
2885 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2886 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
2887 libs_softmmu="-lpulse $libs_softmmu"
2888 audio_pt_int="yes"
2889 ;;
2890
2891 coreaudio)
2892 libs_softmmu="-framework CoreAudio $libs_softmmu"
2893 ;;
2894
2895 dsound)
2896 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2897 audio_win_int="yes"
2898 ;;
2899
2900 oss)
2901 libs_softmmu="$oss_lib $libs_softmmu"
2902 ;;
2903
2904 sdl|wav)
2905 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2906 ;;
2907
2908 *)
2909 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2910 error_exit "Unknown driver '$drv' selected" \
2911 "Possible drivers are: $audio_possible_drivers"
2912 }
2913 ;;
2914 esac
2915 done
2916
2917 ##########################################
2918 # BrlAPI probe
2919
2920 if test "$brlapi" != "no" ; then
2921 brlapi_libs="-lbrlapi"
2922 cat > $TMPC << EOF
2923 #include <brlapi.h>
2924 #include <stddef.h>
2925 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2926 EOF
2927 if compile_prog "" "$brlapi_libs" ; then
2928 brlapi=yes
2929 libs_softmmu="$brlapi_libs $libs_softmmu"
2930 else
2931 if test "$brlapi" = "yes" ; then
2932 feature_not_found "brlapi" "Install brlapi devel"
2933 fi
2934 brlapi=no
2935 fi
2936 fi
2937
2938 ##########################################
2939 # curses probe
2940 if test "$curses" != "no" ; then
2941 if test "$mingw32" = "yes" ; then
2942 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
2943 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
2944 else
2945 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
2946 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
2947 fi
2948 curses_found=no
2949 cat > $TMPC << EOF
2950 #include <locale.h>
2951 #include <curses.h>
2952 #include <wchar.h>
2953 int main(void) {
2954 const char *s = curses_version();
2955 wchar_t wch = L'w';
2956 setlocale(LC_ALL, "");
2957 resize_term(0, 0);
2958 addwstr(L"wide chars\n");
2959 addnwstr(&wch, 1);
2960 add_wch(WACS_DEGREE);
2961 return s != 0;
2962 }
2963 EOF
2964 IFS=:
2965 for curses_inc in $curses_inc_list; do
2966 IFS=:
2967 for curses_lib in $curses_lib_list; do
2968 unset IFS
2969 if compile_prog "$curses_inc" "$curses_lib" ; then
2970 curses_found=yes
2971 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
2972 libs_softmmu="$curses_lib $libs_softmmu"
2973 break
2974 fi
2975 done
2976 if test "$curses_found" = yes ; then
2977 break
2978 fi
2979 done
2980 unset IFS
2981 if test "$curses_found" = "yes" ; then
2982 curses=yes
2983 else
2984 if test "$curses" = "yes" ; then
2985 feature_not_found "curses" "Install ncurses devel"
2986 fi
2987 curses=no
2988 fi
2989 fi
2990
2991 ##########################################
2992 # curl probe
2993 if test "$curl" != "no" ; then
2994 if $pkg_config libcurl --exists; then
2995 curlconfig="$pkg_config libcurl"
2996 else
2997 curlconfig=curl-config
2998 fi
2999 cat > $TMPC << EOF
3000 #include <curl/curl.h>
3001 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3002 EOF
3003 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3004 curl_libs=$($curlconfig --libs 2>/dev/null)
3005 if compile_prog "$curl_cflags" "$curl_libs" ; then
3006 curl=yes
3007 else
3008 if test "$curl" = "yes" ; then
3009 feature_not_found "curl" "Install libcurl devel"
3010 fi
3011 curl=no
3012 fi
3013 fi # test "$curl"
3014
3015 ##########################################
3016 # bluez support probe
3017 if test "$bluez" != "no" ; then
3018 cat > $TMPC << EOF
3019 #include <bluetooth/bluetooth.h>
3020 int main(void) { return bt_error(0); }
3021 EOF
3022 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3023 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3024 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3025 bluez=yes
3026 libs_softmmu="$bluez_libs $libs_softmmu"
3027 else
3028 if test "$bluez" = "yes" ; then
3029 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3030 fi
3031 bluez="no"
3032 fi
3033 fi
3034
3035 ##########################################
3036 # glib support probe
3037
3038 glib_req_ver=2.22
3039 glib_modules=gthread-2.0
3040 if test "$modules" = yes; then
3041 glib_modules="$glib_modules gmodule-2.0"
3042 fi
3043
3044 for i in $glib_modules; do
3045 if $pkg_config --atleast-version=$glib_req_ver $i; then
3046 glib_cflags=$($pkg_config --cflags $i)
3047 glib_libs=$($pkg_config --libs $i)
3048 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3049 LIBS="$glib_libs $LIBS"
3050 libs_qga="$glib_libs $libs_qga"
3051 else
3052 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3053 fi
3054 done
3055
3056 # Sanity check that the current size_t matches the
3057 # size that glib thinks it should be. This catches
3058 # problems on multi-arch where people try to build
3059 # 32-bit QEMU while pointing at 64-bit glib headers
3060 cat > $TMPC <<EOF
3061 #include <glib.h>
3062 #include <unistd.h>
3063
3064 #define QEMU_BUILD_BUG_ON(x) \
3065 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3066
3067 int main(void) {
3068 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3069 return 0;
3070 }
3071 EOF
3072
3073 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3074 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3075 "You probably need to set PKG_CONFIG_LIBDIR"\
3076 "to point to the right pkg-config files for your"\
3077 "build target"
3078 fi
3079
3080 # g_test_trap_subprocess added in 2.38. Used by some tests.
3081 glib_subprocess=yes
3082 if test "$mingw32" = "yes" || ! $pkg_config --atleast-version=2.38 glib-2.0; then
3083 glib_subprocess=no
3084 fi
3085
3086 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3087 cat > $TMPC << EOF
3088 #include <glib.h>
3089 int main(void) { return 0; }
3090 EOF
3091 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3092 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3093 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3094 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3095 fi
3096 fi
3097
3098 ##########################################
3099 # SHA command probe for modules
3100 if test "$modules" = yes; then
3101 shacmd_probe="sha1sum sha1 shasum"
3102 for c in $shacmd_probe; do
3103 if has $c; then
3104 shacmd="$c"
3105 break
3106 fi
3107 done
3108 if test "$shacmd" = ""; then
3109 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3110 fi
3111 fi
3112
3113 ##########################################
3114 # pixman support probe
3115
3116 if test "$pixman" = ""; then
3117 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3118 pixman="none"
3119 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3120 pixman="system"
3121 else
3122 pixman="internal"
3123 fi
3124 fi
3125 if test "$pixman" = "none"; then
3126 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3127 error_exit "pixman disabled but system emulation or tools build" \
3128 "enabled. You can turn off pixman only if you also" \
3129 "disable all system emulation targets and the tools" \
3130 "build with '--disable-tools --disable-system'."
3131 fi
3132 pixman_cflags=
3133 pixman_libs=
3134 elif test "$pixman" = "system"; then
3135 # pixman version has been checked above
3136 pixman_cflags=$($pkg_config --cflags pixman-1)
3137 pixman_libs=$($pkg_config --libs pixman-1)
3138 else
3139 if test ! -d ${source_path}/pixman/pixman; then
3140 error_exit "pixman >= 0.21.8 not present. Your options:" \
3141 " (1) Preferred: Install the pixman devel package (any recent" \
3142 " distro should have packages as Xorg needs pixman too)." \
3143 " (2) Fetch the pixman submodule, using:" \
3144 " git submodule update --init pixman"
3145 fi
3146 mkdir -p pixman/pixman
3147 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3148 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3149 fi
3150
3151 ##########################################
3152 # libcap probe
3153
3154 if test "$cap" != "no" ; then
3155 cat > $TMPC <<EOF
3156 #include <stdio.h>
3157 #include <sys/capability.h>
3158 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3159 EOF
3160 if compile_prog "" "-lcap" ; then
3161 cap=yes
3162 else
3163 cap=no
3164 fi
3165 fi
3166
3167 ##########################################
3168 # pthread probe
3169 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3170
3171 pthread=no
3172 cat > $TMPC << EOF
3173 #include <pthread.h>
3174 static void *f(void *p) { return NULL; }
3175 int main(void) {
3176 pthread_t thread;
3177 pthread_create(&thread, 0, f, 0);
3178 return 0;
3179 }
3180 EOF
3181 if compile_prog "" "" ; then
3182 pthread=yes
3183 else
3184 for pthread_lib in $PTHREADLIBS_LIST; do
3185 if compile_prog "" "$pthread_lib" ; then
3186 pthread=yes
3187 found=no
3188 for lib_entry in $LIBS; do
3189 if test "$lib_entry" = "$pthread_lib"; then
3190 found=yes
3191 break
3192 fi
3193 done
3194 if test "$found" = "no"; then
3195 LIBS="$pthread_lib $LIBS"
3196 fi
3197 PTHREAD_LIB="$pthread_lib"
3198 break
3199 fi
3200 done
3201 fi
3202
3203 if test "$mingw32" != yes -a "$pthread" = no; then
3204 error_exit "pthread check failed" \
3205 "Make sure to have the pthread libs and headers installed."
3206 fi
3207
3208 # check for pthread_setname_np
3209 pthread_setname_np=no
3210 cat > $TMPC << EOF
3211 #include <pthread.h>
3212
3213 static void *f(void *p) { return NULL; }
3214 int main(void)
3215 {
3216 pthread_t thread;
3217 pthread_create(&thread, 0, f, 0);
3218 pthread_setname_np(thread, "QEMU");
3219 return 0;
3220 }
3221 EOF
3222 if compile_prog "" "$pthread_lib" ; then
3223 pthread_setname_np=yes
3224 fi
3225
3226 ##########################################
3227 # rbd probe
3228 if test "$rbd" != "no" ; then
3229 cat > $TMPC <<EOF
3230 #include <stdio.h>
3231 #include <rbd/librbd.h>
3232 int main(void) {
3233 rados_t cluster;
3234 rados_create(&cluster, NULL);
3235 return 0;
3236 }
3237 EOF
3238 rbd_libs="-lrbd -lrados"
3239 if compile_prog "" "$rbd_libs" ; then
3240 rbd=yes
3241 else
3242 if test "$rbd" = "yes" ; then
3243 feature_not_found "rados block device" "Install librbd/ceph devel"
3244 fi
3245 rbd=no
3246 fi
3247 fi
3248
3249 ##########################################
3250 # libssh2 probe
3251 min_libssh2_version=1.2.8
3252 if test "$libssh2" != "no" ; then
3253 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3254 libssh2_cflags=$($pkg_config libssh2 --cflags)
3255 libssh2_libs=$($pkg_config libssh2 --libs)
3256 libssh2=yes
3257 else
3258 if test "$libssh2" = "yes" ; then
3259 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3260 fi
3261 libssh2=no
3262 fi
3263 fi
3264
3265 ##########################################
3266 # libssh2_sftp_fsync probe
3267
3268 if test "$libssh2" = "yes"; then
3269 cat > $TMPC <<EOF
3270 #include <stdio.h>
3271 #include <libssh2.h>
3272 #include <libssh2_sftp.h>
3273 int main(void) {
3274 LIBSSH2_SESSION *session;
3275 LIBSSH2_SFTP *sftp;
3276 LIBSSH2_SFTP_HANDLE *sftp_handle;
3277 session = libssh2_session_init ();
3278 sftp = libssh2_sftp_init (session);
3279 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3280 libssh2_sftp_fsync (sftp_handle);
3281 return 0;
3282 }
3283 EOF
3284 # libssh2_cflags/libssh2_libs defined in previous test.
3285 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3286 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3287 fi
3288 fi
3289
3290 ##########################################
3291 # linux-aio probe
3292
3293 if test "$linux_aio" != "no" ; then
3294 cat > $TMPC <<EOF
3295 #include <libaio.h>
3296 #include <sys/eventfd.h>
3297 #include <stddef.h>
3298 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3299 EOF
3300 if compile_prog "" "-laio" ; then
3301 linux_aio=yes
3302 else
3303 if test "$linux_aio" = "yes" ; then
3304 feature_not_found "linux AIO" "Install libaio devel"
3305 fi
3306 linux_aio=no
3307 fi
3308 fi
3309
3310 ##########################################
3311 # TPM passthrough is only on x86 Linux
3312
3313 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3314 tpm_passthrough=$tpm
3315 else
3316 tpm_passthrough=no
3317 fi
3318
3319 ##########################################
3320 # attr probe
3321
3322 if test "$attr" != "no" ; then
3323 cat > $TMPC <<EOF
3324 #include <stdio.h>
3325 #include <sys/types.h>
3326 #ifdef CONFIG_LIBATTR
3327 #include <attr/xattr.h>
3328 #else
3329 #include <sys/xattr.h>
3330 #endif
3331 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3332 EOF
3333 if compile_prog "" "" ; then
3334 attr=yes
3335 # Older distros have <attr/xattr.h>, and need -lattr:
3336 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3337 attr=yes
3338 LIBS="-lattr $LIBS"
3339 libattr=yes
3340 else
3341 if test "$attr" = "yes" ; then
3342 feature_not_found "ATTR" "Install libc6 or libattr devel"
3343 fi
3344 attr=no
3345 fi
3346 fi
3347
3348 ##########################################
3349 # iovec probe
3350 cat > $TMPC <<EOF
3351 #include <sys/types.h>
3352 #include <sys/uio.h>
3353 #include <unistd.h>
3354 int main(void) { return sizeof(struct iovec); }
3355 EOF
3356 iovec=no
3357 if compile_prog "" "" ; then
3358 iovec=yes
3359 fi
3360
3361 ##########################################
3362 # preadv probe
3363 cat > $TMPC <<EOF
3364 #include <sys/types.h>
3365 #include <sys/uio.h>
3366 #include <unistd.h>
3367 int main(void) { return preadv(0, 0, 0, 0); }
3368 EOF
3369 preadv=no
3370 if compile_prog "" "" ; then
3371 preadv=yes
3372 fi
3373
3374 ##########################################
3375 # fdt probe
3376 # fdt support is mandatory for at least some target architectures,
3377 # so insist on it if we're building those system emulators.
3378 fdt_required=no
3379 for target in $target_list; do
3380 case $target in
3381 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3382 fdt_required=yes
3383 ;;
3384 esac
3385 done
3386
3387 if test "$fdt_required" = "yes"; then
3388 if test "$fdt" = "no"; then
3389 error_exit "fdt disabled but some requested targets require it." \
3390 "You can turn off fdt only if you also disable all the system emulation" \
3391 "targets which need it (by specifying a cut down --target-list)."
3392 fi
3393 fdt=yes
3394 fi
3395
3396 if test "$fdt" != "no" ; then
3397 fdt_libs="-lfdt"
3398 # explicitly check for libfdt_env.h as it is missing in some stable installs
3399 # and test for required functions to make sure we are on a version >= 1.4.0
3400 cat > $TMPC << EOF
3401 #include <libfdt.h>
3402 #include <libfdt_env.h>
3403 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3404 EOF
3405 if compile_prog "" "$fdt_libs" ; then
3406 # system DTC is good - use it
3407 fdt=yes
3408 elif test -d ${source_path}/dtc/libfdt ; then
3409 # have submodule DTC - use it
3410 fdt=yes
3411 dtc_internal="yes"
3412 mkdir -p dtc
3413 if [ "$pwd_is_source_path" != "y" ] ; then
3414 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3415 symlink "$source_path/dtc/scripts" "dtc/scripts"
3416 fi
3417 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3418 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3419 elif test "$fdt" = "yes" ; then
3420 # have neither and want - prompt for system/submodule install
3421 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3422 " (1) Preferred: Install the DTC (libfdt) devel package" \
3423 " (2) Fetch the DTC submodule, using:" \
3424 " git submodule update --init dtc"
3425 else
3426 # don't have and don't want
3427 fdt_libs=
3428 fdt=no
3429 fi
3430 fi
3431
3432 libs_softmmu="$libs_softmmu $fdt_libs"
3433
3434 ##########################################
3435 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3436
3437 if test "$opengl" != "no" ; then
3438 opengl_pkgs="epoxy libdrm gbm"
3439 if $pkg_config $opengl_pkgs x11; then
3440 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3441 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3442 opengl=yes
3443 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3444 gtk_gl="yes"
3445 fi
3446 else
3447 if test "$opengl" = "yes" ; then
3448 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3449 fi
3450 opengl_cflags=""
3451 opengl_libs=""
3452 opengl=no
3453 fi
3454 fi
3455
3456 if test "$opengl" = "yes"; then
3457 cat > $TMPC << EOF
3458 #include <epoxy/egl.h>
3459 #ifndef EGL_MESA_image_dma_buf_export
3460 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3461 #endif
3462 int main(void) { return 0; }
3463 EOF
3464 if compile_prog "" "" ; then
3465 opengl_dmabuf=yes
3466 fi
3467 fi
3468
3469 ##########################################
3470 # archipelago probe
3471 if test "$archipelago" != "no" ; then
3472 cat > $TMPC <<EOF
3473 #include <stdio.h>
3474 #include <xseg/xseg.h>
3475 #include <xseg/protocol.h>
3476 int main(void) {
3477 xseg_initialize();
3478 return 0;
3479 }
3480 EOF
3481 archipelago_libs=-lxseg
3482 if compile_prog "" "$archipelago_libs"; then
3483 archipelago="yes"
3484 libs_tools="$archipelago_libs $libs_tools"
3485 libs_softmmu="$archipelago_libs $libs_softmmu"
3486
3487 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3488 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3489 echo "license and therefore prevent redistribution."
3490 echo
3491 echo "To disable Archipelago, use --disable-archipelago"
3492 else
3493 if test "$archipelago" = "yes" ; then
3494 feature_not_found "Archipelago backend support" "Install libxseg devel"
3495 fi
3496 archipelago="no"
3497 fi
3498 fi
3499
3500
3501 ##########################################
3502 # glusterfs probe
3503 if test "$glusterfs" != "no" ; then
3504 if $pkg_config --atleast-version=3 glusterfs-api; then
3505 glusterfs="yes"
3506 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3507 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3508 if $pkg_config --atleast-version=4 glusterfs-api; then
3509 glusterfs_xlator_opt="yes"
3510 fi
3511 if $pkg_config --atleast-version=5 glusterfs-api; then
3512 glusterfs_discard="yes"
3513 fi
3514 if $pkg_config --atleast-version=6 glusterfs-api; then
3515 glusterfs_zerofill="yes"
3516 fi
3517 else
3518 if test "$glusterfs" = "yes" ; then
3519 feature_not_found "GlusterFS backend support" \
3520 "Install glusterfs-api devel >= 3"
3521 fi
3522 glusterfs="no"
3523 fi
3524 fi
3525
3526 # Check for inotify functions when we are building linux-user
3527 # emulator. This is done because older glibc versions don't
3528 # have syscall stubs for these implemented. In that case we
3529 # don't provide them even if kernel supports them.
3530 #
3531 inotify=no
3532 cat > $TMPC << EOF
3533 #include <sys/inotify.h>
3534
3535 int
3536 main(void)
3537 {
3538 /* try to start inotify */
3539 return inotify_init();
3540 }
3541 EOF
3542 if compile_prog "" "" ; then
3543 inotify=yes
3544 fi
3545
3546 inotify1=no
3547 cat > $TMPC << EOF
3548 #include <sys/inotify.h>
3549
3550 int
3551 main(void)
3552 {
3553 /* try to start inotify */
3554 return inotify_init1(0);
3555 }
3556 EOF
3557 if compile_prog "" "" ; then
3558 inotify1=yes
3559 fi
3560
3561 # check if utimensat and futimens are supported
3562 utimens=no
3563 cat > $TMPC << EOF
3564 #define _ATFILE_SOURCE
3565 #include <stddef.h>
3566 #include <fcntl.h>
3567 #include <sys/stat.h>
3568
3569 int main(void)
3570 {
3571 utimensat(AT_FDCWD, "foo", NULL, 0);
3572 futimens(0, NULL);
3573 return 0;
3574 }
3575 EOF
3576 if compile_prog "" "" ; then
3577 utimens=yes
3578 fi
3579
3580 # check if pipe2 is there
3581 pipe2=no
3582 cat > $TMPC << EOF
3583 #include <unistd.h>
3584 #include <fcntl.h>
3585
3586 int main(void)
3587 {
3588 int pipefd[2];
3589 return pipe2(pipefd, O_CLOEXEC);
3590 }
3591 EOF
3592 if compile_prog "" "" ; then
3593 pipe2=yes
3594 fi
3595
3596 # check if accept4 is there
3597 accept4=no
3598 cat > $TMPC << EOF
3599 #include <sys/socket.h>
3600 #include <stddef.h>
3601
3602 int main(void)
3603 {
3604 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3605 return 0;
3606 }
3607 EOF
3608 if compile_prog "" "" ; then
3609 accept4=yes
3610 fi
3611
3612 # check if tee/splice is there. vmsplice was added same time.
3613 splice=no
3614 cat > $TMPC << EOF
3615 #include <unistd.h>
3616 #include <fcntl.h>
3617 #include <limits.h>
3618
3619 int main(void)
3620 {
3621 int len, fd = 0;
3622 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3623 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3624 return 0;
3625 }
3626 EOF
3627 if compile_prog "" "" ; then
3628 splice=yes
3629 fi
3630
3631 ##########################################
3632 # libnuma probe
3633
3634 if test "$numa" != "no" ; then
3635 cat > $TMPC << EOF
3636 #include <numa.h>
3637 int main(void) { return numa_available(); }
3638 EOF
3639
3640 if compile_prog "" "-lnuma" ; then
3641 numa=yes
3642 libs_softmmu="-lnuma $libs_softmmu"
3643 else
3644 if test "$numa" = "yes" ; then
3645 feature_not_found "numa" "install numactl devel"
3646 fi
3647 numa=no
3648 fi
3649 fi
3650
3651 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3652 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3653 exit 1
3654 fi
3655
3656 ##########################################
3657 # tcmalloc probe
3658
3659 if test "$tcmalloc" = "yes" ; then
3660 cat > $TMPC << EOF
3661 #include <stdlib.h>
3662 int main(void) { malloc(1); return 0; }
3663 EOF
3664
3665 if compile_prog "" "-ltcmalloc" ; then
3666 LIBS="-ltcmalloc $LIBS"
3667 else
3668 feature_not_found "tcmalloc" "install gperftools devel"
3669 fi
3670 fi
3671
3672 ##########################################
3673 # jemalloc probe
3674
3675 if test "$jemalloc" = "yes" ; then
3676 cat > $TMPC << EOF
3677 #include <stdlib.h>
3678 int main(void) { malloc(1); return 0; }
3679 EOF
3680
3681 if compile_prog "" "-ljemalloc" ; then
3682 LIBS="-ljemalloc $LIBS"
3683 else
3684 feature_not_found "jemalloc" "install jemalloc devel"
3685 fi
3686 fi
3687
3688 ##########################################
3689 # signalfd probe
3690 signalfd="no"
3691 cat > $TMPC << EOF
3692 #include <unistd.h>
3693 #include <sys/syscall.h>
3694 #include <signal.h>
3695 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3696 EOF
3697
3698 if compile_prog "" "" ; then
3699 signalfd=yes
3700 fi
3701
3702 # check if eventfd is supported
3703 eventfd=no
3704 cat > $TMPC << EOF
3705 #include <sys/eventfd.h>
3706
3707 int main(void)
3708 {
3709 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3710 }
3711 EOF
3712 if compile_prog "" "" ; then
3713 eventfd=yes
3714 fi
3715
3716 # check if memfd is supported
3717 memfd=no
3718 cat > $TMPC << EOF
3719 #include <sys/memfd.h>
3720
3721 int main(void)
3722 {
3723 return memfd_create("foo", MFD_ALLOW_SEALING);
3724 }
3725 EOF
3726 if compile_prog "" "" ; then
3727 memfd=yes
3728 fi
3729
3730
3731
3732 # check for fallocate
3733 fallocate=no
3734 cat > $TMPC << EOF
3735 #include <fcntl.h>
3736
3737 int main(void)
3738 {
3739 fallocate(0, 0, 0, 0);
3740 return 0;
3741 }
3742 EOF
3743 if compile_prog "" "" ; then
3744 fallocate=yes
3745 fi
3746
3747 # check for fallocate hole punching
3748 fallocate_punch_hole=no
3749 cat > $TMPC << EOF
3750 #include <fcntl.h>
3751 #include <linux/falloc.h>
3752
3753 int main(void)
3754 {
3755 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3756 return 0;
3757 }
3758 EOF
3759 if compile_prog "" "" ; then
3760 fallocate_punch_hole=yes
3761 fi
3762
3763 # check that fallocate supports range zeroing inside the file
3764 fallocate_zero_range=no
3765 cat > $TMPC << EOF
3766 #include <fcntl.h>
3767 #include <linux/falloc.h>
3768
3769 int main(void)
3770 {
3771 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3772 return 0;
3773 }
3774 EOF
3775 if compile_prog "" "" ; then
3776 fallocate_zero_range=yes
3777 fi
3778
3779 # check for posix_fallocate
3780 posix_fallocate=no
3781 cat > $TMPC << EOF
3782 #include <fcntl.h>
3783
3784 int main(void)
3785 {
3786 posix_fallocate(0, 0, 0);
3787 return 0;
3788 }
3789 EOF
3790 if compile_prog "" "" ; then
3791 posix_fallocate=yes
3792 fi
3793
3794 # check for sync_file_range
3795 sync_file_range=no
3796 cat > $TMPC << EOF
3797 #include <fcntl.h>
3798
3799 int main(void)
3800 {
3801 sync_file_range(0, 0, 0, 0);
3802 return 0;
3803 }
3804 EOF
3805 if compile_prog "" "" ; then
3806 sync_file_range=yes
3807 fi
3808
3809 # check for linux/fiemap.h and FS_IOC_FIEMAP
3810 fiemap=no
3811 cat > $TMPC << EOF
3812 #include <sys/ioctl.h>
3813 #include <linux/fs.h>
3814 #include <linux/fiemap.h>
3815
3816 int main(void)
3817 {
3818 ioctl(0, FS_IOC_FIEMAP, 0);
3819 return 0;
3820 }
3821 EOF
3822 if compile_prog "" "" ; then
3823 fiemap=yes
3824 fi
3825
3826 # check for dup3
3827 dup3=no
3828 cat > $TMPC << EOF
3829 #include <unistd.h>
3830
3831 int main(void)
3832 {
3833 dup3(0, 0, 0);
3834 return 0;
3835 }
3836 EOF
3837 if compile_prog "" "" ; then
3838 dup3=yes
3839 fi
3840
3841 # check for ppoll support
3842 ppoll=no
3843 cat > $TMPC << EOF
3844 #include <poll.h>
3845
3846 int main(void)
3847 {
3848 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3849 ppoll(&pfd, 1, 0, 0);
3850 return 0;
3851 }
3852 EOF
3853 if compile_prog "" "" ; then
3854 ppoll=yes
3855 fi
3856
3857 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3858 prctl_pr_set_timerslack=no
3859 cat > $TMPC << EOF
3860 #include <sys/prctl.h>
3861
3862 int main(void)
3863 {
3864 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3865 return 0;
3866 }
3867 EOF
3868 if compile_prog "" "" ; then
3869 prctl_pr_set_timerslack=yes
3870 fi
3871
3872 # check for epoll support
3873 epoll=no
3874 cat > $TMPC << EOF
3875 #include <sys/epoll.h>
3876
3877 int main(void)
3878 {
3879 epoll_create(0);
3880 return 0;
3881 }
3882 EOF
3883 if compile_prog "" "" ; then
3884 epoll=yes
3885 fi
3886
3887 # epoll_create1 is a later addition
3888 # so we must check separately for its presence
3889 epoll_create1=no
3890 cat > $TMPC << EOF
3891 #include <sys/epoll.h>
3892
3893 int main(void)
3894 {
3895 /* Note that we use epoll_create1 as a value, not as
3896 * a function being called. This is necessary so that on
3897 * old SPARC glibc versions where the function was present in
3898 * the library but not declared in the header file we will
3899 * fail the configure check. (Otherwise we will get a compiler
3900 * warning but not an error, and will proceed to fail the
3901 * qemu compile where we compile with -Werror.)
3902 */
3903 return (int)(uintptr_t)&epoll_create1;
3904 }
3905 EOF
3906 if compile_prog "" "" ; then
3907 epoll_create1=yes
3908 fi
3909
3910 # check for sendfile support
3911 sendfile=no
3912 cat > $TMPC << EOF
3913 #include <sys/sendfile.h>
3914
3915 int main(void)
3916 {
3917 return sendfile(0, 0, 0, 0);
3918 }
3919 EOF
3920 if compile_prog "" "" ; then
3921 sendfile=yes
3922 fi
3923
3924 # check for timerfd support (glibc 2.8 and newer)
3925 timerfd=no
3926 cat > $TMPC << EOF
3927 #include <sys/timerfd.h>
3928
3929 int main(void)
3930 {
3931 return(timerfd_create(CLOCK_REALTIME, 0));
3932 }
3933 EOF
3934 if compile_prog "" "" ; then
3935 timerfd=yes
3936 fi
3937
3938 # check for setns and unshare support
3939 setns=no
3940 cat > $TMPC << EOF
3941 #include <sched.h>
3942
3943 int main(void)
3944 {
3945 int ret;
3946 ret = setns(0, 0);
3947 ret = unshare(0);
3948 return ret;
3949 }
3950 EOF
3951 if compile_prog "" "" ; then
3952 setns=yes
3953 fi
3954
3955 # clock_adjtime probe
3956 clock_adjtime=no
3957 cat > $TMPC <<EOF
3958 #include <time.h>
3959
3960 int main(void)
3961 {
3962 return clock_adjtime(0, 0);
3963 }
3964 EOF
3965 clock_adjtime=no
3966 if compile_prog "" "" ; then
3967 clock_adjtime=yes
3968 fi
3969
3970 # syncfs probe
3971 syncfs=no
3972 cat > $TMPC <<EOF
3973 #include <unistd.h>
3974
3975 int main(void)
3976 {
3977 return syncfs(0);
3978 }
3979 EOF
3980 syncfs=no
3981 if compile_prog "" "" ; then
3982 syncfs=yes
3983 fi
3984
3985 # Check if tools are available to build documentation.
3986 if test "$docs" != "no" ; then
3987 if has makeinfo && has pod2man; then
3988 docs=yes
3989 else
3990 if test "$docs" = "yes" ; then
3991 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3992 fi
3993 docs=no
3994 fi
3995 fi
3996
3997 # Search for bswap_32 function
3998 byteswap_h=no
3999 cat > $TMPC << EOF
4000 #include <byteswap.h>
4001 int main(void) { return bswap_32(0); }
4002 EOF
4003 if compile_prog "" "" ; then
4004 byteswap_h=yes
4005 fi
4006
4007 # Search for bswap32 function
4008 bswap_h=no
4009 cat > $TMPC << EOF
4010 #include <sys/endian.h>
4011 #include <sys/types.h>
4012 #include <machine/bswap.h>
4013 int main(void) { return bswap32(0); }
4014 EOF
4015 if compile_prog "" "" ; then
4016 bswap_h=yes
4017 fi
4018
4019 ##########################################
4020 # Do we have libiscsi >= 1.9.0
4021 if test "$libiscsi" != "no" ; then
4022 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4023 libiscsi="yes"
4024 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4025 libiscsi_libs=$($pkg_config --libs libiscsi)
4026 else
4027 if test "$libiscsi" = "yes" ; then
4028 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4029 fi
4030 libiscsi="no"
4031 fi
4032 fi
4033
4034 ##########################################
4035 # Do we need libm
4036 cat > $TMPC << EOF
4037 #include <math.h>
4038 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4039 EOF
4040 if compile_prog "" "" ; then
4041 :
4042 elif compile_prog "" "-lm" ; then
4043 LIBS="-lm $LIBS"
4044 libs_qga="-lm $libs_qga"
4045 else
4046 error_exit "libm check failed"
4047 fi
4048
4049 ##########################################
4050 # Do we need librt
4051 # uClibc provides 2 versions of clock_gettime(), one with realtime
4052 # support and one without. This means that the clock_gettime() don't
4053 # need -lrt. We still need it for timer_create() so we check for this
4054 # function in addition.
4055 cat > $TMPC <<EOF
4056 #include <signal.h>
4057 #include <time.h>
4058 int main(void) {
4059 timer_create(CLOCK_REALTIME, NULL, NULL);
4060 return clock_gettime(CLOCK_REALTIME, NULL);
4061 }
4062 EOF
4063
4064 if compile_prog "" "" ; then
4065 :
4066 # we need pthread for static linking. use previous pthread test result
4067 elif compile_prog "" "$pthread_lib -lrt" ; then
4068 LIBS="$LIBS -lrt"
4069 libs_qga="$libs_qga -lrt"
4070 fi
4071
4072 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4073 "$aix" != "yes" -a "$haiku" != "yes" ; then
4074 libs_softmmu="-lutil $libs_softmmu"
4075 fi
4076
4077 ##########################################
4078 # spice probe
4079 if test "$spice" != "no" ; then
4080 cat > $TMPC << EOF
4081 #include <spice.h>
4082 int main(void) { spice_server_new(); return 0; }
4083 EOF
4084 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4085 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4086 if $pkg_config --atleast-version=0.12.0 spice-server && \
4087 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4088 compile_prog "$spice_cflags" "$spice_libs" ; then
4089 spice="yes"
4090 libs_softmmu="$libs_softmmu $spice_libs"
4091 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4092 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4093 spice_server_version=$($pkg_config --modversion spice-server)
4094 else
4095 if test "$spice" = "yes" ; then
4096 feature_not_found "spice" \
4097 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4098 fi
4099 spice="no"
4100 fi
4101 fi
4102
4103 # check for smartcard support
4104 smartcard_cflags=""
4105 if test "$smartcard" != "no"; then
4106 if $pkg_config libcacard; then
4107 libcacard_cflags=$($pkg_config --cflags libcacard)
4108 libcacard_libs=$($pkg_config --libs libcacard)
4109 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4110 libs_softmmu="$libs_softmmu $libcacard_libs"
4111 smartcard="yes"
4112 else
4113 if test "$smartcard" = "yes"; then
4114 feature_not_found "smartcard" "Install libcacard devel"
4115 fi
4116 smartcard="no"
4117 fi
4118 fi
4119
4120 # check for libusb
4121 if test "$libusb" != "no" ; then
4122 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4123 libusb="yes"
4124 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4125 libusb_libs=$($pkg_config --libs libusb-1.0)
4126 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4127 libs_softmmu="$libs_softmmu $libusb_libs"
4128 else
4129 if test "$libusb" = "yes"; then
4130 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4131 fi
4132 libusb="no"
4133 fi
4134 fi
4135
4136 # check for usbredirparser for usb network redirection support
4137 if test "$usb_redir" != "no" ; then
4138 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4139 usb_redir="yes"
4140 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4141 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4142 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4143 libs_softmmu="$libs_softmmu $usb_redir_libs"
4144 else
4145 if test "$usb_redir" = "yes"; then
4146 feature_not_found "usb-redir" "Install usbredir devel"
4147 fi
4148 usb_redir="no"
4149 fi
4150 fi
4151
4152 ##########################################
4153 # check if we have VSS SDK headers for win
4154
4155 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4156 case "$vss_win32_sdk" in
4157 "") vss_win32_include="-isystem $source_path" ;;
4158 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4159 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4160 vss_win32_include="-isystem $source_path/.sdk/vss"
4161 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4162 ;;
4163 *) vss_win32_include="-isystem $vss_win32_sdk"
4164 esac
4165 cat > $TMPC << EOF
4166 #define __MIDL_user_allocate_free_DEFINED__
4167 #include <inc/win2003/vss.h>
4168 int main(void) { return VSS_CTX_BACKUP; }
4169 EOF
4170 if compile_prog "$vss_win32_include" "" ; then
4171 guest_agent_with_vss="yes"
4172 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4173 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4174 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4175 else
4176 if test "$vss_win32_sdk" != "" ; then
4177 echo "ERROR: Please download and install Microsoft VSS SDK:"
4178 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4179 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4180 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4181 echo "ERROR: The headers are extracted in the directory \`inc'."
4182 feature_not_found "VSS support"
4183 fi
4184 guest_agent_with_vss="no"
4185 fi
4186 fi
4187
4188 ##########################################
4189 # lookup Windows platform SDK (if not specified)
4190 # The SDK is needed only to build .tlb (type library) file of guest agent
4191 # VSS provider from the source. It is usually unnecessary because the
4192 # pre-compiled .tlb file is included.
4193
4194 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4195 if test -z "$win_sdk"; then
4196 programfiles="$PROGRAMFILES"
4197 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4198 if test -n "$programfiles"; then
4199 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4200 else
4201 feature_not_found "Windows SDK"
4202 fi
4203 elif test "$win_sdk" = "no"; then
4204 win_sdk=""
4205 fi
4206 fi
4207
4208 ##########################################
4209 # check if mingw environment provides a recent ntddscsi.h
4210 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4211 cat > $TMPC << EOF
4212 #include <windows.h>
4213 #include <ntddscsi.h>
4214 int main(void) {
4215 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4216 #error Missing required ioctl definitions
4217 #endif
4218 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4219 return addr.Lun;
4220 }
4221 EOF
4222 if compile_prog "" "" ; then
4223 guest_agent_ntddscsi=yes
4224 libs_qga="-lsetupapi $libs_qga"
4225 fi
4226 fi
4227
4228 ##########################################
4229 # virgl renderer probe
4230
4231 if test "$virglrenderer" != "no" ; then
4232 cat > $TMPC << EOF
4233 #include <virglrenderer.h>
4234 int main(void) { virgl_renderer_poll(); return 0; }
4235 EOF
4236 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4237 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4238 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4239 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4240 virglrenderer="yes"
4241 else
4242 if test "$virglrenderer" = "yes" ; then
4243 feature_not_found "virglrenderer"
4244 fi
4245 virglrenderer="no"
4246 fi
4247 fi
4248
4249 ##########################################
4250 # check if we have fdatasync
4251
4252 fdatasync=no
4253 cat > $TMPC << EOF
4254 #include <unistd.h>
4255 int main(void) {
4256 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4257 return fdatasync(0);
4258 #else
4259 #error Not supported
4260 #endif
4261 }
4262 EOF
4263 if compile_prog "" "" ; then
4264 fdatasync=yes
4265 fi
4266
4267 ##########################################
4268 # check if we have madvise
4269
4270 madvise=no
4271 cat > $TMPC << EOF
4272 #include <sys/types.h>
4273 #include <sys/mman.h>
4274 #include <stddef.h>
4275 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4276 EOF
4277 if compile_prog "" "" ; then
4278 madvise=yes
4279 fi
4280
4281 ##########################################
4282 # check if we have posix_madvise
4283
4284 posix_madvise=no
4285 cat > $TMPC << EOF
4286 #include <sys/mman.h>
4287 #include <stddef.h>
4288 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4289 EOF
4290 if compile_prog "" "" ; then
4291 posix_madvise=yes
4292 fi
4293
4294 ##########################################
4295 # check if we have posix_syslog
4296
4297 posix_syslog=no
4298 cat > $TMPC << EOF
4299 #include <syslog.h>
4300 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4301 EOF
4302 if compile_prog "" "" ; then
4303 posix_syslog=yes
4304 fi
4305
4306 ##########################################
4307 # check if trace backend exists
4308
4309 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4310 if test "$?" -ne 0 ; then
4311 error_exit "invalid trace backends" \
4312 "Please choose supported trace backends."
4313 fi
4314
4315 ##########################################
4316 # For 'ust' backend, test if ust headers are present
4317 if have_backend "ust"; then
4318 cat > $TMPC << EOF
4319 #include <lttng/tracepoint.h>
4320 int main(void) { return 0; }
4321 EOF
4322 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4323 if $pkg_config lttng-ust --exists; then
4324 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4325 else
4326 lttng_ust_libs="-llttng-ust -ldl"
4327 fi
4328 if $pkg_config liburcu-bp --exists; then
4329 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4330 else
4331 urcu_bp_libs="-lurcu-bp"
4332 fi
4333
4334 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4335 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4336 else
4337 error_exit "Trace backend 'ust' missing lttng-ust header files"
4338 fi
4339 fi
4340
4341 ##########################################
4342 # For 'dtrace' backend, test if 'dtrace' command is present
4343 if have_backend "dtrace"; then
4344 if ! has 'dtrace' ; then
4345 error_exit "dtrace command is not found in PATH $PATH"
4346 fi
4347 trace_backend_stap="no"
4348 if has 'stap' ; then
4349 trace_backend_stap="yes"
4350 fi
4351 fi
4352
4353 ##########################################
4354 # check and set a backend for coroutine
4355
4356 # We prefer ucontext, but it's not always possible. The fallback
4357 # is sigcontext. gthread is not selectable except explicitly, because
4358 # it is not functional enough to run QEMU proper. (It is occasionally
4359 # useful for debugging purposes.) On Windows the only valid backend
4360 # is the Windows-specific one.
4361
4362 ucontext_works=no
4363 if test "$darwin" != "yes"; then
4364 cat > $TMPC << EOF
4365 #include <ucontext.h>
4366 #ifdef __stub_makecontext
4367 #error Ignoring glibc stub makecontext which will always fail
4368 #endif
4369 int main(void) { makecontext(0, 0, 0); return 0; }
4370 EOF
4371 if compile_prog "" "" ; then
4372 ucontext_works=yes
4373 fi
4374 fi
4375
4376 if test "$coroutine" = ""; then
4377 if test "$mingw32" = "yes"; then
4378 coroutine=win32
4379 elif test "$ucontext_works" = "yes"; then
4380 coroutine=ucontext
4381 else
4382 coroutine=sigaltstack
4383 fi
4384 else
4385 case $coroutine in
4386 windows)
4387 if test "$mingw32" != "yes"; then
4388 error_exit "'windows' coroutine backend only valid for Windows"
4389 fi
4390 # Unfortunately the user visible backend name doesn't match the
4391 # coroutine-*.c filename for this case, so we have to adjust it here.
4392 coroutine=win32
4393 ;;
4394 ucontext)
4395 if test "$ucontext_works" != "yes"; then
4396 feature_not_found "ucontext"
4397 fi
4398 ;;
4399 gthread|sigaltstack)
4400 if test "$mingw32" = "yes"; then
4401 error_exit "only the 'windows' coroutine backend is valid for Windows"
4402 fi
4403 ;;
4404 *)
4405 error_exit "unknown coroutine backend $coroutine"
4406 ;;
4407 esac
4408 fi
4409
4410 if test "$coroutine_pool" = ""; then
4411 if test "$coroutine" = "gthread"; then
4412 coroutine_pool=no
4413 else
4414 coroutine_pool=yes
4415 fi
4416 fi
4417 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4418 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4419 fi
4420
4421 if test "$debug_stack_usage" = "yes"; then
4422 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4423 error_exit "stack usage debugging is not supported for $cpu"
4424 fi
4425 if test "$coroutine_pool" = "yes"; then
4426 echo "WARN: disabling coroutine pool for stack usage debugging"
4427 coroutine_pool=no
4428 fi
4429 fi
4430
4431
4432 ##########################################
4433 # check if we have open_by_handle_at
4434
4435 open_by_handle_at=no
4436 cat > $TMPC << EOF
4437 #include <fcntl.h>
4438 #if !defined(AT_EMPTY_PATH)
4439 # error missing definition
4440 #else
4441 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4442 #endif
4443 EOF
4444 if compile_prog "" "" ; then
4445 open_by_handle_at=yes
4446 fi
4447
4448 ########################################
4449 # check if we have linux/magic.h
4450
4451 linux_magic_h=no
4452 cat > $TMPC << EOF
4453 #include <linux/magic.h>
4454 int main(void) {
4455 return 0;
4456 }
4457 EOF
4458 if compile_prog "" "" ; then
4459 linux_magic_h=yes
4460 fi
4461
4462 ########################################
4463 # check whether we can disable warning option with a pragma (this is needed
4464 # to silence warnings in the headers of some versions of external libraries).
4465 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4466 # only a warning.
4467 #
4468 # If we can't selectively disable warning in the code, disable -Werror so that
4469 # the build doesn't fail anyway.
4470
4471 pragma_disable_unused_but_set=no
4472 cat > $TMPC << EOF
4473 #pragma GCC diagnostic push
4474 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4475 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4476 #pragma GCC diagnostic pop
4477
4478 int main(void) {
4479 return 0;
4480 }
4481 EOF
4482 if compile_prog "-Werror" "" ; then
4483 pragma_diagnostic_available=yes
4484 else
4485 werror=no
4486 fi
4487
4488 ########################################
4489 # check if we have valgrind/valgrind.h
4490
4491 valgrind_h=no
4492 cat > $TMPC << EOF
4493 #include <valgrind/valgrind.h>
4494 int main(void) {
4495 return 0;
4496 }
4497 EOF
4498 if compile_prog "" "" ; then
4499 valgrind_h=yes
4500 fi
4501
4502 ########################################
4503 # check if environ is declared
4504
4505 has_environ=no
4506 cat > $TMPC << EOF
4507 #include <unistd.h>
4508 int main(void) {
4509 environ = 0;
4510 return 0;
4511 }
4512 EOF
4513 if compile_prog "" "" ; then
4514 has_environ=yes
4515 fi
4516
4517 ########################################
4518 # check if cpuid.h is usable.
4519
4520 cpuid_h=no
4521 cat > $TMPC << EOF
4522 #include <cpuid.h>
4523 int main(void) {
4524 unsigned a, b, c, d;
4525 int max = __get_cpuid_max(0, 0);
4526
4527 if (max >= 1) {
4528 __cpuid(1, a, b, c, d);
4529 }
4530
4531 if (max >= 7) {
4532 __cpuid_count(7, 0, a, b, c, d);
4533 }
4534
4535 return 0;
4536 }
4537 EOF
4538 if compile_prog "" "" ; then
4539 cpuid_h=yes
4540 fi
4541
4542 ########################################
4543 # check if __[u]int128_t is usable.
4544
4545 int128=no
4546 cat > $TMPC << EOF
4547 #if defined(__clang_major__) && defined(__clang_minor__)
4548 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4549 # error __int128_t does not work in CLANG before 3.2
4550 # endif
4551 #endif
4552 __int128_t a;
4553 __uint128_t b;
4554 int main (void) {
4555 a = a + b;
4556 b = a * b;
4557 a = a * a;
4558 return 0;
4559 }
4560 EOF
4561 if compile_prog "" "" ; then
4562 int128=yes
4563 fi
4564
4565 #########################################
4566 # See if 128-bit atomic operations are supported.
4567
4568 atomic128=no
4569 if test "$int128" = "yes"; then
4570 cat > $TMPC << EOF
4571 int main(void)
4572 {
4573 unsigned __int128 x = 0, y = 0;
4574 y = __atomic_load_16(&x, 0);
4575 __atomic_store_16(&x, y, 0);
4576 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4577 return 0;
4578 }
4579 EOF
4580 if compile_prog "" "" ; then
4581 atomic128=yes
4582 fi
4583 fi
4584
4585 #########################################
4586 # See if 64-bit atomic operations are supported.
4587 # Note that without __atomic builtins, we can only
4588 # assume atomic loads/stores max at pointer size.
4589
4590 cat > $TMPC << EOF
4591 #include <stdint.h>
4592 int main(void)
4593 {
4594 uint64_t x = 0, y = 0;
4595 #ifdef __ATOMIC_RELAXED
4596 y = __atomic_load_8(&x, 0);
4597 __atomic_store_8(&x, y, 0);
4598 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4599 __atomic_exchange_8(&x, y, 0);
4600 __atomic_fetch_add_8(&x, y, 0);
4601 #else
4602 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4603 __sync_lock_test_and_set(&x, y);
4604 __sync_val_compare_and_swap(&x, y, 0);
4605 __sync_fetch_and_add(&x, y);
4606 #endif
4607 return 0;
4608 }
4609 EOF
4610 if compile_prog "" "" ; then
4611 atomic64=yes
4612 fi
4613
4614 ########################################
4615 # check if getauxval is available.
4616
4617 getauxval=no
4618 cat > $TMPC << EOF
4619 #include <sys/auxv.h>
4620 int main(void) {
4621 return getauxval(AT_HWCAP) == 0;
4622 }
4623 EOF
4624 if compile_prog "" "" ; then
4625 getauxval=yes
4626 fi
4627
4628 ########################################
4629 # check if ccache is interfering with
4630 # semantic analysis of macros
4631
4632 unset CCACHE_CPP2
4633 ccache_cpp2=no
4634 cat > $TMPC << EOF
4635 static const int Z = 1;
4636 #define fn() ({ Z; })
4637 #define TAUT(X) ((X) == Z)
4638 #define PAREN(X, Y) (X == Y)
4639 #define ID(X) (X)
4640 int main(int argc, char *argv[])
4641 {
4642 int x = 0, y = 0;
4643 x = ID(x);
4644 x = fn();
4645 fn();
4646 if (PAREN(x, y)) return 0;
4647 if (TAUT(Z)) return 0;
4648 return 0;
4649 }
4650 EOF
4651
4652 if ! compile_object "-Werror"; then
4653 ccache_cpp2=yes
4654 fi
4655
4656 #################################################
4657 # clang does not support glibc + FORTIFY_SOURCE.
4658
4659 if test "$fortify_source" != "no"; then
4660 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4661 fortify_source="no";
4662 elif test -n "$cxx" &&
4663 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4664 fortify_source="no";
4665 else
4666 fortify_source="yes"
4667 fi
4668 fi
4669
4670 ##########################################
4671 # check if struct fsxattr is available via linux/fs.h
4672
4673 have_fsxattr=no
4674 cat > $TMPC << EOF
4675 #include <linux/fs.h>
4676 struct fsxattr foo;
4677 int main(void) {
4678 return 0;
4679 }
4680 EOF
4681 if compile_prog "" "" ; then
4682 have_fsxattr=yes
4683 fi
4684
4685 ##########################################
4686 # check if rtnetlink.h exists and is useful
4687 have_rtnetlink=no
4688 cat > $TMPC << EOF
4689 #include <linux/rtnetlink.h>
4690 int main(void) {
4691 return IFLA_PROTO_DOWN;
4692 }
4693 EOF
4694 if compile_prog "" "" ; then
4695 have_rtnetlink=yes
4696 fi
4697
4698 ##########################################
4699 # check for usable AF_VSOCK environment
4700 have_af_vsock=no
4701 cat > $TMPC << EOF
4702 #include <errno.h>
4703 #include <sys/types.h>
4704 #include <sys/socket.h>
4705 #if !defined(AF_VSOCK)
4706 # error missing AF_VSOCK flag
4707 #endif
4708 #include <linux/vm_sockets.h>
4709 int main(void) {
4710 int sock, ret;
4711 struct sockaddr_vm svm;
4712 socklen_t len = sizeof(svm);
4713 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4714 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4715 if ((ret == -1) && (errno == ENOTCONN)) {
4716 return 0;
4717 }
4718 return -1;
4719 }
4720 EOF
4721 if compile_prog "" "" ; then
4722 have_af_vsock=yes
4723 fi
4724
4725 #################################################
4726 # Sparc implicitly links with --relax, which is
4727 # incompatible with -r, so --no-relax should be
4728 # given. It does no harm to give it on other
4729 # platforms too.
4730
4731 # Note: the prototype is needed since QEMU_CFLAGS
4732 # contains -Wmissing-prototypes
4733 cat > $TMPC << EOF
4734 extern int foo(void);
4735 int foo(void) { return 0; }
4736 EOF
4737 if ! compile_object ""; then
4738 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4739 fi
4740 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4741 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4742 LD_REL_FLAGS=$i
4743 break
4744 fi
4745 done
4746 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4747 feature_not_found "modules" "Cannot find how to build relocatable objects"
4748 fi
4749
4750 ##########################################
4751 # End of CC checks
4752 # After here, no more $cc or $ld runs
4753
4754 if test "$gcov" = "yes" ; then
4755 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4756 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4757 elif test "$fortify_source" = "yes" ; then
4758 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4759 elif test "$debug" = "no"; then
4760 CFLAGS="-O2 $CFLAGS"
4761 fi
4762
4763 ##########################################
4764 # Do we have libnfs
4765 if test "$libnfs" != "no" ; then
4766 if $pkg_config --atleast-version=1.9.3 libnfs; then
4767 libnfs="yes"
4768 libnfs_libs=$($pkg_config --libs libnfs)
4769 else
4770 if test "$libnfs" = "yes" ; then
4771 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4772 fi
4773 libnfs="no"
4774 fi
4775 fi
4776
4777 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4778 if test "$werror" = "yes"; then
4779 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4780 fi
4781
4782 if test "$solaris" = "no" ; then
4783 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4784 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4785 fi
4786 fi
4787
4788 # test if pod2man has --utf8 option
4789 if pod2man --help | grep -q utf8; then
4790 POD2MAN="pod2man --utf8"
4791 else
4792 POD2MAN="pod2man"
4793 fi
4794
4795 # Use ASLR, no-SEH and DEP if available
4796 if test "$mingw32" = "yes" ; then
4797 for flag in --dynamicbase --no-seh --nxcompat; do
4798 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4799 LDFLAGS="-Wl,$flag $LDFLAGS"
4800 fi
4801 done
4802 fi
4803
4804 qemu_confdir=$sysconfdir$confsuffix
4805 qemu_moddir=$libdir$confsuffix
4806 qemu_datadir=$datadir$confsuffix
4807 qemu_localedir="$datadir/locale"
4808
4809 tools=""
4810 if test "$want_tools" = "yes" ; then
4811 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4812 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4813 tools="qemu-nbd\$(EXESUF) $tools"
4814 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4815 fi
4816 fi
4817 if test "$softmmu" = yes ; then
4818 if test "$virtfs" != no ; then
4819 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4820 virtfs=yes
4821 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4822 else
4823 if test "$virtfs" = yes; then
4824 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
4825 fi
4826 virtfs=no
4827 fi
4828 fi
4829 fi
4830
4831 # Probe for guest agent support/options
4832
4833 if [ "$guest_agent" != "no" ]; then
4834 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4835 tools="qemu-ga $tools"
4836 guest_agent=yes
4837 elif [ "$guest_agent" != yes ]; then
4838 guest_agent=no
4839 else
4840 error_exit "Guest agent is not supported on this platform"
4841 fi
4842 fi
4843
4844 # Guest agent Window MSI package
4845
4846 if test "$guest_agent" != yes; then
4847 if test "$guest_agent_msi" = yes; then
4848 error_exit "MSI guest agent package requires guest agent enabled"
4849 fi
4850 guest_agent_msi=no
4851 elif test "$mingw32" != "yes"; then
4852 if test "$guest_agent_msi" = "yes"; then
4853 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4854 fi
4855 guest_agent_msi=no
4856 elif ! has wixl; then
4857 if test "$guest_agent_msi" = "yes"; then
4858 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4859 fi
4860 guest_agent_msi=no
4861 else
4862 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4863 # disabled explicitly
4864 if test "$guest_agent_msi" != "no"; then
4865 guest_agent_msi=yes
4866 fi
4867 fi
4868
4869 if test "$guest_agent_msi" = "yes"; then
4870 if test "$guest_agent_with_vss" = "yes"; then
4871 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4872 fi
4873
4874 if test "$QEMU_GA_MANUFACTURER" = ""; then
4875 QEMU_GA_MANUFACTURER=QEMU
4876 fi
4877
4878 if test "$QEMU_GA_DISTRO" = ""; then
4879 QEMU_GA_DISTRO=Linux
4880 fi
4881
4882 if test "$QEMU_GA_VERSION" = ""; then
4883 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4884 fi
4885
4886 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
4887
4888 case "$cpu" in
4889 x86_64)
4890 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4891 ;;
4892 i386)
4893 QEMU_GA_MSI_ARCH="-D Arch=32"
4894 ;;
4895 *)
4896 error_exit "CPU $cpu not supported for building installation package"
4897 ;;
4898 esac
4899 fi
4900
4901 # Mac OS X ships with a broken assembler
4902 roms=
4903 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4904 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4905 "$softmmu" = yes ; then
4906 # Different host OS linkers have different ideas about the name of the ELF
4907 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
4908 # variant; and Windows uses i386pe.
4909 for emu in elf_i386 elf_i386_fbsd i386pe; do
4910 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4911 ld_i386_emulation="$emu"
4912 roms="optionrom"
4913 break
4914 fi
4915 done
4916 fi
4917 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4918 roms="$roms spapr-rtas"
4919 fi
4920
4921 if test "$cpu" = "s390x" ; then
4922 roms="$roms s390-ccw"
4923 fi
4924
4925 # Probe for the need for relocating the user-only binary.
4926 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
4927 textseg_addr=
4928 case "$cpu" in
4929 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4930 # ??? Rationale for choosing this address
4931 textseg_addr=0x60000000
4932 ;;
4933 mips)
4934 # A 256M aligned address, high in the address space, with enough
4935 # room for the code_gen_buffer above it before the stack.
4936 textseg_addr=0x60000000
4937 ;;
4938 esac
4939 if [ -n "$textseg_addr" ]; then
4940 cat > $TMPC <<EOF
4941 int main(void) { return 0; }
4942 EOF
4943 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4944 if ! compile_prog "" "$textseg_ldflags"; then
4945 # In case ld does not support -Ttext-segment, edit the default linker
4946 # script via sed to set the .text start addr. This is needed on FreeBSD
4947 # at least.
4948 if ! $ld --verbose >/dev/null 2>&1; then
4949 error_exit \
4950 "We need to link the QEMU user mode binaries at a" \
4951 "specific text address. Unfortunately your linker" \
4952 "doesn't support either the -Ttext-segment option or" \
4953 "printing the default linker script with --verbose." \
4954 "If you don't want the user mode binaries, pass the" \
4955 "--disable-user option to configure."
4956 fi
4957
4958 $ld --verbose | sed \
4959 -e '1,/==================================================/d' \
4960 -e '/==================================================/,$d' \
4961 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4962 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4963 textseg_ldflags="-Wl,-T../config-host.ld"
4964 fi
4965 fi
4966 fi
4967
4968 echo_version() {
4969 if test "$1" = "yes" ; then
4970 echo "($2)"
4971 fi
4972 }
4973
4974 # prepend pixman and ftd flags after all config tests are done
4975 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4976 libs_softmmu="$pixman_libs $libs_softmmu"
4977
4978 echo "Install prefix $prefix"
4979 echo "BIOS directory $(eval echo $qemu_datadir)"
4980 echo "binary directory $(eval echo $bindir)"
4981 echo "library directory $(eval echo $libdir)"
4982 echo "module directory $(eval echo $qemu_moddir)"
4983 echo "libexec directory $(eval echo $libexecdir)"
4984 echo "include directory $(eval echo $includedir)"
4985 echo "config directory $(eval echo $sysconfdir)"
4986 if test "$mingw32" = "no" ; then
4987 echo "local state directory $(eval echo $local_statedir)"
4988 echo "Manual directory $(eval echo $mandir)"
4989 echo "ELF interp prefix $interp_prefix"
4990 else
4991 echo "local state directory queried at runtime"
4992 echo "Windows SDK $win_sdk"
4993 fi
4994 echo "Source path $source_path"
4995 echo "C compiler $cc"
4996 echo "Host C compiler $host_cc"
4997 echo "C++ compiler $cxx"
4998 echo "Objective-C compiler $objcc"
4999 echo "ARFLAGS $ARFLAGS"
5000 echo "CFLAGS $CFLAGS"
5001 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5002 echo "LDFLAGS $LDFLAGS"
5003 echo "make $make"
5004 echo "install $install"
5005 echo "python $python"
5006 if test "$slirp" = "yes" ; then
5007 echo "smbd $smbd"
5008 fi
5009 echo "module support $modules"
5010 echo "host CPU $cpu"
5011 echo "host big endian $bigendian"
5012 echo "target list $target_list"
5013 echo "tcg debug enabled $debug_tcg"
5014 echo "gprof enabled $gprof"
5015 echo "sparse enabled $sparse"
5016 echo "strip binaries $strip_opt"
5017 echo "profiler $profiler"
5018 echo "static build $static"
5019 if test "$darwin" = "yes" ; then
5020 echo "Cocoa support $cocoa"
5021 fi
5022 echo "pixman $pixman"
5023 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5024 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5025 echo "GTK GL support $gtk_gl"
5026 echo "VTE support $vte $(echo_version $vte $vteversion)"
5027 echo "TLS priority $tls_priority"
5028 echo "GNUTLS support $gnutls"
5029 echo "GNUTLS rnd $gnutls_rnd"
5030 echo "libgcrypt $gcrypt"
5031 echo "libgcrypt kdf $gcrypt_kdf"
5032 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5033 echo "nettle kdf $nettle_kdf"
5034 echo "libtasn1 $tasn1"
5035 echo "curses support $curses"
5036 echo "virgl support $virglrenderer"
5037 echo "curl support $curl"
5038 echo "mingw32 support $mingw32"
5039 echo "Audio drivers $audio_drv_list"
5040 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5041 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5042 echo "VirtFS support $virtfs"
5043 echo "VNC support $vnc"
5044 if test "$vnc" = "yes" ; then
5045 echo "VNC SASL support $vnc_sasl"
5046 echo "VNC JPEG support $vnc_jpeg"
5047 echo "VNC PNG support $vnc_png"
5048 fi
5049 if test -n "$sparc_cpu"; then
5050 echo "Target Sparc Arch $sparc_cpu"
5051 fi
5052 echo "xen support $xen"
5053 if test "$xen" = "yes" ; then
5054 echo "xen ctrl version $xen_ctrl_version"
5055 echo "pv dom build $xen_pv_domain_build"
5056 fi
5057 echo "brlapi support $brlapi"
5058 echo "bluez support $bluez"
5059 echo "Documentation $docs"
5060 echo "PIE $pie"
5061 echo "vde support $vde"
5062 echo "netmap support $netmap"
5063 echo "Linux AIO support $linux_aio"
5064 echo "ATTR/XATTR support $attr"
5065 echo "Install blobs $blobs"
5066 echo "KVM support $kvm"
5067 echo "COLO support $colo"
5068 echo "RDMA support $rdma"
5069 echo "TCG interpreter $tcg_interpreter"
5070 echo "fdt support $fdt"
5071 echo "preadv support $preadv"
5072 echo "fdatasync $fdatasync"
5073 echo "madvise $madvise"
5074 echo "posix_madvise $posix_madvise"
5075 echo "libcap-ng support $cap_ng"
5076 echo "vhost-net support $vhost_net"
5077 echo "vhost-scsi support $vhost_scsi"
5078 echo "vhost-vsock support $vhost_vsock"
5079 echo "Trace backends $trace_backends"
5080 if have_backend "simple"; then
5081 echo "Trace output file $trace_file-<pid>"
5082 fi
5083 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5084 echo "rbd support $rbd"
5085 echo "xfsctl support $xfs"
5086 echo "smartcard support $smartcard"
5087 echo "libusb $libusb"
5088 echo "usb net redir $usb_redir"
5089 echo "OpenGL support $opengl"
5090 echo "OpenGL dmabufs $opengl_dmabuf"
5091 echo "libiscsi support $libiscsi"
5092 echo "libnfs support $libnfs"
5093 echo "build guest agent $guest_agent"
5094 echo "QGA VSS support $guest_agent_with_vss"
5095 echo "QGA w32 disk info $guest_agent_ntddscsi"
5096 echo "QGA MSI support $guest_agent_msi"
5097 echo "seccomp support $seccomp"
5098 echo "coroutine backend $coroutine"
5099 echo "coroutine pool $coroutine_pool"
5100 echo "debug stack usage $debug_stack_usage"
5101 echo "GlusterFS support $glusterfs"
5102 echo "Archipelago support $archipelago"
5103 echo "gcov $gcov_tool"
5104 echo "gcov enabled $gcov"
5105 echo "TPM support $tpm"
5106 echo "libssh2 support $libssh2"
5107 echo "TPM passthrough $tpm_passthrough"
5108 echo "QOM debugging $qom_cast_debug"
5109 echo "lzo support $lzo"
5110 echo "snappy support $snappy"
5111 echo "bzip2 support $bzip2"
5112 echo "NUMA host support $numa"
5113 echo "tcmalloc support $tcmalloc"
5114 echo "jemalloc support $jemalloc"
5115 echo "avx2 optimization $avx2_opt"
5116 echo "replication support $replication"
5117
5118 if test "$sdl_too_old" = "yes"; then
5119 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5120 fi
5121
5122 config_host_mak="config-host.mak"
5123
5124 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5125
5126 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5127 echo >> $config_host_mak
5128
5129 echo all: >> $config_host_mak
5130 echo "prefix=$prefix" >> $config_host_mak
5131 echo "bindir=$bindir" >> $config_host_mak
5132 echo "libdir=$libdir" >> $config_host_mak
5133 echo "libexecdir=$libexecdir" >> $config_host_mak
5134 echo "includedir=$includedir" >> $config_host_mak
5135 echo "mandir=$mandir" >> $config_host_mak
5136 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5137 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5138 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5139 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5140 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5141 if test "$mingw32" = "no" ; then
5142 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5143 fi
5144 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5145 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5146 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5147 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5148 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5149
5150 echo "ARCH=$ARCH" >> $config_host_mak
5151
5152 if test "$debug_tcg" = "yes" ; then
5153 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5154 fi
5155 if test "$strip_opt" = "yes" ; then
5156 echo "STRIP=${strip}" >> $config_host_mak
5157 fi
5158 if test "$bigendian" = "yes" ; then
5159 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5160 fi
5161 if test "$mingw32" = "yes" ; then
5162 echo "CONFIG_WIN32=y" >> $config_host_mak
5163 rc_version=$(cat $source_path/VERSION)
5164 version_major=${rc_version%%.*}
5165 rc_version=${rc_version#*.}
5166 version_minor=${rc_version%%.*}
5167 rc_version=${rc_version#*.}
5168 version_subminor=${rc_version%%.*}
5169 version_micro=0
5170 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5171 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5172 if test "$guest_agent_with_vss" = "yes" ; then
5173 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5174 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5175 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5176 fi
5177 if test "$guest_agent_ntddscsi" = "yes" ; then
5178 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5179 fi
5180 if test "$guest_agent_msi" = "yes"; then
5181 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5182 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5183 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5184 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5185 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5186 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5187 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5188 fi
5189 else
5190 echo "CONFIG_POSIX=y" >> $config_host_mak
5191 fi
5192
5193 if test "$linux" = "yes" ; then
5194 echo "CONFIG_LINUX=y" >> $config_host_mak
5195 fi
5196
5197 if test "$darwin" = "yes" ; then
5198 echo "CONFIG_DARWIN=y" >> $config_host_mak
5199 fi
5200
5201 if test "$aix" = "yes" ; then
5202 echo "CONFIG_AIX=y" >> $config_host_mak
5203 fi
5204
5205 if test "$solaris" = "yes" ; then
5206 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5207 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
5208 if test "$needs_libsunmath" = "yes" ; then
5209 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
5210 fi
5211 fi
5212 if test "$haiku" = "yes" ; then
5213 echo "CONFIG_HAIKU=y" >> $config_host_mak
5214 fi
5215 if test "$static" = "yes" ; then
5216 echo "CONFIG_STATIC=y" >> $config_host_mak
5217 fi
5218 if test "$profiler" = "yes" ; then
5219 echo "CONFIG_PROFILER=y" >> $config_host_mak
5220 fi
5221 if test "$slirp" = "yes" ; then
5222 echo "CONFIG_SLIRP=y" >> $config_host_mak
5223 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5224 fi
5225 if test "$vde" = "yes" ; then
5226 echo "CONFIG_VDE=y" >> $config_host_mak
5227 fi
5228 if test "$netmap" = "yes" ; then
5229 echo "CONFIG_NETMAP=y" >> $config_host_mak
5230 fi
5231 if test "$l2tpv3" = "yes" ; then
5232 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5233 fi
5234 if test "$cap_ng" = "yes" ; then
5235 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5236 fi
5237 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5238 for drv in $audio_drv_list; do
5239 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5240 echo "$def=y" >> $config_host_mak
5241 done
5242 if test "$audio_pt_int" = "yes" ; then
5243 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5244 fi
5245 if test "$audio_win_int" = "yes" ; then
5246 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5247 fi
5248 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5249 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5250 if test "$vnc" = "yes" ; then
5251 echo "CONFIG_VNC=y" >> $config_host_mak
5252 fi
5253 if test "$vnc_sasl" = "yes" ; then
5254 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5255 fi
5256 if test "$vnc_jpeg" = "yes" ; then
5257 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5258 fi
5259 if test "$vnc_png" = "yes" ; then
5260 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5261 fi
5262 if test "$fnmatch" = "yes" ; then
5263 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5264 fi
5265 if test "$xfs" = "yes" ; then
5266 echo "CONFIG_XFS=y" >> $config_host_mak
5267 fi
5268 qemu_version=$(head $source_path/VERSION)
5269 echo "VERSION=$qemu_version" >>$config_host_mak
5270 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5271 echo "SRC_PATH=$source_path" >> $config_host_mak
5272 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5273 if [ "$docs" = "yes" ] ; then
5274 echo "BUILD_DOCS=yes" >> $config_host_mak
5275 fi
5276 if test "$modules" = "yes"; then
5277 # $shacmd can generate a hash started with digit, which the compiler doesn't
5278 # like as an symbol. So prefix it with an underscore
5279 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5280 echo "CONFIG_MODULES=y" >> $config_host_mak
5281 fi
5282 if test "$sdl" = "yes" ; then
5283 echo "CONFIG_SDL=y" >> $config_host_mak
5284 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5285 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5286 fi
5287 if test "$cocoa" = "yes" ; then
5288 echo "CONFIG_COCOA=y" >> $config_host_mak
5289 fi
5290 if test "$curses" = "yes" ; then
5291 echo "CONFIG_CURSES=y" >> $config_host_mak
5292 fi
5293 if test "$utimens" = "yes" ; then
5294 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
5295 fi
5296 if test "$pipe2" = "yes" ; then
5297 echo "CONFIG_PIPE2=y" >> $config_host_mak
5298 fi
5299 if test "$accept4" = "yes" ; then
5300 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5301 fi
5302 if test "$splice" = "yes" ; then
5303 echo "CONFIG_SPLICE=y" >> $config_host_mak
5304 fi
5305 if test "$eventfd" = "yes" ; then
5306 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5307 fi
5308 if test "$memfd" = "yes" ; then
5309 echo "CONFIG_MEMFD=y" >> $config_host_mak
5310 fi
5311 if test "$fallocate" = "yes" ; then
5312 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5313 fi
5314 if test "$fallocate_punch_hole" = "yes" ; then
5315 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5316 fi
5317 if test "$fallocate_zero_range" = "yes" ; then
5318 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5319 fi
5320 if test "$posix_fallocate" = "yes" ; then
5321 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5322 fi
5323 if test "$sync_file_range" = "yes" ; then
5324 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5325 fi
5326 if test "$fiemap" = "yes" ; then
5327 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5328 fi
5329 if test "$dup3" = "yes" ; then
5330 echo "CONFIG_DUP3=y" >> $config_host_mak
5331 fi
5332 if test "$ppoll" = "yes" ; then
5333 echo "CONFIG_PPOLL=y" >> $config_host_mak
5334 fi
5335 if test "$prctl_pr_set_timerslack" = "yes" ; then
5336 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5337 fi
5338 if test "$epoll" = "yes" ; then
5339 echo "CONFIG_EPOLL=y" >> $config_host_mak
5340 fi
5341 if test "$epoll_create1" = "yes" ; then
5342 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5343 fi
5344 if test "$sendfile" = "yes" ; then
5345 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5346 fi
5347 if test "$timerfd" = "yes" ; then
5348 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5349 fi
5350 if test "$setns" = "yes" ; then
5351 echo "CONFIG_SETNS=y" >> $config_host_mak
5352 fi
5353 if test "$clock_adjtime" = "yes" ; then
5354 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5355 fi
5356 if test "$syncfs" = "yes" ; then
5357 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5358 fi
5359 if test "$inotify" = "yes" ; then
5360 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5361 fi
5362 if test "$inotify1" = "yes" ; then
5363 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5364 fi
5365 if test "$byteswap_h" = "yes" ; then
5366 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5367 fi
5368 if test "$bswap_h" = "yes" ; then
5369 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5370 fi
5371 if test "$curl" = "yes" ; then
5372 echo "CONFIG_CURL=m" >> $config_host_mak
5373 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5374 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5375 fi
5376 if test "$brlapi" = "yes" ; then
5377 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5378 fi
5379 if test "$bluez" = "yes" ; then
5380 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5381 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5382 fi
5383 if test "$glib_subprocess" = "yes" ; then
5384 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5385 fi
5386 if test "$gtk" = "yes" ; then
5387 echo "CONFIG_GTK=y" >> $config_host_mak
5388 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5389 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5390 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5391 if test "$gtk_gl" = "yes" ; then
5392 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5393 fi
5394 fi
5395 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5396 if test "$gnutls" = "yes" ; then
5397 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5398 fi
5399 if test "$gnutls_rnd" = "yes" ; then
5400 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5401 fi
5402 if test "$gcrypt" = "yes" ; then
5403 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5404 if test "$gcrypt_hmac" = "yes" ; then
5405 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5406 fi
5407 if test "$gcrypt_kdf" = "yes" ; then
5408 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5409 fi
5410 fi
5411 if test "$nettle" = "yes" ; then
5412 echo "CONFIG_NETTLE=y" >> $config_host_mak
5413 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5414 if test "$nettle_kdf" = "yes" ; then
5415 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5416 fi
5417 fi
5418 if test "$tasn1" = "yes" ; then
5419 echo "CONFIG_TASN1=y" >> $config_host_mak
5420 fi
5421 if test "$have_ifaddrs_h" = "yes" ; then
5422 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5423 fi
5424 if test "$have_broken_size_max" = "yes" ; then
5425 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5426 fi
5427
5428 # Work around a system header bug with some kernel/XFS header
5429 # versions where they both try to define 'struct fsxattr':
5430 # xfs headers will not try to redefine structs from linux headers
5431 # if this macro is set.
5432 if test "$have_fsxattr" = "yes" ; then
5433 echo "HAVE_FSXATTR=y" >> $config_host_mak
5434 fi
5435 if test "$vte" = "yes" ; then
5436 echo "CONFIG_VTE=y" >> $config_host_mak
5437 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5438 fi
5439 if test "$virglrenderer" = "yes" ; then
5440 echo "CONFIG_VIRGL=y" >> $config_host_mak
5441 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5442 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5443 fi
5444 if test "$xen" = "yes" ; then
5445 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5446 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5447 if test "$xen_pv_domain_build" = "yes" ; then
5448 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5449 fi
5450 fi
5451 if test "$linux_aio" = "yes" ; then
5452 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5453 fi
5454 if test "$attr" = "yes" ; then
5455 echo "CONFIG_ATTR=y" >> $config_host_mak
5456 fi
5457 if test "$libattr" = "yes" ; then
5458 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5459 fi
5460 if test "$virtfs" = "yes" ; then
5461 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5462 fi
5463 if test "$vhost_scsi" = "yes" ; then
5464 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5465 fi
5466 if test "$vhost_net" = "yes" ; then
5467 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5468 fi
5469 if test "$vhost_vsock" = "yes" ; then
5470 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5471 fi
5472 if test "$blobs" = "yes" ; then
5473 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5474 fi
5475 if test "$iovec" = "yes" ; then
5476 echo "CONFIG_IOVEC=y" >> $config_host_mak
5477 fi
5478 if test "$preadv" = "yes" ; then
5479 echo "CONFIG_PREADV=y" >> $config_host_mak
5480 fi
5481 if test "$fdt" = "yes" ; then
5482 echo "CONFIG_FDT=y" >> $config_host_mak
5483 fi
5484 if test "$signalfd" = "yes" ; then
5485 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5486 fi
5487 if test "$tcg_interpreter" = "yes" ; then
5488 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5489 fi
5490 if test "$fdatasync" = "yes" ; then
5491 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5492 fi
5493 if test "$madvise" = "yes" ; then
5494 echo "CONFIG_MADVISE=y" >> $config_host_mak
5495 fi
5496 if test "$posix_madvise" = "yes" ; then
5497 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5498 fi
5499
5500 if test "$spice" = "yes" ; then
5501 echo "CONFIG_SPICE=y" >> $config_host_mak
5502 fi
5503
5504 if test "$smartcard" = "yes" ; then
5505 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5506 fi
5507
5508 if test "$libusb" = "yes" ; then
5509 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5510 fi
5511
5512 if test "$usb_redir" = "yes" ; then
5513 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5514 fi
5515
5516 if test "$opengl" = "yes" ; then
5517 echo "CONFIG_OPENGL=y" >> $config_host_mak
5518 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5519 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5520 if test "$opengl_dmabuf" = "yes" ; then
5521 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5522 fi
5523 fi
5524
5525 if test "$avx2_opt" = "yes" ; then
5526 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5527 fi
5528
5529 if test "$lzo" = "yes" ; then
5530 echo "CONFIG_LZO=y" >> $config_host_mak
5531 fi
5532
5533 if test "$snappy" = "yes" ; then
5534 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5535 fi
5536
5537 if test "$bzip2" = "yes" ; then
5538 echo "CONFIG_BZIP2=y" >> $config_host_mak
5539 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5540 fi
5541
5542 if test "$libiscsi" = "yes" ; then
5543 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5544 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5545 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5546 fi
5547
5548 if test "$libnfs" = "yes" ; then
5549 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5550 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
5551 fi
5552
5553 if test "$seccomp" = "yes"; then
5554 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5555 fi
5556
5557 # XXX: suppress that
5558 if [ "$bsd" = "yes" ] ; then
5559 echo "CONFIG_BSD=y" >> $config_host_mak
5560 fi
5561
5562 if test "$localtime_r" = "yes" ; then
5563 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5564 fi
5565 if test "$qom_cast_debug" = "yes" ; then
5566 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5567 fi
5568 if test "$rbd" = "yes" ; then
5569 echo "CONFIG_RBD=m" >> $config_host_mak
5570 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5571 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5572 fi
5573
5574 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5575 if test "$coroutine_pool" = "yes" ; then
5576 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5577 else
5578 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5579 fi
5580
5581 if test "$debug_stack_usage" = "yes" ; then
5582 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5583 fi
5584
5585 if test "$open_by_handle_at" = "yes" ; then
5586 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5587 fi
5588
5589 if test "$linux_magic_h" = "yes" ; then
5590 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5591 fi
5592
5593 if test "$pragma_diagnostic_available" = "yes" ; then
5594 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5595 fi
5596
5597 if test "$valgrind_h" = "yes" ; then
5598 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5599 fi
5600
5601 if test "$has_environ" = "yes" ; then
5602 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5603 fi
5604
5605 if test "$cpuid_h" = "yes" ; then
5606 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5607 fi
5608
5609 if test "$int128" = "yes" ; then
5610 echo "CONFIG_INT128=y" >> $config_host_mak
5611 fi
5612
5613 if test "$atomic128" = "yes" ; then
5614 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5615 fi
5616
5617 if test "$atomic64" = "yes" ; then
5618 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5619 fi
5620
5621 if test "$getauxval" = "yes" ; then
5622 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5623 fi
5624
5625 if test "$glusterfs" = "yes" ; then
5626 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5627 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5628 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5629 fi
5630
5631 if test "$glusterfs_xlator_opt" = "yes" ; then
5632 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5633 fi
5634
5635 if test "$glusterfs_discard" = "yes" ; then
5636 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5637 fi
5638
5639 if test "$glusterfs_zerofill" = "yes" ; then
5640 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5641 fi
5642
5643 if test "$archipelago" = "yes" ; then
5644 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5645 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5646 fi
5647
5648 if test "$libssh2" = "yes" ; then
5649 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5650 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5651 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5652 fi
5653
5654 # USB host support
5655 if test "$libusb" = "yes"; then
5656 echo "HOST_USB=libusb legacy" >> $config_host_mak
5657 else
5658 echo "HOST_USB=stub" >> $config_host_mak
5659 fi
5660
5661 # TPM passthrough support?
5662 if test "$tpm" = "yes"; then
5663 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5664 if test "$tpm_passthrough" = "yes"; then
5665 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5666 fi
5667 fi
5668
5669 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5670 if have_backend "nop"; then
5671 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5672 fi
5673 if have_backend "simple"; then
5674 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5675 # Set the appropriate trace file.
5676 trace_file="\"$trace_file-\" FMT_pid"
5677 fi
5678 if have_backend "log"; then
5679 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5680 fi
5681 if have_backend "ust"; then
5682 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5683 fi
5684 if have_backend "dtrace"; then
5685 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5686 if test "$trace_backend_stap" = "yes" ; then
5687 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5688 fi
5689 fi
5690 if have_backend "ftrace"; then
5691 if test "$linux" = "yes" ; then
5692 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5693 else
5694 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5695 fi
5696 fi
5697 if have_backend "syslog"; then
5698 if test "$posix_syslog" = "yes" ; then
5699 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5700 else
5701 feature_not_found "syslog(trace backend)" "syslog not available"
5702 fi
5703 fi
5704 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5705
5706 if test "$colo" = "yes"; then
5707 echo "CONFIG_COLO=y" >> $config_host_mak
5708 fi
5709
5710 if test "$rdma" = "yes" ; then
5711 echo "CONFIG_RDMA=y" >> $config_host_mak
5712 fi
5713
5714 if test "$have_rtnetlink" = "yes" ; then
5715 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5716 fi
5717
5718 if test "$replication" = "yes" ; then
5719 echo "CONFIG_REPLICATION=y" >> $config_host_mak
5720 fi
5721
5722 if test "$have_af_vsock" = "yes" ; then
5723 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
5724 fi
5725
5726 # Hold two types of flag:
5727 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5728 # a thread we have a handle to
5729 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5730 # platform
5731 if test "$pthread_setname_np" = "yes" ; then
5732 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5733 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5734 fi
5735
5736 if test "$tcg_interpreter" = "yes"; then
5737 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5738 elif test "$ARCH" = "sparc64" ; then
5739 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5740 elif test "$ARCH" = "s390x" ; then
5741 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5742 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5743 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5744 elif test "$ARCH" = "ppc64" ; then
5745 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5746 else
5747 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5748 fi
5749 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5750
5751 echo "TOOLS=$tools" >> $config_host_mak
5752 echo "ROMS=$roms" >> $config_host_mak
5753 echo "MAKE=$make" >> $config_host_mak
5754 echo "INSTALL=$install" >> $config_host_mak
5755 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5756 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5757 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5758 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5759 echo "PYTHON=$python" >> $config_host_mak
5760 echo "CC=$cc" >> $config_host_mak
5761 if $iasl -h > /dev/null 2>&1; then
5762 echo "IASL=$iasl" >> $config_host_mak
5763 fi
5764 echo "CC_I386=$cc_i386" >> $config_host_mak
5765 echo "HOST_CC=$host_cc" >> $config_host_mak
5766 echo "CXX=$cxx" >> $config_host_mak
5767 echo "OBJCC=$objcc" >> $config_host_mak
5768 echo "AR=$ar" >> $config_host_mak
5769 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5770 echo "AS=$as" >> $config_host_mak
5771 echo "CCAS=$ccas" >> $config_host_mak
5772 echo "CPP=$cpp" >> $config_host_mak
5773 echo "OBJCOPY=$objcopy" >> $config_host_mak
5774 echo "LD=$ld" >> $config_host_mak
5775 echo "NM=$nm" >> $config_host_mak
5776 echo "WINDRES=$windres" >> $config_host_mak
5777 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5778 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5779 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5780 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5781 if test "$sparse" = "yes" ; then
5782 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5783 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5784 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5785 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5786 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5787 fi
5788 if test "$cross_prefix" != ""; then
5789 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5790 else
5791 echo "AUTOCONF_HOST := " >> $config_host_mak
5792 fi
5793 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5794 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5795 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
5796 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
5797 echo "LIBS+=$LIBS" >> $config_host_mak
5798 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5799 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
5800 echo "EXESUF=$EXESUF" >> $config_host_mak
5801 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5802 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5803 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5804 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5805 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5806 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5807 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5808 if test "$gcov" = "yes" ; then
5809 echo "CONFIG_GCOV=y" >> $config_host_mak
5810 echo "GCOV=$gcov_tool" >> $config_host_mak
5811 fi
5812
5813 # use included Linux headers
5814 if test "$linux" = "yes" ; then
5815 mkdir -p linux-headers
5816 case "$cpu" in
5817 i386|x86_64|x32)
5818 linux_arch=x86
5819 ;;
5820 ppcemb|ppc|ppc64)
5821 linux_arch=powerpc
5822 ;;
5823 s390x)
5824 linux_arch=s390
5825 ;;
5826 aarch64)
5827 linux_arch=arm64
5828 ;;
5829 mips64)
5830 linux_arch=mips
5831 ;;
5832 *)
5833 # For most CPUs the kernel architecture name and QEMU CPU name match.
5834 linux_arch="$cpu"
5835 ;;
5836 esac
5837 # For non-KVM architectures we will not have asm headers
5838 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5839 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5840 fi
5841 fi
5842
5843 for target in $target_list; do
5844 target_dir="$target"
5845 config_target_mak=$target_dir/config-target.mak
5846 target_name=$(echo $target | cut -d '-' -f 1)
5847 target_bigendian="no"
5848
5849 case "$target_name" in
5850 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5851 target_bigendian=yes
5852 ;;
5853 esac
5854 target_softmmu="no"
5855 target_user_only="no"
5856 target_linux_user="no"
5857 target_bsd_user="no"
5858 case "$target" in
5859 ${target_name}-softmmu)
5860 target_softmmu="yes"
5861 ;;
5862 ${target_name}-linux-user)
5863 if test "$linux" != "yes" ; then
5864 error_exit "Target '$target' is only available on a Linux host"
5865 fi
5866 target_user_only="yes"
5867 target_linux_user="yes"
5868 ;;
5869 ${target_name}-bsd-user)
5870 if test "$bsd" != "yes" ; then
5871 error_exit "Target '$target' is only available on a BSD host"
5872 fi
5873 target_user_only="yes"
5874 target_bsd_user="yes"
5875 ;;
5876 *)
5877 error_exit "Target '$target' not recognised"
5878 exit 1
5879 ;;
5880 esac
5881
5882 mkdir -p $target_dir
5883 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5884
5885 bflt="no"
5886 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
5887 gdb_xml_files=""
5888
5889 TARGET_ARCH="$target_name"
5890 TARGET_BASE_ARCH=""
5891 TARGET_ABI_DIR=""
5892
5893 case "$target_name" in
5894 i386)
5895 ;;
5896 x86_64)
5897 TARGET_BASE_ARCH=i386
5898 ;;
5899 alpha)
5900 ;;
5901 arm|armeb)
5902 TARGET_ARCH=arm
5903 bflt="yes"
5904 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5905 ;;
5906 aarch64)
5907 TARGET_BASE_ARCH=arm
5908 bflt="yes"
5909 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5910 ;;
5911 cris)
5912 ;;
5913 lm32)
5914 ;;
5915 m68k)
5916 bflt="yes"
5917 gdb_xml_files="cf-core.xml cf-fp.xml"
5918 ;;
5919 microblaze|microblazeel)
5920 TARGET_ARCH=microblaze
5921 bflt="yes"
5922 ;;
5923 mips|mipsel)
5924 TARGET_ARCH=mips
5925 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5926 ;;
5927 mipsn32|mipsn32el)
5928 TARGET_ARCH=mips64
5929 TARGET_BASE_ARCH=mips
5930 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5931 echo "TARGET_ABI32=y" >> $config_target_mak
5932 ;;
5933 mips64|mips64el)
5934 TARGET_ARCH=mips64
5935 TARGET_BASE_ARCH=mips
5936 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5937 ;;
5938 moxie)
5939 ;;
5940 or32)
5941 TARGET_ARCH=openrisc
5942 TARGET_BASE_ARCH=openrisc
5943 ;;
5944 ppc)
5945 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5946 ;;
5947 ppcemb)
5948 TARGET_BASE_ARCH=ppc
5949 TARGET_ABI_DIR=ppc
5950 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5951 ;;
5952 ppc64)
5953 TARGET_BASE_ARCH=ppc
5954 TARGET_ABI_DIR=ppc
5955 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5956 ;;
5957 ppc64le)
5958 TARGET_ARCH=ppc64
5959 TARGET_BASE_ARCH=ppc
5960 TARGET_ABI_DIR=ppc
5961 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5962 ;;
5963 ppc64abi32)
5964 TARGET_ARCH=ppc64
5965 TARGET_BASE_ARCH=ppc
5966 TARGET_ABI_DIR=ppc
5967 echo "TARGET_ABI32=y" >> $config_target_mak
5968 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5969 ;;
5970 sh4|sh4eb)
5971 TARGET_ARCH=sh4
5972 bflt="yes"
5973 ;;
5974 sparc)
5975 ;;
5976 sparc64)
5977 TARGET_BASE_ARCH=sparc
5978 ;;
5979 sparc32plus)
5980 TARGET_ARCH=sparc64
5981 TARGET_BASE_ARCH=sparc
5982 TARGET_ABI_DIR=sparc
5983 echo "TARGET_ABI32=y" >> $config_target_mak
5984 ;;
5985 s390x)
5986 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
5987 ;;
5988 tilegx)
5989 ;;
5990 tricore)
5991 ;;
5992 unicore32)
5993 ;;
5994 xtensa|xtensaeb)
5995 TARGET_ARCH=xtensa
5996 ;;
5997 *)
5998 error_exit "Unsupported target CPU"
5999 ;;
6000 esac
6001 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6002 if [ "$TARGET_BASE_ARCH" = "" ]; then
6003 TARGET_BASE_ARCH=$TARGET_ARCH
6004 fi
6005
6006 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6007
6008 upper() {
6009 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6010 }
6011
6012 target_arch_name="$(upper $TARGET_ARCH)"
6013 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6014 echo "TARGET_NAME=$target_name" >> $config_target_mak
6015 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6016 if [ "$TARGET_ABI_DIR" = "" ]; then
6017 TARGET_ABI_DIR=$TARGET_ARCH
6018 fi
6019 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6020 if [ "$HOST_VARIANT_DIR" != "" ]; then
6021 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6022 fi
6023 case "$target_name" in
6024 i386|x86_64)
6025 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
6026 echo "CONFIG_XEN=y" >> $config_target_mak
6027 if test "$xen_pci_passthrough" = yes; then
6028 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6029 fi
6030 fi
6031 ;;
6032 *)
6033 esac
6034 case "$target_name" in
6035 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
6036 # Make sure the target and host cpus are compatible
6037 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
6038 \( "$target_name" = "$cpu" -o \
6039 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
6040 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
6041 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
6042 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
6043 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
6044 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
6045 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
6046 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
6047 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
6048 echo "CONFIG_KVM=y" >> $config_target_mak
6049 if test "$vhost_net" = "yes" ; then
6050 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6051 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
6052 fi
6053 fi
6054 esac
6055 if test "$target_bigendian" = "yes" ; then
6056 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6057 fi
6058 if test "$target_softmmu" = "yes" ; then
6059 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6060 fi
6061 if test "$target_user_only" = "yes" ; then
6062 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6063 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6064 fi
6065 if test "$target_linux_user" = "yes" ; then
6066 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6067 fi
6068 list=""
6069 if test ! -z "$gdb_xml_files" ; then
6070 for x in $gdb_xml_files; do
6071 list="$list $source_path/gdb-xml/$x"
6072 done
6073 echo "TARGET_XML_FILES=$list" >> $config_target_mak
6074 fi
6075
6076 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6077 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6078 fi
6079 if test "$target_bsd_user" = "yes" ; then
6080 echo "CONFIG_BSD_USER=y" >> $config_target_mak
6081 fi
6082
6083 # generate QEMU_CFLAGS/LDFLAGS for targets
6084
6085 cflags=""
6086 ldflags=""
6087
6088 disas_config() {
6089 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6090 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6091 }
6092
6093 for i in $ARCH $TARGET_BASE_ARCH ; do
6094 case "$i" in
6095 alpha)
6096 disas_config "ALPHA"
6097 ;;
6098 aarch64)
6099 if test -n "${cxx}"; then
6100 disas_config "ARM_A64"
6101 fi
6102 ;;
6103 arm)
6104 disas_config "ARM"
6105 if test -n "${cxx}"; then
6106 disas_config "ARM_A64"
6107 fi
6108 ;;
6109 cris)
6110 disas_config "CRIS"
6111 ;;
6112 i386|x86_64|x32)
6113 disas_config "I386"
6114 ;;
6115 ia64*)
6116 disas_config "IA64"
6117 ;;
6118 lm32)
6119 disas_config "LM32"
6120 ;;
6121 m68k)
6122 disas_config "M68K"
6123 ;;
6124 microblaze*)
6125 disas_config "MICROBLAZE"
6126 ;;
6127 mips*)
6128 disas_config "MIPS"
6129 ;;
6130 moxie*)
6131 disas_config "MOXIE"
6132 ;;
6133 or32)
6134 disas_config "OPENRISC"
6135 ;;
6136 ppc*)
6137 disas_config "PPC"
6138 ;;
6139 s390*)
6140 disas_config "S390"
6141 ;;
6142 sh4)
6143 disas_config "SH4"
6144 ;;
6145 sparc*)
6146 disas_config "SPARC"
6147 ;;
6148 xtensa*)
6149 disas_config "XTENSA"
6150 ;;
6151 esac
6152 done
6153 if test "$tcg_interpreter" = "yes" ; then
6154 disas_config "TCI"
6155 fi
6156
6157 case "$ARCH" in
6158 alpha)
6159 # Ensure there's only a single GP
6160 cflags="-msmall-data $cflags"
6161 ;;
6162 esac
6163
6164 if test "$gprof" = "yes" ; then
6165 echo "TARGET_GPROF=yes" >> $config_target_mak
6166 if test "$target_linux_user" = "yes" ; then
6167 cflags="-p $cflags"
6168 ldflags="-p $ldflags"
6169 fi
6170 if test "$target_softmmu" = "yes" ; then
6171 ldflags="-p $ldflags"
6172 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6173 fi
6174 fi
6175
6176 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6177 ldflags="$ldflags $textseg_ldflags"
6178 fi
6179
6180 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6181 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6182
6183 done # for target in $targets
6184
6185 if [ "$pixman" = "internal" ]; then
6186 echo "config-host.h: subdir-pixman" >> $config_host_mak
6187 fi
6188
6189 if [ "$dtc_internal" = "yes" ]; then
6190 echo "config-host.h: subdir-dtc" >> $config_host_mak
6191 fi
6192
6193 if test "$numa" = "yes"; then
6194 echo "CONFIG_NUMA=y" >> $config_host_mak
6195 fi
6196
6197 if test "$ccache_cpp2" = "yes"; then
6198 echo "export CCACHE_CPP2=y" >> $config_host_mak
6199 fi
6200
6201 # build tree in object directory in case the source is not in the current directory
6202 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
6203 DIRS="$DIRS fsdev"
6204 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6205 DIRS="$DIRS roms/seabios roms/vgabios"
6206 DIRS="$DIRS qapi-generated"
6207 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6208 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6209 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6210 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6211 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6212 FILES="$FILES pc-bios/s390-ccw/Makefile"
6213 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6214 FILES="$FILES pc-bios/qemu-icon.bmp"
6215 for bios_file in \
6216 $source_path/pc-bios/*.bin \
6217 $source_path/pc-bios/*.lid \
6218 $source_path/pc-bios/*.aml \
6219 $source_path/pc-bios/*.rom \
6220 $source_path/pc-bios/*.dtb \
6221 $source_path/pc-bios/*.img \
6222 $source_path/pc-bios/openbios-* \
6223 $source_path/pc-bios/u-boot.* \
6224 $source_path/pc-bios/palcode-*
6225 do
6226 FILES="$FILES pc-bios/$(basename $bios_file)"
6227 done
6228 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6229 do
6230 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6231 done
6232 mkdir -p $DIRS
6233 for f in $FILES ; do
6234 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6235 symlink "$source_path/$f" "$f"
6236 fi
6237 done
6238
6239 # temporary config to build submodules
6240 for rom in seabios vgabios ; do
6241 config_mak=roms/$rom/config.mak
6242 echo "# Automatically generated by configure - do not modify" > $config_mak
6243 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6244 echo "AS=$as" >> $config_mak
6245 echo "CCAS=$ccas" >> $config_mak
6246 echo "CC=$cc" >> $config_mak
6247 echo "BCC=bcc" >> $config_mak
6248 echo "CPP=$cpp" >> $config_mak
6249 echo "OBJCOPY=objcopy" >> $config_mak
6250 echo "IASL=$iasl" >> $config_mak
6251 echo "LD=$ld" >> $config_mak
6252 done
6253
6254 # set up tests data directory
6255 if [ ! -e tests/data ]; then
6256 symlink "$source_path/tests/data" tests/data
6257 fi
6258
6259 # set up qemu-iotests in this build directory
6260 iotests_common_env="tests/qemu-iotests/common.env"
6261 iotests_check="tests/qemu-iotests/check"
6262
6263 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6264 echo >> "$iotests_common_env"
6265 echo "export PYTHON='$python'" >> "$iotests_common_env"
6266
6267 if [ ! -e "$iotests_check" ]; then
6268 symlink "$source_path/$iotests_check" "$iotests_check"
6269 fi
6270
6271 # Save the configure command line for later reuse.
6272 cat <<EOD >config.status
6273 #!/bin/sh
6274 # Generated by configure.
6275 # Run this file to recreate the current configuration.
6276 # Compiler output produced by configure, useful for debugging
6277 # configure, is in config.log if it exists.
6278 EOD
6279 printf "exec" >>config.status
6280 printf " '%s'" "$0" "$@" >>config.status
6281 echo ' "$@"' >>config.status
6282 chmod +x config.status
6283
6284 rm -r "$TMPDIR1"