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