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