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