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