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