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