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