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