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