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