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