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