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