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