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