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