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