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