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