]> git.proxmox.com Git - mirror_qemu.git/blame - configure
backends/hostmem-file: Allow to specify full pathname for backing file
[mirror_qemu.git] / configure
CommitLineData
7d13299d
FB
1#!/bin/sh
2#
3ef693a0 3# qemu configure script (c) 2003 Fabrice Bellard
7d13299d 4#
8cd05ab6 5
99519e67
CH
6# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
5e4dfd3d
JS
11# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
8cd05ab6
PM
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.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
7d13299d
FB
25fi
26
8cd05ab6
PM
27TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
66518bf6 29TMPO="${TMPDIR1}/${TMPB}.o"
9c83ffd8 30TMPCXX="${TMPDIR1}/${TMPB}.cxx"
66518bf6
DS
31TMPL="${TMPDIR1}/${TMPB}.lo"
32TMPA="${TMPDIR1}/lib${TMPB}.la"
8cd05ab6 33TMPE="${TMPDIR1}/${TMPB}.exe"
7d13299d 34
da1d85e3 35rm -f config.log
9ac81bbb 36
b48e3611
PM
37# Print a helpful header at the top of config.log
38echo "# QEMU configure log $(date)" >> config.log
979ae168
PM
39printf "# Configured with:" >> config.log
40printf " '%s'" "$0" "$@" >> config.log
41echo >> config.log
b48e3611
PM
42echo "#" >> config.log
43
76ad07a4
PM
44error_exit() {
45 echo
46 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
51 echo
52 exit 1
53}
54
9c83ffd8
PM
55do_compiler() {
56 # Run the compiler, capturing its output to the log. First argument
57 # is compiler binary to execute.
58 local compiler="$1"
59 shift
60 echo $compiler "$@" >> config.log
61 $compiler "$@" >> config.log 2>&1 || return $?
8dc38a78
PM
62 # Test passed. If this is an --enable-werror build, rerun
63 # the test with -Werror and bail out if it fails. This
64 # makes warning-generating-errors in configure test code
65 # obvious to developers.
66 if test "$werror" != "yes"; then
67 return 0
68 fi
69 # Don't bother rerunning the compile if we were already using -Werror
70 case "$*" in
71 *-Werror*)
72 return 0
73 ;;
74 esac
9c83ffd8
PM
75 echo $compiler -Werror "$@" >> config.log
76 $compiler -Werror "$@" >> config.log 2>&1 && return $?
76ad07a4
PM
77 error_exit "configure test passed without -Werror but failed with -Werror." \
78 "This is probably a bug in the configure script. The failing command" \
79 "will be at the bottom of config.log." \
80 "You can run configure with --disable-werror to bypass this check."
8dc38a78
PM
81}
82
9c83ffd8
PM
83do_cc() {
84 do_compiler "$cc" "$@"
85}
86
87do_cxx() {
88 do_compiler "$cxx" "$@"
89}
90
91update_cxxflags() {
92 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
93 # options which some versions of GCC's C++ compiler complain about
94 # because they only make sense for C programs.
95 QEMU_CXXFLAGS=
96 for arg in $QEMU_CFLAGS; do
97 case $arg in
98 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
99 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
100 ;;
101 *)
102 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
103 ;;
104 esac
105 done
106}
107
52166aa0 108compile_object() {
fd0e6053
JS
109 local_cflags="$1"
110 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
52166aa0
JQ
111}
112
113compile_prog() {
114 local_cflags="$1"
115 local_ldflags="$2"
8dc38a78 116 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
52166aa0
JQ
117}
118
66518bf6
DS
119do_libtool() {
120 local mode=$1
121 shift
122 # Run the compiler, capturing its output to the log.
123 echo $libtool $mode --tag=CC $cc "$@" >> config.log
124 $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
125 # Test passed. If this is an --enable-werror build, rerun
126 # the test with -Werror and bail out if it fails. This
127 # makes warning-generating-errors in configure test code
128 # obvious to developers.
129 if test "$werror" != "yes"; then
130 return 0
131 fi
132 # Don't bother rerunning the compile if we were already using -Werror
133 case "$*" in
134 *-Werror*)
135 return 0
136 ;;
137 esac
138 echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
139 $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
140 error_exit "configure test passed without -Werror but failed with -Werror." \
141 "This is probably a bug in the configure script. The failing command" \
142 "will be at the bottom of config.log." \
143 "You can run configure with --disable-werror to bypass this check."
144}
145
146libtool_prog() {
147 do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
148 do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
149}
150
11568d6d
PB
151# symbolically link $1 to $2. Portable version of "ln -sf".
152symlink() {
72b8b5a1 153 rm -rf "$2"
ec5b06d7 154 mkdir -p "$(dirname "$2")"
72b8b5a1 155 ln -s "$1" "$2"
11568d6d
PB
156}
157
0dba6195
LM
158# check whether a command is available to this shell (may be either an
159# executable or a builtin)
160has() {
161 type "$1" >/dev/null 2>&1
162}
163
164# search for an executable in PATH
165path_of() {
166 local_command="$1"
167 local_ifs="$IFS"
168 local_dir=""
169
170 # pathname has a dir component?
171 if [ "${local_command#*/}" != "$local_command" ]; then
172 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
173 echo "$local_command"
174 return 0
175 fi
176 fi
177 if [ -z "$local_command" ]; then
178 return 1
179 fi
180
181 IFS=:
182 for local_dir in $PATH; do
183 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
184 echo "$local_dir/$local_command"
185 IFS="${local_ifs:-$(printf ' \t\n')}"
186 return 0
187 fi
188 done
189 # not found
190 IFS="${local_ifs:-$(printf ' \t\n')}"
191 return 1
192}
193
5b808275
LV
194have_backend () {
195 echo "$trace_backends" | grep "$1" >/dev/null
196}
197
7d13299d 198# default parameters
ca4deeb1 199source_path=`dirname "$0"`
2ff6b91e 200cpu=""
a31a8642 201iasl="iasl"
1e43adfc 202interp_prefix="/usr/gnemul/qemu-%M"
43ce4dfe 203static="no"
7d13299d 204cross_prefix=""
0c58ac1c 205audio_drv_list=""
b64ec4e4
FZ
206block_drv_rw_whitelist=""
207block_drv_ro_whitelist=""
e49d021e 208host_cc="cc"
73da375e 209libs_softmmu=""
3e2e0e6b 210libs_tools=""
67f86e8e 211audio_pt_int=""
d5631638 212audio_win_int=""
2b2e59e6 213cc_i386=i386-pc-linux-gnu-gcc
957f1f99 214libs_qga=""
5bc62e01 215debug_info="yes"
63678e17 216stack_protector=""
ac0df51d 217
afb63ebd
SW
218# Don't accept a target_list environment variable.
219unset target_list
377529c0
PB
220
221# Default value for a variable defining feature "foo".
222# * foo="no" feature will only be used if --enable-foo arg is given
223# * foo="" feature will be searched for, and if found, will be used
224# unless --disable-foo is given
225# * foo="yes" this value will only be set by --enable-foo flag.
226# feature will searched for,
227# if not found, configure exits with error
228#
229# Always add --enable-foo and --disable-foo command line args.
230# Distributions want to ensure that several features are compiled in, and it
231# is impossible without a --enable-foo that exits if a feature is not found.
232
233bluez=""
234brlapi=""
235curl=""
236curses=""
237docs=""
238fdt=""
58952137 239netmap="no"
e2134eb9 240pixman=""
377529c0 241sdl=""
47c03744 242sdlabi="1.2"
983eef5a 243virtfs=""
821601ea 244vnc="yes"
377529c0
PB
245sparse="no"
246uuid=""
247vde=""
377529c0
PB
248vnc_sasl=""
249vnc_jpeg=""
250vnc_png=""
377529c0 251xen=""
d5b93ddf 252xen_ctrl_version=""
eb6fda0f 253xen_pci_passthrough=""
377529c0 254linux_aio=""
47e98658 255cap_ng=""
377529c0 256attr=""
4f26f2b6 257libattr=""
377529c0
PB
258xfs=""
259
d41a75a2 260vhost_net="no"
5e9be92d 261vhost_scsi="no"
d41a75a2 262kvm="no"
2da776db 263rdma=""
377529c0
PB
264gprof="no"
265debug_tcg="no"
377529c0
PB
266debug="no"
267strip_opt="yes"
9195b2c2 268tcg_interpreter="no"
377529c0
PB
269bigendian="no"
270mingw32="no"
1d728c39
BS
271gcov="no"
272gcov_tool="gcov"
377529c0 273EXESUF=""
17969268
FZ
274DSOSUF=".so"
275LDFLAGS_SHARED="-shared"
276modules="no"
377529c0
PB
277prefix="/usr/local"
278mandir="\${prefix}/share/man"
528ae5b8 279datadir="\${prefix}/share"
850da188 280qemu_docdir="\${prefix}/share/doc/qemu"
377529c0 281bindir="\${prefix}/bin"
3aa5d2be 282libdir="\${prefix}/lib"
8bf188aa 283libexecdir="\${prefix}/libexec"
0f94d6da 284includedir="\${prefix}/include"
377529c0 285sysconfdir="\${prefix}/etc"
785c23ae 286local_statedir="\${prefix}/var"
377529c0
PB
287confsuffix="/qemu"
288slirp="yes"
377529c0
PB
289oss_lib=""
290bsd="no"
291linux="no"
292solaris="no"
293profiler="no"
294cocoa="no"
295softmmu="yes"
296linux_user="no"
377529c0 297bsd_user="no"
377529c0
PB
298aix="no"
299blobs="yes"
300pkgversion=""
40d6444e 301pie=""
377529c0 302zero_malloc=""
3556c233 303qom_cast_debug="yes"
5b808275 304trace_backends="nop"
377529c0
PB
305trace_file="trace"
306spice=""
307rbd=""
7b02f544 308smartcard=""
2b2325ff 309libusb=""
69354a83 310usb_redir=""
da076ffe 311opengl=""
1ece9905 312zlib="yes"
b25c9dff
SW
313lzo=""
314snappy=""
6b383c08 315bzip2=""
e8ef31a3 316guest_agent=""
d9840e25 317guest_agent_with_vss="no"
50cbebb9 318guest_agent_ntddscsi="no"
9dacf32d 319guest_agent_msi=""
d9840e25
TS
320vss_win32_sdk=""
321win_sdk="no"
4b1c11fd 322want_tools="yes"
c589b249 323libiscsi=""
6542aa9c 324libnfs=""
519175a2 325coroutine=""
70c60c08 326coroutine_pool=""
f794573e 327seccomp=""
eb100396 328glusterfs=""
0c14fb47 329glusterfs_discard="no"
7c815372 330glusterfs_zerofill="no"
6a460ed1 331archipelago="no"
a4ccabcf 332gtk=""
9e04c683 333gtkabi=""
925a0400 334gtk_gl="no"
ddbb0d09
DB
335gnutls=""
336gnutls_hash=""
91bfcdb0
DB
337nettle=""
338gcrypt=""
bbbf9bfb 339vte=""
9d9e1521 340virglrenderer=""
e91c793c 341tpm="yes"
0a12ec87 342libssh2=""
4f18b782 343vhdx=""
a99d57bb 344numa=""
2847b469 345tcmalloc="no"
7b01cb97 346jemalloc="no"
377529c0 347
ac0df51d
AL
348# parse CC options first
349for opt do
350 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
351 case "$opt" in
352 --cross-prefix=*) cross_prefix="$optarg"
353 ;;
3d8df640 354 --cc=*) CC="$optarg"
ac0df51d 355 ;;
83f73fce
TS
356 --cxx=*) CXX="$optarg"
357 ;;
ca4deeb1
PB
358 --source-path=*) source_path="$optarg"
359 ;;
2ff6b91e
JQ
360 --cpu=*) cpu="$optarg"
361 ;;
de385287 362 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
f9943cd5 363 EXTRA_CFLAGS="$optarg"
e2a2ed06 364 ;;
a4969e90 365 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
f9943cd5 366 EXTRA_LDFLAGS="$optarg"
e2a2ed06 367 ;;
5bc62e01
GH
368 --enable-debug-info) debug_info="yes"
369 ;;
370 --disable-debug-info) debug_info="no"
371 ;;
ac0df51d
AL
372 esac
373done
ac0df51d
AL
374# OS specific
375# Using uname is really, really broken. Once we have the right set of checks
93148aa5 376# we can eliminate its usage altogether.
ac0df51d 377
e49d021e
PM
378# Preferred compiler:
379# ${CC} (if set)
380# ${cross_prefix}gcc (if cross-prefix specified)
381# system compiler
382if test -z "${CC}${cross_prefix}"; then
383 cc="$host_cc"
384else
385 cc="${CC-${cross_prefix}gcc}"
386fi
387
83f73fce
TS
388if test -z "${CXX}${cross_prefix}"; then
389 cxx="c++"
390else
391 cxx="${CXX-${cross_prefix}g++}"
392fi
393
b3198cc2 394ar="${AR-${cross_prefix}ar}"
3dd46c78
BS
395as="${AS-${cross_prefix}as}"
396cpp="${CPP-$cc -E}"
b3198cc2
SY
397objcopy="${OBJCOPY-${cross_prefix}objcopy}"
398ld="${LD-${cross_prefix}ld}"
3f534581 399libtool="${LIBTOOL-${cross_prefix}libtool}"
4852ee95 400nm="${NM-${cross_prefix}nm}"
b3198cc2
SY
401strip="${STRIP-${cross_prefix}strip}"
402windres="${WINDRES-${cross_prefix}windres}"
17884d7b
ST
403pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
404query_pkg_config() {
405 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
406}
407pkg_config=query_pkg_config
b3198cc2 408sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
47c03744 409sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
ac0df51d 410
45d285ab
PM
411# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
412ARFLAGS="${ARFLAGS-rv}"
413
be17dc90 414# default flags for all hosts
4c288acb 415QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
f9188227 416QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
c95e3080 417QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
be17dc90 418QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
6b4c305c 419QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
5bc62e01
GH
420if test "$debug_info" = "yes"; then
421 CFLAGS="-g $CFLAGS"
422 LDFLAGS="-g $LDFLAGS"
423fi
be17dc90 424
ca4deeb1
PB
425# make source path absolute
426source_path=`cd "$source_path"; pwd`
427
cab00a5a
MT
428# running configure in the source tree?
429# we know that's the case if configure is there.
430if test -f "./configure"; then
431 pwd_is_source_path="y"
432else
433 pwd_is_source_path="n"
434fi
435
ac0df51d
AL
436check_define() {
437cat > $TMPC <<EOF
438#if !defined($1)
fd786e1a 439#error $1 not defined
ac0df51d
AL
440#endif
441int main(void) { return 0; }
442EOF
52166aa0 443 compile_object
ac0df51d
AL
444}
445
307119e7
GH
446check_include() {
447cat > $TMPC <<EOF
448#include <$1>
449int main(void) { return 0; }
450EOF
451 compile_object
452}
453
93b25869
JS
454write_c_skeleton() {
455 cat > $TMPC <<EOF
456int main(void) { return 0; }
457EOF
458}
459
bbea4050
PM
460if check_define __linux__ ; then
461 targetos="Linux"
462elif check_define _WIN32 ; then
463 targetos='MINGW32'
464elif check_define __OpenBSD__ ; then
465 targetos='OpenBSD'
466elif check_define __sun__ ; then
467 targetos='SunOS'
468elif check_define __HAIKU__ ; then
469 targetos='Haiku'
470else
471 targetos=`uname -s`
472fi
473
474# Some host OSes need non-standard checks for which CPU to use.
475# Note that these checks are broken for cross-compilation: if you're
476# cross-compiling to one of these OSes then you'll need to specify
477# the correct CPU with the --cpu option.
478case $targetos in
479Darwin)
480 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
481 # run 64-bit userspace code.
482 # If the user didn't specify a CPU explicitly and the kernel says this is
483 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
484 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
485 cpu="x86_64"
486 fi
487 ;;
488SunOS)
489 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
490 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
491 cpu="x86_64"
492 fi
493esac
494
2ff6b91e
JQ
495if test ! -z "$cpu" ; then
496 # command line argument
497 :
498elif check_define __i386__ ; then
ac0df51d
AL
499 cpu="i386"
500elif check_define __x86_64__ ; then
c72b26ec
RH
501 if check_define __ILP32__ ; then
502 cpu="x32"
503 else
504 cpu="x86_64"
505 fi
3aa9bd6c 506elif check_define __sparc__ ; then
3aa9bd6c
BS
507 if check_define __arch64__ ; then
508 cpu="sparc64"
509 else
510 cpu="sparc"
511 fi
fdf7ed96 512elif check_define _ARCH_PPC ; then
513 if check_define _ARCH_PPC64 ; then
514 cpu="ppc64"
515 else
516 cpu="ppc"
517 fi
afa05235
AJ
518elif check_define __mips__ ; then
519 cpu="mips"
477ba620
AJ
520elif check_define __ia64__ ; then
521 cpu="ia64"
d66ed0ea
AJ
522elif check_define __s390__ ; then
523 if check_define __s390x__ ; then
524 cpu="s390x"
525 else
526 cpu="s390"
527 fi
21d89f84
PM
528elif check_define __arm__ ; then
529 cpu="arm"
1f080313
CF
530elif check_define __aarch64__ ; then
531 cpu="aarch64"
f28ffed5
BS
532elif check_define __hppa__ ; then
533 cpu="hppa"
ac0df51d 534else
fdf7ed96 535 cpu=`uname -m`
ac0df51d
AL
536fi
537
359bc95d
PM
538ARCH=
539# Normalise host CPU name and set ARCH.
540# Note that this case should only have supported host CPUs, not guests.
7d13299d 541case "$cpu" in
c72b26ec 542 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
ea8f20f8
JQ
543 cpu="$cpu"
544 ;;
7d13299d 545 i386|i486|i586|i686|i86pc|BePC)
97a847bc 546 cpu="i386"
7d13299d 547 ;;
aaa5fa14
AJ
548 x86_64|amd64)
549 cpu="x86_64"
550 ;;
21d89f84
PM
551 armv*b|armv*l|arm)
552 cpu="arm"
7d13299d 553 ;;
1f080313
CF
554 aarch64)
555 cpu="aarch64"
556 ;;
afa05235
AJ
557 mips*)
558 cpu="mips"
559 ;;
3142255c 560 sparc|sun4[cdmuv])
ae228531
FB
561 cpu="sparc"
562 ;;
7d13299d 563 *)
359bc95d
PM
564 # This will result in either an error or falling back to TCI later
565 ARCH=unknown
7d13299d
FB
566 ;;
567esac
359bc95d
PM
568if test -z "$ARCH"; then
569 ARCH="$cpu"
570fi
e2d52ad3 571
7d13299d 572# OS specific
0dbfc675 573
adfc3e91
SS
574# host *BSD for user mode
575HOST_VARIANT_DIR=""
576
7d13299d 577case $targetos in
c326e0af 578CYGWIN*)
0dbfc675 579 mingw32="yes"
a558ee17 580 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
3cec7cc2
KZ
581 audio_possible_drivers="sdl"
582 audio_drv_list="sdl"
c326e0af 583;;
67b915a5 584MINGW32*)
0dbfc675 585 mingw32="yes"
3cec7cc2 586 audio_possible_drivers="dsound sdl"
307119e7
GH
587 if check_include dsound.h; then
588 audio_drv_list="dsound"
589 else
590 audio_drv_list=""
591 fi
67b915a5 592;;
5c40d2bd 593GNU/kFreeBSD)
a167ba50 594 bsd="yes"
0dbfc675 595 audio_drv_list="oss"
0bac1111 596 audio_possible_drivers="oss sdl pa"
5c40d2bd 597;;
7d3505c5 598FreeBSD)
0dbfc675 599 bsd="yes"
0db4a067 600 make="${MAKE-gmake}"
0dbfc675 601 audio_drv_list="oss"
0bac1111 602 audio_possible_drivers="oss sdl pa"
f01576f1
JL
603 # needed for kinfo_getvmmap(3) in libutil.h
604 LIBS="-lutil $LIBS"
58952137 605 netmap="" # enable netmap autodetect
adfc3e91 606 HOST_VARIANT_DIR="freebsd"
7d3505c5 607;;
c5e97233 608DragonFly)
0dbfc675 609 bsd="yes"
0db4a067 610 make="${MAKE-gmake}"
0dbfc675 611 audio_drv_list="oss"
0bac1111 612 audio_possible_drivers="oss sdl pa"
adfc3e91 613 HOST_VARIANT_DIR="dragonfly"
c5e97233 614;;
7d3505c5 615NetBSD)
0dbfc675 616 bsd="yes"
0db4a067 617 make="${MAKE-gmake}"
0dbfc675 618 audio_drv_list="oss"
0bac1111 619 audio_possible_drivers="oss sdl"
0dbfc675 620 oss_lib="-lossaudio"
adfc3e91 621 HOST_VARIANT_DIR="netbsd"
7d3505c5
FB
622;;
623OpenBSD)
0dbfc675 624 bsd="yes"
0db4a067 625 make="${MAKE-gmake}"
4f6ab397 626 audio_drv_list="sdl"
0bac1111 627 audio_possible_drivers="sdl"
adfc3e91 628 HOST_VARIANT_DIR="openbsd"
7d3505c5 629;;
83fb7adf 630Darwin)
0dbfc675
JQ
631 bsd="yes"
632 darwin="yes"
17969268 633 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
0dbfc675 634 if [ "$cpu" = "x86_64" ] ; then
a558ee17 635 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
0c439cbf 636 LDFLAGS="-arch x86_64 $LDFLAGS"
0dbfc675 637 fi
0dbfc675
JQ
638 cocoa="yes"
639 audio_drv_list="coreaudio"
14382605 640 audio_possible_drivers="coreaudio sdl"
0dbfc675 641 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
7973f21c 642 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
a0b7cf6b
PM
643 # Disable attempts to use ObjectiveC features in os/object.h since they
644 # won't work when we're compiling with gcc as a C compiler.
645 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
adfc3e91 646 HOST_VARIANT_DIR="darwin"
83fb7adf 647;;
ec530c81 648SunOS)
0dbfc675 649 solaris="yes"
0db4a067
PB
650 make="${MAKE-gmake}"
651 install="${INSTALL-ginstall}"
fa58948d 652 ld="gld"
e2d8830e 653 smbd="${SMBD-/usr/sfw/sbin/smbd}"
0dbfc675
JQ
654 needs_libsunmath="no"
655 solarisrev=`uname -r | cut -f2 -d.`
0dbfc675
JQ
656 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
657 if test "$solarisrev" -le 9 ; then
658 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
659 needs_libsunmath="yes"
f14bfdf9
JQ
660 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
661 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
662 LIBS="-lsunmath $LIBS"
0dbfc675 663 else
76ad07a4
PM
664 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
665 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
666 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
667 "Studio 11 can be downloaded from www.sun.com."
0dbfc675 668 fi
86b2bd93 669 fi
0dbfc675
JQ
670 fi
671 if test -f /usr/include/sys/soundcard.h ; then
672 audio_drv_list="oss"
673 fi
674 audio_possible_drivers="oss sdl"
d741429a
BS
675# needed for CMSG_ macros in sys/socket.h
676 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
677# needed for TIOCWIN* defines in termios.h
678 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
a558ee17 679 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
560d375f
AF
680 solarisnetlibs="-lsocket -lnsl -lresolv"
681 LIBS="$solarisnetlibs $LIBS"
682 libs_qga="$solarisnetlibs $libs_qga"
86b2bd93 683;;
b29fe3ed 684AIX)
0dbfc675 685 aix="yes"
0db4a067 686 make="${MAKE-gmake}"
b29fe3ed 687;;
179cf400
AF
688Haiku)
689 haiku="yes"
690 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
691 LIBS="-lposix_error_mapper -lnetwork $LIBS"
692;;
1d14ffa9 693*)
0dbfc675 694 audio_drv_list="oss"
0bac1111 695 audio_possible_drivers="oss alsa sdl pa"
0dbfc675
JQ
696 linux="yes"
697 linux_user="yes"
af2be207
JK
698 kvm="yes"
699 vhost_net="yes"
5e9be92d 700 vhost_scsi="yes"
a585140d 701 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
fb065187 702;;
7d13299d
FB
703esac
704
7d3505c5 705if [ "$bsd" = "yes" ] ; then
b1a550a0 706 if [ "$darwin" != "yes" ] ; then
08de3949 707 bsd_user="yes"
83fb7adf 708 fi
7d3505c5
FB
709fi
710
0db4a067
PB
711: ${make=${MAKE-make}}
712: ${install=${INSTALL-install}}
52510f8b 713: ${python=${PYTHON-python}}
e2d8830e 714: ${smbd=${SMBD-/usr/sbin/smbd}}
0db4a067 715
3c4a4d0d
PM
716# Default objcc to clang if available, otherwise use CC
717if has clang; then
718 objcc=clang
719else
720 objcc="$cc"
721fi
722
3457a3f8 723if test "$mingw32" = "yes" ; then
3457a3f8 724 EXESUF=".exe"
17969268 725 DSOSUF=".dll"
a558ee17 726 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
e94a7936
SW
727 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
728 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
f7cf5d5b 729 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
93b25869 730 write_c_skeleton;
f7cf5d5b
SW
731 if compile_prog "" "-liberty" ; then
732 LIBS="-liberty $LIBS"
733 fi
c5ec15ea 734 prefix="c:/Program Files/QEMU"
683035de 735 mandir="\${prefix}"
528ae5b8 736 datadir="\${prefix}"
850da188 737 qemu_docdir="\${prefix}"
683035de
PB
738 bindir="\${prefix}"
739 sysconfdir="\${prefix}"
5a699bbb 740 local_statedir=
683035de 741 confsuffix=""
259434b8 742 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
3457a3f8
JQ
743fi
744
487fefdb 745werror=""
85aa5189 746
7d13299d 747for opt do
a46e4035 748 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
7d13299d 749 case "$opt" in
2efc3265
FB
750 --help|-h) show_help=yes
751 ;;
99123e13
MF
752 --version|-V) exec cat $source_path/VERSION
753 ;;
b1a550a0 754 --prefix=*) prefix="$optarg"
7d13299d 755 ;;
b1a550a0 756 --interp-prefix=*) interp_prefix="$optarg"
32ce6337 757 ;;
ca4deeb1 758 --source-path=*)
7d13299d 759 ;;
ac0df51d 760 --cross-prefix=*)
7d13299d 761 ;;
ac0df51d 762 --cc=*)
7d13299d 763 ;;
b1a550a0 764 --host-cc=*) host_cc="$optarg"
83469015 765 ;;
83f73fce
TS
766 --cxx=*)
767 ;;
e007dbec
MT
768 --iasl=*) iasl="$optarg"
769 ;;
3c4a4d0d
PM
770 --objcc=*) objcc="$optarg"
771 ;;
b1a550a0 772 --make=*) make="$optarg"
7d13299d 773 ;;
6a882643
PB
774 --install=*) install="$optarg"
775 ;;
c886edfb
BS
776 --python=*) python="$optarg"
777 ;;
1d728c39
BS
778 --gcov=*) gcov_tool="$optarg"
779 ;;
e2d8830e
BS
780 --smbd=*) smbd="$optarg"
781 ;;
e2a2ed06 782 --extra-cflags=*)
7d13299d 783 ;;
e2a2ed06 784 --extra-ldflags=*)
7d13299d 785 ;;
5bc62e01
GH
786 --enable-debug-info)
787 ;;
788 --disable-debug-info)
789 ;;
17969268
FZ
790 --enable-modules)
791 modules="yes"
792 ;;
2ff6b91e 793 --cpu=*)
7d13299d 794 ;;
b1a550a0 795 --target-list=*) target_list="$optarg"
de83cd02 796 ;;
5b808275
LV
797 --enable-trace-backends=*) trace_backends="$optarg"
798 ;;
799 # XXX: backwards compatibility
800 --enable-trace-backend=*) trace_backends="$optarg"
94a420b1 801 ;;
74242e0f 802 --with-trace-file=*) trace_file="$optarg"
9410b56c 803 ;;
7d13299d
FB
804 --enable-gprof) gprof="yes"
805 ;;
1d728c39
BS
806 --enable-gcov) gcov="yes"
807 ;;
79427693
LM
808 --static)
809 static="yes"
810 LDFLAGS="-static $LDFLAGS"
17884d7b 811 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
43ce4dfe 812 ;;
0b24e75f
PB
813 --mandir=*) mandir="$optarg"
814 ;;
815 --bindir=*) bindir="$optarg"
816 ;;
3aa5d2be
AL
817 --libdir=*) libdir="$optarg"
818 ;;
8bf188aa
MT
819 --libexecdir=*) libexecdir="$optarg"
820 ;;
0f94d6da
AL
821 --includedir=*) includedir="$optarg"
822 ;;
528ae5b8 823 --datadir=*) datadir="$optarg"
0b24e75f 824 ;;
023d3d67
EH
825 --with-confsuffix=*) confsuffix="$optarg"
826 ;;
850da188 827 --docdir=*) qemu_docdir="$optarg"
0b24e75f 828 ;;
ca2fb938 829 --sysconfdir=*) sysconfdir="$optarg"
07381cc1 830 ;;
785c23ae
LC
831 --localstatedir=*) local_statedir="$optarg"
832 ;;
833 --sbindir=*|--sharedstatedir=*|\
023ddd74
MF
834 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
835 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
836 # These switches are silently ignored, for compatibility with
837 # autoconf-generated configure scripts. This allows QEMU's
838 # configure to be used by RPM and similar macros that set
839 # lots of directory switches by default.
840 ;;
e2134eb9
GH
841 --with-system-pixman) pixman="system"
842 ;;
843 --without-system-pixman) pixman="internal"
844 ;;
74880fe2
RS
845 --without-pixman) pixman="none"
846 ;;
97a847bc
FB
847 --disable-sdl) sdl="no"
848 ;;
c4198157
JQ
849 --enable-sdl) sdl="yes"
850 ;;
47c03744
DA
851 --with-sdlabi=*) sdlabi="$optarg"
852 ;;
3556c233
PB
853 --disable-qom-cast-debug) qom_cast_debug="no"
854 ;;
855 --enable-qom-cast-debug) qom_cast_debug="yes"
856 ;;
983eef5a
MI
857 --disable-virtfs) virtfs="no"
858 ;;
859 --enable-virtfs) virtfs="yes"
860 ;;
821601ea
JS
861 --disable-vnc) vnc="no"
862 ;;
863 --enable-vnc) vnc="yes"
864 ;;
2f6a1ab0
BS
865 --oss-lib=*) oss_lib="$optarg"
866 ;;
0c58ac1c 867 --audio-drv-list=*) audio_drv_list="$optarg"
102a52e4 868 ;;
b64ec4e4
FZ
869 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
870 ;;
871 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
eb852011 872 ;;
f8393946
AJ
873 --enable-debug-tcg) debug_tcg="yes"
874 ;;
875 --disable-debug-tcg) debug_tcg="no"
876 ;;
f3d08ee6
PB
877 --enable-debug)
878 # Enable debugging options that aren't excessively noisy
879 debug_tcg="yes"
880 debug="yes"
881 strip_opt="no"
882 ;;
03b4fe7d
AL
883 --enable-sparse) sparse="yes"
884 ;;
885 --disable-sparse) sparse="no"
886 ;;
1625af87
AL
887 --disable-strip) strip_opt="no"
888 ;;
2f9606b3
AL
889 --disable-vnc-sasl) vnc_sasl="no"
890 ;;
ea784e3b
JQ
891 --enable-vnc-sasl) vnc_sasl="yes"
892 ;;
2f6f5c7a
CC
893 --disable-vnc-jpeg) vnc_jpeg="no"
894 ;;
895 --enable-vnc-jpeg) vnc_jpeg="yes"
896 ;;
efe556ad
CC
897 --disable-vnc-png) vnc_png="no"
898 ;;
899 --enable-vnc-png) vnc_png="yes"
900 ;;
443f1376 901 --disable-slirp) slirp="no"
1d14ffa9 902 ;;
ee682d27
SW
903 --disable-uuid) uuid="no"
904 ;;
905 --enable-uuid) uuid="yes"
906 ;;
e0e6c8c0 907 --disable-vde) vde="no"
8a16d273 908 ;;
dfb278bd
JQ
909 --enable-vde) vde="yes"
910 ;;
58952137
VM
911 --disable-netmap) netmap="no"
912 ;;
913 --enable-netmap) netmap="yes"
914 ;;
e37630ca
AL
915 --disable-xen) xen="no"
916 ;;
fc321b4b
JQ
917 --enable-xen) xen="yes"
918 ;;
eb6fda0f
AP
919 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
920 ;;
921 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
922 ;;
2e4d9fb1
AJ
923 --disable-brlapi) brlapi="no"
924 ;;
4ffcedb6
JQ
925 --enable-brlapi) brlapi="yes"
926 ;;
fb599c9a
AZ
927 --disable-bluez) bluez="no"
928 ;;
a20a6f46
JQ
929 --enable-bluez) bluez="yes"
930 ;;
7ba1e619
AL
931 --disable-kvm) kvm="no"
932 ;;
b31a0277
JQ
933 --enable-kvm) kvm="yes"
934 ;;
9195b2c2
SW
935 --disable-tcg-interpreter) tcg_interpreter="no"
936 ;;
937 --enable-tcg-interpreter) tcg_interpreter="yes"
938 ;;
47e98658
CB
939 --disable-cap-ng) cap_ng="no"
940 ;;
941 --enable-cap-ng) cap_ng="yes"
942 ;;
cd4ec0b4
GH
943 --disable-spice) spice="no"
944 ;;
945 --enable-spice) spice="yes"
946 ;;
c589b249
RS
947 --disable-libiscsi) libiscsi="no"
948 ;;
949 --enable-libiscsi) libiscsi="yes"
950 ;;
6542aa9c
PL
951 --disable-libnfs) libnfs="no"
952 ;;
953 --enable-libnfs) libnfs="yes"
954 ;;
05c2a3e7
FB
955 --enable-profiler) profiler="yes"
956 ;;
14821030
PB
957 --disable-cocoa) cocoa="no"
958 ;;
c2de5c91 959 --enable-cocoa)
960 cocoa="yes" ;
c2de5c91 961 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
1d14ffa9 962 ;;
cad25d69 963 --disable-system) softmmu="no"
0a8e90f4 964 ;;
cad25d69 965 --enable-system) softmmu="yes"
0a8e90f4 966 ;;
0953a80f
ZA
967 --disable-user)
968 linux_user="no" ;
969 bsd_user="no" ;
0953a80f
ZA
970 ;;
971 --enable-user) ;;
831b7825 972 --disable-linux-user) linux_user="no"
0a8e90f4 973 ;;
831b7825
TS
974 --enable-linux-user) linux_user="yes"
975 ;;
84778508
BS
976 --disable-bsd-user) bsd_user="no"
977 ;;
978 --enable-bsd-user) bsd_user="yes"
979 ;;
40d6444e 980 --enable-pie) pie="yes"
34005a00 981 ;;
40d6444e 982 --disable-pie) pie="no"
34005a00 983 ;;
85aa5189
FB
984 --enable-werror) werror="yes"
985 ;;
986 --disable-werror) werror="no"
987 ;;
63678e17
SN
988 --enable-stack-protector) stack_protector="yes"
989 ;;
990 --disable-stack-protector) stack_protector="no"
991 ;;
4d3b6f6e
AZ
992 --disable-curses) curses="no"
993 ;;
c584a6d0
JQ
994 --enable-curses) curses="yes"
995 ;;
769ce76d
AG
996 --disable-curl) curl="no"
997 ;;
788c8196
JQ
998 --enable-curl) curl="yes"
999 ;;
2df87df7
JQ
1000 --disable-fdt) fdt="no"
1001 ;;
1002 --enable-fdt) fdt="yes"
1003 ;;
5c6c3a6c
CH
1004 --disable-linux-aio) linux_aio="no"
1005 ;;
1006 --enable-linux-aio) linux_aio="yes"
1007 ;;
758e8e38
VJ
1008 --disable-attr) attr="no"
1009 ;;
1010 --enable-attr) attr="yes"
1011 ;;
77755340
TS
1012 --disable-blobs) blobs="no"
1013 ;;
4a19f1ec
PB
1014 --with-pkgversion=*) pkgversion=" ($optarg)"
1015 ;;
519175a2
AB
1016 --with-coroutine=*) coroutine="$optarg"
1017 ;;
70c60c08
SH
1018 --disable-coroutine-pool) coroutine_pool="no"
1019 ;;
1020 --enable-coroutine-pool) coroutine_pool="yes"
1021 ;;
a25dba17 1022 --disable-docs) docs="no"
70ec5dc0 1023 ;;
a25dba17 1024 --enable-docs) docs="yes"
83a3ab8b 1025 ;;
d5970055
MT
1026 --disable-vhost-net) vhost_net="no"
1027 ;;
1028 --enable-vhost-net) vhost_net="yes"
1029 ;;
5e9be92d
NB
1030 --disable-vhost-scsi) vhost_scsi="no"
1031 ;;
1032 --enable-vhost-scsi) vhost_scsi="yes"
1033 ;;
da076ffe 1034 --disable-opengl) opengl="no"
20ff075b 1035 ;;
da076ffe 1036 --enable-opengl) opengl="yes"
20ff075b 1037 ;;
f27aaf4b
CB
1038 --disable-rbd) rbd="no"
1039 ;;
1040 --enable-rbd) rbd="yes"
1041 ;;
8c84cf11
ST
1042 --disable-xfsctl) xfs="no"
1043 ;;
1044 --enable-xfsctl) xfs="yes"
1045 ;;
7b02f544 1046 --disable-smartcard) smartcard="no"
111a38b0 1047 ;;
7b02f544 1048 --enable-smartcard) smartcard="yes"
111a38b0 1049 ;;
2b2325ff
GH
1050 --disable-libusb) libusb="no"
1051 ;;
1052 --enable-libusb) libusb="yes"
1053 ;;
69354a83
HG
1054 --disable-usb-redir) usb_redir="no"
1055 ;;
1056 --enable-usb-redir) usb_redir="yes"
1057 ;;
1ece9905
AL
1058 --disable-zlib-test) zlib="no"
1059 ;;
b25c9dff
SW
1060 --disable-lzo) lzo="no"
1061 ;;
607dacd0
QN
1062 --enable-lzo) lzo="yes"
1063 ;;
b25c9dff
SW
1064 --disable-snappy) snappy="no"
1065 ;;
607dacd0
QN
1066 --enable-snappy) snappy="yes"
1067 ;;
6b383c08
PW
1068 --disable-bzip2) bzip2="no"
1069 ;;
1070 --enable-bzip2) bzip2="yes"
1071 ;;
d138cee9
MR
1072 --enable-guest-agent) guest_agent="yes"
1073 ;;
1074 --disable-guest-agent) guest_agent="no"
1075 ;;
9dacf32d
YH
1076 --enable-guest-agent-msi) guest_agent_msi="yes"
1077 ;;
1078 --disable-guest-agent-msi) guest_agent_msi="no"
1079 ;;
d9840e25
TS
1080 --with-vss-sdk) vss_win32_sdk=""
1081 ;;
1082 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1083 ;;
1084 --without-vss-sdk) vss_win32_sdk="no"
1085 ;;
1086 --with-win-sdk) win_sdk=""
1087 ;;
1088 --with-win-sdk=*) win_sdk="$optarg"
1089 ;;
1090 --without-win-sdk) win_sdk="no"
1091 ;;
4b1c11fd
DB
1092 --enable-tools) want_tools="yes"
1093 ;;
1094 --disable-tools) want_tools="no"
1095 ;;
f794573e
EO
1096 --enable-seccomp) seccomp="yes"
1097 ;;
1098 --disable-seccomp) seccomp="no"
1099 ;;
eb100396
BR
1100 --disable-glusterfs) glusterfs="no"
1101 ;;
1102 --enable-glusterfs) glusterfs="yes"
1103 ;;
c9a12e75
CN
1104 --disable-archipelago) archipelago="no"
1105 ;;
1106 --enable-archipelago) archipelago="yes"
1107 ;;
52b53c04
FZ
1108 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1109 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
583f6e7b 1110 ;;
a4ccabcf
AL
1111 --disable-gtk) gtk="no"
1112 ;;
1113 --enable-gtk) gtk="yes"
1114 ;;
ddbb0d09
DB
1115 --disable-gnutls) gnutls="no"
1116 ;;
1117 --enable-gnutls) gnutls="yes"
1118 ;;
91bfcdb0
DB
1119 --disable-nettle) nettle="no"
1120 ;;
1121 --enable-nettle) nettle="yes"
1122 ;;
1123 --disable-gcrypt) gcrypt="no"
1124 ;;
1125 --enable-gcrypt) gcrypt="yes"
1126 ;;
2da776db
MH
1127 --enable-rdma) rdma="yes"
1128 ;;
1129 --disable-rdma) rdma="no"
1130 ;;
528de90a
DB
1131 --with-gtkabi=*) gtkabi="$optarg"
1132 ;;
bbbf9bfb
SW
1133 --disable-vte) vte="no"
1134 ;;
1135 --enable-vte) vte="yes"
1136 ;;
9d9e1521
GH
1137 --disable-virglrenderer) virglrenderer="no"
1138 ;;
1139 --enable-virglrenderer) virglrenderer="yes"
1140 ;;
e91c793c
CR
1141 --disable-tpm) tpm="no"
1142 ;;
ab214c29
SB
1143 --enable-tpm) tpm="yes"
1144 ;;
0a12ec87
RJ
1145 --disable-libssh2) libssh2="no"
1146 ;;
1147 --enable-libssh2) libssh2="yes"
1148 ;;
4f18b782
JC
1149 --enable-vhdx) vhdx="yes"
1150 ;;
1151 --disable-vhdx) vhdx="no"
1152 ;;
a99d57bb
WG
1153 --disable-numa) numa="no"
1154 ;;
1155 --enable-numa) numa="yes"
1156 ;;
2847b469
FZ
1157 --disable-tcmalloc) tcmalloc="no"
1158 ;;
1159 --enable-tcmalloc) tcmalloc="yes"
1160 ;;
7b01cb97
AD
1161 --disable-jemalloc) jemalloc="no"
1162 ;;
1163 --enable-jemalloc) jemalloc="yes"
1164 ;;
2d2ad6d0
FZ
1165 *)
1166 echo "ERROR: unknown option $opt"
1167 echo "Try '$0 --help' for more information"
1168 exit 1
7f1559c6 1169 ;;
7d13299d
FB
1170 esac
1171done
1172
f6f0b7d9
SW
1173if ! has $python; then
1174 error_exit "Python not found. Use --python=/path/to/python"
1175fi
1176
1177# Note that if the Python conditional here evaluates True we will exit
1178# with status 1 which is a shell 'false' value.
fec21036
MA
1179if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1180 error_exit "Cannot use '$python', Python 2.6 or later is required." \
f6f0b7d9
SW
1181 "Note that Python 3 or later is not yet supported." \
1182 "Use --python=/path/to/python to specify a supported Python."
1183fi
1184
fec21036
MA
1185# Suppress writing compiled files
1186python="$python -B"
f6f0b7d9 1187
40293e58 1188case "$cpu" in
e3608d66
RH
1189 ppc)
1190 CPU_CFLAGS="-m32"
1191 LDFLAGS="-m32 $LDFLAGS"
1192 ;;
1193 ppc64)
1194 CPU_CFLAGS="-m64"
1195 LDFLAGS="-m64 $LDFLAGS"
1196 ;;
9b9c37c3 1197 sparc)
ed968ff1 1198 LDFLAGS="-m32 $LDFLAGS"
79f3b12f 1199 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
3142255c 1200 ;;
ed968ff1 1201 sparc64)
ed968ff1 1202 LDFLAGS="-m64 $LDFLAGS"
79f3b12f 1203 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
3142255c 1204 ;;
76d83bde 1205 s390)
061cdd81 1206 CPU_CFLAGS="-m31"
28d7cc49
RH
1207 LDFLAGS="-m31 $LDFLAGS"
1208 ;;
1209 s390x)
061cdd81 1210 CPU_CFLAGS="-m64"
28d7cc49 1211 LDFLAGS="-m64 $LDFLAGS"
76d83bde 1212 ;;
40293e58 1213 i386)
79f3b12f 1214 CPU_CFLAGS="-m32"
0c439cbf 1215 LDFLAGS="-m32 $LDFLAGS"
2b2e59e6 1216 cc_i386='$(CC) -m32'
40293e58
FB
1217 ;;
1218 x86_64)
79f3b12f 1219 CPU_CFLAGS="-m64"
0c439cbf 1220 LDFLAGS="-m64 $LDFLAGS"
2b2e59e6 1221 cc_i386='$(CC) -m32'
d2fbca94 1222 ;;
c72b26ec
RH
1223 x32)
1224 CPU_CFLAGS="-mx32"
1225 LDFLAGS="-mx32 $LDFLAGS"
1226 cc_i386='$(CC) -m32'
1227 ;;
30163d89 1228 # No special flags required for other host CPUs
3142255c
BS
1229esac
1230
79f3b12f
PC
1231QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1232EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1233
60e0df25
PM
1234default_target_list=""
1235
6e92f823
PM
1236mak_wilds=""
1237
1238if [ "$softmmu" = "yes" ]; then
1239 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
60e0df25 1240fi
6e92f823
PM
1241if [ "$linux_user" = "yes" ]; then
1242 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
60e0df25 1243fi
6e92f823
PM
1244if [ "$bsd_user" = "yes" ]; then
1245 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
60e0df25
PM
1246fi
1247
6e92f823
PM
1248for config in $mak_wilds; do
1249 default_target_list="${default_target_list} $(basename "$config" .mak)"
1250done
1251
af5db58e
PB
1252if test x"$show_help" = x"yes" ; then
1253cat << EOF
1254
1255Usage: configure [options]
1256Options: [defaults in brackets after descriptions]
1257
08fb77ed
SW
1258Standard options:
1259 --help print this message
1260 --prefix=PREFIX install in PREFIX [$prefix]
1261 --interp-prefix=PREFIX where to find shared libraries, etc.
1262 use %M for cpu name [$interp_prefix]
1263 --target-list=LIST set target list (default: build everything)
1264$(echo Available targets: $default_target_list | \
1265 fold -s -w 53 | sed -e 's/^/ /')
1266
1267Advanced options (experts only):
1268 --source-path=PATH path of source code [$source_path]
1269 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1270 --cc=CC use C compiler CC [$cc]
1271 --iasl=IASL use ACPI compiler IASL [$iasl]
1272 --host-cc=CC use C compiler CC [$host_cc] for code run at
1273 build time
1274 --cxx=CXX use C++ compiler CXX [$cxx]
1275 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1276 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1277 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1278 --make=MAKE use specified make [$make]
1279 --install=INSTALL use specified install [$install]
1280 --python=PYTHON use specified python [$python]
1281 --smbd=SMBD use specified smbd [$smbd]
1282 --static enable static build [$static]
1283 --mandir=PATH install man pages in PATH
1284 --datadir=PATH install firmware in PATH$confsuffix
1285 --docdir=PATH install documentation in PATH$confsuffix
1286 --bindir=PATH install binaries in PATH
1287 --libdir=PATH install libraries in PATH
1288 --sysconfdir=PATH install config in PATH$confsuffix
1289 --localstatedir=PATH install local state in PATH (set at runtime on win32)
e26110cf 1290 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
08fb77ed 1291 --enable-debug enable common debug build options
08fb77ed
SW
1292 --disable-strip disable stripping binaries
1293 --disable-werror disable compilation abort on warning
63678e17 1294 --disable-stack-protector disable compiler-provided stack protection
08fb77ed
SW
1295 --audio-drv-list=LIST set audio drivers list:
1296 Available drivers: $audio_possible_drivers
1297 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1298 --block-drv-rw-whitelist=L
1299 set block driver read-write whitelist
1300 (affects only QEMU, not qemu-img)
1301 --block-drv-ro-whitelist=L
1302 set block driver read-only whitelist
1303 (affects only QEMU, not qemu-img)
5b808275 1304 --enable-trace-backends=B Set trace backend
08fb77ed
SW
1305 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1306 --with-trace-file=NAME Full PATH,NAME of file to store traces
1307 Default:trace-<pid>
c23f23b9
MT
1308 --disable-slirp disable SLIRP userspace network connectivity
1309 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1310 --oss-lib path to OSS library
1311 --cpu=CPU Build for host CPU [$cpu]
08fb77ed
SW
1312 --with-coroutine=BACKEND coroutine backend. Supported options:
1313 gthread, ucontext, sigaltstack, windows
08fb77ed
SW
1314 --enable-gcov enable test coverage analysis with gcov
1315 --gcov=GCOV use specified gcov [$gcov_tool]
c23f23b9
MT
1316 --disable-blobs disable installing provided firmware blobs
1317 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1318 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1319
1320Optional features, enabled with --enable-FEATURE and
1321disabled with --disable-FEATURE, default is enabled if available:
1322
1323 system all system emulation targets
1324 user supported user emulation targets
1325 linux-user all linux usermode emulation targets
1326 bsd-user all BSD usermode emulation targets
c23f23b9
MT
1327 docs build documentation
1328 guest-agent build the QEMU Guest Agent
1329 guest-agent-msi build guest agent Windows MSI installation package
1330 pie Position Independent Executables
1331 modules modules support
1332 debug-tcg TCG debugging (default is disabled)
1333 debug-info debugging information
1334 sparse sparse checker
1335
ddbb0d09 1336 gnutls GNUTLS cryptography support
91bfcdb0
DB
1337 nettle nettle cryptography support
1338 gcrypt libgcrypt cryptography support
c23f23b9
MT
1339 sdl SDL UI
1340 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1341 gtk gtk UI
1342 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1343 vte vte support for the gtk UI
1344 curses curses UI
1345 vnc VNC UI support
1346 vnc-tls TLS encryption for VNC server
1347 vnc-sasl SASL encryption for VNC server
1348 vnc-jpeg JPEG lossy compression for VNC server
1349 vnc-png PNG compression for VNC server
c23f23b9
MT
1350 cocoa Cocoa UI (Mac OS X only)
1351 virtfs VirtFS
1352 xen xen backend driver support
1353 xen-pci-passthrough
1354 brlapi BrlAPI (Braile)
1355 curl curl connectivity
1356 fdt fdt device tree
1357 bluez bluez stack connectivity
1358 kvm KVM acceleration support
1359 rdma RDMA-based migration support
1360 uuid uuid support
1361 vde support for vde network
1362 netmap support for netmap network
1363 linux-aio Linux AIO support
1364 cap-ng libcap-ng support
1365 attr attr and xattr support
1366 vhost-net vhost-net acceleration support
1367 spice spice
1368 rbd rados block device (rbd)
1369 libiscsi iscsi support
1370 libnfs nfs support
7b02f544 1371 smartcard smartcard support (libcacard)
c23f23b9
MT
1372 libusb libusb (for usb passthrough)
1373 usb-redir usb network redirection support
1374 lzo support of lzo compression library
1375 snappy support of snappy compression library
1376 bzip2 support of bzip2 compression library
1377 (for reading bzip2-compressed dmg images)
1378 seccomp seccomp support
1379 coroutine-pool coroutine freelist (better performance)
1380 glusterfs GlusterFS backend
1381 archipelago Archipelago backend
1382 tpm TPM support
1383 libssh2 ssh block device support
1384 vhdx support for the Microsoft VHDX image format
c23f23b9
MT
1385 numa libnuma support
1386 tcmalloc tcmalloc support
7b01cb97 1387 jemalloc jemalloc support
08fb77ed
SW
1388
1389NOTE: The object files are built at the place where configure is launched
af5db58e 1390EOF
2d2ad6d0 1391exit 0
af5db58e
PB
1392fi
1393
359bc95d
PM
1394# Now we have handled --enable-tcg-interpreter and know we're not just
1395# printing the help message, bail out if the host CPU isn't supported.
1396if test "$ARCH" = "unknown"; then
1397 if test "$tcg_interpreter" = "yes" ; then
1398 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1399 ARCH=tci
1400 else
76ad07a4 1401 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
359bc95d
PM
1402 fi
1403fi
1404
9c83ffd8
PM
1405# Consult white-list to determine whether to enable werror
1406# by default. Only enable by default for git builds
1407z_version=`cut -f3 -d. $source_path/VERSION`
1408
1409if test -z "$werror" ; then
1410 if test -d "$source_path/.git" -a \
1411 "$linux" = "yes" ; then
1412 werror="yes"
1413 else
1414 werror="no"
1415 fi
1416fi
1417
8d05095c 1418# check that the C compiler works.
93b25869 1419write_c_skeleton;
8d05095c
PB
1420if compile_object ; then
1421 : C compiler works ok
1422else
76ad07a4 1423 error_exit "\"$cc\" either does not exist or does not work"
8d05095c
PB
1424fi
1425
98b21dcd
PM
1426# Check that the C++ compiler exists and works with the C compiler
1427if has $cxx; then
1428 cat > $TMPC <<EOF
1429int c_function(void);
1430int main(void) { return c_function(); }
1431EOF
1432
1433 compile_object
1434
9c83ffd8 1435 cat > $TMPCXX <<EOF
98b21dcd
PM
1436extern "C" {
1437 int c_function(void);
1438}
1439int c_function(void) { return 42; }
1440EOF
1441
9c83ffd8
PM
1442 update_cxxflags
1443
1444 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
98b21dcd
PM
1445 # C++ compiler $cxx works ok with C compiler $cc
1446 :
1447 else
1448 echo "C++ compiler $cxx does not work with C compiler $cc"
1449 echo "Disabling C++ specific optional code"
1450 cxx=
1451 fi
1452else
1453 echo "No C++ compiler available; disabling C++ specific optional code"
1454 cxx=
1455fi
1456
8d05095c
PB
1457gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1458gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1459gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
37746c5e 1460gcc_flags="-Wendif-labels $gcc_flags"
c1556a81 1461gcc_flags="-Wno-initializer-overrides $gcc_flags"
71429097 1462gcc_flags="-Wno-string-plus-int $gcc_flags"
6ca026cb
PM
1463# Note that we do not add -Werror to gcc_flags here, because that would
1464# enable it for all configure tests. If a configure test failed due
1465# to -Werror this would just silently disable some features,
1466# so it's too error prone.
93b25869
JS
1467
1468cc_has_warning_flag() {
1469 write_c_skeleton;
1470
a1d29d6c
PM
1471 # Use the positive sense of the flag when testing for -Wno-wombat
1472 # support (gcc will happily accept the -Wno- form of unknown
1473 # warning options).
93b25869
JS
1474 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1475 compile_prog "-Werror $optflag" ""
1476}
1477
1478for flag in $gcc_flags; do
1479 if cc_has_warning_flag $flag ; then
1480 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
8d05095c
PB
1481 fi
1482done
1483
3b463a3f 1484if test "$stack_protector" != "no"; then
63678e17 1485 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 1486 sp_on=0
63678e17 1487 for flag in $gcc_flags; do
590e5dd9
PM
1488 # We need to check both a compile and a link, since some compiler
1489 # setups fail only on a .c->.o compile and some only at link time
1490 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1491 compile_prog "-Werror $flag" ""; then
63678e17
SN
1492 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1493 LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
3b463a3f 1494 sp_on=1
63678e17
SN
1495 break
1496 fi
1497 done
3b463a3f
MR
1498 if test "$stack_protector" = yes; then
1499 if test $sp_on = 0; then
1500 error_exit "Stack protector not supported"
1501 fi
1502 fi
37746c5e
MAL
1503fi
1504
cbdd1999
PB
1505# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1506# large functions that use global variables. The bug is in all releases of
1507# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1508# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1509cat > $TMPC << EOF
1510#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1511int main(void) { return 0; }
1512#else
1513#error No bug in this compiler.
1514#endif
1515EOF
1516if compile_prog "-Werror -fno-gcse" "" ; then
1517 TRANSLATE_OPT_CFLAGS=-fno-gcse
1518fi
1519
40d6444e 1520if test "$static" = "yes" ; then
aa0d1f44
PB
1521 if test "$modules" = "yes" ; then
1522 error_exit "static and modules are mutually incompatible"
1523 fi
40d6444e 1524 if test "$pie" = "yes" ; then
76ad07a4 1525 error_exit "static and pie are mutually incompatible"
40d6444e
AK
1526 else
1527 pie="no"
1528 fi
1529fi
1530
768b7855
EC
1531# Unconditional check for compiler __thread support
1532 cat > $TMPC << EOF
1533static __thread int tls_var;
1534int main(void) { return tls_var; }
1535EOF
1536
1537if ! compile_prog "-Werror" "" ; then
1538 error_exit "Your compiler does not support the __thread specifier for " \
1539 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1540fi
1541
40d6444e
AK
1542if test "$pie" = ""; then
1543 case "$cpu-$targetos" in
c72b26ec 1544 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
40d6444e
AK
1545 ;;
1546 *)
1547 pie="no"
1548 ;;
1549 esac
1550fi
1551
1552if test "$pie" != "no" ; then
1553 cat > $TMPC << EOF
21d4a791
AK
1554
1555#ifdef __linux__
1556# define THREAD __thread
1557#else
1558# define THREAD
1559#endif
1560
1561static THREAD int tls_var;
1562
1563int main(void) { return tls_var; }
1564
40d6444e
AK
1565EOF
1566 if compile_prog "-fPIE -DPIE" "-pie"; then
1567 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1568 LDFLAGS="-pie $LDFLAGS"
1569 pie="yes"
1570 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1571 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1572 fi
1573 else
1574 if test "$pie" = "yes"; then
76ad07a4 1575 error_exit "PIE not available due to missing toolchain support"
40d6444e
AK
1576 else
1577 echo "Disabling PIE due to missing toolchain support"
1578 pie="no"
1579 fi
1580 fi
46eef33b 1581
e4a7b344 1582 if compile_prog "-Werror -fno-pie" "-nopie"; then
46eef33b
BS
1583 CFLAGS_NOPIE="-fno-pie"
1584 LDFLAGS_NOPIE="-nopie"
1585 fi
40d6444e
AK
1586fi
1587
66518bf6
DS
1588# check for broken gcc and libtool in RHEL5
1589if test -n "$libtool" -a "$pie" != "no" ; then
1590 cat > $TMPC <<EOF
1591
1592void *f(unsigned char *buf, int len);
1593void *g(unsigned char *buf, int len);
1594
1595void *
1596f(unsigned char *buf, int len)
1597{
1598 return (void*)0L;
1599}
1600
1601void *
1602g(unsigned char *buf, int len)
1603{
1604 return f(buf, len);
1605}
1606
1607EOF
1608 if ! libtool_prog; then
1609 echo "Disabling libtool due to broken toolchain support"
1610 libtool=
1611 fi
1612fi
1613
09dada40
PB
1614##########################################
1615# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1616# use i686 as default anyway, but for those that don't, an explicit
1617# specification is necessary
1618
1619if test "$cpu" = "i386"; then
1620 cat > $TMPC << EOF
1621static int sfaa(int *ptr)
1622{
1623 return __sync_fetch_and_and(ptr, 0);
1624}
1625
1626int main(void)
1627{
1628 int val = 42;
1405b629 1629 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
1630 sfaa(&val);
1631 return val;
1632}
1633EOF
1634 if ! compile_prog "" "" ; then
1635 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1636 fi
1637fi
1638
1639#########################################
ec530c81 1640# Solaris specific configure tool chain decisions
09dada40 1641
ec530c81 1642if test "$solaris" = "yes" ; then
6792aa11
LM
1643 if has $install; then
1644 :
1645 else
76ad07a4
PM
1646 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1647 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1648 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
ec530c81 1649 fi
6792aa11 1650 if test "`path_of $install`" = "/usr/sbin/install" ; then
76ad07a4
PM
1651 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1652 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1653 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
ec530c81 1654 fi
6792aa11
LM
1655 if has ar; then
1656 :
1657 else
ec530c81 1658 if test -f /usr/ccs/bin/ar ; then
76ad07a4
PM
1659 error_exit "No path includes ar" \
1660 "Add /usr/ccs/bin to your path and rerun configure"
ec530c81 1661 fi
76ad07a4 1662 error_exit "No path includes ar"
ec530c81 1663 fi
5fafdf24 1664fi
ec530c81 1665
afb63ebd 1666if test -z "${target_list+xxx}" ; then
121afa9e
AL
1667 target_list="$default_target_list"
1668else
1669 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1670fi
25b48338
PM
1671
1672# Check that we recognised the target name; this allows a more
1673# friendly error message than if we let it fall through.
1674for target in $target_list; do
1675 case " $default_target_list " in
1676 *" $target "*)
1677 ;;
1678 *)
1679 error_exit "Unknown target name '$target'"
1680 ;;
1681 esac
1682done
1683
f55fe278
PB
1684# see if system emulation was really requested
1685case " $target_list " in
1686 *"-softmmu "*) softmmu=yes
1687 ;;
1688 *) softmmu=no
1689 ;;
1690esac
5327cf48 1691
249247c9
JQ
1692feature_not_found() {
1693 feature=$1
21684af0 1694 remedy=$2
249247c9 1695
76ad07a4 1696 error_exit "User requested feature $feature" \
21684af0
SS
1697 "configure was not able to find it." \
1698 "$remedy"
249247c9
JQ
1699}
1700
7d13299d
FB
1701# ---
1702# big/little endian test
1703cat > $TMPC << EOF
61cc919f
MF
1704short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1705short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1706extern int foo(short *, short *);
1707int main(int argc, char *argv[]) {
1708 return foo(big_endian, little_endian);
7d13299d
FB
1709}
1710EOF
1711
61cc919f
MF
1712if compile_object ; then
1713 if grep -q BiGeNdIaN $TMPO ; then
1714 bigendian="yes"
1715 elif grep -q LiTtLeEnDiAn $TMPO ; then
1716 bigendian="no"
1717 else
1718 echo big/little test failed
21d89f84 1719 fi
61cc919f
MF
1720else
1721 echo big/little test failed
7d13299d
FB
1722fi
1723
a30878e7
PM
1724##########################################
1725# cocoa implies not SDL or GTK
1726# (the cocoa UI code currently assumes it is always the active UI
1727# and doesn't interact well with other UI frontend code)
1728if test "$cocoa" = "yes"; then
1729 if test "$sdl" = "yes"; then
1730 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1731 fi
1732 if test "$gtk" = "yes"; then
1733 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1734 fi
1735 gtk=no
1736 sdl=no
1737fi
1738
015a33bd
GA
1739##########################################
1740# L2TPV3 probe
1741
1742cat > $TMPC <<EOF
1743#include <sys/socket.h>
bff6cb72 1744#include <linux/ip.h>
015a33bd
GA
1745int main(void) { return sizeof(struct mmsghdr); }
1746EOF
1747if compile_prog "" "" ; then
1748 l2tpv3=yes
1749else
1750 l2tpv3=no
1751fi
1752
4d9310f4
DB
1753##########################################
1754# MinGW / Mingw-w64 localtime_r/gmtime_r check
1755
1756if test "$mingw32" = "yes"; then
1757 # Some versions of MinGW / Mingw-w64 lack localtime_r
1758 # and gmtime_r entirely.
1759 #
1760 # Some versions of Mingw-w64 define a macro for
1761 # localtime_r/gmtime_r.
1762 #
1763 # Some versions of Mingw-w64 will define functions
1764 # for localtime_r/gmtime_r, but only if you have
1765 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1766 # though, unistd.h and pthread.h both define
1767 # that for you.
1768 #
1769 # So this #undef localtime_r and #include <unistd.h>
1770 # are not in fact redundant.
1771cat > $TMPC << EOF
1772#include <unistd.h>
1773#include <time.h>
1774#undef localtime_r
1775int main(void) { localtime_r(NULL, NULL); return 0; }
1776EOF
1777 if compile_prog "" "" ; then
1778 localtime_r="yes"
1779 else
1780 localtime_r="no"
1781 fi
1782fi
1783
779ab5e3
SW
1784##########################################
1785# pkg-config probe
1786
1787if ! has "$pkg_config_exe"; then
76ad07a4 1788 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
1789fi
1790
b0a47e79
JQ
1791##########################################
1792# NPTL probe
1793
24cb36a6 1794if test "$linux_user" = "yes"; then
b0a47e79 1795 cat > $TMPC <<EOF
bd0c5661 1796#include <sched.h>
30813cea 1797#include <linux/futex.h>
182eacc0 1798int main(void) {
bd0c5661
PB
1799#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1800#error bork
1801#endif
182eacc0 1802 return 0;
bd0c5661
PB
1803}
1804EOF
24cb36a6 1805 if ! compile_object ; then
21684af0 1806 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 1807 fi
bd0c5661
PB
1808fi
1809
ac62922e
AZ
1810##########################################
1811# zlib check
1812
1ece9905
AL
1813if test "$zlib" != "no" ; then
1814 cat > $TMPC << EOF
ac62922e
AZ
1815#include <zlib.h>
1816int main(void) { zlibVersion(); return 0; }
1817EOF
1ece9905
AL
1818 if compile_prog "" "-lz" ; then
1819 :
1820 else
76ad07a4
PM
1821 error_exit "zlib check failed" \
1822 "Make sure to have the zlib libs and headers installed."
1ece9905 1823 fi
ac62922e 1824fi
eb0ecd5a 1825LIBS="$LIBS -lz"
ac62922e 1826
607dacd0
QN
1827##########################################
1828# lzo check
1829
1830if test "$lzo" != "no" ; then
1831 cat > $TMPC << EOF
1832#include <lzo/lzo1x.h>
1833int main(void) { lzo_version(); return 0; }
1834EOF
1835 if compile_prog "" "-llzo2" ; then
b25c9dff
SW
1836 libs_softmmu="$libs_softmmu -llzo2"
1837 lzo="yes"
607dacd0 1838 else
b25c9dff
SW
1839 if test "$lzo" = "yes"; then
1840 feature_not_found "liblzo2" "Install liblzo2 devel"
1841 fi
1842 lzo="no"
607dacd0 1843 fi
607dacd0
QN
1844fi
1845
1846##########################################
1847# snappy check
1848
1849if test "$snappy" != "no" ; then
1850 cat > $TMPC << EOF
1851#include <snappy-c.h>
1852int main(void) { snappy_max_compressed_length(4096); return 0; }
1853EOF
1854 if compile_prog "" "-lsnappy" ; then
b25c9dff
SW
1855 libs_softmmu="$libs_softmmu -lsnappy"
1856 snappy="yes"
607dacd0 1857 else
b25c9dff
SW
1858 if test "$snappy" = "yes"; then
1859 feature_not_found "libsnappy" "Install libsnappy devel"
1860 fi
1861 snappy="no"
607dacd0 1862 fi
607dacd0
QN
1863fi
1864
6b383c08
PW
1865##########################################
1866# bzip2 check
1867
1868if test "$bzip2" != "no" ; then
1869 cat > $TMPC << EOF
1870#include <bzlib.h>
1871int main(void) { BZ2_bzlibVersion(); return 0; }
1872EOF
1873 if compile_prog "" "-lbz2" ; then
1874 bzip2="yes"
1875 else
1876 if test "$bzip2" = "yes"; then
1877 feature_not_found "libbzip2" "Install libbzip2 devel"
1878 fi
1879 bzip2="no"
1880 fi
1881fi
1882
f794573e
EO
1883##########################################
1884# libseccomp check
1885
1886if test "$seccomp" != "no" ; then
ae6e8ef1
PM
1887 if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1888 $pkg_config --atleast-version=2.1.1 libseccomp; then
b4451996 1889 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
372e47e9 1890 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
f794573e
EO
1891 seccomp="yes"
1892 else
f794573e 1893 if test "$seccomp" = "yes"; then
896848f0 1894 feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
f794573e 1895 fi
e84d5956 1896 seccomp="no"
f794573e
EO
1897 fi
1898fi
e37630ca
AL
1899##########################################
1900# xen probe
1901
fc321b4b 1902if test "$xen" != "no" ; then
b2266bee 1903 xen_libs="-lxenstore -lxenctrl -lxenguest"
d5b93ddf 1904
50ced5b3
SW
1905 # First we test whether Xen headers and libraries are available.
1906 # If no, we are done and there is no Xen support.
1907 # If yes, more tests are run to detect the Xen version.
1908
1909 # Xen (any)
b2266bee 1910 cat > $TMPC <<EOF
e37630ca 1911#include <xenctrl.h>
50ced5b3
SW
1912int main(void) {
1913 return 0;
1914}
1915EOF
1916 if ! compile_prog "" "$xen_libs" ; then
1917 # Xen not found
1918 if test "$xen" = "yes" ; then
21684af0 1919 feature_not_found "xen" "Install xen devel"
50ced5b3
SW
1920 fi
1921 xen=no
1922
1923 # Xen unstable
69deef08
PM
1924 elif
1925 cat > $TMPC <<EOF &&
50ced5b3 1926#include <xenctrl.h>
e108a3c1 1927#include <xenstore.h>
d5b93ddf
AP
1928#include <stdint.h>
1929#include <xen/hvm/hvm_info_table.h>
1930#if !defined(HVM_MAX_VCPUS)
1931# error HVM_MAX_VCPUS not defined
1932#endif
d8b441a3
JB
1933int main(void) {
1934 xc_interface *xc;
1935 xs_daemon_open();
1936 xc = xc_interface_open(0, 0, 0);
1937 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1938 xc_gnttab_open(NULL, 0);
1939 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1940 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1941 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 1942 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
1943 return 0;
1944}
1945EOF
1946 compile_prog "" "$xen_libs"
1947 then
1948 xen_ctrl_version=460
1949 xen=yes
1950
1951 # Xen 4.5
1952 elif
1953 cat > $TMPC <<EOF &&
1954#include <xenctrl.h>
1955#include <xenstore.h>
1956#include <stdint.h>
1957#include <xen/hvm/hvm_info_table.h>
1958#if !defined(HVM_MAX_VCPUS)
1959# error HVM_MAX_VCPUS not defined
1960#endif
3996e85c
PD
1961int main(void) {
1962 xc_interface *xc;
1963 xs_daemon_open();
1964 xc = xc_interface_open(0, 0, 0);
1965 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1966 xc_gnttab_open(NULL, 0);
1967 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1968 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1969 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1970 return 0;
1971}
1972EOF
1973 compile_prog "" "$xen_libs"
1974 then
1975 xen_ctrl_version=450
1976 xen=yes
1977
1978 elif
1979 cat > $TMPC <<EOF &&
1980#include <xenctrl.h>
1981#include <xenstore.h>
1982#include <stdint.h>
1983#include <xen/hvm/hvm_info_table.h>
1984#if !defined(HVM_MAX_VCPUS)
1985# error HVM_MAX_VCPUS not defined
1986#endif
8688e065
SS
1987int main(void) {
1988 xc_interface *xc;
1989 xs_daemon_open();
1990 xc = xc_interface_open(0, 0, 0);
1991 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1992 xc_gnttab_open(NULL, 0);
1993 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1994 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1995 return 0;
1996}
1997EOF
1998 compile_prog "" "$xen_libs"
69deef08 1999 then
8688e065
SS
2000 xen_ctrl_version=420
2001 xen=yes
2002
69deef08
PM
2003 elif
2004 cat > $TMPC <<EOF &&
8688e065
SS
2005#include <xenctrl.h>
2006#include <xs.h>
2007#include <stdint.h>
2008#include <xen/hvm/hvm_info_table.h>
2009#if !defined(HVM_MAX_VCPUS)
2010# error HVM_MAX_VCPUS not defined
2011#endif
d5b93ddf 2012int main(void) {
d5b93ddf 2013 xs_daemon_open();
9b4c0b56 2014 xc_interface_open(0, 0, 0);
d5b93ddf
AP
2015 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2016 xc_gnttab_open(NULL, 0);
b87de24e 2017 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
d5b93ddf
AP
2018 return 0;
2019}
e37630ca 2020EOF
50ced5b3 2021 compile_prog "" "$xen_libs"
69deef08 2022 then
d5b93ddf 2023 xen_ctrl_version=410
fc321b4b 2024 xen=yes
d5b93ddf
AP
2025
2026 # Xen 4.0.0
69deef08
PM
2027 elif
2028 cat > $TMPC <<EOF &&
d5b93ddf
AP
2029#include <xenctrl.h>
2030#include <xs.h>
2031#include <stdint.h>
2032#include <xen/hvm/hvm_info_table.h>
2033#if !defined(HVM_MAX_VCPUS)
2034# error HVM_MAX_VCPUS not defined
2035#endif
2036int main(void) {
b87de24e
AP
2037 struct xen_add_to_physmap xatp = {
2038 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2039 };
d5b93ddf
AP
2040 xs_daemon_open();
2041 xc_interface_open();
2042 xc_gnttab_open();
2043 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
b87de24e 2044 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
d5b93ddf
AP
2045 return 0;
2046}
2047EOF
2048 compile_prog "" "$xen_libs"
69deef08 2049 then
d5b93ddf
AP
2050 xen_ctrl_version=400
2051 xen=yes
2052
b87de24e 2053 # Xen 3.4.0
69deef08
PM
2054 elif
2055 cat > $TMPC <<EOF &&
b87de24e
AP
2056#include <xenctrl.h>
2057#include <xs.h>
2058int main(void) {
2059 struct xen_add_to_physmap xatp = {
2060 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2061 };
2062 xs_daemon_open();
2063 xc_interface_open();
2064 xc_gnttab_open();
2065 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2066 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2067 return 0;
2068}
2069EOF
2070 compile_prog "" "$xen_libs"
69deef08 2071 then
b87de24e
AP
2072 xen_ctrl_version=340
2073 xen=yes
2074
2075 # Xen 3.3.0
69deef08
PM
2076 elif
2077 cat > $TMPC <<EOF &&
d5b93ddf
AP
2078#include <xenctrl.h>
2079#include <xs.h>
2080int main(void) {
2081 xs_daemon_open();
2082 xc_interface_open();
2083 xc_gnttab_open();
2084 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2085 return 0;
2086}
2087EOF
2088 compile_prog "" "$xen_libs"
69deef08 2089 then
d5b93ddf
AP
2090 xen_ctrl_version=330
2091 xen=yes
2092
50ced5b3 2093 # Xen version unsupported
b2266bee 2094 else
fc321b4b 2095 if test "$xen" = "yes" ; then
21684af0 2096 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
fc321b4b
JQ
2097 fi
2098 xen=no
b2266bee 2099 fi
d5b93ddf
AP
2100
2101 if test "$xen" = yes; then
2102 libs_softmmu="$xen_libs $libs_softmmu"
2103 fi
e37630ca
AL
2104fi
2105
eb6fda0f
AP
2106if test "$xen_pci_passthrough" != "no"; then
2107 if test "$xen" = "yes" && test "$linux" = "yes" &&
2108 test "$xen_ctrl_version" -ge 340; then
2109 xen_pci_passthrough=yes
2110 else
2111 if test "$xen_pci_passthrough" = "yes"; then
eb6fda0f 2112 if test "$xen_ctrl_version" -lt 340; then
76ad07a4
PM
2113 error_exit "User requested feature Xen PCI Passthrough" \
2114 "This feature does not work with Xen 3.3"
eb6fda0f 2115 fi
76ad07a4
PM
2116 error_exit "User requested feature Xen PCI Passthrough" \
2117 " but this feature requires /sys from Linux"
eb6fda0f
AP
2118 fi
2119 xen_pci_passthrough=no
2120 fi
2121fi
2122
44dc0ca3
AL
2123##########################################
2124# libtool probe
2125
3f534581 2126if ! has $libtool; then
44dc0ca3 2127 libtool=
44dc0ca3
AL
2128fi
2129
8e515b12
PM
2130# MacOSX ships with a libtool which isn't the GNU one; weed this
2131# out by checking whether libtool supports the --version switch
2132if test -n "$libtool"; then
2133 if ! "$libtool" --version >/dev/null 2>&1; then
2134 libtool=
2135 fi
2136fi
2137
dfffc653
JQ
2138##########################################
2139# Sparse probe
2140if test "$sparse" != "no" ; then
0dba6195 2141 if has cgcc; then
dfffc653
JQ
2142 sparse=yes
2143 else
2144 if test "$sparse" = "yes" ; then
21684af0 2145 feature_not_found "sparse" "Install sparse binary"
dfffc653
JQ
2146 fi
2147 sparse=no
2148 fi
2149fi
2150
f676c67e
JW
2151##########################################
2152# X11 probe
2153x11_cflags=
2154x11_libs=-lX11
2155if $pkg_config --exists "x11"; then
2156 x11_cflags=`$pkg_config --cflags x11`
2157 x11_libs=`$pkg_config --libs x11`
2158fi
2159
a4ccabcf
AL
2160##########################################
2161# GTK probe
2162
9e04c683
SW
2163if test "$gtkabi" = ""; then
2164 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2165 # Use 3.0 as a fallback if that is available.
2166 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2167 gtkabi=2.0
2168 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2169 gtkabi=3.0
2170 else
2171 gtkabi=2.0
2172 fi
2173fi
2174
a4ccabcf 2175if test "$gtk" != "no"; then
528de90a 2176 gtkpackage="gtk+-$gtkabi"
0a337ed0 2177 gtkx11package="gtk+-x11-$gtkabi"
528de90a
DB
2178 if test "$gtkabi" = "3.0" ; then
2179 gtkversion="3.0.0"
bbbf9bfb
SW
2180 else
2181 gtkversion="2.18.0"
2182 fi
2183 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2184 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2185 gtk_libs=`$pkg_config --libs $gtkpackage`
0a337ed0 2186 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
f676c67e
JW
2187 gtk_cflags="$gtk_cflags $x11_cflags"
2188 gtk_libs="$gtk_libs $x11_libs"
0a337ed0 2189 fi
bbbf9bfb
SW
2190 libs_softmmu="$gtk_libs $libs_softmmu"
2191 gtk="yes"
2192 elif test "$gtk" = "yes"; then
9e04c683 2193 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
bbbf9bfb
SW
2194 else
2195 gtk="no"
2196 fi
2197fi
2198
ddbb0d09
DB
2199
2200##########################################
2201# GNUTLS probe
2202
37371299
PM
2203gnutls_works() {
2204 # Unfortunately some distros have bad pkg-config information for gnutls
2205 # such that it claims to exist but you get a compiler error if you try
2206 # to use the options returned by --libs. Specifically, Ubuntu for --static
2207 # builds doesn't work:
2208 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2209 #
2210 # So sanity check the cflags/libs before assuming gnutls can be used.
2211 if ! $pkg_config --exists "gnutls"; then
2212 return 1
2213 fi
2214
2215 write_c_skeleton
2216 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2217}
2218
62893b67 2219gnutls_gcrypt=no
ed754746 2220gnutls_nettle=no
ddbb0d09 2221if test "$gnutls" != "no"; then
37371299 2222 if gnutls_works; then
ddbb0d09
DB
2223 gnutls_cflags=`$pkg_config --cflags gnutls`
2224 gnutls_libs=`$pkg_config --libs gnutls`
2225 libs_softmmu="$gnutls_libs $libs_softmmu"
2226 libs_tools="$gnutls_libs $libs_tools"
2227 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2228 gnutls="yes"
2229
2230 # gnutls_hash_init requires >= 2.9.10
2231 if $pkg_config --exists "gnutls >= 2.9.10"; then
2232 gnutls_hash="yes"
2233 else
2234 gnutls_hash="no"
2235 fi
62893b67
DB
2236
2237 if $pkg_config --exists 'gnutls >= 3.0'; then
2238 gnutls_gcrypt=no
ed754746 2239 gnutls_nettle=yes
62893b67
DB
2240 elif $pkg_config --exists 'gnutls >= 2.12'; then
2241 case `$pkg_config --libs --static gnutls` in
ed754746
DB
2242 *gcrypt*)
2243 gnutls_gcrypt=yes
2244 gnutls_nettle=no
2245 ;;
2246 *nettle*)
2247 gnutls_gcrypt=no
2248 gnutls_nettle=yes
2249 ;;
2250 *)
2251 gnutls_gcrypt=yes
2252 gnutls_nettle=no
2253 ;;
62893b67
DB
2254 esac
2255 else
2256 gnutls_gcrypt=yes
ed754746 2257 gnutls_nettle=no
62893b67 2258 fi
ddbb0d09
DB
2259 elif test "$gnutls" = "yes"; then
2260 feature_not_found "gnutls" "Install gnutls devel"
2261 else
2262 gnutls="no"
2263 gnutls_hash="no"
2264 fi
2265else
2266 gnutls_hash="no"
2267fi
2268
91bfcdb0
DB
2269
2270# If user didn't give a --disable/enable-gcrypt flag,
2271# then mark as disabled if user requested nettle
2272# explicitly, or if gnutls links to nettle
2273if test -z "$gcrypt"
2274then
2275 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2276 then
2277 gcrypt="no"
2278 fi
2279fi
2280
2281# If user didn't give a --disable/enable-nettle flag,
2282# then mark as disabled if user requested gcrypt
2283# explicitly, or if gnutls links to gcrypt
2284if test -z "$nettle"
2285then
2286 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2287 then
2288 nettle="no"
2289 fi
2290fi
2291
2292has_libgcrypt_config() {
2293 if ! has "libgcrypt-config"
2294 then
2295 return 1
2296 fi
2297
2298 if test -n "$cross_prefix"
2299 then
2300 host=`libgcrypt-config --host`
2301 if test "$host-" != $cross_prefix
2302 then
2303 return 1
2304 fi
2305 fi
2306
2307 return 0
2308}
2309
2310if test "$gcrypt" != "no"; then
2311 if has_libgcrypt_config; then
62893b67
DB
2312 gcrypt_cflags=`libgcrypt-config --cflags`
2313 gcrypt_libs=`libgcrypt-config --libs`
91bfcdb0
DB
2314 # Debian has remove -lgpg-error from libgcrypt-config
2315 # as it "spreads unnecessary dependencies" which in
2316 # turn breaks static builds...
2317 if test "$static" = "yes"
2318 then
2319 gcrypt_libs="$gcrypt_libs -lgpg-error"
2320 fi
62893b67
DB
2321 libs_softmmu="$gcrypt_libs $libs_softmmu"
2322 libs_tools="$gcrypt_libs $libs_tools"
2323 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
91bfcdb0
DB
2324 gcrypt="yes"
2325 if test -z "$nettle"; then
2326 nettle="no"
2327 fi
62893b67 2328 else
91bfcdb0
DB
2329 if test "$gcrypt" = "yes"; then
2330 feature_not_found "gcrypt" "Install gcrypt devel"
2331 else
2332 gcrypt="no"
2333 fi
62893b67
DB
2334 fi
2335fi
2336
ddbb0d09 2337
91bfcdb0 2338if test "$nettle" != "no"; then
ed754746
DB
2339 if $pkg_config --exists "nettle"; then
2340 nettle_cflags=`$pkg_config --cflags nettle`
2341 nettle_libs=`$pkg_config --libs nettle`
becaeb72 2342 nettle_version=`$pkg_config --modversion nettle`
ed754746
DB
2343 libs_softmmu="$nettle_libs $libs_softmmu"
2344 libs_tools="$nettle_libs $libs_tools"
2345 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
91bfcdb0 2346 nettle="yes"
ed754746 2347 else
91bfcdb0
DB
2348 if test "$nettle" = "yes"; then
2349 feature_not_found "nettle" "Install nettle devel"
2350 else
2351 nettle="no"
2352 fi
ed754746
DB
2353 fi
2354fi
2355
91bfcdb0
DB
2356if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2357then
2358 error_exit "Only one of gcrypt & nettle can be enabled"
2359fi
2360
9a2fd434
DB
2361##########################################
2362# libtasn1 - only for the TLS creds/session test suite
2363
2364tasn1=yes
90246037
DB
2365tasn1_cflags=""
2366tasn1_libs=""
9a2fd434
DB
2367if $pkg_config --exists "libtasn1"; then
2368 tasn1_cflags=`$pkg_config --cflags libtasn1`
2369 tasn1_libs=`$pkg_config --libs libtasn1`
9a2fd434
DB
2370else
2371 tasn1=no
2372fi
2373
ed754746 2374
bbbf9bfb
SW
2375##########################################
2376# VTE probe
2377
2378if test "$vte" != "no"; then
2379 if test "$gtkabi" = "3.0"; then
528de90a
DB
2380 vtepackage="vte-2.90"
2381 vteversion="0.32.0"
2382 else
528de90a
DB
2383 vtepackage="vte"
2384 vteversion="0.24.0"
2385 fi
bbbf9bfb
SW
2386 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2387 vte_cflags=`$pkg_config --cflags $vtepackage`
2388 vte_libs=`$pkg_config --libs $vtepackage`
2389 libs_softmmu="$vte_libs $libs_softmmu"
2390 vte="yes"
2391 elif test "$vte" = "yes"; then
9e04c683
SW
2392 if test "$gtkabi" = "3.0"; then
2393 feature_not_found "vte" "Install libvte-2.90 devel"
2394 else
2395 feature_not_found "vte" "Install libvte devel"
2396 fi
0d185e63 2397 else
bbbf9bfb 2398 vte="no"
a4ccabcf
AL
2399 fi
2400fi
2401
11d9f695
FB
2402##########################################
2403# SDL probe
2404
3ec87ffe
PB
2405# Look for sdl configuration program (pkg-config or sdl-config). Try
2406# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
47c03744
DA
2407
2408if test $sdlabi = "2.0"; then
2409 sdl_config=$sdl2_config
2410 sdlname=sdl2
2411 sdlconfigname=sdl2_config
2412else
2413 sdlname=sdl
2414 sdlconfigname=sdl_config
2415fi
2416
2417if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2418 sdl_config=$sdlconfigname
3ec87ffe
PB
2419fi
2420
47c03744
DA
2421if $pkg_config $sdlname --exists; then
2422 sdlconfig="$pkg_config $sdlname"
9316f803 2423 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
3ec87ffe
PB
2424elif has ${sdl_config}; then
2425 sdlconfig="$sdl_config"
9316f803 2426 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
a0dfd8a4
LM
2427else
2428 if test "$sdl" = "yes" ; then
21684af0 2429 feature_not_found "sdl" "Install SDL devel"
a0dfd8a4
LM
2430 fi
2431 sdl=no
9316f803 2432fi
29e5bada 2433if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
3ec87ffe
PB
2434 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2435fi
11d9f695 2436
9316f803 2437sdl_too_old=no
c4198157 2438if test "$sdl" != "no" ; then
ac119f9d 2439 cat > $TMPC << EOF
11d9f695
FB
2440#include <SDL.h>
2441#undef main /* We don't want SDL to override our main() */
2442int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2443EOF
9316f803 2444 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
74f42e18
T
2445 if test "$static" = "yes" ; then
2446 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2447 else
2448 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2449 fi
52166aa0 2450 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
2451 if test "$_sdlversion" -lt 121 ; then
2452 sdl_too_old=yes
2453 else
a30878e7 2454 sdl=yes
ac119f9d 2455 fi
cd01b4a3 2456
67c274d3 2457 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
ac119f9d 2458 if test "$sdl" = "yes" -a "$static" = "yes" ; then
67c274d3 2459 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
f8aa6c7b
SW
2460 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2461 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
ac119f9d 2462 fi
52166aa0 2463 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
2464 :
2465 else
2466 sdl=no
2467 fi
2468 fi # static link
c4198157
JQ
2469 else # sdl not found
2470 if test "$sdl" = "yes" ; then
21684af0 2471 feature_not_found "sdl" "Install SDL devel"
c4198157
JQ
2472 fi
2473 sdl=no
ac119f9d 2474 fi # sdl compile test
a68551bc 2475fi
11d9f695 2476
5368a422 2477if test "$sdl" = "yes" ; then
ac119f9d 2478 cat > $TMPC <<EOF
5368a422
AL
2479#include <SDL.h>
2480#if defined(SDL_VIDEO_DRIVER_X11)
2481#include <X11/XKBlib.h>
2482#else
2483#error No x11 support
2484#endif
2485int main(void) { return 0; }
2486EOF
f676c67e
JW
2487 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2488 sdl_cflags="$sdl_cflags $x11_cflags"
2489 sdl_libs="$sdl_libs $x11_libs"
ac119f9d 2490 fi
0705667e 2491 libs_softmmu="$sdl_libs $libs_softmmu"
5368a422
AL
2492fi
2493
2da776db
MH
2494##########################################
2495# RDMA needs OpenFabrics libraries
2496if test "$rdma" != "no" ; then
2497 cat > $TMPC <<EOF
2498#include <rdma/rdma_cma.h>
2499int main(void) { return 0; }
2500EOF
2501 rdma_libs="-lrdmacm -libverbs"
2502 if compile_prog "" "$rdma_libs" ; then
2503 rdma="yes"
2504 libs_softmmu="$libs_softmmu $rdma_libs"
2505 else
2506 if test "$rdma" = "yes" ; then
2507 error_exit \
2508 " OpenFabrics librdmacm/libibverbs not present." \
2509 " Your options:" \
2510 " (1) Fast: Install infiniband packages from your distro." \
2511 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2512 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2513 fi
2514 rdma="no"
2515 fi
2516fi
2517
95c6bff3 2518
2f9606b3
AL
2519##########################################
2520# VNC SASL detection
821601ea 2521if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
ea784e3b 2522 cat > $TMPC <<EOF
2f9606b3
AL
2523#include <sasl/sasl.h>
2524#include <stdio.h>
2525int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2526EOF
ea784e3b
JQ
2527 # Assuming Cyrus-SASL installed in /usr prefix
2528 vnc_sasl_cflags=""
2529 vnc_sasl_libs="-lsasl2"
2530 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2531 vnc_sasl=yes
2532 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
ca273d58 2533 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
ea784e3b
JQ
2534 else
2535 if test "$vnc_sasl" = "yes" ; then
21684af0 2536 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2f9606b3 2537 fi
ea784e3b
JQ
2538 vnc_sasl=no
2539 fi
2f9606b3
AL
2540fi
2541
2f6f5c7a
CC
2542##########################################
2543# VNC JPEG detection
821601ea 2544if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2f6f5c7a
CC
2545cat > $TMPC <<EOF
2546#include <stdio.h>
2547#include <jpeglib.h>
2548int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2549EOF
2550 vnc_jpeg_cflags=""
2551 vnc_jpeg_libs="-ljpeg"
2552 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2553 vnc_jpeg=yes
2554 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
ca273d58 2555 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2f6f5c7a
CC
2556 else
2557 if test "$vnc_jpeg" = "yes" ; then
21684af0 2558 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2f6f5c7a
CC
2559 fi
2560 vnc_jpeg=no
2561 fi
2562fi
2563
efe556ad
CC
2564##########################################
2565# VNC PNG detection
821601ea 2566if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
efe556ad
CC
2567cat > $TMPC <<EOF
2568//#include <stdio.h>
2569#include <png.h>
832ce9c2 2570#include <stddef.h>
efe556ad
CC
2571int main(void) {
2572 png_structp png_ptr;
2573 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
7edc3fed 2574 return png_ptr != 0;
efe556ad
CC
2575}
2576EOF
65d5d3f9 2577 if $pkg_config libpng --exists; then
ca871ec8
SW
2578 vnc_png_cflags=`$pkg_config libpng --cflags`
2579 vnc_png_libs=`$pkg_config libpng --libs`
9af8025e 2580 else
efe556ad
CC
2581 vnc_png_cflags=""
2582 vnc_png_libs="-lpng"
9af8025e 2583 fi
efe556ad
CC
2584 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2585 vnc_png=yes
2586 libs_softmmu="$vnc_png_libs $libs_softmmu"
9af8025e 2587 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
efe556ad
CC
2588 else
2589 if test "$vnc_png" = "yes" ; then
21684af0 2590 feature_not_found "vnc-png" "Install libpng devel"
efe556ad
CC
2591 fi
2592 vnc_png=no
2593 fi
2594fi
2595
76655d6d
AL
2596##########################################
2597# fnmatch() probe, used for ACL routines
2598fnmatch="no"
2599cat > $TMPC << EOF
2600#include <fnmatch.h>
2601int main(void)
2602{
2603 fnmatch("foo", "foo", 0);
2604 return 0;
2605}
2606EOF
52166aa0 2607if compile_prog "" "" ; then
76655d6d
AL
2608 fnmatch="yes"
2609fi
2610
ee682d27
SW
2611##########################################
2612# uuid_generate() probe, used for vdi block driver
2d16c8e9
PM
2613# Note that on some systems (notably MacOSX) no extra library
2614# need be linked to get the uuid functions.
ee682d27
SW
2615if test "$uuid" != "no" ; then
2616 uuid_libs="-luuid"
2617 cat > $TMPC << EOF
2618#include <uuid/uuid.h>
2619int main(void)
2620{
2621 uuid_t my_uuid;
2622 uuid_generate(my_uuid);
2623 return 0;
2624}
2625EOF
2d16c8e9
PM
2626 if compile_prog "" "" ; then
2627 uuid="yes"
2628 elif compile_prog "" "$uuid_libs" ; then
ee682d27
SW
2629 uuid="yes"
2630 libs_softmmu="$uuid_libs $libs_softmmu"
2631 libs_tools="$uuid_libs $libs_tools"
2632 else
2633 if test "$uuid" = "yes" ; then
21684af0 2634 feature_not_found "uuid" "Install libuuid devel"
ee682d27
SW
2635 fi
2636 uuid=no
2637 fi
2638fi
2639
4f18b782
JC
2640if test "$vhdx" = "yes" ; then
2641 if test "$uuid" = "no" ; then
2642 error_exit "uuid required for VHDX support"
2643 fi
2644elif test "$vhdx" != "no" ; then
2645 if test "$uuid" = "yes" ; then
2646 vhdx=yes
2647 else
2648 vhdx=no
2649 fi
2650fi
2651
dce512de
CH
2652##########################################
2653# xfsctl() probe, used for raw-posix
2654if test "$xfs" != "no" ; then
2655 cat > $TMPC << EOF
ffc41d10 2656#include <stddef.h> /* NULL */
dce512de
CH
2657#include <xfs/xfs.h>
2658int main(void)
2659{
2660 xfsctl(NULL, 0, 0, NULL);
2661 return 0;
2662}
2663EOF
2664 if compile_prog "" "" ; then
2665 xfs="yes"
2666 else
2667 if test "$xfs" = "yes" ; then
21684af0 2668 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
dce512de
CH
2669 fi
2670 xfs=no
2671 fi
2672fi
2673
8a16d273
TS
2674##########################################
2675# vde libraries probe
dfb278bd 2676if test "$vde" != "no" ; then
4baae0ac 2677 vde_libs="-lvdeplug"
8a16d273
TS
2678 cat > $TMPC << EOF
2679#include <libvdeplug.h>
4a7f0e06
PB
2680int main(void)
2681{
2682 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
2683 char s[] = "";
2684 vde_open(s, s, &a);
4a7f0e06
PB
2685 return 0;
2686}
8a16d273 2687EOF
52166aa0 2688 if compile_prog "" "$vde_libs" ; then
4baae0ac 2689 vde=yes
8e02e54c
JQ
2690 libs_softmmu="$vde_libs $libs_softmmu"
2691 libs_tools="$vde_libs $libs_tools"
dfb278bd
JQ
2692 else
2693 if test "$vde" = "yes" ; then
21684af0 2694 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
2695 fi
2696 vde=no
4baae0ac 2697 fi
8a16d273
TS
2698fi
2699
58952137 2700##########################################
0a985b37
VM
2701# netmap support probe
2702# Apart from looking for netmap headers, we make sure that the host API version
2703# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2704# a minor/major version number. Minor new features will be marked with values up
2705# to 15, and if something happens that requires a change to the backend we will
2706# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
2707if test "$netmap" != "no" ; then
2708 cat > $TMPC << EOF
2709#include <inttypes.h>
2710#include <net/if.h>
2711#include <net/netmap.h>
2712#include <net/netmap_user.h>
0a985b37
VM
2713#if (NETMAP_API < 11) || (NETMAP_API > 15)
2714#error
2715#endif
58952137
VM
2716int main(void) { return 0; }
2717EOF
2718 if compile_prog "" "" ; then
2719 netmap=yes
2720 else
2721 if test "$netmap" = "yes" ; then
2722 feature_not_found "netmap"
2723 fi
2724 netmap=no
2725 fi
2726fi
2727
47e98658
CB
2728##########################################
2729# libcap-ng library probe
2730if test "$cap_ng" != "no" ; then
2731 cap_libs="-lcap-ng"
2732 cat > $TMPC << EOF
2733#include <cap-ng.h>
2734int main(void)
2735{
2736 capng_capability_to_name(CAPNG_EFFECTIVE);
2737 return 0;
2738}
2739EOF
2740 if compile_prog "" "$cap_libs" ; then
2741 cap_ng=yes
2742 libs_tools="$cap_libs $libs_tools"
2743 else
2744 if test "$cap_ng" = "yes" ; then
21684af0 2745 feature_not_found "cap_ng" "Install libcap-ng devel"
47e98658
CB
2746 fi
2747 cap_ng=no
2748 fi
2749fi
2750
8f28f3fb 2751##########################################
c2de5c91 2752# Sound support libraries probe
8f28f3fb 2753
c2de5c91 2754audio_drv_probe()
2755{
2756 drv=$1
2757 hdr=$2
2758 lib=$3
2759 exp=$4
2760 cfl=$5
2761 cat > $TMPC << EOF
2762#include <$hdr>
2763int main(void) { $exp }
8f28f3fb 2764EOF
52166aa0 2765 if compile_prog "$cfl" "$lib" ; then
c2de5c91 2766 :
2767 else
76ad07a4
PM
2768 error_exit "$drv check failed" \
2769 "Make sure to have the $drv libs and headers installed."
c2de5c91 2770 fi
2771}
2772
2fa7d3bf 2773audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
c2de5c91 2774for drv in $audio_drv_list; do
2775 case $drv in
2776 alsa)
2777 audio_drv_probe $drv alsa/asoundlib.h -lasound \
e35bcb0c 2778 "return snd_pcm_close((snd_pcm_t *)0);"
a4bf6780 2779 libs_softmmu="-lasound $libs_softmmu"
c2de5c91 2780 ;;
2781
b8e59f18 2782 pa)
a394aed2
MAL
2783 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2784 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2785 libs_softmmu="-lpulse $libs_softmmu"
67f86e8e 2786 audio_pt_int="yes"
b8e59f18 2787 ;;
2788
997e690a
JQ
2789 coreaudio)
2790 libs_softmmu="-framework CoreAudio $libs_softmmu"
2791 ;;
2792
a4bf6780
JQ
2793 dsound)
2794 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
d5631638 2795 audio_win_int="yes"
a4bf6780
JQ
2796 ;;
2797
2798 oss)
2799 libs_softmmu="$oss_lib $libs_softmmu"
2800 ;;
2801
2802 sdl|wav)
2f6a1ab0
BS
2803 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2804 ;;
2805
e4c63a6a 2806 *)
1c9b2a52 2807 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
2808 error_exit "Unknown driver '$drv' selected" \
2809 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 2810 }
2811 ;;
c2de5c91 2812 esac
2813done
8f28f3fb 2814
2e4d9fb1
AJ
2815##########################################
2816# BrlAPI probe
2817
4ffcedb6 2818if test "$brlapi" != "no" ; then
eb82284f
JQ
2819 brlapi_libs="-lbrlapi"
2820 cat > $TMPC << EOF
2e4d9fb1 2821#include <brlapi.h>
832ce9c2 2822#include <stddef.h>
2e4d9fb1
AJ
2823int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2824EOF
52166aa0 2825 if compile_prog "" "$brlapi_libs" ; then
eb82284f 2826 brlapi=yes
264606b3 2827 libs_softmmu="$brlapi_libs $libs_softmmu"
4ffcedb6
JQ
2828 else
2829 if test "$brlapi" = "yes" ; then
21684af0 2830 feature_not_found "brlapi" "Install brlapi devel"
4ffcedb6
JQ
2831 fi
2832 brlapi=no
eb82284f
JQ
2833 fi
2834fi
2e4d9fb1 2835
4d3b6f6e
AZ
2836##########################################
2837# curses probe
a3605bf6
MT
2838if test "$curses" != "no" ; then
2839 if test "$mingw32" = "yes" ; then
e095e2f3 2840 curses_list="-lpdcurses"
a3605bf6 2841 else
cfeda5f4 2842 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
a3605bf6 2843 fi
c584a6d0 2844 curses_found=no
4d3b6f6e
AZ
2845 cat > $TMPC << EOF
2846#include <curses.h>
ef9a2524
SW
2847int main(void) {
2848 const char *s = curses_version();
2849 resize_term(0, 0);
2850 return s != 0;
2851}
4d3b6f6e 2852EOF
ecbe251f 2853 IFS=:
4f78ef9a 2854 for curses_lib in $curses_list; do
ecbe251f 2855 unset IFS
4f78ef9a 2856 if compile_prog "" "$curses_lib" ; then
c584a6d0 2857 curses_found=yes
4f78ef9a
JQ
2858 libs_softmmu="$curses_lib $libs_softmmu"
2859 break
2860 fi
2861 done
ecbe251f 2862 unset IFS
c584a6d0
JQ
2863 if test "$curses_found" = "yes" ; then
2864 curses=yes
2865 else
2866 if test "$curses" = "yes" ; then
21684af0 2867 feature_not_found "curses" "Install ncurses devel"
c584a6d0
JQ
2868 fi
2869 curses=no
2870 fi
4f78ef9a 2871fi
4d3b6f6e 2872
769ce76d
AG
2873##########################################
2874# curl probe
788c8196 2875if test "$curl" != "no" ; then
65d5d3f9 2876 if $pkg_config libcurl --exists; then
a3605bf6
MT
2877 curlconfig="$pkg_config libcurl"
2878 else
2879 curlconfig=curl-config
2880 fi
769ce76d
AG
2881 cat > $TMPC << EOF
2882#include <curl/curl.h>
0b862ced 2883int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
769ce76d 2884EOF
4e2b0658
PB
2885 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2886 curl_libs=`$curlconfig --libs 2>/dev/null`
b1d5a277 2887 if compile_prog "$curl_cflags" "$curl_libs" ; then
769ce76d 2888 curl=yes
788c8196
JQ
2889 else
2890 if test "$curl" = "yes" ; then
21684af0 2891 feature_not_found "curl" "Install libcurl devel"
788c8196
JQ
2892 fi
2893 curl=no
769ce76d
AG
2894 fi
2895fi # test "$curl"
2896
fb599c9a
AZ
2897##########################################
2898# bluez support probe
a20a6f46 2899if test "$bluez" != "no" ; then
e820e3f4
AZ
2900 cat > $TMPC << EOF
2901#include <bluetooth/bluetooth.h>
2902int main(void) { return bt_error(0); }
2903EOF
a8bd70ad
PB
2904 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2905 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
52166aa0 2906 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
a20a6f46 2907 bluez=yes
e482d56a 2908 libs_softmmu="$bluez_libs $libs_softmmu"
e820e3f4 2909 else
a20a6f46 2910 if test "$bluez" = "yes" ; then
21684af0 2911 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
a20a6f46 2912 fi
e820e3f4
AZ
2913 bluez="no"
2914 fi
fb599c9a
AZ
2915fi
2916
e18df141
AL
2917##########################################
2918# glib support probe
a52d28af 2919
f40685c6 2920glib_req_ver=2.22
aa0d1f44
PB
2921glib_modules=gthread-2.0
2922if test "$modules" = yes; then
2923 glib_modules="$glib_modules gmodule-2.0"
2924fi
e26110cf 2925
aa0d1f44 2926for i in $glib_modules; do
e26110cf
FZ
2927 if $pkg_config --atleast-version=$glib_req_ver $i; then
2928 glib_cflags=`$pkg_config --cflags $i`
2929 glib_libs=`$pkg_config --libs $i`
2930 CFLAGS="$glib_cflags $CFLAGS"
2931 LIBS="$glib_libs $LIBS"
2932 libs_qga="$glib_libs $libs_qga"
2933 else
2934 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2935 fi
2936done
2937
9d41401b
MT
2938# g_test_trap_subprocess added in 2.38. Used by some tests.
2939glib_subprocess=yes
2940if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2941 glib_subprocess=no
2942fi
2943
bbbf2e04
JS
2944# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2945cat > $TMPC << EOF
2946#include <glib.h>
2947int main(void) { return 0; }
2948EOF
2949if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2950 if cc_has_warning_flag "-Wno-unknown-attributes"; then
2951 glib_cflags="-Wno-unknown-attributes $glib_cflags"
2952 CFLAGS="-Wno-unknown-attributes $CFLAGS"
2953 fi
2954fi
2955
e26110cf
FZ
2956##########################################
2957# SHA command probe for modules
2958if test "$modules" = yes; then
2959 shacmd_probe="sha1sum sha1 shasum"
2960 for c in $shacmd_probe; do
8ccefb91 2961 if has $c; then
e26110cf
FZ
2962 shacmd="$c"
2963 break
2964 fi
2965 done
2966 if test "$shacmd" = ""; then
2967 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2968 fi
e18df141
AL
2969fi
2970
e2134eb9
GH
2971##########################################
2972# pixman support probe
2973
2974if test "$pixman" = ""; then
74880fe2
RS
2975 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2976 pixman="none"
236f282c 2977 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
e2134eb9
GH
2978 pixman="system"
2979 else
2980 pixman="internal"
2981 fi
2982fi
74880fe2
RS
2983if test "$pixman" = "none"; then
2984 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
76ad07a4
PM
2985 error_exit "pixman disabled but system emulation or tools build" \
2986 "enabled. You can turn off pixman only if you also" \
2987 "disable all system emulation targets and the tools" \
2988 "build with '--disable-tools --disable-system'."
74880fe2
RS
2989 fi
2990 pixman_cflags=
2991 pixman_libs=
2992elif test "$pixman" = "system"; then
236f282c 2993 # pixman version has been checked above
ca871ec8
SW
2994 pixman_cflags=`$pkg_config --cflags pixman-1`
2995 pixman_libs=`$pkg_config --libs pixman-1`
e2134eb9
GH
2996else
2997 if test ! -d ${source_path}/pixman/pixman; then
236f282c 2998 error_exit "pixman >= 0.21.8 not present. Your options:" \
76ad07a4
PM
2999 " (1) Preferred: Install the pixman devel package (any recent" \
3000 " distro should have packages as Xorg needs pixman too)." \
3001 " (2) Fetch the pixman submodule, using:" \
3002 " git submodule update --init pixman"
e2134eb9 3003 fi
5ca9388a
GH
3004 mkdir -p pixman/pixman
3005 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3006 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
e2134eb9 3007fi
e2134eb9 3008
17bff52b
MK
3009##########################################
3010# libcap probe
3011
3012if test "$cap" != "no" ; then
3013 cat > $TMPC <<EOF
3014#include <stdio.h>
3015#include <sys/capability.h>
cc939743 3016int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
17bff52b
MK
3017EOF
3018 if compile_prog "" "-lcap" ; then
3019 cap=yes
3020 else
3021 cap=no
3022 fi
3023fi
3024
414f0dab 3025##########################################
e5d355d1 3026# pthread probe
4b29ec41 3027PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3028
4dd75c70 3029pthread=no
e5d355d1 3030cat > $TMPC << EOF
3c529d93 3031#include <pthread.h>
7a42bbe4
SW
3032static void *f(void *p) { return NULL; }
3033int main(void) {
3034 pthread_t thread;
3035 pthread_create(&thread, 0, f, 0);
3036 return 0;
3037}
414f0dab 3038EOF
bd00d539
AF
3039if compile_prog "" "" ; then
3040 pthread=yes
3041else
3042 for pthread_lib in $PTHREADLIBS_LIST; do
3043 if compile_prog "" "$pthread_lib" ; then
3044 pthread=yes
e3c56761
PP
3045 found=no
3046 for lib_entry in $LIBS; do
3047 if test "$lib_entry" = "$pthread_lib"; then
3048 found=yes
3049 break
3050 fi
3051 done
3052 if test "$found" = "no"; then
3053 LIBS="$pthread_lib $LIBS"
3054 fi
bd00d539
AF
3055 break
3056 fi
3057 done
3058fi
414f0dab 3059
4617e593 3060if test "$mingw32" != yes -a "$pthread" = no; then
76ad07a4
PM
3061 error_exit "pthread check failed" \
3062 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3063fi
3064
5c312079
DDAG
3065# check for pthread_setname_np
3066pthread_setname_np=no
3067cat > $TMPC << EOF
3068#include <pthread.h>
3069
3070static void *f(void *p) { return NULL; }
3071int main(void)
3072{
3073 pthread_t thread;
3074 pthread_create(&thread, 0, f, 0);
3075 pthread_setname_np(thread, "QEMU");
3076 return 0;
3077}
3078EOF
3079if compile_prog "" "$pthread_lib" ; then
3080 pthread_setname_np=yes
3081fi
3082
f27aaf4b
CB
3083##########################################
3084# rbd probe
3085if test "$rbd" != "no" ; then
3086 cat > $TMPC <<EOF
3087#include <stdio.h>
ad32e9c0 3088#include <rbd/librbd.h>
f27aaf4b 3089int main(void) {
ad32e9c0
JD
3090 rados_t cluster;
3091 rados_create(&cluster, NULL);
f27aaf4b
CB
3092 return 0;
3093}
3094EOF
ad32e9c0
JD
3095 rbd_libs="-lrbd -lrados"
3096 if compile_prog "" "$rbd_libs" ; then
3097 rbd=yes
f27aaf4b
CB
3098 else
3099 if test "$rbd" = "yes" ; then
21684af0 3100 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3101 fi
3102 rbd=no
3103 fi
f27aaf4b
CB
3104fi
3105
0a12ec87
RJ
3106##########################################
3107# libssh2 probe
4fc16838 3108min_libssh2_version=1.2.8
0a12ec87 3109if test "$libssh2" != "no" ; then
65d5d3f9 3110 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
0a12ec87
RJ
3111 libssh2_cflags=`$pkg_config libssh2 --cflags`
3112 libssh2_libs=`$pkg_config libssh2 --libs`
0a12ec87 3113 libssh2=yes
0a12ec87
RJ
3114 else
3115 if test "$libssh2" = "yes" ; then
4fc16838 3116 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
0a12ec87
RJ
3117 fi
3118 libssh2=no
3119 fi
3120fi
3121
9a2d462e
RJ
3122##########################################
3123# libssh2_sftp_fsync probe
3124
3125if test "$libssh2" = "yes"; then
3126 cat > $TMPC <<EOF
3127#include <stdio.h>
3128#include <libssh2.h>
3129#include <libssh2_sftp.h>
3130int main(void) {
3131 LIBSSH2_SESSION *session;
3132 LIBSSH2_SFTP *sftp;
3133 LIBSSH2_SFTP_HANDLE *sftp_handle;
3134 session = libssh2_session_init ();
3135 sftp = libssh2_sftp_init (session);
3136 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3137 libssh2_sftp_fsync (sftp_handle);
3138 return 0;
3139}
3140EOF
3141 # libssh2_cflags/libssh2_libs defined in previous test.
3142 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3143 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3144 fi
3145fi
3146
5c6c3a6c
CH
3147##########################################
3148# linux-aio probe
5c6c3a6c
CH
3149
3150if test "$linux_aio" != "no" ; then
3151 cat > $TMPC <<EOF
3152#include <libaio.h>
3153#include <sys/eventfd.h>
832ce9c2 3154#include <stddef.h>
5c6c3a6c
CH
3155int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3156EOF
3157 if compile_prog "" "-laio" ; then
3158 linux_aio=yes
5c6c3a6c
CH
3159 else
3160 if test "$linux_aio" = "yes" ; then
21684af0 3161 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3162 fi
3cfcae3c 3163 linux_aio=no
5c6c3a6c
CH
3164 fi
3165fi
3166
3b8acc11
PB
3167##########################################
3168# TPM passthrough is only on x86 Linux
3169
3170if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3171 tpm_passthrough=$tpm
3172else
3173 tpm_passthrough=no
3174fi
3175
758e8e38
VJ
3176##########################################
3177# attr probe
3178
3179if test "$attr" != "no" ; then
3180 cat > $TMPC <<EOF
3181#include <stdio.h>
3182#include <sys/types.h>
f2338fb4
PB
3183#ifdef CONFIG_LIBATTR
3184#include <attr/xattr.h>
3185#else
4f26f2b6 3186#include <sys/xattr.h>
f2338fb4 3187#endif
758e8e38
VJ
3188int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3189EOF
4f26f2b6
AK
3190 if compile_prog "" "" ; then
3191 attr=yes
3192 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3193 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
3194 attr=yes
3195 LIBS="-lattr $LIBS"
4f26f2b6 3196 libattr=yes
758e8e38
VJ
3197 else
3198 if test "$attr" = "yes" ; then
21684af0 3199 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3200 fi
3201 attr=no
3202 fi
3203fi
3204
bf9298b9
AL
3205##########################################
3206# iovec probe
3207cat > $TMPC <<EOF
db34f0b3 3208#include <sys/types.h>
bf9298b9 3209#include <sys/uio.h>
db34f0b3 3210#include <unistd.h>
f91f9bee 3211int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3212EOF
3213iovec=no
52166aa0 3214if compile_prog "" "" ; then
bf9298b9
AL
3215 iovec=yes
3216fi
3217
ceb42de8
AL
3218##########################################
3219# preadv probe
3220cat > $TMPC <<EOF
3221#include <sys/types.h>
3222#include <sys/uio.h>
3223#include <unistd.h>
c075a723 3224int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3225EOF
3226preadv=no
52166aa0 3227if compile_prog "" "" ; then
ceb42de8
AL
3228 preadv=yes
3229fi
3230
f652e6af
AJ
3231##########################################
3232# fdt probe
e169e1e1
PM
3233# fdt support is mandatory for at least some target architectures,
3234# so insist on it if we're building those system emulators.
3235fdt_required=no
3236for target in $target_list; do
3237 case $target in
6a49fa95 3238 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
e169e1e1
PM
3239 fdt_required=yes
3240 ;;
3241 esac
3242done
3243
3244if test "$fdt_required" = "yes"; then
3245 if test "$fdt" = "no"; then
3246 error_exit "fdt disabled but some requested targets require it." \
3247 "You can turn off fdt only if you also disable all the system emulation" \
3248 "targets which need it (by specifying a cut down --target-list)."
3249 fi
3250 fdt=yes
3251fi
3252
2df87df7 3253if test "$fdt" != "no" ; then
b41af4ba 3254 fdt_libs="-lfdt"
96ce6545 3255 # explicitly check for libfdt_env.h as it is missing in some stable installs
31ce0adb 3256 # and test for required functions to make sure we are on a version >= 1.4.0
b41af4ba 3257 cat > $TMPC << EOF
31ce0adb 3258#include <libfdt.h>
96ce6545 3259#include <libfdt_env.h>
31ce0adb 3260int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
f652e6af 3261EOF
52166aa0 3262 if compile_prog "" "$fdt_libs" ; then
a540f158 3263 # system DTC is good - use it
f652e6af 3264 fdt=yes
a540f158
PC
3265 elif test -d ${source_path}/dtc/libfdt ; then
3266 # have submodule DTC - use it
3267 fdt=yes
3268 dtc_internal="yes"
3269 mkdir -p dtc
cab00a5a 3270 if [ "$pwd_is_source_path" != "y" ] ; then
a540f158
PC
3271 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3272 symlink "$source_path/dtc/scripts" "dtc/scripts"
2df87df7 3273 fi
a540f158
PC
3274 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3275 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3276 elif test "$fdt" = "yes" ; then
3277 # have neither and want - prompt for system/submodule install
31ce0adb 3278 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3f281822 3279 " (1) Preferred: Install the DTC (libfdt) devel package" \
a540f158
PC
3280 " (2) Fetch the DTC submodule, using:" \
3281 " git submodule update --init dtc"
3282 else
3283 # don't have and don't want
de3a354a 3284 fdt_libs=
2df87df7 3285 fdt=no
f652e6af
AJ
3286 fi
3287fi
3288
a540f158
PC
3289libs_softmmu="$libs_softmmu $fdt_libs"
3290
20ff075b 3291##########################################
da076ffe 3292# opengl probe (for sdl2, milkymist-tmu2)
b1546f32
GH
3293
3294# GLX probe, used by milkymist-tmu2
3295# this is temporary, code will be switched to egl mid-term.
3296cat > $TMPC << EOF
3297#include <X11/Xlib.h>
3298#include <GL/gl.h>
3299#include <GL/glx.h>
3300int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3301EOF
3302if compile_prog "" "-lGL -lX11" ; then
3303 have_glx=yes
3304else
3305 have_glx=no
3306fi
3307
da076ffe 3308if test "$opengl" != "no" ; then
7ced9e9f 3309 opengl_pkgs="gl glesv2 epoxy egl"
b1546f32 3310 if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
f676c67e
JW
3311 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3312 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
da076ffe 3313 opengl=yes
925a0400
GH
3314 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3315 gtk_gl="yes"
3316 fi
20ff075b 3317 else
da076ffe 3318 if test "$opengl" = "yes" ; then
dcf30025 3319 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 3320 fi
f676c67e 3321 opengl_cflags=""
da076ffe
GH
3322 opengl_libs=""
3323 opengl=no
20ff075b
MW
3324 fi
3325fi
3326
c9a12e75
CN
3327
3328##########################################
3329# archipelago probe
3330if test "$archipelago" != "no" ; then
3331 cat > $TMPC <<EOF
3332#include <stdio.h>
3333#include <xseg/xseg.h>
3334#include <xseg/protocol.h>
3335int main(void) {
3336 xseg_initialize();
3337 return 0;
3338}
3339EOF
3340 archipelago_libs=-lxseg
3341 if compile_prog "" "$archipelago_libs"; then
3342 archipelago="yes"
3343 libs_tools="$archipelago_libs $libs_tools"
3344 libs_softmmu="$archipelago_libs $libs_softmmu"
6a460ed1
SH
3345
3346 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3347 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3348 echo "license and therefore prevent redistribution."
3349 echo
3350 echo "To disable Archipelago, use --disable-archipelago"
c9a12e75
CN
3351 else
3352 if test "$archipelago" = "yes" ; then
3353 feature_not_found "Archipelago backend support" "Install libxseg devel"
3354 fi
3355 archipelago="no"
3356 fi
3357fi
3358
3359
eb100396
BR
3360##########################################
3361# glusterfs probe
3362if test "$glusterfs" != "no" ; then
65d5d3f9 3363 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3364 glusterfs="yes"
ca871ec8
SW
3365 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3366 glusterfs_libs=`$pkg_config --libs glusterfs-api`
65d5d3f9 3367 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3368 glusterfs_discard="yes"
3369 fi
7c815372
BR
3370 if $pkg_config --atleast-version=6 glusterfs-api; then
3371 glusterfs_zerofill="yes"
3372 fi
eb100396
BR
3373 else
3374 if test "$glusterfs" = "yes" ; then
8efc9363
HT
3375 feature_not_found "GlusterFS backend support" \
3376 "Install glusterfs-api devel >= 3"
eb100396 3377 fi
e01bee08 3378 glusterfs="no"
eb100396
BR
3379 fi
3380fi
3381
39386ac7 3382# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
3383# emulator. This is done because older glibc versions don't
3384# have syscall stubs for these implemented. In that case we
3385# don't provide them even if kernel supports them.
3386#
3387inotify=no
67ba57f6 3388cat > $TMPC << EOF
3b3f24ad
AJ
3389#include <sys/inotify.h>
3390
3391int
3392main(void)
3393{
3394 /* try to start inotify */
8690e420 3395 return inotify_init();
3b3f24ad
AJ
3396}
3397EOF
52166aa0 3398if compile_prog "" "" ; then
67ba57f6 3399 inotify=yes
3b3f24ad
AJ
3400fi
3401
c05c7a73
RV
3402inotify1=no
3403cat > $TMPC << EOF
3404#include <sys/inotify.h>
3405
3406int
3407main(void)
3408{
3409 /* try to start inotify */
3410 return inotify_init1(0);
3411}
3412EOF
3413if compile_prog "" "" ; then
3414 inotify1=yes
3415fi
3416
ebc996f3
RV
3417# check if utimensat and futimens are supported
3418utimens=no
3419cat > $TMPC << EOF
3420#define _ATFILE_SOURCE
ebc996f3
RV
3421#include <stddef.h>
3422#include <fcntl.h>
3014ee00 3423#include <sys/stat.h>
ebc996f3
RV
3424
3425int main(void)
3426{
3427 utimensat(AT_FDCWD, "foo", NULL, 0);
3428 futimens(0, NULL);
3429 return 0;
3430}
3431EOF
52166aa0 3432if compile_prog "" "" ; then
ebc996f3
RV
3433 utimens=yes
3434fi
3435
099d6b0f
RV
3436# check if pipe2 is there
3437pipe2=no
3438cat > $TMPC << EOF
099d6b0f
RV
3439#include <unistd.h>
3440#include <fcntl.h>
3441
3442int main(void)
3443{
3444 int pipefd[2];
9bca8162 3445 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
3446}
3447EOF
52166aa0 3448if compile_prog "" "" ; then
099d6b0f
RV
3449 pipe2=yes
3450fi
3451
40ff6d7e
KW
3452# check if accept4 is there
3453accept4=no
3454cat > $TMPC << EOF
40ff6d7e
KW
3455#include <sys/socket.h>
3456#include <stddef.h>
3457
3458int main(void)
3459{
3460 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3461 return 0;
3462}
3463EOF
3464if compile_prog "" "" ; then
3465 accept4=yes
3466fi
3467
3ce34dfb
VS
3468# check if tee/splice is there. vmsplice was added same time.
3469splice=no
3470cat > $TMPC << EOF
3ce34dfb
VS
3471#include <unistd.h>
3472#include <fcntl.h>
3473#include <limits.h>
3474
3475int main(void)
3476{
66ea0f22 3477 int len, fd = 0;
3ce34dfb
VS
3478 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3479 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3480 return 0;
3481}
3482EOF
52166aa0 3483if compile_prog "" "" ; then
3ce34dfb
VS
3484 splice=yes
3485fi
3486
a99d57bb
WG
3487##########################################
3488# libnuma probe
3489
3490if test "$numa" != "no" ; then
3491 cat > $TMPC << EOF
3492#include <numa.h>
3493int main(void) { return numa_available(); }
3494EOF
3495
3496 if compile_prog "" "-lnuma" ; then
3497 numa=yes
3498 libs_softmmu="-lnuma $libs_softmmu"
3499 else
3500 if test "$numa" = "yes" ; then
3501 feature_not_found "numa" "install numactl devel"
3502 fi
3503 numa=no
3504 fi
3505fi
3506
7b01cb97
AD
3507if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3508 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3509 exit 1
3510fi
3511
2847b469
FZ
3512##########################################
3513# tcmalloc probe
3514
3515if test "$tcmalloc" = "yes" ; then
3516 cat > $TMPC << EOF
3517#include <stdlib.h>
3518int main(void) { malloc(1); return 0; }
3519EOF
3520
3521 if compile_prog "" "-ltcmalloc" ; then
3522 LIBS="-ltcmalloc $LIBS"
3523 else
3524 feature_not_found "tcmalloc" "install gperftools devel"
3525 fi
3526fi
3527
7b01cb97
AD
3528##########################################
3529# jemalloc probe
3530
3531if test "$jemalloc" = "yes" ; then
3532 cat > $TMPC << EOF
3533#include <stdlib.h>
3534int main(void) { malloc(1); return 0; }
3535EOF
3536
3537 if compile_prog "" "-ljemalloc" ; then
3538 LIBS="-ljemalloc $LIBS"
3539 else
3540 feature_not_found "jemalloc" "install jemalloc devel"
3541 fi
3542fi
3543
dcc38d1c
MT
3544##########################################
3545# signalfd probe
3546signalfd="no"
3547cat > $TMPC << EOF
dcc38d1c
MT
3548#include <unistd.h>
3549#include <sys/syscall.h>
3550#include <signal.h>
3551int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3552EOF
3553
3554if compile_prog "" "" ; then
3555 signalfd=yes
3556fi
3557
c2882b96
RV
3558# check if eventfd is supported
3559eventfd=no
3560cat > $TMPC << EOF
3561#include <sys/eventfd.h>
3562
3563int main(void)
3564{
55cc7f3e 3565 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
3566}
3567EOF
3568if compile_prog "" "" ; then
3569 eventfd=yes
3570fi
3571
751bcc39
MAL
3572# check if memfd is supported
3573memfd=no
3574cat > $TMPC << EOF
3575#include <sys/memfd.h>
3576
3577int main(void)
3578{
3579 return memfd_create("foo", MFD_ALLOW_SEALING);
3580}
3581EOF
3582if compile_prog "" "" ; then
3583 memfd=yes
3584fi
3585
3586
3587
d0927938
UH
3588# check for fallocate
3589fallocate=no
3590cat > $TMPC << EOF
3591#include <fcntl.h>
3592
3593int main(void)
3594{
3595 fallocate(0, 0, 0, 0);
3596 return 0;
3597}
3598EOF
8fb03151 3599if compile_prog "" "" ; then
d0927938
UH
3600 fallocate=yes
3601fi
3602
3d4fa43e
KK
3603# check for fallocate hole punching
3604fallocate_punch_hole=no
3605cat > $TMPC << EOF
3606#include <fcntl.h>
3607#include <linux/falloc.h>
3608
3609int main(void)
3610{
3611 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3612 return 0;
3613}
3614EOF
3615if compile_prog "" "" ; then
3616 fallocate_punch_hole=yes
3617fi
3618
b953f075
DL
3619# check that fallocate supports range zeroing inside the file
3620fallocate_zero_range=no
3621cat > $TMPC << EOF
3622#include <fcntl.h>
3623#include <linux/falloc.h>
3624
3625int main(void)
3626{
3627 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3628 return 0;
3629}
3630EOF
3631if compile_prog "" "" ; then
3632 fallocate_zero_range=yes
3633fi
3634
ed911435
KW
3635# check for posix_fallocate
3636posix_fallocate=no
3637cat > $TMPC << EOF
3638#include <fcntl.h>
3639
3640int main(void)
3641{
3642 posix_fallocate(0, 0, 0);
3643 return 0;
3644}
3645EOF
3646if compile_prog "" "" ; then
3647 posix_fallocate=yes
3648fi
3649
c727f47d
PM
3650# check for sync_file_range
3651sync_file_range=no
3652cat > $TMPC << EOF
3653#include <fcntl.h>
3654
3655int main(void)
3656{
3657 sync_file_range(0, 0, 0, 0);
3658 return 0;
3659}
3660EOF
8fb03151 3661if compile_prog "" "" ; then
c727f47d
PM
3662 sync_file_range=yes
3663fi
3664
dace20dc
PM
3665# check for linux/fiemap.h and FS_IOC_FIEMAP
3666fiemap=no
3667cat > $TMPC << EOF
3668#include <sys/ioctl.h>
3669#include <linux/fs.h>
3670#include <linux/fiemap.h>
3671
3672int main(void)
3673{
3674 ioctl(0, FS_IOC_FIEMAP, 0);
3675 return 0;
3676}
3677EOF
8fb03151 3678if compile_prog "" "" ; then
dace20dc
PM
3679 fiemap=yes
3680fi
3681
d0927938
UH
3682# check for dup3
3683dup3=no
3684cat > $TMPC << EOF
3685#include <unistd.h>
3686
3687int main(void)
3688{
3689 dup3(0, 0, 0);
3690 return 0;
3691}
3692EOF
78f5d726 3693if compile_prog "" "" ; then
d0927938
UH
3694 dup3=yes
3695fi
3696
4e0c6529
AB
3697# check for ppoll support
3698ppoll=no
3699cat > $TMPC << EOF
3700#include <poll.h>
3701
3702int main(void)
3703{
3704 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3705 ppoll(&pfd, 1, 0, 0);
3706 return 0;
3707}
3708EOF
3709if compile_prog "" "" ; then
3710 ppoll=yes
3711fi
3712
cd758dd0
AB
3713# check for prctl(PR_SET_TIMERSLACK , ... ) support
3714prctl_pr_set_timerslack=no
3715cat > $TMPC << EOF
3716#include <sys/prctl.h>
3717
3718int main(void)
3719{
3720 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3721 return 0;
3722}
3723EOF
3724if compile_prog "" "" ; then
3725 prctl_pr_set_timerslack=yes
3726fi
3727
3b6edd16
PM
3728# check for epoll support
3729epoll=no
3730cat > $TMPC << EOF
3731#include <sys/epoll.h>
3732
3733int main(void)
3734{
3735 epoll_create(0);
3736 return 0;
3737}
3738EOF
8fb03151 3739if compile_prog "" "" ; then
3b6edd16
PM
3740 epoll=yes
3741fi
3742
3743# epoll_create1 and epoll_pwait are later additions
3744# so we must check separately for their presence
3745epoll_create1=no
3746cat > $TMPC << EOF
3747#include <sys/epoll.h>
3748
3749int main(void)
3750{
19e83f6b
PM
3751 /* Note that we use epoll_create1 as a value, not as
3752 * a function being called. This is necessary so that on
3753 * old SPARC glibc versions where the function was present in
3754 * the library but not declared in the header file we will
3755 * fail the configure check. (Otherwise we will get a compiler
3756 * warning but not an error, and will proceed to fail the
3757 * qemu compile where we compile with -Werror.)
3758 */
c075a723 3759 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
3760}
3761EOF
8fb03151 3762if compile_prog "" "" ; then
3b6edd16
PM
3763 epoll_create1=yes
3764fi
3765
3766epoll_pwait=no
3767cat > $TMPC << EOF
3768#include <sys/epoll.h>
3769
3770int main(void)
3771{
3772 epoll_pwait(0, 0, 0, 0, 0);
3773 return 0;
3774}
3775EOF
8fb03151 3776if compile_prog "" "" ; then
3b6edd16
PM
3777 epoll_pwait=yes
3778fi
3779
a8fd1aba
PM
3780# check for sendfile support
3781sendfile=no
3782cat > $TMPC << EOF
3783#include <sys/sendfile.h>
3784
3785int main(void)
3786{
3787 return sendfile(0, 0, 0, 0);
3788}
3789EOF
3790if compile_prog "" "" ; then
3791 sendfile=yes
3792fi
3793
51834341
RV
3794# check for timerfd support (glibc 2.8 and newer)
3795timerfd=no
3796cat > $TMPC << EOF
3797#include <sys/timerfd.h>
3798
3799int main(void)
3800{
3801 return(timerfd_create(CLOCK_REALTIME, 0));
3802}
3803EOF
3804if compile_prog "" "" ; then
3805 timerfd=yes
3806fi
3807
9af5c906
RV
3808# check for setns and unshare support
3809setns=no
3810cat > $TMPC << EOF
3811#include <sched.h>
3812
3813int main(void)
3814{
3815 int ret;
3816 ret = setns(0, 0);
3817 ret = unshare(0);
3818 return ret;
3819}
3820EOF
3821if compile_prog "" "" ; then
3822 setns=yes
3823fi
3824
cc8ae6de 3825# Check if tools are available to build documentation.
a25dba17 3826if test "$docs" != "no" ; then
01668d98 3827 if has makeinfo && has pod2man; then
a25dba17 3828 docs=yes
83a3ab8b 3829 else
a25dba17 3830 if test "$docs" = "yes" ; then
21684af0 3831 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 3832 fi
a25dba17 3833 docs=no
83a3ab8b 3834 fi
cc8ae6de
PB
3835fi
3836
f514f41c 3837# Search for bswap_32 function
6ae9a1f4
JQ
3838byteswap_h=no
3839cat > $TMPC << EOF
3840#include <byteswap.h>
3841int main(void) { return bswap_32(0); }
3842EOF
52166aa0 3843if compile_prog "" "" ; then
6ae9a1f4
JQ
3844 byteswap_h=yes
3845fi
3846
75f13596 3847# Search for bswap32 function
6ae9a1f4
JQ
3848bswap_h=no
3849cat > $TMPC << EOF
3850#include <sys/endian.h>
3851#include <sys/types.h>
3852#include <machine/bswap.h>
3853int main(void) { return bswap32(0); }
3854EOF
52166aa0 3855if compile_prog "" "" ; then
6ae9a1f4
JQ
3856 bswap_h=yes
3857fi
3858
c589b249 3859##########################################
e49ab19f 3860# Do we have libiscsi >= 1.9.0
c589b249 3861if test "$libiscsi" != "no" ; then
e49ab19f 3862 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 3863 libiscsi="yes"
ca871ec8
SW
3864 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3865 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
3866 else
3867 if test "$libiscsi" = "yes" ; then
e49ab19f 3868 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
3869 fi
3870 libiscsi="no"
3871 fi
3872fi
3873
8bacde8d
NC
3874##########################################
3875# Do we need libm
3876cat > $TMPC << EOF
3877#include <math.h>
f80ea986 3878int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
3879EOF
3880if compile_prog "" "" ; then
3881 :
3882elif compile_prog "" "-lm" ; then
3883 LIBS="-lm $LIBS"
3884 libs_qga="-lm $libs_qga"
3885else
76ad07a4 3886 error_exit "libm check failed"
8bacde8d
NC
3887fi
3888
da93a1fd
AL
3889##########################################
3890# Do we need librt
8bacde8d
NC
3891# uClibc provides 2 versions of clock_gettime(), one with realtime
3892# support and one without. This means that the clock_gettime() don't
3893# need -lrt. We still need it for timer_create() so we check for this
3894# function in addition.
da93a1fd
AL
3895cat > $TMPC <<EOF
3896#include <signal.h>
3897#include <time.h>
8bacde8d
NC
3898int main(void) {
3899 timer_create(CLOCK_REALTIME, NULL, NULL);
3900 return clock_gettime(CLOCK_REALTIME, NULL);
3901}
da93a1fd
AL
3902EOF
3903
52166aa0 3904if compile_prog "" "" ; then
07ffa4bd 3905 :
8bacde8d 3906# we need pthread for static linking. use previous pthread test result
18e588b1
RL
3907elif compile_prog "" "$pthread_lib -lrt" ; then
3908 LIBS="$LIBS -lrt"
3909 libs_qga="$libs_qga -lrt"
da93a1fd
AL
3910fi
3911
31ff504d 3912if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
179cf400 3913 "$aix" != "yes" -a "$haiku" != "yes" ; then
6362a53f
JQ
3914 libs_softmmu="-lutil $libs_softmmu"
3915fi
3916
de5071c5 3917##########################################
cd4ec0b4
GH
3918# spice probe
3919if test "$spice" != "no" ; then
3920 cat > $TMPC << EOF
3921#include <spice.h>
3922int main(void) { spice_server_new(); return 0; }
3923EOF
710fc4f5
JD
3924 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3925 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
65d5d3f9
SW
3926 if $pkg_config --atleast-version=0.12.0 spice-server && \
3927 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
3928 compile_prog "$spice_cflags" "$spice_libs" ; then
3929 spice="yes"
3930 libs_softmmu="$libs_softmmu $spice_libs"
3931 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
3932 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3933 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
3934 else
3935 if test "$spice" = "yes" ; then
8efc9363
HT
3936 feature_not_found "spice" \
3937 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
3938 fi
3939 spice="no"
3940 fi
3941fi
3942
7b02f544 3943# check for smartcard support
afd347ab 3944smartcard_cflags=""
7b02f544
MAL
3945if test "$smartcard" != "no"; then
3946 if $pkg_config libcacard; then
3947 libcacard_cflags=$($pkg_config --cflags libcacard)
3948 libcacard_libs=$($pkg_config --libs libcacard)
3949 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
3950 libs_softmmu="$libs_softmmu $libcacard_libs"
3951 smartcard="yes"
afd347ab 3952 else
7b02f544
MAL
3953 if test "$smartcard" = "yes"; then
3954 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 3955 fi
7b02f544 3956 smartcard="no"
111a38b0
RR
3957 fi
3958fi
111a38b0 3959
2b2325ff
GH
3960# check for libusb
3961if test "$libusb" != "no" ; then
65d5d3f9 3962 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 3963 libusb="yes"
ca871ec8
SW
3964 libusb_cflags=$($pkg_config --cflags libusb-1.0)
3965 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
3966 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3967 libs_softmmu="$libs_softmmu $libusb_libs"
3968 else
3969 if test "$libusb" = "yes"; then
8efc9363 3970 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
3971 fi
3972 libusb="no"
3973 fi
3974fi
3975
69354a83
HG
3976# check for usbredirparser for usb network redirection support
3977if test "$usb_redir" != "no" ; then
65d5d3f9 3978 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 3979 usb_redir="yes"
ca871ec8
SW
3980 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3981 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83 3982 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
56ab2ad1 3983 libs_softmmu="$libs_softmmu $usb_redir_libs"
69354a83
HG
3984 else
3985 if test "$usb_redir" = "yes"; then
21684af0 3986 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
3987 fi
3988 usb_redir="no"
3989 fi
3990fi
3991
d9840e25
TS
3992##########################################
3993# check if we have VSS SDK headers for win
3994
3995if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3996 case "$vss_win32_sdk" in
3997 "") vss_win32_include="-I$source_path" ;;
3998 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3999 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4000 vss_win32_include="-I$source_path/.sdk/vss"
4001 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4002 ;;
4003 *) vss_win32_include="-I$vss_win32_sdk"
4004 esac
4005 cat > $TMPC << EOF
4006#define __MIDL_user_allocate_free_DEFINED__
4007#include <inc/win2003/vss.h>
4008int main(void) { return VSS_CTX_BACKUP; }
4009EOF
4010 if compile_prog "$vss_win32_include" "" ; then
4011 guest_agent_with_vss="yes"
4012 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4013 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4014 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4015 else
4016 if test "$vss_win32_sdk" != "" ; then
4017 echo "ERROR: Please download and install Microsoft VSS SDK:"
4018 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4019 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4020 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4021 echo "ERROR: The headers are extracted in the directory \`inc'."
4022 feature_not_found "VSS support"
4023 fi
4024 guest_agent_with_vss="no"
4025 fi
4026fi
4027
4028##########################################
4029# lookup Windows platform SDK (if not specified)
4030# The SDK is needed only to build .tlb (type library) file of guest agent
4031# VSS provider from the source. It is usually unnecessary because the
4032# pre-compiled .tlb file is included.
4033
4034if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4035 if test -z "$win_sdk"; then
4036 programfiles="$PROGRAMFILES"
4037 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4038 if test -n "$programfiles"; then
4039 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4040 else
4041 feature_not_found "Windows SDK"
4042 fi
4043 elif test "$win_sdk" = "no"; then
4044 win_sdk=""
4045 fi
4046fi
4047
50cbebb9
MR
4048##########################################
4049# check if mingw environment provides a recent ntddscsi.h
4050if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4051 cat > $TMPC << EOF
4052#include <windows.h>
4053#include <ntddscsi.h>
4054int main(void) {
4055#if !defined(IOCTL_SCSI_GET_ADDRESS)
4056#error Missing required ioctl definitions
4057#endif
4058 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4059 return addr.Lun;
4060}
4061EOF
4062 if compile_prog "" "" ; then
4063 guest_agent_ntddscsi=yes
c54e1eb4 4064 libs_qga="-lsetupapi $libs_qga"
50cbebb9
MR
4065 fi
4066fi
4067
9d9e1521
GH
4068##########################################
4069# virgl renderer probe
4070
4071if test "$virglrenderer" != "no" ; then
4072 cat > $TMPC << EOF
4073#include <virglrenderer.h>
4074int main(void) { virgl_renderer_poll(); return 0; }
4075EOF
4076 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4077 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4078 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4079 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4080 virglrenderer="yes"
4081 else
4082 if test "$virglrenderer" = "yes" ; then
4083 feature_not_found "virglrenderer"
4084 fi
4085 virglrenderer="no"
4086 fi
4087fi
4088
5f6b9e8f
BS
4089##########################################
4090# check if we have fdatasync
4091
4092fdatasync=no
4093cat > $TMPC << EOF
4094#include <unistd.h>
d1722a27
AR
4095int main(void) {
4096#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4097return fdatasync(0);
4098#else
e172fe11 4099#error Not supported
d1722a27
AR
4100#endif
4101}
5f6b9e8f
BS
4102EOF
4103if compile_prog "" "" ; then
4104 fdatasync=yes
4105fi
4106
e78815a5
AF
4107##########################################
4108# check if we have madvise
4109
4110madvise=no
4111cat > $TMPC << EOF
4112#include <sys/types.h>
4113#include <sys/mman.h>
832ce9c2 4114#include <stddef.h>
e78815a5
AF
4115int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4116EOF
4117if compile_prog "" "" ; then
4118 madvise=yes
4119fi
4120
4121##########################################
4122# check if we have posix_madvise
4123
4124posix_madvise=no
4125cat > $TMPC << EOF
4126#include <sys/mman.h>
832ce9c2 4127#include <stddef.h>
e78815a5
AF
4128int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4129EOF
4130if compile_prog "" "" ; then
4131 posix_madvise=yes
4132fi
4133
1e9737da
RH
4134##########################################
4135# check if we have usable SIGEV_THREAD_ID
4136
4137sigev_thread_id=no
4138cat > $TMPC << EOF
4139#include <signal.h>
4140int main(void) {
4141 struct sigevent ev;
4142 ev.sigev_notify = SIGEV_THREAD_ID;
4143 ev._sigev_un._tid = 0;
4144 asm volatile("" : : "g"(&ev));
4145 return 0;
4146}
4147EOF
4148if compile_prog "" "" ; then
4149 sigev_thread_id=yes
4150fi
4151
94a420b1
SH
4152##########################################
4153# check if trace backend exists
4154
5b808275 4155$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4156if test "$?" -ne 0 ; then
5b808275
LV
4157 error_exit "invalid trace backends" \
4158 "Please choose supported trace backends."
94a420b1
SH
4159fi
4160
7e24e92a
SH
4161##########################################
4162# For 'ust' backend, test if ust headers are present
5b808275 4163if have_backend "ust"; then
7e24e92a 4164 cat > $TMPC << EOF
bf15f63c 4165#include <lttng/tracepoint.h>
7e24e92a
SH
4166int main(void) { return 0; }
4167EOF
4168 if compile_prog "" "" ; then
bf15f63c
MG
4169 if $pkg_config lttng-ust --exists; then
4170 lttng_ust_libs=`$pkg_config --libs lttng-ust`
4171 else
4172 lttng_ust_libs="-llttng-ust"
4173 fi
4174 if $pkg_config liburcu-bp --exists; then
4175 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4176 else
4177 urcu_bp_libs="-lurcu-bp"
4178 fi
4179
4180 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4181 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 4182 else
bf15f63c 4183 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4184 fi
4185fi
b3d08c02
DB
4186
4187##########################################
4188# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4189if have_backend "dtrace"; then
b3d08c02 4190 if ! has 'dtrace' ; then
76ad07a4 4191 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4192 fi
c276b17d
DB
4193 trace_backend_stap="no"
4194 if has 'stap' ; then
4195 trace_backend_stap="yes"
4196 fi
b3d08c02
DB
4197fi
4198
023367e6 4199##########################################
519175a2 4200# check and set a backend for coroutine
d0e2fce5 4201
7c2acc70
PM
4202# We prefer ucontext, but it's not always possible. The fallback
4203# is sigcontext. gthread is not selectable except explicitly, because
4204# it is not functional enough to run QEMU proper. (It is occasionally
4205# useful for debugging purposes.) On Windows the only valid backend
4206# is the Windows-specific one.
4207
4208ucontext_works=no
4209if test "$darwin" != "yes"; then
4210 cat > $TMPC << EOF
d0e2fce5 4211#include <ucontext.h>
cdf84806
PM
4212#ifdef __stub_makecontext
4213#error Ignoring glibc stub makecontext which will always fail
4214#endif
75cafad7 4215int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4216EOF
7c2acc70
PM
4217 if compile_prog "" "" ; then
4218 ucontext_works=yes
4219 fi
4220fi
4221
4222if test "$coroutine" = ""; then
4223 if test "$mingw32" = "yes"; then
4224 coroutine=win32
4225 elif test "$ucontext_works" = "yes"; then
4226 coroutine=ucontext
4227 else
4228 coroutine=sigaltstack
d0e2fce5 4229 fi
519175a2 4230else
7c2acc70
PM
4231 case $coroutine in
4232 windows)
4233 if test "$mingw32" != "yes"; then
4234 error_exit "'windows' coroutine backend only valid for Windows"
4235 fi
4236 # Unfortunately the user visible backend name doesn't match the
4237 # coroutine-*.c filename for this case, so we have to adjust it here.
4238 coroutine=win32
4239 ;;
4240 ucontext)
4241 if test "$ucontext_works" != "yes"; then
4242 feature_not_found "ucontext"
4243 fi
4244 ;;
4245 gthread|sigaltstack)
4246 if test "$mingw32" = "yes"; then
4247 error_exit "only the 'windows' coroutine backend is valid for Windows"
4248 fi
4249 ;;
4250 *)
4251 error_exit "unknown coroutine backend $coroutine"
4252 ;;
4253 esac
d0e2fce5
AK
4254fi
4255
70c60c08
SH
4256if test "$coroutine_pool" = ""; then
4257 if test "$coroutine" = "gthread"; then
4258 coroutine_pool=no
4259 else
4260 coroutine_pool=yes
4261 fi
4262fi
4263if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4264 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4265fi
4266
d2042378
AK
4267##########################################
4268# check if we have open_by_handle_at
4269
4e1797f9 4270open_by_handle_at=no
d2042378
AK
4271cat > $TMPC << EOF
4272#include <fcntl.h>
acc55ba8
SW
4273#if !defined(AT_EMPTY_PATH)
4274# error missing definition
4275#else
75cafad7 4276int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4277#endif
d2042378
AK
4278EOF
4279if compile_prog "" "" ; then
4280 open_by_handle_at=yes
4281fi
4282
e06a765e
HPB
4283########################################
4284# check if we have linux/magic.h
4285
4286linux_magic_h=no
4287cat > $TMPC << EOF
4288#include <linux/magic.h>
4289int main(void) {
75cafad7 4290 return 0;
e06a765e
HPB
4291}
4292EOF
4293if compile_prog "" "" ; then
4294 linux_magic_h=yes
4295fi
4296
06d71fa1 4297########################################
c95e3080
KW
4298# check whether we can disable warning option with a pragma (this is needed
4299# to silence warnings in the headers of some versions of external libraries).
4300# This test has to be compiled with -Werror as otherwise an unknown pragma is
4301# only a warning.
4302#
4303# If we can't selectively disable warning in the code, disable -Werror so that
4304# the build doesn't fail anyway.
4305
06d71fa1
PM
4306pragma_disable_unused_but_set=no
4307cat > $TMPC << EOF
e6f53fd5 4308#pragma GCC diagnostic push
06d71fa1 4309#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
c95e3080 4310#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 4311#pragma GCC diagnostic pop
c95e3080 4312
06d71fa1
PM
4313int main(void) {
4314 return 0;
4315}
4316EOF
4317if compile_prog "-Werror" "" ; then
cc6e3ca9 4318 pragma_diagnostic_available=yes
c95e3080
KW
4319else
4320 werror=no
06d71fa1
PM
4321fi
4322
3f4349dc 4323########################################
541be927 4324# check if we have valgrind/valgrind.h
3f4349dc
KW
4325
4326valgrind_h=no
4327cat > $TMPC << EOF
4328#include <valgrind/valgrind.h>
3f4349dc 4329int main(void) {
3f4349dc
KW
4330 return 0;
4331}
4332EOF
4333if compile_prog "" "" ; then
4334 valgrind_h=yes
4335fi
4336
8ab1bf12
LC
4337########################################
4338# check if environ is declared
4339
4340has_environ=no
4341cat > $TMPC << EOF
4342#include <unistd.h>
4343int main(void) {
c075a723 4344 environ = 0;
8ab1bf12
LC
4345 return 0;
4346}
4347EOF
4348if compile_prog "" "" ; then
4349 has_environ=yes
4350fi
4351
76a347e1
RH
4352########################################
4353# check if cpuid.h is usable.
4354
4355cpuid_h=no
4356cat > $TMPC << EOF
4357#include <cpuid.h>
4358int main(void) {
774d566c
PM
4359 unsigned a, b, c, d;
4360 int max = __get_cpuid_max(0, 0);
4361
4362 if (max >= 1) {
4363 __cpuid(1, a, b, c, d);
4364 }
4365
4366 if (max >= 7) {
4367 __cpuid_count(7, 0, a, b, c, d);
4368 }
4369
4370 return 0;
76a347e1
RH
4371}
4372EOF
4373if compile_prog "" "" ; then
4374 cpuid_h=yes
4375fi
4376
f540166b
RH
4377########################################
4378# check if __[u]int128_t is usable.
4379
4380int128=no
4381cat > $TMPC << EOF
a00f66ab
SW
4382#if defined(__clang_major__) && defined(__clang_minor__)
4383# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4384# error __int128_t does not work in CLANG before 3.2
4385# endif
4386#endif
f540166b
RH
4387__int128_t a;
4388__uint128_t b;
4389int main (void) {
4390 a = a + b;
4391 b = a * b;
464e3671 4392 a = a * a;
f540166b
RH
4393 return 0;
4394}
4395EOF
4396if compile_prog "" "" ; then
4397 int128=yes
4398fi
76a347e1 4399
1e6e9aca
RH
4400########################################
4401# check if getauxval is available.
4402
4403getauxval=no
4404cat > $TMPC << EOF
4405#include <sys/auxv.h>
4406int main(void) {
4407 return getauxval(AT_HWCAP) == 0;
4408}
4409EOF
4410if compile_prog "" "" ; then
4411 getauxval=yes
4412fi
4413
fd0e6053
JS
4414########################################
4415# check if ccache is interfering with
4416# semantic analysis of macros
4417
5e4dfd3d 4418unset CCACHE_CPP2
fd0e6053
JS
4419ccache_cpp2=no
4420cat > $TMPC << EOF
4421static const int Z = 1;
4422#define fn() ({ Z; })
4423#define TAUT(X) ((X) == Z)
4424#define PAREN(X, Y) (X == Y)
4425#define ID(X) (X)
4426int main(int argc, char *argv[])
4427{
4428 int x = 0, y = 0;
4429 x = ID(x);
4430 x = fn();
4431 fn();
4432 if (PAREN(x, y)) return 0;
4433 if (TAUT(Z)) return 0;
4434 return 0;
4435}
4436EOF
4437
4438if ! compile_object "-Werror"; then
4439 ccache_cpp2=yes
4440fi
4441
7e24e92a 4442##########################################
e86ecd4b
JQ
4443# End of CC checks
4444# After here, no more $cc or $ld runs
4445
1d728c39
BS
4446if test "$gcov" = "yes" ; then
4447 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4448 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4449elif test "$debug" = "no" ; then
e600cdf3 4450 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
e86ecd4b 4451fi
a316e378 4452
6542aa9c
PL
4453##########################################
4454# Do we have libnfs
4455if test "$libnfs" != "no" ; then
b7d769c9 4456 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
4457 libnfs="yes"
4458 libnfs_libs=$($pkg_config --libs libnfs)
4459 LIBS="$LIBS $libnfs_libs"
4460 else
4461 if test "$libnfs" = "yes" ; then
8efc9363 4462 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
4463 fi
4464 libnfs="no"
4465 fi
4466fi
1d728c39 4467
20ff6c80
AL
4468# Disable zero malloc errors for official releases unless explicitly told to
4469# enable/disable
4470if test -z "$zero_malloc" ; then
4471 if test "$z_version" = "50" ; then
4472 zero_malloc="no"
4473 else
4474 zero_malloc="yes"
4475 fi
4476fi
4477
6ca026cb
PM
4478# Now we've finished running tests it's OK to add -Werror to the compiler flags
4479if test "$werror" = "yes"; then
4480 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4481fi
4482
e86ecd4b
JQ
4483if test "$solaris" = "no" ; then
4484 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 4485 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
4486 fi
4487fi
4488
94dd53c5
GH
4489# test if pod2man has --utf8 option
4490if pod2man --help | grep -q utf8; then
4491 POD2MAN="pod2man --utf8"
4492else
4493 POD2MAN="pod2man"
4494fi
4495
952afb71
BS
4496# Use ASLR, no-SEH and DEP if available
4497if test "$mingw32" = "yes" ; then
4498 for flag in --dynamicbase --no-seh --nxcompat; do
4499 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4500 LDFLAGS="-Wl,$flag $LDFLAGS"
4501 fi
4502 done
4503fi
4504
10ea68b3 4505qemu_confdir=$sysconfdir$confsuffix
e26110cf 4506qemu_moddir=$libdir$confsuffix
528ae5b8 4507qemu_datadir=$datadir$confsuffix
834574ea 4508qemu_localedir="$datadir/locale"
e7b45cc4 4509
4b1c11fd
DB
4510tools=""
4511if test "$want_tools" = "yes" ; then
ca35f780 4512 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
4513 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4514 tools="qemu-nbd\$(EXESUF) $tools"
a75eb03b 4515 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd
DB
4516 fi
4517fi
4518if test "$softmmu" = yes ; then
983eef5a 4519 if test "$virtfs" != no ; then
aabfd88d
AF
4520 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4521 virtfs=yes
4522 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4523 else
4524 if test "$virtfs" = yes; then
76ad07a4 4525 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
983eef5a 4526 fi
17500370 4527 virtfs=no
aabfd88d 4528 fi
17bff52b 4529 fi
e8ef31a3 4530fi
9d6bc27b
MR
4531
4532# Probe for guest agent support/options
4533
e8ef31a3 4534if [ "$guest_agent" != "no" ]; then
b39297ae 4535 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 4536 tools="qemu-ga $tools"
e8ef31a3
MT
4537 guest_agent=yes
4538 elif [ "$guest_agent" != yes ]; then
4539 guest_agent=no
4540 else
4541 error_exit "Guest agent is not supported on this platform"
ca35f780 4542 fi
00c705fb 4543fi
ca35f780 4544
9d6bc27b
MR
4545# Guest agent Window MSI package
4546
4547if test "$guest_agent" != yes; then
4548 if test "$guest_agent_msi" = yes; then
4549 error_exit "MSI guest agent package requires guest agent enabled"
4550 fi
4551 guest_agent_msi=no
4552elif test "$mingw32" != "yes"; then
4553 if test "$guest_agent_msi" = "yes"; then
4554 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4555 fi
4556 guest_agent_msi=no
4557elif ! has wixl; then
4558 if test "$guest_agent_msi" = "yes"; then
4559 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4560 fi
4561 guest_agent_msi=no
1a34904e
MR
4562else
4563 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4564 # disabled explicitly
4565 if test "$guest_agent_msi" != "no"; then
4566 guest_agent_msi=yes
4567 fi
9d6bc27b
MR
4568fi
4569
1a34904e 4570if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
4571 if test "$guest_agent_with_vss" = "yes"; then
4572 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4573 fi
4574
4575 if test "$QEMU_GA_MANUFACTURER" = ""; then
4576 QEMU_GA_MANUFACTURER=QEMU
4577 fi
4578
4579 if test "$QEMU_GA_DISTRO" = ""; then
4580 QEMU_GA_DISTRO=Linux
4581 fi
4582
4583 if test "$QEMU_GA_VERSION" = ""; then
4584 QEMU_GA_VERSION=`cat $source_path/VERSION`
4585 fi
4586
4587 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
4588
4589 case "$cpu" in
4590 x86_64)
4591 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4592 ;;
4593 i386)
4594 QEMU_GA_MSI_ARCH="-D Arch=32"
4595 ;;
4596 *)
4597 error_exit "CPU $cpu not supported for building installation package"
4598 ;;
4599 esac
4600fi
4601
ca35f780
PB
4602# Mac OS X ships with a broken assembler
4603roms=
4604if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4605 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4606 "$softmmu" = yes ; then
4607 roms="optionrom"
4608fi
d0384d1d 4609if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
4610 roms="$roms spapr-rtas"
4611fi
ca35f780 4612
9933c305
CB
4613if test "$cpu" = "s390x" ; then
4614 roms="$roms s390-ccw"
4615fi
4616
964c6fa1
RH
4617# Probe for the need for relocating the user-only binary.
4618if test "$pie" = "no" ; then
4619 textseg_addr=
4620 case "$cpu" in
479eb121
RH
4621 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4622 # ??? Rationale for choosing this address
964c6fa1
RH
4623 textseg_addr=0x60000000
4624 ;;
4625 mips)
479eb121
RH
4626 # A 256M aligned address, high in the address space, with enough
4627 # room for the code_gen_buffer above it before the stack.
4628 textseg_addr=0x60000000
964c6fa1
RH
4629 ;;
4630 esac
4631 if [ -n "$textseg_addr" ]; then
4632 cat > $TMPC <<EOF
4633 int main(void) { return 0; }
4634EOF
4635 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4636 if ! compile_prog "" "$textseg_ldflags"; then
4637 # In case ld does not support -Ttext-segment, edit the default linker
4638 # script via sed to set the .text start addr. This is needed on FreeBSD
4639 # at least.
4640 $ld --verbose | sed \
4641 -e '1,/==================================================/d' \
4642 -e '/==================================================/,$d' \
4643 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4644 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4645 textseg_ldflags="-Wl,-T../config-host.ld"
4646 fi
4647 fi
4648fi
4649
50e12060
JK
4650# prepend pixman and ftd flags after all config tests are done
4651QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4652libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 4653
43ce4dfe 4654echo "Install prefix $prefix"
c00b2808 4655echo "BIOS directory `eval echo $qemu_datadir`"
f2b9e1e3 4656echo "binary directory `eval echo $bindir`"
3aa5d2be 4657echo "library directory `eval echo $libdir`"
e26110cf 4658echo "module directory `eval echo $qemu_moddir`"
8bf188aa 4659echo "libexec directory `eval echo $libexecdir`"
0f94d6da 4660echo "include directory `eval echo $includedir`"
1c0fd160 4661echo "config directory `eval echo $sysconfdir`"
11d9f695 4662if test "$mingw32" = "no" ; then
5a699bbb 4663echo "local state directory `eval echo $local_statedir`"
f2b9e1e3 4664echo "Manual directory `eval echo $mandir`"
43ce4dfe 4665echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
4666else
4667echo "local state directory queried at runtime"
d9840e25 4668echo "Windows SDK $win_sdk"
11d9f695 4669fi
5a67135a 4670echo "Source path $source_path"
43ce4dfe 4671echo "C compiler $cc"
83469015 4672echo "Host C compiler $host_cc"
83f73fce 4673echo "C++ compiler $cxx"
3c4a4d0d 4674echo "Objective-C compiler $objcc"
45d285ab 4675echo "ARFLAGS $ARFLAGS"
0c439cbf 4676echo "CFLAGS $CFLAGS"
a558ee17 4677echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 4678echo "LDFLAGS $LDFLAGS"
43ce4dfe 4679echo "make $make"
6a882643 4680echo "install $install"
c886edfb 4681echo "python $python"
e2d8830e
BS
4682if test "$slirp" = "yes" ; then
4683 echo "smbd $smbd"
4684fi
17969268 4685echo "module support $modules"
43ce4dfe 4686echo "host CPU $cpu"
de83cd02 4687echo "host big endian $bigendian"
97a847bc 4688echo "target list $target_list"
ade25b0d 4689echo "tcg debug enabled $debug_tcg"
43ce4dfe 4690echo "gprof enabled $gprof"
03b4fe7d 4691echo "sparse enabled $sparse"
1625af87 4692echo "strip binaries $strip_opt"
05c2a3e7 4693echo "profiler $profiler"
43ce4dfe 4694echo "static build $static"
5b0753e0
FB
4695if test "$darwin" = "yes" ; then
4696 echo "Cocoa support $cocoa"
4697fi
e2134eb9 4698echo "pixman $pixman"
97a847bc 4699echo "SDL support $sdl"
a4ccabcf 4700echo "GTK support $gtk"
925a0400 4701echo "GTK GL support $gtk_gl"
ddbb0d09
DB
4702echo "GNUTLS support $gnutls"
4703echo "GNUTLS hash $gnutls_hash"
91bfcdb0
DB
4704echo "libgcrypt $gcrypt"
4705echo "nettle $nettle ${nettle+($nettle_version)}"
9a2fd434 4706echo "libtasn1 $tasn1"
bbbf9bfb 4707echo "VTE support $vte"
4d3b6f6e 4708echo "curses support $curses"
9d9e1521 4709echo "virgl support $virglrenderer"
769ce76d 4710echo "curl support $curl"
67b915a5 4711echo "mingw32 support $mingw32"
0c58ac1c 4712echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
4713echo "Block whitelist (rw) $block_drv_rw_whitelist"
4714echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 4715echo "VirtFS support $virtfs"
821601ea
JS
4716echo "VNC support $vnc"
4717if test "$vnc" = "yes" ; then
821601ea
JS
4718 echo "VNC SASL support $vnc_sasl"
4719 echo "VNC JPEG support $vnc_jpeg"
4720 echo "VNC PNG support $vnc_png"
821601ea 4721fi
3142255c
BS
4722if test -n "$sparc_cpu"; then
4723 echo "Target Sparc Arch $sparc_cpu"
4724fi
e37630ca 4725echo "xen support $xen"
3996e85c
PD
4726if test "$xen" = "yes" ; then
4727 echo "xen ctrl version $xen_ctrl_version"
4728fi
2e4d9fb1 4729echo "brlapi support $brlapi"
a20a6f46 4730echo "bluez support $bluez"
a25dba17 4731echo "Documentation $docs"
40d6444e 4732echo "PIE $pie"
8a16d273 4733echo "vde support $vde"
58952137 4734echo "netmap support $netmap"
5c6c3a6c 4735echo "Linux AIO support $linux_aio"
758e8e38 4736echo "ATTR/XATTR support $attr"
77755340 4737echo "Install blobs $blobs"
b31a0277 4738echo "KVM support $kvm"
2da776db 4739echo "RDMA support $rdma"
9195b2c2 4740echo "TCG interpreter $tcg_interpreter"
f652e6af 4741echo "fdt support $fdt"
ceb42de8 4742echo "preadv support $preadv"
5f6b9e8f 4743echo "fdatasync $fdatasync"
e78815a5
AF
4744echo "madvise $madvise"
4745echo "posix_madvise $posix_madvise"
1e9737da 4746echo "sigev_thread_id $sigev_thread_id"
ee682d27 4747echo "uuid support $uuid"
47e98658 4748echo "libcap-ng support $cap_ng"
d5970055 4749echo "vhost-net support $vhost_net"
5e9be92d 4750echo "vhost-scsi support $vhost_scsi"
5b808275 4751echo "Trace backends $trace_backends"
e00e36fb 4752if test "$trace_backend" = "simple"; then
9410b56c 4753echo "Trace output file $trace_file-<pid>"
e00e36fb 4754fi
c9dd4074 4755if test "$spice" = "yes"; then
2e0e3c39 4756echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
c9dd4074
SW
4757else
4758echo "spice support $spice"
4759fi
f27aaf4b 4760echo "rbd support $rbd"
dce512de 4761echo "xfsctl support $xfs"
7b02f544 4762echo "smartcard support $smartcard"
2b2325ff 4763echo "libusb $libusb"
69354a83 4764echo "usb net redir $usb_redir"
da076ffe 4765echo "OpenGL support $opengl"
c589b249 4766echo "libiscsi support $libiscsi"
6542aa9c 4767echo "libnfs support $libnfs"
d138cee9 4768echo "build guest agent $guest_agent"
d9840e25 4769echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 4770echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 4771echo "QGA MSI support $guest_agent_msi"
f794573e 4772echo "seccomp support $seccomp"
7c2acc70 4773echo "coroutine backend $coroutine"
70c60c08 4774echo "coroutine pool $coroutine_pool"
eb100396 4775echo "GlusterFS support $glusterfs"
c9a12e75 4776echo "Archipelago support $archipelago"
1d728c39
BS
4777echo "gcov $gcov_tool"
4778echo "gcov enabled $gcov"
ab214c29 4779echo "TPM support $tpm"
0a12ec87 4780echo "libssh2 support $libssh2"
3b8acc11 4781echo "TPM passthrough $tpm_passthrough"
3556c233 4782echo "QOM debugging $qom_cast_debug"
4f18b782 4783echo "vhdx $vhdx"
607dacd0
QN
4784echo "lzo support $lzo"
4785echo "snappy support $snappy"
6b383c08 4786echo "bzip2 support $bzip2"
a99d57bb 4787echo "NUMA host support $numa"
2847b469 4788echo "tcmalloc support $tcmalloc"
7b01cb97 4789echo "jemalloc support $jemalloc"
67b915a5 4790
1ba16968 4791if test "$sdl_too_old" = "yes"; then
24b55b96 4792echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 4793fi
7d13299d 4794
98ec69ac 4795config_host_mak="config-host.mak"
98ec69ac 4796
dbd99ae3
SW
4797echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4798
98ec69ac 4799echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 4800echo >> $config_host_mak
98ec69ac 4801
e6c3b0f7 4802echo all: >> $config_host_mak
99d7cc75
PB
4803echo "prefix=$prefix" >> $config_host_mak
4804echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 4805echo "libdir=$libdir" >> $config_host_mak
8bf188aa 4806echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 4807echo "includedir=$includedir" >> $config_host_mak
99d7cc75 4808echo "mandir=$mandir" >> $config_host_mak
99d7cc75 4809echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 4810echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce
EH
4811echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4812echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 4813echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
4814if test "$mingw32" = "no" ; then
4815 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4816fi
f354b1a1 4817echo "qemu_helperdir=$libexecdir" >> $config_host_mak
f9943cd5
GH
4818echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4819echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
834574ea 4820echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 4821echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
804edf29 4822
98ec69ac 4823echo "ARCH=$ARCH" >> $config_host_mak
727e5283 4824
f8393946 4825if test "$debug_tcg" = "yes" ; then
2358a494 4826 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 4827fi
1625af87 4828if test "$strip_opt" = "yes" ; then
52ba784d 4829 echo "STRIP=${strip}" >> $config_host_mak
1625af87 4830fi
7d13299d 4831if test "$bigendian" = "yes" ; then
e2542fe2 4832 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 4833fi
67b915a5 4834if test "$mingw32" = "yes" ; then
98ec69ac 4835 echo "CONFIG_WIN32=y" >> $config_host_mak
9fe6de94
BS
4836 rc_version=`cat $source_path/VERSION`
4837 version_major=${rc_version%%.*}
4838 rc_version=${rc_version#*.}
4839 version_minor=${rc_version%%.*}
4840 rc_version=${rc_version#*.}
4841 version_subminor=${rc_version%%.*}
4842 version_micro=0
4843 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4844 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
4845 if test "$guest_agent_with_vss" = "yes" ; then
4846 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 4847 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
4848 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4849 fi
50cbebb9
MR
4850 if test "$guest_agent_ntddscsi" = "yes" ; then
4851 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4852 fi
1a34904e 4853 if test "$guest_agent_msi" = "yes"; then
9dacf32d
YH
4854 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4855 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4856 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4857 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4858 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4859 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4860 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4861 fi
210fa556 4862else
35f4df27 4863 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
4864fi
4865
4866if test "$linux" = "yes" ; then
4867 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 4868fi
128ab2ff 4869
83fb7adf 4870if test "$darwin" = "yes" ; then
98ec69ac 4871 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 4872fi
b29fe3ed 4873
4874if test "$aix" = "yes" ; then
98ec69ac 4875 echo "CONFIG_AIX=y" >> $config_host_mak
b29fe3ed 4876fi
4877
ec530c81 4878if test "$solaris" = "yes" ; then
98ec69ac 4879 echo "CONFIG_SOLARIS=y" >> $config_host_mak
2358a494 4880 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
0475a5ca 4881 if test "$needs_libsunmath" = "yes" ; then
75b5a697 4882 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
0475a5ca 4883 fi
ec530c81 4884fi
179cf400
AF
4885if test "$haiku" = "yes" ; then
4886 echo "CONFIG_HAIKU=y" >> $config_host_mak
4887fi
97a847bc 4888if test "$static" = "yes" ; then
98ec69ac 4889 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 4890fi
1ba16968 4891if test "$profiler" = "yes" ; then
2358a494 4892 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 4893fi
c20709aa 4894if test "$slirp" = "yes" ; then
98ec69ac 4895 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 4896 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 4897fi
8a16d273 4898if test "$vde" = "yes" ; then
98ec69ac 4899 echo "CONFIG_VDE=y" >> $config_host_mak
8a16d273 4900fi
58952137
VM
4901if test "$netmap" = "yes" ; then
4902 echo "CONFIG_NETMAP=y" >> $config_host_mak
4903fi
015a33bd
GA
4904if test "$l2tpv3" = "yes" ; then
4905 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4906fi
47e98658
CB
4907if test "$cap_ng" = "yes" ; then
4908 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4909fi
2358a494 4910echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 4911for drv in $audio_drv_list; do
bb55b712 4912 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
98ec69ac 4913 echo "$def=y" >> $config_host_mak
0c58ac1c 4914done
67f86e8e
JQ
4915if test "$audio_pt_int" = "yes" ; then
4916 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4917fi
d5631638 4918if test "$audio_win_int" = "yes" ; then
4919 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4920fi
b64ec4e4
FZ
4921echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4922echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
4923if test "$vnc" = "yes" ; then
4924 echo "CONFIG_VNC=y" >> $config_host_mak
4925fi
2f9606b3 4926if test "$vnc_sasl" = "yes" ; then
98ec69ac 4927 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 4928fi
821601ea 4929if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 4930 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 4931fi
821601ea 4932if test "$vnc_png" = "yes" ; then
efe556ad 4933 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 4934fi
76655d6d 4935if test "$fnmatch" = "yes" ; then
2358a494 4936 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 4937fi
ee682d27
SW
4938if test "$uuid" = "yes" ; then
4939 echo "CONFIG_UUID=y" >> $config_host_mak
4940fi
dce512de
CH
4941if test "$xfs" = "yes" ; then
4942 echo "CONFIG_XFS=y" >> $config_host_mak
4943fi
b1a550a0 4944qemu_version=`head $source_path/VERSION`
98ec69ac 4945echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 4946echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 4947echo "SRC_PATH=$source_path" >> $config_host_mak
98ec69ac 4948echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 4949if [ "$docs" = "yes" ] ; then
98ec69ac 4950 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 4951fi
17969268 4952if test "$modules" = "yes"; then
e26110cf
FZ
4953 # $shacmd can generate a hash started with digit, which the compiler doesn't
4954 # like as an symbol. So prefix it with an underscore
4955 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
17969268
FZ
4956 echo "CONFIG_MODULES=y" >> $config_host_mak
4957fi
1ac88f28 4958if test "$sdl" = "yes" ; then
98ec69ac 4959 echo "CONFIG_SDL=y" >> $config_host_mak
a3f4d63d 4960 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 4961 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
49ecc3fa
FB
4962fi
4963if test "$cocoa" = "yes" ; then
98ec69ac 4964 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
4965fi
4966if test "$curses" = "yes" ; then
98ec69ac 4967 echo "CONFIG_CURSES=y" >> $config_host_mak
49ecc3fa 4968fi
ebc996f3 4969if test "$utimens" = "yes" ; then
2358a494 4970 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
ebc996f3 4971fi
099d6b0f 4972if test "$pipe2" = "yes" ; then
2358a494 4973 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 4974fi
40ff6d7e
KW
4975if test "$accept4" = "yes" ; then
4976 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4977fi
3ce34dfb 4978if test "$splice" = "yes" ; then
2358a494 4979 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 4980fi
c2882b96
RV
4981if test "$eventfd" = "yes" ; then
4982 echo "CONFIG_EVENTFD=y" >> $config_host_mak
4983fi
751bcc39
MAL
4984if test "$memfd" = "yes" ; then
4985 echo "CONFIG_MEMFD=y" >> $config_host_mak
4986fi
d0927938
UH
4987if test "$fallocate" = "yes" ; then
4988 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4989fi
3d4fa43e
KK
4990if test "$fallocate_punch_hole" = "yes" ; then
4991 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4992fi
b953f075
DL
4993if test "$fallocate_zero_range" = "yes" ; then
4994 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4995fi
ed911435
KW
4996if test "$posix_fallocate" = "yes" ; then
4997 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4998fi
c727f47d
PM
4999if test "$sync_file_range" = "yes" ; then
5000 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5001fi
dace20dc
PM
5002if test "$fiemap" = "yes" ; then
5003 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5004fi
d0927938
UH
5005if test "$dup3" = "yes" ; then
5006 echo "CONFIG_DUP3=y" >> $config_host_mak
5007fi
4e0c6529
AB
5008if test "$ppoll" = "yes" ; then
5009 echo "CONFIG_PPOLL=y" >> $config_host_mak
5010fi
cd758dd0
AB
5011if test "$prctl_pr_set_timerslack" = "yes" ; then
5012 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5013fi
3b6edd16
PM
5014if test "$epoll" = "yes" ; then
5015 echo "CONFIG_EPOLL=y" >> $config_host_mak
5016fi
5017if test "$epoll_create1" = "yes" ; then
5018 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5019fi
5020if test "$epoll_pwait" = "yes" ; then
5021 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
5022fi
a8fd1aba
PM
5023if test "$sendfile" = "yes" ; then
5024 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5025fi
51834341
RV
5026if test "$timerfd" = "yes" ; then
5027 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5028fi
9af5c906
RV
5029if test "$setns" = "yes" ; then
5030 echo "CONFIG_SETNS=y" >> $config_host_mak
5031fi
3b3f24ad 5032if test "$inotify" = "yes" ; then
2358a494 5033 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 5034fi
c05c7a73
RV
5035if test "$inotify1" = "yes" ; then
5036 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5037fi
6ae9a1f4
JQ
5038if test "$byteswap_h" = "yes" ; then
5039 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5040fi
5041if test "$bswap_h" = "yes" ; then
5042 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5043fi
769ce76d 5044if test "$curl" = "yes" ; then
d3399d7c 5045 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 5046 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 5047 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 5048fi
2e4d9fb1 5049if test "$brlapi" = "yes" ; then
98ec69ac 5050 echo "CONFIG_BRLAPI=y" >> $config_host_mak
2e4d9fb1 5051fi
fb599c9a 5052if test "$bluez" = "yes" ; then
98ec69ac 5053 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 5054 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 5055fi
d46f7c9e 5056if test "$glib_subprocess" = "yes" ; then
9d41401b
MT
5057 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5058fi
e18df141 5059echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
a4ccabcf
AL
5060if test "$gtk" = "yes" ; then
5061 echo "CONFIG_GTK=y" >> $config_host_mak
a3f4d63d 5062 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 5063 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
925a0400
GH
5064 if test "$gtk_gl" = "yes" ; then
5065 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5066 fi
bbbf9bfb 5067fi
ddbb0d09
DB
5068if test "$gnutls" = "yes" ; then
5069 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5070fi
5071if test "$gnutls_hash" = "yes" ; then
5072 echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
5073fi
91bfcdb0
DB
5074if test "$gcrypt" = "yes" ; then
5075 echo "CONFIG_GCRYPT=y" >> $config_host_mak
62893b67 5076fi
91bfcdb0
DB
5077if test "$nettle" = "yes" ; then
5078 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 5079 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
ed754746 5080fi
9a2fd434
DB
5081if test "$tasn1" = "yes" ; then
5082 echo "CONFIG_TASN1=y" >> $config_host_mak
5083fi
bbbf9bfb
SW
5084if test "$vte" = "yes" ; then
5085 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf
AL
5086 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5087fi
9d9e1521
GH
5088if test "$virglrenderer" = "yes" ; then
5089 echo "CONFIG_VIRGL=y" >> $config_host_mak
5090 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5091 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5092fi
e37630ca 5093if test "$xen" = "yes" ; then
6dbd588a 5094 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 5095 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
e37630ca 5096fi
5c6c3a6c
CH
5097if test "$linux_aio" = "yes" ; then
5098 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5099fi
758e8e38
VJ
5100if test "$attr" = "yes" ; then
5101 echo "CONFIG_ATTR=y" >> $config_host_mak
5102fi
4f26f2b6
AK
5103if test "$libattr" = "yes" ; then
5104 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5105fi
983eef5a
MI
5106if test "$virtfs" = "yes" ; then
5107 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 5108fi
5e9be92d
NB
5109if test "$vhost_scsi" = "yes" ; then
5110 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5111fi
03ce5744
NN
5112if test "$vhost_net" = "yes" ; then
5113 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5114fi
77755340 5115if test "$blobs" = "yes" ; then
98ec69ac 5116 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 5117fi
bf9298b9 5118if test "$iovec" = "yes" ; then
2358a494 5119 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 5120fi
ceb42de8 5121if test "$preadv" = "yes" ; then
2358a494 5122 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 5123fi
f652e6af 5124if test "$fdt" = "yes" ; then
3f0855b1 5125 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 5126fi
dcc38d1c
MT
5127if test "$signalfd" = "yes" ; then
5128 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5129fi
9195b2c2
SW
5130if test "$tcg_interpreter" = "yes" ; then
5131 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5132fi
5f6b9e8f
BS
5133if test "$fdatasync" = "yes" ; then
5134 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5135fi
e78815a5
AF
5136if test "$madvise" = "yes" ; then
5137 echo "CONFIG_MADVISE=y" >> $config_host_mak
5138fi
5139if test "$posix_madvise" = "yes" ; then
5140 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5141fi
1e9737da
RH
5142if test "$sigev_thread_id" = "yes" ; then
5143 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
5144fi
97a847bc 5145
cd4ec0b4
GH
5146if test "$spice" = "yes" ; then
5147 echo "CONFIG_SPICE=y" >> $config_host_mak
5148fi
36707144 5149
7b02f544
MAL
5150if test "$smartcard" = "yes" ; then
5151 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
111a38b0
RR
5152fi
5153
2b2325ff
GH
5154if test "$libusb" = "yes" ; then
5155 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5156fi
5157
69354a83
HG
5158if test "$usb_redir" = "yes" ; then
5159 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5160fi
5161
da076ffe
GH
5162if test "$opengl" = "yes" ; then
5163 echo "CONFIG_OPENGL=y" >> $config_host_mak
f676c67e 5164 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
da076ffe 5165 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
20ff075b
MW
5166fi
5167
607dacd0
QN
5168if test "$lzo" = "yes" ; then
5169 echo "CONFIG_LZO=y" >> $config_host_mak
5170fi
5171
5172if test "$snappy" = "yes" ; then
5173 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5174fi
5175
6b383c08
PW
5176if test "$bzip2" = "yes" ; then
5177 echo "CONFIG_BZIP2=y" >> $config_host_mak
5178 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5179fi
5180
c589b249 5181if test "$libiscsi" = "yes" ; then
d3399d7c 5182 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
5183 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5184 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
5185fi
5186
6542aa9c
PL
5187if test "$libnfs" = "yes" ; then
5188 echo "CONFIG_LIBNFS=y" >> $config_host_mak
5189fi
5190
f794573e
EO
5191if test "$seccomp" = "yes"; then
5192 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5193fi
5194
83fb7adf 5195# XXX: suppress that
7d3505c5 5196if [ "$bsd" = "yes" ] ; then
2358a494 5197 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
5198fi
5199
20ff6c80
AL
5200if test "$zero_malloc" = "yes" ; then
5201 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
5202fi
4d9310f4
DB
5203if test "$localtime_r" = "yes" ; then
5204 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5205fi
3556c233
PB
5206if test "$qom_cast_debug" = "yes" ; then
5207 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5208fi
f27aaf4b 5209if test "$rbd" = "yes" ; then
d3399d7c 5210 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
5211 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5212 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
5213fi
5214
7c2acc70 5215echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
5216if test "$coroutine_pool" = "yes" ; then
5217 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5218else
5219 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5220fi
20ff6c80 5221
d2042378
AK
5222if test "$open_by_handle_at" = "yes" ; then
5223 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5224fi
5225
e06a765e
HPB
5226if test "$linux_magic_h" = "yes" ; then
5227 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
5228fi
5229
cc6e3ca9
GH
5230if test "$pragma_diagnostic_available" = "yes" ; then
5231 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
5232fi
5233
3f4349dc
KW
5234if test "$valgrind_h" = "yes" ; then
5235 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5236fi
5237
8ab1bf12
LC
5238if test "$has_environ" = "yes" ; then
5239 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
5240fi
5241
76a347e1
RH
5242if test "$cpuid_h" = "yes" ; then
5243 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5244fi
5245
f540166b
RH
5246if test "$int128" = "yes" ; then
5247 echo "CONFIG_INT128=y" >> $config_host_mak
5248fi
5249
1e6e9aca
RH
5250if test "$getauxval" = "yes" ; then
5251 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5252fi
5253
eb100396 5254if test "$glusterfs" = "yes" ; then
d3399d7c 5255 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
5256 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5257 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
5258fi
5259
5260if test "$glusterfs_discard" = "yes" ; then
5261 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 5262fi
e06a765e 5263
7c815372
BR
5264if test "$glusterfs_zerofill" = "yes" ; then
5265 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5266fi
5267
c9a12e75
CN
5268if test "$archipelago" = "yes" ; then
5269 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5270 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5271fi
5272
0a12ec87 5273if test "$libssh2" = "yes" ; then
d3399d7c 5274 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
5275 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5276 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
5277fi
5278
4f18b782
JC
5279if test "$vhdx" = "yes" ; then
5280 echo "CONFIG_VHDX=y" >> $config_host_mak
5281fi
5282
68063649 5283# USB host support
b5613fdc
GH
5284if test "$libusb" = "yes"; then
5285 echo "HOST_USB=libusb legacy" >> $config_host_mak
5286else
98ec69ac 5287 echo "HOST_USB=stub" >> $config_host_mak
b5613fdc 5288fi
68063649 5289
3b8acc11
PB
5290# TPM passthrough support?
5291if test "$tpm" = "yes"; then
5292 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5293 if test "$tpm_passthrough" = "yes"; then
5294 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5295 fi
5296fi
5297
5b808275
LV
5298echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5299if have_backend "nop"; then
6d8a764e 5300 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 5301fi
5b808275 5302if have_backend "simple"; then
6d8a764e
LV
5303 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5304 # Set the appropriate trace file.
953ffe0f 5305 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 5306fi
5b808275 5307if have_backend "stderr"; then
6d8a764e
LV
5308 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5309fi
5b808275 5310if have_backend "ust"; then
6d8a764e
LV
5311 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5312fi
5b808275 5313if have_backend "dtrace"; then
6d8a764e
LV
5314 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5315 if test "$trace_backend_stap" = "yes" ; then
5316 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5317 fi
c276b17d 5318fi
5b808275 5319if have_backend "ftrace"; then
781e9545
ET
5320 if test "$linux" = "yes" ; then
5321 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 5322 else
21684af0 5323 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
5324 fi
5325fi
9410b56c
PS
5326echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5327
2da776db
MH
5328if test "$rdma" = "yes" ; then
5329 echo "CONFIG_RDMA=y" >> $config_host_mak
5330fi
5331
5c312079
DDAG
5332# Hold two types of flag:
5333# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5334# a thread we have a handle to
5335# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5336# platform
5337if test "$pthread_setname_np" = "yes" ; then
5338 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5339 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5340fi
5341
5b5e3037
PB
5342if test "$tcg_interpreter" = "yes"; then
5343 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5344elif test "$ARCH" = "sparc64" ; then
5345 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5346elif test "$ARCH" = "s390x" ; then
5347 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 5348elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5b5e3037 5349 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5
RH
5350elif test "$ARCH" = "ppc64" ; then
5351 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037
PB
5352else
5353 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5354fi
5355QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5356
98ec69ac 5357echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 5358echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
5359echo "MAKE=$make" >> $config_host_mak
5360echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
5361echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5362echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
21655882
PB
5363if test -n "$libtool"; then
5364 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5365 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5366else
5367 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5368 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5369fi
c886edfb 5370echo "PYTHON=$python" >> $config_host_mak
804edf29 5371echo "CC=$cc" >> $config_host_mak
a31a8642
MT
5372if $iasl -h > /dev/null 2>&1; then
5373 echo "IASL=$iasl" >> $config_host_mak
5374fi
2b2e59e6 5375echo "CC_I386=$cc_i386" >> $config_host_mak
804edf29 5376echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 5377echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 5378echo "OBJCC=$objcc" >> $config_host_mak
804edf29 5379echo "AR=$ar" >> $config_host_mak
45d285ab 5380echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
3dd46c78
BS
5381echo "AS=$as" >> $config_host_mak
5382echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
5383echo "OBJCOPY=$objcopy" >> $config_host_mak
5384echo "LD=$ld" >> $config_host_mak
4852ee95 5385echo "NM=$nm" >> $config_host_mak
9fe6de94 5386echo "WINDRES=$windres" >> $config_host_mak
44dc0ca3 5387echo "LIBTOOL=$libtool" >> $config_host_mak
e2a2ed06 5388echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 5389echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 5390echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
f9728943 5391echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
5392if test "$sparse" = "yes" ; then
5393 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 5394 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 5395 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
5396 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5397 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5398fi
42da6041
GH
5399if test "$cross_prefix" != ""; then
5400 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5401else
5402 echo "AUTOCONF_HOST := " >> $config_host_mak
5403fi
e2a2ed06 5404echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 5405echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
37746c5e 5406echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
73da375e 5407echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 5408echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
804edf29 5409echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
5410echo "DSOSUF=$DSOSUF" >> $config_host_mak
5411echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 5412echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
5413echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5414echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 5415echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 5416echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
5417if test "$gcov" = "yes" ; then
5418 echo "CONFIG_GCOV=y" >> $config_host_mak
5419 echo "GCOV=$gcov_tool" >> $config_host_mak
5420fi
804edf29 5421
6efd7517
PM
5422# use included Linux headers
5423if test "$linux" = "yes" ; then
a307beb6 5424 mkdir -p linux-headers
6efd7517 5425 case "$cpu" in
c72b26ec 5426 i386|x86_64|x32)
08312a63 5427 linux_arch=x86
6efd7517
PM
5428 ;;
5429 ppcemb|ppc|ppc64)
08312a63 5430 linux_arch=powerpc
6efd7517
PM
5431 ;;
5432 s390x)
08312a63
PM
5433 linux_arch=s390
5434 ;;
1f080313
CF
5435 aarch64)
5436 linux_arch=arm64
5437 ;;
222e7d11
SL
5438 mips64)
5439 linux_arch=mips
5440 ;;
08312a63
PM
5441 *)
5442 # For most CPUs the kernel architecture name and QEMU CPU name match.
5443 linux_arch="$cpu"
6efd7517
PM
5444 ;;
5445 esac
08312a63
PM
5446 # For non-KVM architectures we will not have asm headers
5447 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5448 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5449 fi
6efd7517
PM
5450fi
5451
1d14ffa9 5452for target in $target_list; do
97a847bc 5453target_dir="$target"
25be210f 5454config_target_mak=$target_dir/config-target.mak
c1799a84 5455target_name=`echo $target | cut -d '-' -f 1`
97a847bc 5456target_bigendian="no"
1f3d3c8f 5457
c1799a84 5458case "$target_name" in
d15a9c23 5459 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
5460 target_bigendian=yes
5461 ;;
5462esac
97a847bc 5463target_softmmu="no"
997344f3 5464target_user_only="no"
831b7825 5465target_linux_user="no"
84778508 5466target_bsd_user="no"
9e407a85 5467case "$target" in
c1799a84 5468 ${target_name}-softmmu)
9e407a85
PB
5469 target_softmmu="yes"
5470 ;;
c1799a84 5471 ${target_name}-linux-user)
9c7a4202 5472 if test "$linux" != "yes" ; then
76ad07a4 5473 error_exit "Target '$target' is only available on a Linux host"
9c7a4202 5474 fi
9e407a85
PB
5475 target_user_only="yes"
5476 target_linux_user="yes"
5477 ;;
c1799a84 5478 ${target_name}-bsd-user)
9cf55765 5479 if test "$bsd" != "yes" ; then
76ad07a4 5480 error_exit "Target '$target' is only available on a BSD host"
9c7a4202 5481 fi
84778508
BS
5482 target_user_only="yes"
5483 target_bsd_user="yes"
5484 ;;
9e407a85 5485 *)
76ad07a4 5486 error_exit "Target '$target' not recognised"
9e407a85
PB
5487 exit 1
5488 ;;
5489esac
831b7825 5490
97a847bc 5491mkdir -p $target_dir
25be210f 5492echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 5493
e5fe0c52 5494bflt="no"
c1799a84 5495interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
56aebc89 5496gdb_xml_files=""
7ba1e619 5497
c1799a84 5498TARGET_ARCH="$target_name"
6acff7da 5499TARGET_BASE_ARCH=""
e6e91b9c 5500TARGET_ABI_DIR=""
e73aae67 5501
c1799a84 5502case "$target_name" in
2408a527 5503 i386)
2408a527
AJ
5504 ;;
5505 x86_64)
6acff7da 5506 TARGET_BASE_ARCH=i386
2408a527
AJ
5507 ;;
5508 alpha)
2408a527
AJ
5509 ;;
5510 arm|armeb)
b498c8a0 5511 TARGET_ARCH=arm
2408a527 5512 bflt="yes"
56aebc89 5513 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 5514 ;;
6a49fa95
AG
5515 aarch64)
5516 TARGET_BASE_ARCH=arm
5517 bflt="yes"
8f95ce2e 5518 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 5519 ;;
2408a527 5520 cris)
2408a527 5521 ;;
613a22c9 5522 lm32)
613a22c9 5523 ;;
2408a527 5524 m68k)
2408a527 5525 bflt="yes"
56aebc89 5526 gdb_xml_files="cf-core.xml cf-fp.xml"
2408a527 5527 ;;
877fdc12
EI
5528 microblaze|microblazeel)
5529 TARGET_ARCH=microblaze
72b675ca 5530 bflt="yes"
72b675ca 5531 ;;
0adcffb1 5532 mips|mipsel)
b498c8a0 5533 TARGET_ARCH=mips
25be210f 5534 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
5535 ;;
5536 mipsn32|mipsn32el)
597e2cec 5537 TARGET_ARCH=mips64
6acff7da 5538 TARGET_BASE_ARCH=mips
25be210f 5539 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 5540 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
5541 ;;
5542 mips64|mips64el)
b498c8a0 5543 TARGET_ARCH=mips64
6acff7da 5544 TARGET_BASE_ARCH=mips
25be210f 5545 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 5546 ;;
d15a9c23
AG
5547 moxie)
5548 ;;
e67db06e
JL
5549 or32)
5550 TARGET_ARCH=openrisc
5551 TARGET_BASE_ARCH=openrisc
e67db06e 5552 ;;
2408a527 5553 ppc)
c8b3532d 5554 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5555 ;;
5556 ppcemb)
6acff7da 5557 TARGET_BASE_ARCH=ppc
e6e91b9c 5558 TARGET_ABI_DIR=ppc
c8b3532d 5559 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5560 ;;
5561 ppc64)
6acff7da 5562 TARGET_BASE_ARCH=ppc
e6e91b9c 5563 TARGET_ABI_DIR=ppc
c8b3532d 5564 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527 5565 ;;
9c35126c
DK
5566 ppc64le)
5567 TARGET_ARCH=ppc64
5568 TARGET_BASE_ARCH=ppc
5569 TARGET_ABI_DIR=ppc
5570 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5571 ;;
2408a527 5572 ppc64abi32)
b498c8a0 5573 TARGET_ARCH=ppc64
6acff7da 5574 TARGET_BASE_ARCH=ppc
e6e91b9c 5575 TARGET_ABI_DIR=ppc
25be210f 5576 echo "TARGET_ABI32=y" >> $config_target_mak
c8b3532d 5577 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5578 ;;
5579 sh4|sh4eb)
b498c8a0 5580 TARGET_ARCH=sh4
2408a527
AJ
5581 bflt="yes"
5582 ;;
5583 sparc)
2408a527
AJ
5584 ;;
5585 sparc64)
6acff7da 5586 TARGET_BASE_ARCH=sparc
2408a527
AJ
5587 ;;
5588 sparc32plus)
b498c8a0 5589 TARGET_ARCH=sparc64
6acff7da 5590 TARGET_BASE_ARCH=sparc
e6e91b9c 5591 TARGET_ABI_DIR=sparc
25be210f 5592 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 5593 ;;
24e804ec 5594 s390x)
8a641ff6 5595 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
24e804ec 5596 ;;
444e06b1
CG
5597 tilegx)
5598 ;;
5ecaa4ed
PC
5599 tricore)
5600 ;;
d2fbca94 5601 unicore32)
d2fbca94 5602 ;;
cfa550c6
MF
5603 xtensa|xtensaeb)
5604 TARGET_ARCH=xtensa
cfa550c6 5605 ;;
2408a527 5606 *)
76ad07a4 5607 error_exit "Unsupported target CPU"
2408a527
AJ
5608 ;;
5609esac
5e8861a0
PB
5610# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5611if [ "$TARGET_BASE_ARCH" = "" ]; then
5612 TARGET_BASE_ARCH=$TARGET_ARCH
5613fi
5614
5e8861a0
PB
5615symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5616
99afc91d
DB
5617upper() {
5618 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5619}
5620
99afc91d 5621target_arch_name="`upper $TARGET_ARCH`"
25be210f 5622echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 5623echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 5624echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
5625if [ "$TARGET_ABI_DIR" = "" ]; then
5626 TARGET_ABI_DIR=$TARGET_ARCH
5627fi
25be210f 5628echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
5629if [ "$HOST_VARIANT_DIR" != "" ]; then
5630 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5631fi
c1799a84 5632case "$target_name" in
1b0c87fc
JQ
5633 i386|x86_64)
5634 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
25be210f 5635 echo "CONFIG_XEN=y" >> $config_target_mak
eb6fda0f
AP
5636 if test "$xen_pci_passthrough" = yes; then
5637 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5638 fi
1b0c87fc 5639 fi
59d21e53
AG
5640 ;;
5641 *)
1b0c87fc 5642esac
c1799a84 5643case "$target_name" in
222e7d11 5644 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
c59249f9
JQ
5645 # Make sure the target and host cpus are compatible
5646 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
c1799a84
PB
5647 \( "$target_name" = "$cpu" -o \
5648 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5649 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5650 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5651 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
222e7d11 5652 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
c1799a84 5653 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
18b8263e
MT
5654 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5655 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5656 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
25be210f 5657 echo "CONFIG_KVM=y" >> $config_target_mak
1ba16968 5658 if test "$vhost_net" = "yes" ; then
d5970055
MT
5659 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5660 fi
c59249f9
JQ
5661 fi
5662esac
de83cd02 5663if test "$target_bigendian" = "yes" ; then
25be210f 5664 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 5665fi
97a847bc 5666if test "$target_softmmu" = "yes" ; then
25be210f 5667 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
43ce4dfe 5668fi
997344f3 5669if test "$target_user_only" = "yes" ; then
25be210f 5670 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 5671 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 5672fi
831b7825 5673if test "$target_linux_user" = "yes" ; then
25be210f 5674 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 5675fi
56aebc89
PB
5676list=""
5677if test ! -z "$gdb_xml_files" ; then
5678 for x in $gdb_xml_files; do
5679 list="$list $source_path/gdb-xml/$x"
5680 done
3d0f1517 5681 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 5682fi
97a847bc 5683
e5fe0c52 5684if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 5685 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 5686fi
84778508 5687if test "$target_bsd_user" = "yes" ; then
25be210f 5688 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 5689fi
5b0753e0 5690
4afddb55 5691# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 5692
4afddb55 5693cflags=""
fa282484 5694ldflags=""
9b8e111f 5695
c765fcac
PC
5696disas_config() {
5697 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5698 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5699}
5700
64656024
JQ
5701for i in $ARCH $TARGET_BASE_ARCH ; do
5702 case "$i" in
5703 alpha)
c765fcac 5704 disas_config "ALPHA"
64656024 5705 ;;
82295d8a
RH
5706 aarch64)
5707 if test -n "${cxx}"; then
c765fcac 5708 disas_config "ARM_A64"
82295d8a
RH
5709 fi
5710 ;;
64656024 5711 arm)
c765fcac 5712 disas_config "ARM"
999b53ec 5713 if test -n "${cxx}"; then
c765fcac 5714 disas_config "ARM_A64"
999b53ec 5715 fi
64656024
JQ
5716 ;;
5717 cris)
c765fcac 5718 disas_config "CRIS"
64656024
JQ
5719 ;;
5720 hppa)
c765fcac 5721 disas_config "HPPA"
64656024 5722 ;;
c72b26ec 5723 i386|x86_64|x32)
c765fcac 5724 disas_config "I386"
64656024 5725 ;;
903ec55c 5726 ia64*)
c765fcac 5727 disas_config "IA64"
903ec55c 5728 ;;
79368f49 5729 lm32)
c765fcac 5730 disas_config "LM32"
79368f49 5731 ;;
64656024 5732 m68k)
c765fcac 5733 disas_config "M68K"
64656024 5734 ;;
877fdc12 5735 microblaze*)
c765fcac 5736 disas_config "MICROBLAZE"
64656024
JQ
5737 ;;
5738 mips*)
c765fcac 5739 disas_config "MIPS"
64656024 5740 ;;
d15a9c23 5741 moxie*)
c765fcac 5742 disas_config "MOXIE"
d15a9c23 5743 ;;
e67db06e 5744 or32)
c765fcac 5745 disas_config "OPENRISC"
e67db06e 5746 ;;
64656024 5747 ppc*)
c765fcac 5748 disas_config "PPC"
64656024 5749 ;;
24e804ec 5750 s390*)
c765fcac 5751 disas_config "S390"
64656024
JQ
5752 ;;
5753 sh4)
c765fcac 5754 disas_config "SH4"
64656024
JQ
5755 ;;
5756 sparc*)
c765fcac 5757 disas_config "SPARC"
64656024 5758 ;;
cfa550c6 5759 xtensa*)
c765fcac 5760 disas_config "XTENSA"
cfa550c6 5761 ;;
64656024
JQ
5762 esac
5763done
9195b2c2 5764if test "$tcg_interpreter" = "yes" ; then
c765fcac 5765 disas_config "TCI"
9195b2c2 5766fi
64656024 5767
6ee7126f
JQ
5768case "$ARCH" in
5769alpha)
5770 # Ensure there's only a single GP
5771 cflags="-msmall-data $cflags"
5772;;
5773esac
5774
d02c1db3 5775if test "$gprof" = "yes" ; then
25be210f 5776 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
5777 if test "$target_linux_user" = "yes" ; then
5778 cflags="-p $cflags"
5779 ldflags="-p $ldflags"
5780 fi
5781 if test "$target_softmmu" = "yes" ; then
5782 ldflags="-p $ldflags"
25be210f 5783 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
5784 fi
5785fi
5786
9b8e111f 5787if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 5788 ldflags="$ldflags $textseg_ldflags"
fa282484 5789fi
fa282484 5790
25be210f
JQ
5791echo "LDFLAGS+=$ldflags" >> $config_target_mak
5792echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 5793
97a847bc 5794done # for target in $targets
7d13299d 5795
b776eca1
GH
5796if [ "$pixman" = "internal" ]; then
5797 echo "config-host.h: subdir-pixman" >> $config_host_mak
2da776db
MH
5798fi
5799
a540f158
PC
5800if [ "$dtc_internal" = "yes" ]; then
5801 echo "config-host.h: subdir-dtc" >> $config_host_mak
5802fi
5803
a99d57bb
WG
5804if test "$numa" = "yes"; then
5805 echo "CONFIG_NUMA=y" >> $config_host_mak
5806fi
5807
fd0e6053
JS
5808if test "$ccache_cpp2" = "yes"; then
5809 echo "export CCACHE_CPP2=y" >> $config_host_mak
5810fi
5811
d1807a4f 5812# build tree in object directory in case the source is not in the current directory
f93296ea 5813DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
2b170eff 5814DIRS="$DIRS fsdev"
9933c305 5815DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 5816DIRS="$DIRS roms/seabios roms/vgabios"
2dee8d54 5817DIRS="$DIRS qapi-generated"
c09015dd
AL
5818FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5819FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 5820FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 5821FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 5822FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 5823FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 5824FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 5825FILES="$FILES pc-bios/qemu-icon.bmp"
753d11f2
RH
5826for bios_file in \
5827 $source_path/pc-bios/*.bin \
5acc2ec0 5828 $source_path/pc-bios/*.aml \
753d11f2
RH
5829 $source_path/pc-bios/*.rom \
5830 $source_path/pc-bios/*.dtb \
e89e33e1 5831 $source_path/pc-bios/*.img \
753d11f2 5832 $source_path/pc-bios/openbios-* \
4e73c781 5833 $source_path/pc-bios/u-boot.* \
753d11f2
RH
5834 $source_path/pc-bios/palcode-*
5835do
d1807a4f
PB
5836 FILES="$FILES pc-bios/`basename $bios_file`"
5837done
c2304b52
MA
5838for test_file in `find $source_path/tests/acpi-test-data -type f`
5839do
5840 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5841done
d1807a4f
PB
5842mkdir -p $DIRS
5843for f in $FILES ; do
cab00a5a 5844 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
5845 symlink "$source_path/$f" "$f"
5846 fi
d1807a4f 5847done
1ad2134f 5848
c34ebfdc 5849# temporary config to build submodules
2d9f27d2 5850for rom in seabios vgabios ; do
c34ebfdc 5851 config_mak=roms/$rom/config.mak
37116c89 5852 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 5853 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
3dd46c78 5854 echo "AS=$as" >> $config_mak
c34ebfdc
AL
5855 echo "CC=$cc" >> $config_mak
5856 echo "BCC=bcc" >> $config_mak
3dd46c78 5857 echo "CPP=$cpp" >> $config_mak
c34ebfdc 5858 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 5859 echo "IASL=$iasl" >> $config_mak
c34ebfdc
AL
5860 echo "LD=$ld" >> $config_mak
5861done
5862
76c7560a
HR
5863# set up qemu-iotests in this build directory
5864iotests_common_env="tests/qemu-iotests/common.env"
5865iotests_check="tests/qemu-iotests/check"
5866
5867echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5868echo >> "$iotests_common_env"
5869echo "export PYTHON='$python'" >> "$iotests_common_env"
5870
5871if [ ! -e "$iotests_check" ]; then
5872 symlink "$source_path/$iotests_check" "$iotests_check"
5873fi
5874
dc655404
MT
5875# Save the configure command line for later reuse.
5876cat <<EOD >config.status
5877#!/bin/sh
5878# Generated by configure.
5879# Run this file to recreate the current configuration.
5880# Compiler output produced by configure, useful for debugging
5881# configure, is in config.log if it exists.
5882EOD
5883printf "exec" >>config.status
5884printf " '%s'" "$0" "$@" >>config.status
5885echo >>config.status
5886chmod +x config.status
5887
8cd05ab6 5888rm -r "$TMPDIR1"