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