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