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