]> git.proxmox.com Git - mirror_qemu.git/blame - configure
io: add QIOTask class for async operations
[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"
d5b93ddf 1941
50ced5b3
SW
1942 # First we test whether Xen headers and libraries are available.
1943 # If no, we are done and there is no Xen support.
1944 # If yes, more tests are run to detect the Xen version.
1945
1946 # Xen (any)
b2266bee 1947 cat > $TMPC <<EOF
e37630ca 1948#include <xenctrl.h>
50ced5b3
SW
1949int main(void) {
1950 return 0;
1951}
1952EOF
1953 if ! compile_prog "" "$xen_libs" ; then
1954 # Xen not found
1955 if test "$xen" = "yes" ; then
21684af0 1956 feature_not_found "xen" "Install xen devel"
50ced5b3
SW
1957 fi
1958 xen=no
1959
1960 # Xen unstable
69deef08
PM
1961 elif
1962 cat > $TMPC <<EOF &&
50ced5b3 1963#include <xenctrl.h>
cdadde39
RPM
1964#include <stdint.h>
1965int main(void) {
1966 xc_interface *xc = NULL;
1967 xen_domain_handle_t handle;
1968 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
1969 return 0;
1970}
1971EOF
1972 compile_prog "" "$xen_libs"
1973 then
1974 xen_ctrl_version=470
1975 xen=yes
1976
1977 # Xen 4.6
1978 elif
1979 cat > $TMPC <<EOF &&
1980#include <xenctrl.h>
e108a3c1 1981#include <xenstore.h>
d5b93ddf
AP
1982#include <stdint.h>
1983#include <xen/hvm/hvm_info_table.h>
1984#if !defined(HVM_MAX_VCPUS)
1985# error HVM_MAX_VCPUS not defined
1986#endif
d8b441a3
JB
1987int main(void) {
1988 xc_interface *xc;
1989 xs_daemon_open();
1990 xc = xc_interface_open(0, 0, 0);
1991 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1992 xc_gnttab_open(NULL, 0);
1993 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1994 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1995 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 1996 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
1997 return 0;
1998}
1999EOF
2000 compile_prog "" "$xen_libs"
2001 then
2002 xen_ctrl_version=460
2003 xen=yes
2004
2005 # Xen 4.5
2006 elif
2007 cat > $TMPC <<EOF &&
2008#include <xenctrl.h>
2009#include <xenstore.h>
2010#include <stdint.h>
2011#include <xen/hvm/hvm_info_table.h>
2012#if !defined(HVM_MAX_VCPUS)
2013# error HVM_MAX_VCPUS not defined
2014#endif
3996e85c
PD
2015int main(void) {
2016 xc_interface *xc;
2017 xs_daemon_open();
2018 xc = xc_interface_open(0, 0, 0);
2019 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2020 xc_gnttab_open(NULL, 0);
2021 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2022 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2023 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2024 return 0;
2025}
2026EOF
2027 compile_prog "" "$xen_libs"
2028 then
2029 xen_ctrl_version=450
2030 xen=yes
2031
2032 elif
2033 cat > $TMPC <<EOF &&
2034#include <xenctrl.h>
2035#include <xenstore.h>
2036#include <stdint.h>
2037#include <xen/hvm/hvm_info_table.h>
2038#if !defined(HVM_MAX_VCPUS)
2039# error HVM_MAX_VCPUS not defined
2040#endif
8688e065
SS
2041int main(void) {
2042 xc_interface *xc;
2043 xs_daemon_open();
2044 xc = xc_interface_open(0, 0, 0);
2045 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2046 xc_gnttab_open(NULL, 0);
2047 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2048 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2049 return 0;
2050}
2051EOF
2052 compile_prog "" "$xen_libs"
69deef08 2053 then
8688e065
SS
2054 xen_ctrl_version=420
2055 xen=yes
2056
69deef08
PM
2057 elif
2058 cat > $TMPC <<EOF &&
8688e065
SS
2059#include <xenctrl.h>
2060#include <xs.h>
2061#include <stdint.h>
2062#include <xen/hvm/hvm_info_table.h>
2063#if !defined(HVM_MAX_VCPUS)
2064# error HVM_MAX_VCPUS not defined
2065#endif
d5b93ddf 2066int main(void) {
d5b93ddf 2067 xs_daemon_open();
9b4c0b56 2068 xc_interface_open(0, 0, 0);
d5b93ddf
AP
2069 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2070 xc_gnttab_open(NULL, 0);
b87de24e 2071 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
d5b93ddf
AP
2072 return 0;
2073}
e37630ca 2074EOF
50ced5b3 2075 compile_prog "" "$xen_libs"
69deef08 2076 then
d5b93ddf 2077 xen_ctrl_version=410
fc321b4b 2078 xen=yes
d5b93ddf
AP
2079
2080 # Xen 4.0.0
69deef08
PM
2081 elif
2082 cat > $TMPC <<EOF &&
d5b93ddf
AP
2083#include <xenctrl.h>
2084#include <xs.h>
2085#include <stdint.h>
2086#include <xen/hvm/hvm_info_table.h>
2087#if !defined(HVM_MAX_VCPUS)
2088# error HVM_MAX_VCPUS not defined
2089#endif
2090int main(void) {
b87de24e
AP
2091 struct xen_add_to_physmap xatp = {
2092 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2093 };
d5b93ddf
AP
2094 xs_daemon_open();
2095 xc_interface_open();
2096 xc_gnttab_open();
2097 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
b87de24e 2098 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
d5b93ddf
AP
2099 return 0;
2100}
2101EOF
2102 compile_prog "" "$xen_libs"
69deef08 2103 then
d5b93ddf
AP
2104 xen_ctrl_version=400
2105 xen=yes
2106
b87de24e 2107 # Xen 3.4.0
69deef08
PM
2108 elif
2109 cat > $TMPC <<EOF &&
b87de24e
AP
2110#include <xenctrl.h>
2111#include <xs.h>
2112int main(void) {
2113 struct xen_add_to_physmap xatp = {
2114 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2115 };
2116 xs_daemon_open();
2117 xc_interface_open();
2118 xc_gnttab_open();
2119 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2120 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2121 return 0;
2122}
2123EOF
2124 compile_prog "" "$xen_libs"
69deef08 2125 then
b87de24e
AP
2126 xen_ctrl_version=340
2127 xen=yes
2128
2129 # Xen 3.3.0
69deef08
PM
2130 elif
2131 cat > $TMPC <<EOF &&
d5b93ddf
AP
2132#include <xenctrl.h>
2133#include <xs.h>
2134int main(void) {
2135 xs_daemon_open();
2136 xc_interface_open();
2137 xc_gnttab_open();
2138 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2139 return 0;
2140}
2141EOF
2142 compile_prog "" "$xen_libs"
69deef08 2143 then
d5b93ddf
AP
2144 xen_ctrl_version=330
2145 xen=yes
2146
50ced5b3 2147 # Xen version unsupported
b2266bee 2148 else
fc321b4b 2149 if test "$xen" = "yes" ; then
21684af0 2150 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
fc321b4b
JQ
2151 fi
2152 xen=no
b2266bee 2153 fi
d5b93ddf
AP
2154
2155 if test "$xen" = yes; then
2156 libs_softmmu="$xen_libs $libs_softmmu"
2157 fi
e37630ca
AL
2158fi
2159
eb6fda0f
AP
2160if test "$xen_pci_passthrough" != "no"; then
2161 if test "$xen" = "yes" && test "$linux" = "yes" &&
2162 test "$xen_ctrl_version" -ge 340; then
2163 xen_pci_passthrough=yes
2164 else
2165 if test "$xen_pci_passthrough" = "yes"; then
eb6fda0f 2166 if test "$xen_ctrl_version" -lt 340; then
76ad07a4
PM
2167 error_exit "User requested feature Xen PCI Passthrough" \
2168 "This feature does not work with Xen 3.3"
eb6fda0f 2169 fi
76ad07a4
PM
2170 error_exit "User requested feature Xen PCI Passthrough" \
2171 " but this feature requires /sys from Linux"
eb6fda0f
AP
2172 fi
2173 xen_pci_passthrough=no
2174 fi
2175fi
2176
44dc0ca3
AL
2177##########################################
2178# libtool probe
2179
3f534581 2180if ! has $libtool; then
44dc0ca3 2181 libtool=
44dc0ca3
AL
2182fi
2183
8e515b12
PM
2184# MacOSX ships with a libtool which isn't the GNU one; weed this
2185# out by checking whether libtool supports the --version switch
2186if test -n "$libtool"; then
2187 if ! "$libtool" --version >/dev/null 2>&1; then
2188 libtool=
2189 fi
2190fi
2191
dfffc653
JQ
2192##########################################
2193# Sparse probe
2194if test "$sparse" != "no" ; then
0dba6195 2195 if has cgcc; then
dfffc653
JQ
2196 sparse=yes
2197 else
2198 if test "$sparse" = "yes" ; then
21684af0 2199 feature_not_found "sparse" "Install sparse binary"
dfffc653
JQ
2200 fi
2201 sparse=no
2202 fi
2203fi
2204
f676c67e
JW
2205##########################################
2206# X11 probe
2207x11_cflags=
2208x11_libs=-lX11
2209if $pkg_config --exists "x11"; then
2210 x11_cflags=`$pkg_config --cflags x11`
2211 x11_libs=`$pkg_config --libs x11`
2212fi
2213
a4ccabcf
AL
2214##########################################
2215# GTK probe
2216
9e04c683
SW
2217if test "$gtkabi" = ""; then
2218 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2219 # Use 3.0 as a fallback if that is available.
2220 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2221 gtkabi=2.0
2222 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2223 gtkabi=3.0
2224 else
2225 gtkabi=2.0
2226 fi
2227fi
2228
a4ccabcf 2229if test "$gtk" != "no"; then
528de90a 2230 gtkpackage="gtk+-$gtkabi"
0a337ed0 2231 gtkx11package="gtk+-x11-$gtkabi"
528de90a
DB
2232 if test "$gtkabi" = "3.0" ; then
2233 gtkversion="3.0.0"
bbbf9bfb
SW
2234 else
2235 gtkversion="2.18.0"
2236 fi
2237 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2238 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2239 gtk_libs=`$pkg_config --libs $gtkpackage`
0a337ed0 2240 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
f676c67e
JW
2241 gtk_cflags="$gtk_cflags $x11_cflags"
2242 gtk_libs="$gtk_libs $x11_libs"
0a337ed0 2243 fi
bbbf9bfb
SW
2244 libs_softmmu="$gtk_libs $libs_softmmu"
2245 gtk="yes"
2246 elif test "$gtk" = "yes"; then
9e04c683 2247 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
bbbf9bfb
SW
2248 else
2249 gtk="no"
2250 fi
2251fi
2252
ddbb0d09
DB
2253
2254##########################################
2255# GNUTLS probe
2256
37371299
PM
2257gnutls_works() {
2258 # Unfortunately some distros have bad pkg-config information for gnutls
2259 # such that it claims to exist but you get a compiler error if you try
2260 # to use the options returned by --libs. Specifically, Ubuntu for --static
2261 # builds doesn't work:
2262 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2263 #
2264 # So sanity check the cflags/libs before assuming gnutls can be used.
2265 if ! $pkg_config --exists "gnutls"; then
2266 return 1
2267 fi
2268
2269 write_c_skeleton
2270 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2271}
2272
62893b67 2273gnutls_gcrypt=no
ed754746 2274gnutls_nettle=no
ddbb0d09 2275if test "$gnutls" != "no"; then
37371299 2276 if gnutls_works; then
ddbb0d09
DB
2277 gnutls_cflags=`$pkg_config --cflags gnutls`
2278 gnutls_libs=`$pkg_config --libs gnutls`
2279 libs_softmmu="$gnutls_libs $libs_softmmu"
2280 libs_tools="$gnutls_libs $libs_tools"
2281 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2282 gnutls="yes"
2283
2284 # gnutls_hash_init requires >= 2.9.10
2285 if $pkg_config --exists "gnutls >= 2.9.10"; then
2286 gnutls_hash="yes"
2287 else
2288 gnutls_hash="no"
2289 fi
62893b67
DB
2290
2291 if $pkg_config --exists 'gnutls >= 3.0'; then
2292 gnutls_gcrypt=no
ed754746 2293 gnutls_nettle=yes
62893b67
DB
2294 elif $pkg_config --exists 'gnutls >= 2.12'; then
2295 case `$pkg_config --libs --static gnutls` in
ed754746
DB
2296 *gcrypt*)
2297 gnutls_gcrypt=yes
2298 gnutls_nettle=no
2299 ;;
2300 *nettle*)
2301 gnutls_gcrypt=no
2302 gnutls_nettle=yes
2303 ;;
2304 *)
2305 gnutls_gcrypt=yes
2306 gnutls_nettle=no
2307 ;;
62893b67
DB
2308 esac
2309 else
2310 gnutls_gcrypt=yes
ed754746 2311 gnutls_nettle=no
62893b67 2312 fi
ddbb0d09
DB
2313 elif test "$gnutls" = "yes"; then
2314 feature_not_found "gnutls" "Install gnutls devel"
2315 else
2316 gnutls="no"
2317 gnutls_hash="no"
2318 fi
2319else
2320 gnutls_hash="no"
2321fi
2322
91bfcdb0
DB
2323
2324# If user didn't give a --disable/enable-gcrypt flag,
2325# then mark as disabled if user requested nettle
2326# explicitly, or if gnutls links to nettle
2327if test -z "$gcrypt"
2328then
2329 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2330 then
2331 gcrypt="no"
2332 fi
2333fi
2334
2335# If user didn't give a --disable/enable-nettle flag,
2336# then mark as disabled if user requested gcrypt
2337# explicitly, or if gnutls links to gcrypt
2338if test -z "$nettle"
2339then
2340 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2341 then
2342 nettle="no"
2343 fi
2344fi
2345
2346has_libgcrypt_config() {
2347 if ! has "libgcrypt-config"
2348 then
2349 return 1
2350 fi
2351
2352 if test -n "$cross_prefix"
2353 then
2354 host=`libgcrypt-config --host`
2355 if test "$host-" != $cross_prefix
2356 then
2357 return 1
2358 fi
2359 fi
2360
2361 return 0
2362}
2363
2364if test "$gcrypt" != "no"; then
2365 if has_libgcrypt_config; then
62893b67
DB
2366 gcrypt_cflags=`libgcrypt-config --cflags`
2367 gcrypt_libs=`libgcrypt-config --libs`
91bfcdb0
DB
2368 # Debian has remove -lgpg-error from libgcrypt-config
2369 # as it "spreads unnecessary dependencies" which in
2370 # turn breaks static builds...
2371 if test "$static" = "yes"
2372 then
2373 gcrypt_libs="$gcrypt_libs -lgpg-error"
2374 fi
62893b67
DB
2375 libs_softmmu="$gcrypt_libs $libs_softmmu"
2376 libs_tools="$gcrypt_libs $libs_tools"
2377 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
91bfcdb0
DB
2378 gcrypt="yes"
2379 if test -z "$nettle"; then
2380 nettle="no"
2381 fi
62893b67 2382 else
91bfcdb0
DB
2383 if test "$gcrypt" = "yes"; then
2384 feature_not_found "gcrypt" "Install gcrypt devel"
2385 else
2386 gcrypt="no"
2387 fi
62893b67
DB
2388 fi
2389fi
2390
ddbb0d09 2391
91bfcdb0 2392if test "$nettle" != "no"; then
ed754746
DB
2393 if $pkg_config --exists "nettle"; then
2394 nettle_cflags=`$pkg_config --cflags nettle`
2395 nettle_libs=`$pkg_config --libs nettle`
becaeb72 2396 nettle_version=`$pkg_config --modversion nettle`
ed754746
DB
2397 libs_softmmu="$nettle_libs $libs_softmmu"
2398 libs_tools="$nettle_libs $libs_tools"
2399 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
91bfcdb0 2400 nettle="yes"
ed754746 2401 else
91bfcdb0
DB
2402 if test "$nettle" = "yes"; then
2403 feature_not_found "nettle" "Install nettle devel"
2404 else
2405 nettle="no"
2406 fi
ed754746
DB
2407 fi
2408fi
2409
91bfcdb0
DB
2410if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2411then
2412 error_exit "Only one of gcrypt & nettle can be enabled"
2413fi
2414
9a2fd434
DB
2415##########################################
2416# libtasn1 - only for the TLS creds/session test suite
2417
2418tasn1=yes
90246037
DB
2419tasn1_cflags=""
2420tasn1_libs=""
9a2fd434
DB
2421if $pkg_config --exists "libtasn1"; then
2422 tasn1_cflags=`$pkg_config --cflags libtasn1`
2423 tasn1_libs=`$pkg_config --libs libtasn1`
9a2fd434
DB
2424else
2425 tasn1=no
2426fi
2427
ed754746 2428
bbbf9bfb
SW
2429##########################################
2430# VTE probe
2431
2432if test "$vte" != "no"; then
2433 if test "$gtkabi" = "3.0"; then
528de90a
DB
2434 vtepackage="vte-2.90"
2435 vteversion="0.32.0"
2436 else
528de90a
DB
2437 vtepackage="vte"
2438 vteversion="0.24.0"
2439 fi
bbbf9bfb
SW
2440 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2441 vte_cflags=`$pkg_config --cflags $vtepackage`
2442 vte_libs=`$pkg_config --libs $vtepackage`
2443 libs_softmmu="$vte_libs $libs_softmmu"
2444 vte="yes"
2445 elif test "$vte" = "yes"; then
9e04c683
SW
2446 if test "$gtkabi" = "3.0"; then
2447 feature_not_found "vte" "Install libvte-2.90 devel"
2448 else
2449 feature_not_found "vte" "Install libvte devel"
2450 fi
0d185e63 2451 else
bbbf9bfb 2452 vte="no"
a4ccabcf
AL
2453 fi
2454fi
2455
11d9f695
FB
2456##########################################
2457# SDL probe
2458
3ec87ffe
PB
2459# Look for sdl configuration program (pkg-config or sdl-config). Try
2460# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
47c03744
DA
2461
2462if test $sdlabi = "2.0"; then
2463 sdl_config=$sdl2_config
2464 sdlname=sdl2
2465 sdlconfigname=sdl2_config
2466else
2467 sdlname=sdl
2468 sdlconfigname=sdl_config
2469fi
2470
2471if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2472 sdl_config=$sdlconfigname
3ec87ffe
PB
2473fi
2474
47c03744
DA
2475if $pkg_config $sdlname --exists; then
2476 sdlconfig="$pkg_config $sdlname"
9316f803 2477 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
3ec87ffe
PB
2478elif has ${sdl_config}; then
2479 sdlconfig="$sdl_config"
9316f803 2480 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
a0dfd8a4
LM
2481else
2482 if test "$sdl" = "yes" ; then
21684af0 2483 feature_not_found "sdl" "Install SDL devel"
a0dfd8a4
LM
2484 fi
2485 sdl=no
9316f803 2486fi
29e5bada 2487if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
3ec87ffe
PB
2488 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2489fi
11d9f695 2490
9316f803 2491sdl_too_old=no
c4198157 2492if test "$sdl" != "no" ; then
ac119f9d 2493 cat > $TMPC << EOF
11d9f695
FB
2494#include <SDL.h>
2495#undef main /* We don't want SDL to override our main() */
2496int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2497EOF
9316f803 2498 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
74f42e18
T
2499 if test "$static" = "yes" ; then
2500 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2501 else
2502 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2503 fi
52166aa0 2504 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
2505 if test "$_sdlversion" -lt 121 ; then
2506 sdl_too_old=yes
2507 else
a30878e7 2508 sdl=yes
ac119f9d 2509 fi
cd01b4a3 2510
67c274d3 2511 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
ac119f9d 2512 if test "$sdl" = "yes" -a "$static" = "yes" ; then
67c274d3 2513 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
f8aa6c7b
SW
2514 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2515 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
ac119f9d 2516 fi
52166aa0 2517 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
2518 :
2519 else
2520 sdl=no
2521 fi
2522 fi # static link
c4198157
JQ
2523 else # sdl not found
2524 if test "$sdl" = "yes" ; then
21684af0 2525 feature_not_found "sdl" "Install SDL devel"
c4198157
JQ
2526 fi
2527 sdl=no
ac119f9d 2528 fi # sdl compile test
a68551bc 2529fi
11d9f695 2530
5368a422 2531if test "$sdl" = "yes" ; then
ac119f9d 2532 cat > $TMPC <<EOF
5368a422
AL
2533#include <SDL.h>
2534#if defined(SDL_VIDEO_DRIVER_X11)
2535#include <X11/XKBlib.h>
2536#else
2537#error No x11 support
2538#endif
2539int main(void) { return 0; }
2540EOF
f676c67e
JW
2541 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2542 sdl_cflags="$sdl_cflags $x11_cflags"
2543 sdl_libs="$sdl_libs $x11_libs"
ac119f9d 2544 fi
0705667e 2545 libs_softmmu="$sdl_libs $libs_softmmu"
5368a422
AL
2546fi
2547
2da776db
MH
2548##########################################
2549# RDMA needs OpenFabrics libraries
2550if test "$rdma" != "no" ; then
2551 cat > $TMPC <<EOF
2552#include <rdma/rdma_cma.h>
2553int main(void) { return 0; }
2554EOF
2555 rdma_libs="-lrdmacm -libverbs"
2556 if compile_prog "" "$rdma_libs" ; then
2557 rdma="yes"
2558 libs_softmmu="$libs_softmmu $rdma_libs"
2559 else
2560 if test "$rdma" = "yes" ; then
2561 error_exit \
2562 " OpenFabrics librdmacm/libibverbs not present." \
2563 " Your options:" \
2564 " (1) Fast: Install infiniband packages from your distro." \
2565 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2566 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2567 fi
2568 rdma="no"
2569 fi
2570fi
2571
95c6bff3 2572
2f9606b3
AL
2573##########################################
2574# VNC SASL detection
821601ea 2575if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
ea784e3b 2576 cat > $TMPC <<EOF
2f9606b3
AL
2577#include <sasl/sasl.h>
2578#include <stdio.h>
2579int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2580EOF
ea784e3b
JQ
2581 # Assuming Cyrus-SASL installed in /usr prefix
2582 vnc_sasl_cflags=""
2583 vnc_sasl_libs="-lsasl2"
2584 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2585 vnc_sasl=yes
2586 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
ca273d58 2587 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
ea784e3b
JQ
2588 else
2589 if test "$vnc_sasl" = "yes" ; then
21684af0 2590 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2f9606b3 2591 fi
ea784e3b
JQ
2592 vnc_sasl=no
2593 fi
2f9606b3
AL
2594fi
2595
2f6f5c7a
CC
2596##########################################
2597# VNC JPEG detection
821601ea 2598if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2f6f5c7a
CC
2599cat > $TMPC <<EOF
2600#include <stdio.h>
2601#include <jpeglib.h>
2602int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2603EOF
2604 vnc_jpeg_cflags=""
2605 vnc_jpeg_libs="-ljpeg"
2606 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2607 vnc_jpeg=yes
2608 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
ca273d58 2609 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2f6f5c7a
CC
2610 else
2611 if test "$vnc_jpeg" = "yes" ; then
21684af0 2612 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2f6f5c7a
CC
2613 fi
2614 vnc_jpeg=no
2615 fi
2616fi
2617
efe556ad
CC
2618##########################################
2619# VNC PNG detection
821601ea 2620if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
efe556ad
CC
2621cat > $TMPC <<EOF
2622//#include <stdio.h>
2623#include <png.h>
832ce9c2 2624#include <stddef.h>
efe556ad
CC
2625int main(void) {
2626 png_structp png_ptr;
2627 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
7edc3fed 2628 return png_ptr != 0;
efe556ad
CC
2629}
2630EOF
65d5d3f9 2631 if $pkg_config libpng --exists; then
ca871ec8
SW
2632 vnc_png_cflags=`$pkg_config libpng --cflags`
2633 vnc_png_libs=`$pkg_config libpng --libs`
9af8025e 2634 else
efe556ad
CC
2635 vnc_png_cflags=""
2636 vnc_png_libs="-lpng"
9af8025e 2637 fi
efe556ad
CC
2638 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2639 vnc_png=yes
2640 libs_softmmu="$vnc_png_libs $libs_softmmu"
9af8025e 2641 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
efe556ad
CC
2642 else
2643 if test "$vnc_png" = "yes" ; then
21684af0 2644 feature_not_found "vnc-png" "Install libpng devel"
efe556ad
CC
2645 fi
2646 vnc_png=no
2647 fi
2648fi
2649
76655d6d
AL
2650##########################################
2651# fnmatch() probe, used for ACL routines
2652fnmatch="no"
2653cat > $TMPC << EOF
2654#include <fnmatch.h>
2655int main(void)
2656{
2657 fnmatch("foo", "foo", 0);
2658 return 0;
2659}
2660EOF
52166aa0 2661if compile_prog "" "" ; then
76655d6d
AL
2662 fnmatch="yes"
2663fi
2664
ee682d27
SW
2665##########################################
2666# uuid_generate() probe, used for vdi block driver
2d16c8e9
PM
2667# Note that on some systems (notably MacOSX) no extra library
2668# need be linked to get the uuid functions.
ee682d27
SW
2669if test "$uuid" != "no" ; then
2670 uuid_libs="-luuid"
2671 cat > $TMPC << EOF
2672#include <uuid/uuid.h>
2673int main(void)
2674{
2675 uuid_t my_uuid;
2676 uuid_generate(my_uuid);
2677 return 0;
2678}
2679EOF
2d16c8e9
PM
2680 if compile_prog "" "" ; then
2681 uuid="yes"
2682 elif compile_prog "" "$uuid_libs" ; then
ee682d27
SW
2683 uuid="yes"
2684 libs_softmmu="$uuid_libs $libs_softmmu"
2685 libs_tools="$uuid_libs $libs_tools"
2686 else
2687 if test "$uuid" = "yes" ; then
21684af0 2688 feature_not_found "uuid" "Install libuuid devel"
ee682d27
SW
2689 fi
2690 uuid=no
2691 fi
2692fi
2693
4f18b782
JC
2694if test "$vhdx" = "yes" ; then
2695 if test "$uuid" = "no" ; then
2696 error_exit "uuid required for VHDX support"
2697 fi
2698elif test "$vhdx" != "no" ; then
2699 if test "$uuid" = "yes" ; then
2700 vhdx=yes
2701 else
2702 vhdx=no
2703 fi
2704fi
2705
dce512de
CH
2706##########################################
2707# xfsctl() probe, used for raw-posix
2708if test "$xfs" != "no" ; then
2709 cat > $TMPC << EOF
ffc41d10 2710#include <stddef.h> /* NULL */
dce512de
CH
2711#include <xfs/xfs.h>
2712int main(void)
2713{
2714 xfsctl(NULL, 0, 0, NULL);
2715 return 0;
2716}
2717EOF
2718 if compile_prog "" "" ; then
2719 xfs="yes"
2720 else
2721 if test "$xfs" = "yes" ; then
21684af0 2722 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
dce512de
CH
2723 fi
2724 xfs=no
2725 fi
2726fi
2727
8a16d273
TS
2728##########################################
2729# vde libraries probe
dfb278bd 2730if test "$vde" != "no" ; then
4baae0ac 2731 vde_libs="-lvdeplug"
8a16d273
TS
2732 cat > $TMPC << EOF
2733#include <libvdeplug.h>
4a7f0e06
PB
2734int main(void)
2735{
2736 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
2737 char s[] = "";
2738 vde_open(s, s, &a);
4a7f0e06
PB
2739 return 0;
2740}
8a16d273 2741EOF
52166aa0 2742 if compile_prog "" "$vde_libs" ; then
4baae0ac 2743 vde=yes
8e02e54c
JQ
2744 libs_softmmu="$vde_libs $libs_softmmu"
2745 libs_tools="$vde_libs $libs_tools"
dfb278bd
JQ
2746 else
2747 if test "$vde" = "yes" ; then
21684af0 2748 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
2749 fi
2750 vde=no
4baae0ac 2751 fi
8a16d273
TS
2752fi
2753
58952137 2754##########################################
0a985b37
VM
2755# netmap support probe
2756# Apart from looking for netmap headers, we make sure that the host API version
2757# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2758# a minor/major version number. Minor new features will be marked with values up
2759# to 15, and if something happens that requires a change to the backend we will
2760# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
2761if test "$netmap" != "no" ; then
2762 cat > $TMPC << EOF
2763#include <inttypes.h>
2764#include <net/if.h>
2765#include <net/netmap.h>
2766#include <net/netmap_user.h>
0a985b37
VM
2767#if (NETMAP_API < 11) || (NETMAP_API > 15)
2768#error
2769#endif
58952137
VM
2770int main(void) { return 0; }
2771EOF
2772 if compile_prog "" "" ; then
2773 netmap=yes
2774 else
2775 if test "$netmap" = "yes" ; then
2776 feature_not_found "netmap"
2777 fi
2778 netmap=no
2779 fi
2780fi
2781
47e98658
CB
2782##########################################
2783# libcap-ng library probe
2784if test "$cap_ng" != "no" ; then
2785 cap_libs="-lcap-ng"
2786 cat > $TMPC << EOF
2787#include <cap-ng.h>
2788int main(void)
2789{
2790 capng_capability_to_name(CAPNG_EFFECTIVE);
2791 return 0;
2792}
2793EOF
2794 if compile_prog "" "$cap_libs" ; then
2795 cap_ng=yes
2796 libs_tools="$cap_libs $libs_tools"
2797 else
2798 if test "$cap_ng" = "yes" ; then
21684af0 2799 feature_not_found "cap_ng" "Install libcap-ng devel"
47e98658
CB
2800 fi
2801 cap_ng=no
2802 fi
2803fi
2804
8f28f3fb 2805##########################################
c2de5c91 2806# Sound support libraries probe
8f28f3fb 2807
c2de5c91 2808audio_drv_probe()
2809{
2810 drv=$1
2811 hdr=$2
2812 lib=$3
2813 exp=$4
2814 cfl=$5
2815 cat > $TMPC << EOF
2816#include <$hdr>
2817int main(void) { $exp }
8f28f3fb 2818EOF
52166aa0 2819 if compile_prog "$cfl" "$lib" ; then
c2de5c91 2820 :
2821 else
76ad07a4
PM
2822 error_exit "$drv check failed" \
2823 "Make sure to have the $drv libs and headers installed."
c2de5c91 2824 fi
2825}
2826
2fa7d3bf 2827audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
c2de5c91 2828for drv in $audio_drv_list; do
2829 case $drv in
2830 alsa)
2831 audio_drv_probe $drv alsa/asoundlib.h -lasound \
e35bcb0c 2832 "return snd_pcm_close((snd_pcm_t *)0);"
a4bf6780 2833 libs_softmmu="-lasound $libs_softmmu"
c2de5c91 2834 ;;
2835
b8e59f18 2836 pa)
a394aed2
MAL
2837 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2838 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2839 libs_softmmu="-lpulse $libs_softmmu"
67f86e8e 2840 audio_pt_int="yes"
b8e59f18 2841 ;;
2842
997e690a
JQ
2843 coreaudio)
2844 libs_softmmu="-framework CoreAudio $libs_softmmu"
2845 ;;
2846
a4bf6780
JQ
2847 dsound)
2848 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
d5631638 2849 audio_win_int="yes"
a4bf6780
JQ
2850 ;;
2851
2852 oss)
2853 libs_softmmu="$oss_lib $libs_softmmu"
2854 ;;
2855
2856 sdl|wav)
2f6a1ab0
BS
2857 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2858 ;;
2859
e4c63a6a 2860 *)
1c9b2a52 2861 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
2862 error_exit "Unknown driver '$drv' selected" \
2863 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 2864 }
2865 ;;
c2de5c91 2866 esac
2867done
8f28f3fb 2868
2e4d9fb1
AJ
2869##########################################
2870# BrlAPI probe
2871
4ffcedb6 2872if test "$brlapi" != "no" ; then
eb82284f
JQ
2873 brlapi_libs="-lbrlapi"
2874 cat > $TMPC << EOF
2e4d9fb1 2875#include <brlapi.h>
832ce9c2 2876#include <stddef.h>
2e4d9fb1
AJ
2877int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2878EOF
52166aa0 2879 if compile_prog "" "$brlapi_libs" ; then
eb82284f 2880 brlapi=yes
264606b3 2881 libs_softmmu="$brlapi_libs $libs_softmmu"
4ffcedb6
JQ
2882 else
2883 if test "$brlapi" = "yes" ; then
21684af0 2884 feature_not_found "brlapi" "Install brlapi devel"
4ffcedb6
JQ
2885 fi
2886 brlapi=no
eb82284f
JQ
2887 fi
2888fi
2e4d9fb1 2889
4d3b6f6e
AZ
2890##########################################
2891# curses probe
a3605bf6
MT
2892if test "$curses" != "no" ; then
2893 if test "$mingw32" = "yes" ; then
e095e2f3 2894 curses_list="-lpdcurses"
a3605bf6 2895 else
cfeda5f4 2896 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
a3605bf6 2897 fi
c584a6d0 2898 curses_found=no
4d3b6f6e
AZ
2899 cat > $TMPC << EOF
2900#include <curses.h>
ef9a2524
SW
2901int main(void) {
2902 const char *s = curses_version();
2903 resize_term(0, 0);
2904 return s != 0;
2905}
4d3b6f6e 2906EOF
ecbe251f 2907 IFS=:
4f78ef9a 2908 for curses_lib in $curses_list; do
ecbe251f 2909 unset IFS
4f78ef9a 2910 if compile_prog "" "$curses_lib" ; then
c584a6d0 2911 curses_found=yes
4f78ef9a
JQ
2912 libs_softmmu="$curses_lib $libs_softmmu"
2913 break
2914 fi
2915 done
ecbe251f 2916 unset IFS
c584a6d0
JQ
2917 if test "$curses_found" = "yes" ; then
2918 curses=yes
2919 else
2920 if test "$curses" = "yes" ; then
21684af0 2921 feature_not_found "curses" "Install ncurses devel"
c584a6d0
JQ
2922 fi
2923 curses=no
2924 fi
4f78ef9a 2925fi
4d3b6f6e 2926
769ce76d
AG
2927##########################################
2928# curl probe
788c8196 2929if test "$curl" != "no" ; then
65d5d3f9 2930 if $pkg_config libcurl --exists; then
a3605bf6
MT
2931 curlconfig="$pkg_config libcurl"
2932 else
2933 curlconfig=curl-config
2934 fi
769ce76d
AG
2935 cat > $TMPC << EOF
2936#include <curl/curl.h>
0b862ced 2937int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
769ce76d 2938EOF
4e2b0658
PB
2939 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2940 curl_libs=`$curlconfig --libs 2>/dev/null`
b1d5a277 2941 if compile_prog "$curl_cflags" "$curl_libs" ; then
769ce76d 2942 curl=yes
788c8196
JQ
2943 else
2944 if test "$curl" = "yes" ; then
21684af0 2945 feature_not_found "curl" "Install libcurl devel"
788c8196
JQ
2946 fi
2947 curl=no
769ce76d
AG
2948 fi
2949fi # test "$curl"
2950
fb599c9a
AZ
2951##########################################
2952# bluez support probe
a20a6f46 2953if test "$bluez" != "no" ; then
e820e3f4
AZ
2954 cat > $TMPC << EOF
2955#include <bluetooth/bluetooth.h>
2956int main(void) { return bt_error(0); }
2957EOF
a8bd70ad
PB
2958 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2959 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
52166aa0 2960 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
a20a6f46 2961 bluez=yes
e482d56a 2962 libs_softmmu="$bluez_libs $libs_softmmu"
e820e3f4 2963 else
a20a6f46 2964 if test "$bluez" = "yes" ; then
21684af0 2965 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
a20a6f46 2966 fi
e820e3f4
AZ
2967 bluez="no"
2968 fi
fb599c9a
AZ
2969fi
2970
e18df141
AL
2971##########################################
2972# glib support probe
a52d28af 2973
f40685c6 2974glib_req_ver=2.22
aa0d1f44
PB
2975glib_modules=gthread-2.0
2976if test "$modules" = yes; then
2977 glib_modules="$glib_modules gmodule-2.0"
2978fi
e26110cf 2979
aa0d1f44 2980for i in $glib_modules; do
e26110cf
FZ
2981 if $pkg_config --atleast-version=$glib_req_ver $i; then
2982 glib_cflags=`$pkg_config --cflags $i`
2983 glib_libs=`$pkg_config --libs $i`
2984 CFLAGS="$glib_cflags $CFLAGS"
2985 LIBS="$glib_libs $LIBS"
2986 libs_qga="$glib_libs $libs_qga"
2987 else
2988 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2989 fi
2990done
2991
9d41401b
MT
2992# g_test_trap_subprocess added in 2.38. Used by some tests.
2993glib_subprocess=yes
2994if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2995 glib_subprocess=no
2996fi
2997
bbbf2e04
JS
2998# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2999cat > $TMPC << EOF
3000#include <glib.h>
3001int main(void) { return 0; }
3002EOF
3003if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3004 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3005 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3006 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3007 fi
3008fi
3009
e26110cf
FZ
3010##########################################
3011# SHA command probe for modules
3012if test "$modules" = yes; then
3013 shacmd_probe="sha1sum sha1 shasum"
3014 for c in $shacmd_probe; do
8ccefb91 3015 if has $c; then
e26110cf
FZ
3016 shacmd="$c"
3017 break
3018 fi
3019 done
3020 if test "$shacmd" = ""; then
3021 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3022 fi
e18df141
AL
3023fi
3024
e2134eb9
GH
3025##########################################
3026# pixman support probe
3027
3028if test "$pixman" = ""; then
74880fe2
RS
3029 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3030 pixman="none"
236f282c 3031 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
e2134eb9
GH
3032 pixman="system"
3033 else
3034 pixman="internal"
3035 fi
3036fi
74880fe2
RS
3037if test "$pixman" = "none"; then
3038 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
76ad07a4
PM
3039 error_exit "pixman disabled but system emulation or tools build" \
3040 "enabled. You can turn off pixman only if you also" \
3041 "disable all system emulation targets and the tools" \
3042 "build with '--disable-tools --disable-system'."
74880fe2
RS
3043 fi
3044 pixman_cflags=
3045 pixman_libs=
3046elif test "$pixman" = "system"; then
236f282c 3047 # pixman version has been checked above
ca871ec8
SW
3048 pixman_cflags=`$pkg_config --cflags pixman-1`
3049 pixman_libs=`$pkg_config --libs pixman-1`
e2134eb9
GH
3050else
3051 if test ! -d ${source_path}/pixman/pixman; then
236f282c 3052 error_exit "pixman >= 0.21.8 not present. Your options:" \
76ad07a4
PM
3053 " (1) Preferred: Install the pixman devel package (any recent" \
3054 " distro should have packages as Xorg needs pixman too)." \
3055 " (2) Fetch the pixman submodule, using:" \
3056 " git submodule update --init pixman"
e2134eb9 3057 fi
5ca9388a
GH
3058 mkdir -p pixman/pixman
3059 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3060 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
e2134eb9 3061fi
e2134eb9 3062
17bff52b
MK
3063##########################################
3064# libcap probe
3065
3066if test "$cap" != "no" ; then
3067 cat > $TMPC <<EOF
3068#include <stdio.h>
3069#include <sys/capability.h>
cc939743 3070int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
17bff52b
MK
3071EOF
3072 if compile_prog "" "-lcap" ; then
3073 cap=yes
3074 else
3075 cap=no
3076 fi
3077fi
3078
414f0dab 3079##########################################
e5d355d1 3080# pthread probe
4b29ec41 3081PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3082
4dd75c70 3083pthread=no
e5d355d1 3084cat > $TMPC << EOF
3c529d93 3085#include <pthread.h>
7a42bbe4
SW
3086static void *f(void *p) { return NULL; }
3087int main(void) {
3088 pthread_t thread;
3089 pthread_create(&thread, 0, f, 0);
3090 return 0;
3091}
414f0dab 3092EOF
bd00d539
AF
3093if compile_prog "" "" ; then
3094 pthread=yes
3095else
3096 for pthread_lib in $PTHREADLIBS_LIST; do
3097 if compile_prog "" "$pthread_lib" ; then
3098 pthread=yes
e3c56761
PP
3099 found=no
3100 for lib_entry in $LIBS; do
3101 if test "$lib_entry" = "$pthread_lib"; then
3102 found=yes
3103 break
3104 fi
3105 done
3106 if test "$found" = "no"; then
3107 LIBS="$pthread_lib $LIBS"
3108 fi
bd00d539
AF
3109 break
3110 fi
3111 done
3112fi
414f0dab 3113
4617e593 3114if test "$mingw32" != yes -a "$pthread" = no; then
76ad07a4
PM
3115 error_exit "pthread check failed" \
3116 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3117fi
3118
5c312079
DDAG
3119# check for pthread_setname_np
3120pthread_setname_np=no
3121cat > $TMPC << EOF
3122#include <pthread.h>
3123
3124static void *f(void *p) { return NULL; }
3125int main(void)
3126{
3127 pthread_t thread;
3128 pthread_create(&thread, 0, f, 0);
3129 pthread_setname_np(thread, "QEMU");
3130 return 0;
3131}
3132EOF
3133if compile_prog "" "$pthread_lib" ; then
3134 pthread_setname_np=yes
3135fi
3136
f27aaf4b
CB
3137##########################################
3138# rbd probe
3139if test "$rbd" != "no" ; then
3140 cat > $TMPC <<EOF
3141#include <stdio.h>
ad32e9c0 3142#include <rbd/librbd.h>
f27aaf4b 3143int main(void) {
ad32e9c0
JD
3144 rados_t cluster;
3145 rados_create(&cluster, NULL);
f27aaf4b
CB
3146 return 0;
3147}
3148EOF
ad32e9c0
JD
3149 rbd_libs="-lrbd -lrados"
3150 if compile_prog "" "$rbd_libs" ; then
3151 rbd=yes
f27aaf4b
CB
3152 else
3153 if test "$rbd" = "yes" ; then
21684af0 3154 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3155 fi
3156 rbd=no
3157 fi
f27aaf4b
CB
3158fi
3159
0a12ec87
RJ
3160##########################################
3161# libssh2 probe
4fc16838 3162min_libssh2_version=1.2.8
0a12ec87 3163if test "$libssh2" != "no" ; then
65d5d3f9 3164 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
0a12ec87
RJ
3165 libssh2_cflags=`$pkg_config libssh2 --cflags`
3166 libssh2_libs=`$pkg_config libssh2 --libs`
0a12ec87 3167 libssh2=yes
0a12ec87
RJ
3168 else
3169 if test "$libssh2" = "yes" ; then
4fc16838 3170 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
0a12ec87
RJ
3171 fi
3172 libssh2=no
3173 fi
3174fi
3175
9a2d462e
RJ
3176##########################################
3177# libssh2_sftp_fsync probe
3178
3179if test "$libssh2" = "yes"; then
3180 cat > $TMPC <<EOF
3181#include <stdio.h>
3182#include <libssh2.h>
3183#include <libssh2_sftp.h>
3184int main(void) {
3185 LIBSSH2_SESSION *session;
3186 LIBSSH2_SFTP *sftp;
3187 LIBSSH2_SFTP_HANDLE *sftp_handle;
3188 session = libssh2_session_init ();
3189 sftp = libssh2_sftp_init (session);
3190 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3191 libssh2_sftp_fsync (sftp_handle);
3192 return 0;
3193}
3194EOF
3195 # libssh2_cflags/libssh2_libs defined in previous test.
3196 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3197 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3198 fi
3199fi
3200
5c6c3a6c
CH
3201##########################################
3202# linux-aio probe
5c6c3a6c
CH
3203
3204if test "$linux_aio" != "no" ; then
3205 cat > $TMPC <<EOF
3206#include <libaio.h>
3207#include <sys/eventfd.h>
832ce9c2 3208#include <stddef.h>
5c6c3a6c
CH
3209int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3210EOF
3211 if compile_prog "" "-laio" ; then
3212 linux_aio=yes
5c6c3a6c
CH
3213 else
3214 if test "$linux_aio" = "yes" ; then
21684af0 3215 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3216 fi
3cfcae3c 3217 linux_aio=no
5c6c3a6c
CH
3218 fi
3219fi
3220
3b8acc11
PB
3221##########################################
3222# TPM passthrough is only on x86 Linux
3223
3224if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3225 tpm_passthrough=$tpm
3226else
3227 tpm_passthrough=no
3228fi
3229
758e8e38
VJ
3230##########################################
3231# attr probe
3232
3233if test "$attr" != "no" ; then
3234 cat > $TMPC <<EOF
3235#include <stdio.h>
3236#include <sys/types.h>
f2338fb4
PB
3237#ifdef CONFIG_LIBATTR
3238#include <attr/xattr.h>
3239#else
4f26f2b6 3240#include <sys/xattr.h>
f2338fb4 3241#endif
758e8e38
VJ
3242int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3243EOF
4f26f2b6
AK
3244 if compile_prog "" "" ; then
3245 attr=yes
3246 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3247 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
3248 attr=yes
3249 LIBS="-lattr $LIBS"
4f26f2b6 3250 libattr=yes
758e8e38
VJ
3251 else
3252 if test "$attr" = "yes" ; then
21684af0 3253 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3254 fi
3255 attr=no
3256 fi
3257fi
3258
bf9298b9
AL
3259##########################################
3260# iovec probe
3261cat > $TMPC <<EOF
db34f0b3 3262#include <sys/types.h>
bf9298b9 3263#include <sys/uio.h>
db34f0b3 3264#include <unistd.h>
f91f9bee 3265int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3266EOF
3267iovec=no
52166aa0 3268if compile_prog "" "" ; then
bf9298b9
AL
3269 iovec=yes
3270fi
3271
ceb42de8
AL
3272##########################################
3273# preadv probe
3274cat > $TMPC <<EOF
3275#include <sys/types.h>
3276#include <sys/uio.h>
3277#include <unistd.h>
c075a723 3278int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3279EOF
3280preadv=no
52166aa0 3281if compile_prog "" "" ; then
ceb42de8
AL
3282 preadv=yes
3283fi
3284
f652e6af
AJ
3285##########################################
3286# fdt probe
e169e1e1
PM
3287# fdt support is mandatory for at least some target architectures,
3288# so insist on it if we're building those system emulators.
3289fdt_required=no
3290for target in $target_list; do
3291 case $target in
6a49fa95 3292 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
e169e1e1
PM
3293 fdt_required=yes
3294 ;;
3295 esac
3296done
3297
3298if test "$fdt_required" = "yes"; then
3299 if test "$fdt" = "no"; then
3300 error_exit "fdt disabled but some requested targets require it." \
3301 "You can turn off fdt only if you also disable all the system emulation" \
3302 "targets which need it (by specifying a cut down --target-list)."
3303 fi
3304 fdt=yes
3305fi
3306
2df87df7 3307if test "$fdt" != "no" ; then
b41af4ba 3308 fdt_libs="-lfdt"
96ce6545 3309 # explicitly check for libfdt_env.h as it is missing in some stable installs
31ce0adb 3310 # and test for required functions to make sure we are on a version >= 1.4.0
b41af4ba 3311 cat > $TMPC << EOF
31ce0adb 3312#include <libfdt.h>
96ce6545 3313#include <libfdt_env.h>
31ce0adb 3314int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
f652e6af 3315EOF
52166aa0 3316 if compile_prog "" "$fdt_libs" ; then
a540f158 3317 # system DTC is good - use it
f652e6af 3318 fdt=yes
a540f158
PC
3319 elif test -d ${source_path}/dtc/libfdt ; then
3320 # have submodule DTC - use it
3321 fdt=yes
3322 dtc_internal="yes"
3323 mkdir -p dtc
cab00a5a 3324 if [ "$pwd_is_source_path" != "y" ] ; then
a540f158
PC
3325 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3326 symlink "$source_path/dtc/scripts" "dtc/scripts"
2df87df7 3327 fi
a540f158
PC
3328 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3329 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3330 elif test "$fdt" = "yes" ; then
3331 # have neither and want - prompt for system/submodule install
31ce0adb 3332 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3f281822 3333 " (1) Preferred: Install the DTC (libfdt) devel package" \
a540f158
PC
3334 " (2) Fetch the DTC submodule, using:" \
3335 " git submodule update --init dtc"
3336 else
3337 # don't have and don't want
de3a354a 3338 fdt_libs=
2df87df7 3339 fdt=no
f652e6af
AJ
3340 fi
3341fi
3342
a540f158
PC
3343libs_softmmu="$libs_softmmu $fdt_libs"
3344
20ff075b 3345##########################################
fb719563 3346# opengl probe (for sdl2, gtk, milkymist-tmu2)
b1546f32 3347
da076ffe 3348if test "$opengl" != "no" ; then
fb719563
OH
3349 opengl_pkgs="epoxy"
3350 if $pkg_config $opengl_pkgs x11; then
f676c67e
JW
3351 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3352 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
da076ffe 3353 opengl=yes
925a0400
GH
3354 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3355 gtk_gl="yes"
3356 fi
20ff075b 3357 else
da076ffe 3358 if test "$opengl" = "yes" ; then
dcf30025 3359 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 3360 fi
f676c67e 3361 opengl_cflags=""
da076ffe
GH
3362 opengl_libs=""
3363 opengl=no
20ff075b
MW
3364 fi
3365fi
3366
c9a12e75
CN
3367
3368##########################################
3369# archipelago probe
3370if test "$archipelago" != "no" ; then
3371 cat > $TMPC <<EOF
3372#include <stdio.h>
3373#include <xseg/xseg.h>
3374#include <xseg/protocol.h>
3375int main(void) {
3376 xseg_initialize();
3377 return 0;
3378}
3379EOF
3380 archipelago_libs=-lxseg
3381 if compile_prog "" "$archipelago_libs"; then
3382 archipelago="yes"
3383 libs_tools="$archipelago_libs $libs_tools"
3384 libs_softmmu="$archipelago_libs $libs_softmmu"
6a460ed1
SH
3385
3386 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3387 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3388 echo "license and therefore prevent redistribution."
3389 echo
3390 echo "To disable Archipelago, use --disable-archipelago"
c9a12e75
CN
3391 else
3392 if test "$archipelago" = "yes" ; then
3393 feature_not_found "Archipelago backend support" "Install libxseg devel"
3394 fi
3395 archipelago="no"
3396 fi
3397fi
3398
3399
eb100396
BR
3400##########################################
3401# glusterfs probe
3402if test "$glusterfs" != "no" ; then
65d5d3f9 3403 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3404 glusterfs="yes"
ca871ec8
SW
3405 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3406 glusterfs_libs=`$pkg_config --libs glusterfs-api`
65d5d3f9 3407 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3408 glusterfs_discard="yes"
3409 fi
7c815372
BR
3410 if $pkg_config --atleast-version=6 glusterfs-api; then
3411 glusterfs_zerofill="yes"
3412 fi
eb100396
BR
3413 else
3414 if test "$glusterfs" = "yes" ; then
8efc9363
HT
3415 feature_not_found "GlusterFS backend support" \
3416 "Install glusterfs-api devel >= 3"
eb100396 3417 fi
e01bee08 3418 glusterfs="no"
eb100396
BR
3419 fi
3420fi
3421
39386ac7 3422# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
3423# emulator. This is done because older glibc versions don't
3424# have syscall stubs for these implemented. In that case we
3425# don't provide them even if kernel supports them.
3426#
3427inotify=no
67ba57f6 3428cat > $TMPC << EOF
3b3f24ad
AJ
3429#include <sys/inotify.h>
3430
3431int
3432main(void)
3433{
3434 /* try to start inotify */
8690e420 3435 return inotify_init();
3b3f24ad
AJ
3436}
3437EOF
52166aa0 3438if compile_prog "" "" ; then
67ba57f6 3439 inotify=yes
3b3f24ad
AJ
3440fi
3441
c05c7a73
RV
3442inotify1=no
3443cat > $TMPC << EOF
3444#include <sys/inotify.h>
3445
3446int
3447main(void)
3448{
3449 /* try to start inotify */
3450 return inotify_init1(0);
3451}
3452EOF
3453if compile_prog "" "" ; then
3454 inotify1=yes
3455fi
3456
ebc996f3
RV
3457# check if utimensat and futimens are supported
3458utimens=no
3459cat > $TMPC << EOF
3460#define _ATFILE_SOURCE
ebc996f3
RV
3461#include <stddef.h>
3462#include <fcntl.h>
3014ee00 3463#include <sys/stat.h>
ebc996f3
RV
3464
3465int main(void)
3466{
3467 utimensat(AT_FDCWD, "foo", NULL, 0);
3468 futimens(0, NULL);
3469 return 0;
3470}
3471EOF
52166aa0 3472if compile_prog "" "" ; then
ebc996f3
RV
3473 utimens=yes
3474fi
3475
099d6b0f
RV
3476# check if pipe2 is there
3477pipe2=no
3478cat > $TMPC << EOF
099d6b0f
RV
3479#include <unistd.h>
3480#include <fcntl.h>
3481
3482int main(void)
3483{
3484 int pipefd[2];
9bca8162 3485 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
3486}
3487EOF
52166aa0 3488if compile_prog "" "" ; then
099d6b0f
RV
3489 pipe2=yes
3490fi
3491
40ff6d7e
KW
3492# check if accept4 is there
3493accept4=no
3494cat > $TMPC << EOF
40ff6d7e
KW
3495#include <sys/socket.h>
3496#include <stddef.h>
3497
3498int main(void)
3499{
3500 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3501 return 0;
3502}
3503EOF
3504if compile_prog "" "" ; then
3505 accept4=yes
3506fi
3507
3ce34dfb
VS
3508# check if tee/splice is there. vmsplice was added same time.
3509splice=no
3510cat > $TMPC << EOF
3ce34dfb
VS
3511#include <unistd.h>
3512#include <fcntl.h>
3513#include <limits.h>
3514
3515int main(void)
3516{
66ea0f22 3517 int len, fd = 0;
3ce34dfb
VS
3518 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3519 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3520 return 0;
3521}
3522EOF
52166aa0 3523if compile_prog "" "" ; then
3ce34dfb
VS
3524 splice=yes
3525fi
3526
a99d57bb
WG
3527##########################################
3528# libnuma probe
3529
3530if test "$numa" != "no" ; then
3531 cat > $TMPC << EOF
3532#include <numa.h>
3533int main(void) { return numa_available(); }
3534EOF
3535
3536 if compile_prog "" "-lnuma" ; then
3537 numa=yes
3538 libs_softmmu="-lnuma $libs_softmmu"
3539 else
3540 if test "$numa" = "yes" ; then
3541 feature_not_found "numa" "install numactl devel"
3542 fi
3543 numa=no
3544 fi
3545fi
3546
7b01cb97
AD
3547if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3548 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3549 exit 1
3550fi
3551
2847b469
FZ
3552##########################################
3553# tcmalloc probe
3554
3555if test "$tcmalloc" = "yes" ; then
3556 cat > $TMPC << EOF
3557#include <stdlib.h>
3558int main(void) { malloc(1); return 0; }
3559EOF
3560
3561 if compile_prog "" "-ltcmalloc" ; then
3562 LIBS="-ltcmalloc $LIBS"
3563 else
3564 feature_not_found "tcmalloc" "install gperftools devel"
3565 fi
3566fi
3567
7b01cb97
AD
3568##########################################
3569# jemalloc probe
3570
3571if test "$jemalloc" = "yes" ; then
3572 cat > $TMPC << EOF
3573#include <stdlib.h>
3574int main(void) { malloc(1); return 0; }
3575EOF
3576
3577 if compile_prog "" "-ljemalloc" ; then
3578 LIBS="-ljemalloc $LIBS"
3579 else
3580 feature_not_found "jemalloc" "install jemalloc devel"
3581 fi
3582fi
3583
dcc38d1c
MT
3584##########################################
3585# signalfd probe
3586signalfd="no"
3587cat > $TMPC << EOF
dcc38d1c
MT
3588#include <unistd.h>
3589#include <sys/syscall.h>
3590#include <signal.h>
3591int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3592EOF
3593
3594if compile_prog "" "" ; then
3595 signalfd=yes
3596fi
3597
c2882b96
RV
3598# check if eventfd is supported
3599eventfd=no
3600cat > $TMPC << EOF
3601#include <sys/eventfd.h>
3602
3603int main(void)
3604{
55cc7f3e 3605 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
3606}
3607EOF
3608if compile_prog "" "" ; then
3609 eventfd=yes
3610fi
3611
751bcc39
MAL
3612# check if memfd is supported
3613memfd=no
3614cat > $TMPC << EOF
3615#include <sys/memfd.h>
3616
3617int main(void)
3618{
3619 return memfd_create("foo", MFD_ALLOW_SEALING);
3620}
3621EOF
3622if compile_prog "" "" ; then
3623 memfd=yes
3624fi
3625
3626
3627
d0927938
UH
3628# check for fallocate
3629fallocate=no
3630cat > $TMPC << EOF
3631#include <fcntl.h>
3632
3633int main(void)
3634{
3635 fallocate(0, 0, 0, 0);
3636 return 0;
3637}
3638EOF
8fb03151 3639if compile_prog "" "" ; then
d0927938
UH
3640 fallocate=yes
3641fi
3642
3d4fa43e
KK
3643# check for fallocate hole punching
3644fallocate_punch_hole=no
3645cat > $TMPC << EOF
3646#include <fcntl.h>
3647#include <linux/falloc.h>
3648
3649int main(void)
3650{
3651 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3652 return 0;
3653}
3654EOF
3655if compile_prog "" "" ; then
3656 fallocate_punch_hole=yes
3657fi
3658
b953f075
DL
3659# check that fallocate supports range zeroing inside the file
3660fallocate_zero_range=no
3661cat > $TMPC << EOF
3662#include <fcntl.h>
3663#include <linux/falloc.h>
3664
3665int main(void)
3666{
3667 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3668 return 0;
3669}
3670EOF
3671if compile_prog "" "" ; then
3672 fallocate_zero_range=yes
3673fi
3674
ed911435
KW
3675# check for posix_fallocate
3676posix_fallocate=no
3677cat > $TMPC << EOF
3678#include <fcntl.h>
3679
3680int main(void)
3681{
3682 posix_fallocate(0, 0, 0);
3683 return 0;
3684}
3685EOF
3686if compile_prog "" "" ; then
3687 posix_fallocate=yes
3688fi
3689
c727f47d
PM
3690# check for sync_file_range
3691sync_file_range=no
3692cat > $TMPC << EOF
3693#include <fcntl.h>
3694
3695int main(void)
3696{
3697 sync_file_range(0, 0, 0, 0);
3698 return 0;
3699}
3700EOF
8fb03151 3701if compile_prog "" "" ; then
c727f47d
PM
3702 sync_file_range=yes
3703fi
3704
dace20dc
PM
3705# check for linux/fiemap.h and FS_IOC_FIEMAP
3706fiemap=no
3707cat > $TMPC << EOF
3708#include <sys/ioctl.h>
3709#include <linux/fs.h>
3710#include <linux/fiemap.h>
3711
3712int main(void)
3713{
3714 ioctl(0, FS_IOC_FIEMAP, 0);
3715 return 0;
3716}
3717EOF
8fb03151 3718if compile_prog "" "" ; then
dace20dc
PM
3719 fiemap=yes
3720fi
3721
d0927938
UH
3722# check for dup3
3723dup3=no
3724cat > $TMPC << EOF
3725#include <unistd.h>
3726
3727int main(void)
3728{
3729 dup3(0, 0, 0);
3730 return 0;
3731}
3732EOF
78f5d726 3733if compile_prog "" "" ; then
d0927938
UH
3734 dup3=yes
3735fi
3736
4e0c6529
AB
3737# check for ppoll support
3738ppoll=no
3739cat > $TMPC << EOF
3740#include <poll.h>
3741
3742int main(void)
3743{
3744 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3745 ppoll(&pfd, 1, 0, 0);
3746 return 0;
3747}
3748EOF
3749if compile_prog "" "" ; then
3750 ppoll=yes
3751fi
3752
cd758dd0
AB
3753# check for prctl(PR_SET_TIMERSLACK , ... ) support
3754prctl_pr_set_timerslack=no
3755cat > $TMPC << EOF
3756#include <sys/prctl.h>
3757
3758int main(void)
3759{
3760 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3761 return 0;
3762}
3763EOF
3764if compile_prog "" "" ; then
3765 prctl_pr_set_timerslack=yes
3766fi
3767
3b6edd16
PM
3768# check for epoll support
3769epoll=no
3770cat > $TMPC << EOF
3771#include <sys/epoll.h>
3772
3773int main(void)
3774{
3775 epoll_create(0);
3776 return 0;
3777}
3778EOF
8fb03151 3779if compile_prog "" "" ; then
3b6edd16
PM
3780 epoll=yes
3781fi
3782
3783# epoll_create1 and epoll_pwait are later additions
3784# so we must check separately for their presence
3785epoll_create1=no
3786cat > $TMPC << EOF
3787#include <sys/epoll.h>
3788
3789int main(void)
3790{
19e83f6b
PM
3791 /* Note that we use epoll_create1 as a value, not as
3792 * a function being called. This is necessary so that on
3793 * old SPARC glibc versions where the function was present in
3794 * the library but not declared in the header file we will
3795 * fail the configure check. (Otherwise we will get a compiler
3796 * warning but not an error, and will proceed to fail the
3797 * qemu compile where we compile with -Werror.)
3798 */
c075a723 3799 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
3800}
3801EOF
8fb03151 3802if compile_prog "" "" ; then
3b6edd16
PM
3803 epoll_create1=yes
3804fi
3805
3806epoll_pwait=no
3807cat > $TMPC << EOF
3808#include <sys/epoll.h>
3809
3810int main(void)
3811{
3812 epoll_pwait(0, 0, 0, 0, 0);
3813 return 0;
3814}
3815EOF
8fb03151 3816if compile_prog "" "" ; then
3b6edd16
PM
3817 epoll_pwait=yes
3818fi
3819
a8fd1aba
PM
3820# check for sendfile support
3821sendfile=no
3822cat > $TMPC << EOF
3823#include <sys/sendfile.h>
3824
3825int main(void)
3826{
3827 return sendfile(0, 0, 0, 0);
3828}
3829EOF
3830if compile_prog "" "" ; then
3831 sendfile=yes
3832fi
3833
51834341
RV
3834# check for timerfd support (glibc 2.8 and newer)
3835timerfd=no
3836cat > $TMPC << EOF
3837#include <sys/timerfd.h>
3838
3839int main(void)
3840{
3841 return(timerfd_create(CLOCK_REALTIME, 0));
3842}
3843EOF
3844if compile_prog "" "" ; then
3845 timerfd=yes
3846fi
3847
9af5c906
RV
3848# check for setns and unshare support
3849setns=no
3850cat > $TMPC << EOF
3851#include <sched.h>
3852
3853int main(void)
3854{
3855 int ret;
3856 ret = setns(0, 0);
3857 ret = unshare(0);
3858 return ret;
3859}
3860EOF
3861if compile_prog "" "" ; then
3862 setns=yes
3863fi
3864
cc8ae6de 3865# Check if tools are available to build documentation.
a25dba17 3866if test "$docs" != "no" ; then
01668d98 3867 if has makeinfo && has pod2man; then
a25dba17 3868 docs=yes
83a3ab8b 3869 else
a25dba17 3870 if test "$docs" = "yes" ; then
21684af0 3871 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 3872 fi
a25dba17 3873 docs=no
83a3ab8b 3874 fi
cc8ae6de
PB
3875fi
3876
f514f41c 3877# Search for bswap_32 function
6ae9a1f4
JQ
3878byteswap_h=no
3879cat > $TMPC << EOF
3880#include <byteswap.h>
3881int main(void) { return bswap_32(0); }
3882EOF
52166aa0 3883if compile_prog "" "" ; then
6ae9a1f4
JQ
3884 byteswap_h=yes
3885fi
3886
75f13596 3887# Search for bswap32 function
6ae9a1f4
JQ
3888bswap_h=no
3889cat > $TMPC << EOF
3890#include <sys/endian.h>
3891#include <sys/types.h>
3892#include <machine/bswap.h>
3893int main(void) { return bswap32(0); }
3894EOF
52166aa0 3895if compile_prog "" "" ; then
6ae9a1f4
JQ
3896 bswap_h=yes
3897fi
3898
c589b249 3899##########################################
e49ab19f 3900# Do we have libiscsi >= 1.9.0
c589b249 3901if test "$libiscsi" != "no" ; then
e49ab19f 3902 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 3903 libiscsi="yes"
ca871ec8
SW
3904 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3905 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
3906 else
3907 if test "$libiscsi" = "yes" ; then
e49ab19f 3908 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
3909 fi
3910 libiscsi="no"
3911 fi
3912fi
3913
8bacde8d
NC
3914##########################################
3915# Do we need libm
3916cat > $TMPC << EOF
3917#include <math.h>
f80ea986 3918int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
3919EOF
3920if compile_prog "" "" ; then
3921 :
3922elif compile_prog "" "-lm" ; then
3923 LIBS="-lm $LIBS"
3924 libs_qga="-lm $libs_qga"
3925else
76ad07a4 3926 error_exit "libm check failed"
8bacde8d
NC
3927fi
3928
da93a1fd
AL
3929##########################################
3930# Do we need librt
8bacde8d
NC
3931# uClibc provides 2 versions of clock_gettime(), one with realtime
3932# support and one without. This means that the clock_gettime() don't
3933# need -lrt. We still need it for timer_create() so we check for this
3934# function in addition.
da93a1fd
AL
3935cat > $TMPC <<EOF
3936#include <signal.h>
3937#include <time.h>
8bacde8d
NC
3938int main(void) {
3939 timer_create(CLOCK_REALTIME, NULL, NULL);
3940 return clock_gettime(CLOCK_REALTIME, NULL);
3941}
da93a1fd
AL
3942EOF
3943
52166aa0 3944if compile_prog "" "" ; then
07ffa4bd 3945 :
8bacde8d 3946# we need pthread for static linking. use previous pthread test result
18e588b1
RL
3947elif compile_prog "" "$pthread_lib -lrt" ; then
3948 LIBS="$LIBS -lrt"
3949 libs_qga="$libs_qga -lrt"
da93a1fd
AL
3950fi
3951
31ff504d 3952if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
179cf400 3953 "$aix" != "yes" -a "$haiku" != "yes" ; then
6362a53f
JQ
3954 libs_softmmu="-lutil $libs_softmmu"
3955fi
3956
de5071c5 3957##########################################
cd4ec0b4
GH
3958# spice probe
3959if test "$spice" != "no" ; then
3960 cat > $TMPC << EOF
3961#include <spice.h>
3962int main(void) { spice_server_new(); return 0; }
3963EOF
710fc4f5
JD
3964 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3965 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
65d5d3f9
SW
3966 if $pkg_config --atleast-version=0.12.0 spice-server && \
3967 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
3968 compile_prog "$spice_cflags" "$spice_libs" ; then
3969 spice="yes"
3970 libs_softmmu="$libs_softmmu $spice_libs"
3971 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
3972 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3973 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
3974 else
3975 if test "$spice" = "yes" ; then
8efc9363
HT
3976 feature_not_found "spice" \
3977 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
3978 fi
3979 spice="no"
3980 fi
3981fi
3982
7b02f544 3983# check for smartcard support
afd347ab 3984smartcard_cflags=""
7b02f544
MAL
3985if test "$smartcard" != "no"; then
3986 if $pkg_config libcacard; then
3987 libcacard_cflags=$($pkg_config --cflags libcacard)
3988 libcacard_libs=$($pkg_config --libs libcacard)
3989 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
3990 libs_softmmu="$libs_softmmu $libcacard_libs"
3991 smartcard="yes"
afd347ab 3992 else
7b02f544
MAL
3993 if test "$smartcard" = "yes"; then
3994 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 3995 fi
7b02f544 3996 smartcard="no"
111a38b0
RR
3997 fi
3998fi
111a38b0 3999
2b2325ff
GH
4000# check for libusb
4001if test "$libusb" != "no" ; then
65d5d3f9 4002 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4003 libusb="yes"
ca871ec8
SW
4004 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4005 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4006 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4007 libs_softmmu="$libs_softmmu $libusb_libs"
4008 else
4009 if test "$libusb" = "yes"; then
8efc9363 4010 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4011 fi
4012 libusb="no"
4013 fi
4014fi
4015
69354a83
HG
4016# check for usbredirparser for usb network redirection support
4017if test "$usb_redir" != "no" ; then
65d5d3f9 4018 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4019 usb_redir="yes"
ca871ec8
SW
4020 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4021 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83 4022 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
56ab2ad1 4023 libs_softmmu="$libs_softmmu $usb_redir_libs"
69354a83
HG
4024 else
4025 if test "$usb_redir" = "yes"; then
21684af0 4026 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
4027 fi
4028 usb_redir="no"
4029 fi
4030fi
4031
d9840e25
TS
4032##########################################
4033# check if we have VSS SDK headers for win
4034
4035if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4036 case "$vss_win32_sdk" in
4037 "") vss_win32_include="-I$source_path" ;;
4038 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4039 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4040 vss_win32_include="-I$source_path/.sdk/vss"
4041 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4042 ;;
4043 *) vss_win32_include="-I$vss_win32_sdk"
4044 esac
4045 cat > $TMPC << EOF
4046#define __MIDL_user_allocate_free_DEFINED__
4047#include <inc/win2003/vss.h>
4048int main(void) { return VSS_CTX_BACKUP; }
4049EOF
4050 if compile_prog "$vss_win32_include" "" ; then
4051 guest_agent_with_vss="yes"
4052 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4053 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4054 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4055 else
4056 if test "$vss_win32_sdk" != "" ; then
4057 echo "ERROR: Please download and install Microsoft VSS SDK:"
4058 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4059 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4060 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4061 echo "ERROR: The headers are extracted in the directory \`inc'."
4062 feature_not_found "VSS support"
4063 fi
4064 guest_agent_with_vss="no"
4065 fi
4066fi
4067
4068##########################################
4069# lookup Windows platform SDK (if not specified)
4070# The SDK is needed only to build .tlb (type library) file of guest agent
4071# VSS provider from the source. It is usually unnecessary because the
4072# pre-compiled .tlb file is included.
4073
4074if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4075 if test -z "$win_sdk"; then
4076 programfiles="$PROGRAMFILES"
4077 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4078 if test -n "$programfiles"; then
4079 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4080 else
4081 feature_not_found "Windows SDK"
4082 fi
4083 elif test "$win_sdk" = "no"; then
4084 win_sdk=""
4085 fi
4086fi
4087
50cbebb9
MR
4088##########################################
4089# check if mingw environment provides a recent ntddscsi.h
4090if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4091 cat > $TMPC << EOF
4092#include <windows.h>
4093#include <ntddscsi.h>
4094int main(void) {
4095#if !defined(IOCTL_SCSI_GET_ADDRESS)
4096#error Missing required ioctl definitions
4097#endif
4098 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4099 return addr.Lun;
4100}
4101EOF
4102 if compile_prog "" "" ; then
4103 guest_agent_ntddscsi=yes
c54e1eb4 4104 libs_qga="-lsetupapi $libs_qga"
50cbebb9
MR
4105 fi
4106fi
4107
9d9e1521
GH
4108##########################################
4109# virgl renderer probe
4110
4111if test "$virglrenderer" != "no" ; then
4112 cat > $TMPC << EOF
4113#include <virglrenderer.h>
4114int main(void) { virgl_renderer_poll(); return 0; }
4115EOF
4116 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4117 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4118 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4119 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4120 virglrenderer="yes"
4121 else
4122 if test "$virglrenderer" = "yes" ; then
4123 feature_not_found "virglrenderer"
4124 fi
4125 virglrenderer="no"
4126 fi
4127fi
4128
5f6b9e8f
BS
4129##########################################
4130# check if we have fdatasync
4131
4132fdatasync=no
4133cat > $TMPC << EOF
4134#include <unistd.h>
d1722a27
AR
4135int main(void) {
4136#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4137return fdatasync(0);
4138#else
e172fe11 4139#error Not supported
d1722a27
AR
4140#endif
4141}
5f6b9e8f
BS
4142EOF
4143if compile_prog "" "" ; then
4144 fdatasync=yes
4145fi
4146
e78815a5
AF
4147##########################################
4148# check if we have madvise
4149
4150madvise=no
4151cat > $TMPC << EOF
4152#include <sys/types.h>
4153#include <sys/mman.h>
832ce9c2 4154#include <stddef.h>
e78815a5
AF
4155int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4156EOF
4157if compile_prog "" "" ; then
4158 madvise=yes
4159fi
4160
4161##########################################
4162# check if we have posix_madvise
4163
4164posix_madvise=no
4165cat > $TMPC << EOF
4166#include <sys/mman.h>
832ce9c2 4167#include <stddef.h>
e78815a5
AF
4168int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4169EOF
4170if compile_prog "" "" ; then
4171 posix_madvise=yes
4172fi
4173
1e9737da
RH
4174##########################################
4175# check if we have usable SIGEV_THREAD_ID
4176
4177sigev_thread_id=no
4178cat > $TMPC << EOF
4179#include <signal.h>
4180int main(void) {
4181 struct sigevent ev;
4182 ev.sigev_notify = SIGEV_THREAD_ID;
4183 ev._sigev_un._tid = 0;
4184 asm volatile("" : : "g"(&ev));
4185 return 0;
4186}
4187EOF
4188if compile_prog "" "" ; then
4189 sigev_thread_id=yes
4190fi
4191
94a420b1
SH
4192##########################################
4193# check if trace backend exists
4194
5b808275 4195$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4196if test "$?" -ne 0 ; then
5b808275
LV
4197 error_exit "invalid trace backends" \
4198 "Please choose supported trace backends."
94a420b1
SH
4199fi
4200
7e24e92a
SH
4201##########################################
4202# For 'ust' backend, test if ust headers are present
5b808275 4203if have_backend "ust"; then
7e24e92a 4204 cat > $TMPC << EOF
bf15f63c 4205#include <lttng/tracepoint.h>
7e24e92a
SH
4206int main(void) { return 0; }
4207EOF
4208 if compile_prog "" "" ; then
bf15f63c
MG
4209 if $pkg_config lttng-ust --exists; then
4210 lttng_ust_libs=`$pkg_config --libs lttng-ust`
4211 else
4212 lttng_ust_libs="-llttng-ust"
4213 fi
4214 if $pkg_config liburcu-bp --exists; then
4215 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4216 else
4217 urcu_bp_libs="-lurcu-bp"
4218 fi
4219
4220 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4221 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 4222 else
bf15f63c 4223 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4224 fi
4225fi
b3d08c02
DB
4226
4227##########################################
4228# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4229if have_backend "dtrace"; then
b3d08c02 4230 if ! has 'dtrace' ; then
76ad07a4 4231 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4232 fi
c276b17d
DB
4233 trace_backend_stap="no"
4234 if has 'stap' ; then
4235 trace_backend_stap="yes"
4236 fi
b3d08c02
DB
4237fi
4238
023367e6 4239##########################################
519175a2 4240# check and set a backend for coroutine
d0e2fce5 4241
7c2acc70
PM
4242# We prefer ucontext, but it's not always possible. The fallback
4243# is sigcontext. gthread is not selectable except explicitly, because
4244# it is not functional enough to run QEMU proper. (It is occasionally
4245# useful for debugging purposes.) On Windows the only valid backend
4246# is the Windows-specific one.
4247
4248ucontext_works=no
4249if test "$darwin" != "yes"; then
4250 cat > $TMPC << EOF
d0e2fce5 4251#include <ucontext.h>
cdf84806
PM
4252#ifdef __stub_makecontext
4253#error Ignoring glibc stub makecontext which will always fail
4254#endif
75cafad7 4255int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4256EOF
7c2acc70
PM
4257 if compile_prog "" "" ; then
4258 ucontext_works=yes
4259 fi
4260fi
4261
4262if test "$coroutine" = ""; then
4263 if test "$mingw32" = "yes"; then
4264 coroutine=win32
4265 elif test "$ucontext_works" = "yes"; then
4266 coroutine=ucontext
4267 else
4268 coroutine=sigaltstack
d0e2fce5 4269 fi
519175a2 4270else
7c2acc70
PM
4271 case $coroutine in
4272 windows)
4273 if test "$mingw32" != "yes"; then
4274 error_exit "'windows' coroutine backend only valid for Windows"
4275 fi
4276 # Unfortunately the user visible backend name doesn't match the
4277 # coroutine-*.c filename for this case, so we have to adjust it here.
4278 coroutine=win32
4279 ;;
4280 ucontext)
4281 if test "$ucontext_works" != "yes"; then
4282 feature_not_found "ucontext"
4283 fi
4284 ;;
4285 gthread|sigaltstack)
4286 if test "$mingw32" = "yes"; then
4287 error_exit "only the 'windows' coroutine backend is valid for Windows"
4288 fi
4289 ;;
4290 *)
4291 error_exit "unknown coroutine backend $coroutine"
4292 ;;
4293 esac
d0e2fce5
AK
4294fi
4295
70c60c08
SH
4296if test "$coroutine_pool" = ""; then
4297 if test "$coroutine" = "gthread"; then
4298 coroutine_pool=no
4299 else
4300 coroutine_pool=yes
4301 fi
4302fi
4303if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4304 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4305fi
4306
d2042378
AK
4307##########################################
4308# check if we have open_by_handle_at
4309
4e1797f9 4310open_by_handle_at=no
d2042378
AK
4311cat > $TMPC << EOF
4312#include <fcntl.h>
acc55ba8
SW
4313#if !defined(AT_EMPTY_PATH)
4314# error missing definition
4315#else
75cafad7 4316int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4317#endif
d2042378
AK
4318EOF
4319if compile_prog "" "" ; then
4320 open_by_handle_at=yes
4321fi
4322
e06a765e
HPB
4323########################################
4324# check if we have linux/magic.h
4325
4326linux_magic_h=no
4327cat > $TMPC << EOF
4328#include <linux/magic.h>
4329int main(void) {
75cafad7 4330 return 0;
e06a765e
HPB
4331}
4332EOF
4333if compile_prog "" "" ; then
4334 linux_magic_h=yes
4335fi
4336
06d71fa1 4337########################################
c95e3080
KW
4338# check whether we can disable warning option with a pragma (this is needed
4339# to silence warnings in the headers of some versions of external libraries).
4340# This test has to be compiled with -Werror as otherwise an unknown pragma is
4341# only a warning.
4342#
4343# If we can't selectively disable warning in the code, disable -Werror so that
4344# the build doesn't fail anyway.
4345
06d71fa1
PM
4346pragma_disable_unused_but_set=no
4347cat > $TMPC << EOF
e6f53fd5 4348#pragma GCC diagnostic push
06d71fa1 4349#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
c95e3080 4350#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 4351#pragma GCC diagnostic pop
c95e3080 4352
06d71fa1
PM
4353int main(void) {
4354 return 0;
4355}
4356EOF
4357if compile_prog "-Werror" "" ; then
cc6e3ca9 4358 pragma_diagnostic_available=yes
c95e3080
KW
4359else
4360 werror=no
06d71fa1
PM
4361fi
4362
3f4349dc 4363########################################
541be927 4364# check if we have valgrind/valgrind.h
3f4349dc
KW
4365
4366valgrind_h=no
4367cat > $TMPC << EOF
4368#include <valgrind/valgrind.h>
3f4349dc 4369int main(void) {
3f4349dc
KW
4370 return 0;
4371}
4372EOF
4373if compile_prog "" "" ; then
4374 valgrind_h=yes
4375fi
4376
8ab1bf12
LC
4377########################################
4378# check if environ is declared
4379
4380has_environ=no
4381cat > $TMPC << EOF
4382#include <unistd.h>
4383int main(void) {
c075a723 4384 environ = 0;
8ab1bf12
LC
4385 return 0;
4386}
4387EOF
4388if compile_prog "" "" ; then
4389 has_environ=yes
4390fi
4391
76a347e1
RH
4392########################################
4393# check if cpuid.h is usable.
4394
4395cpuid_h=no
4396cat > $TMPC << EOF
4397#include <cpuid.h>
4398int main(void) {
774d566c
PM
4399 unsigned a, b, c, d;
4400 int max = __get_cpuid_max(0, 0);
4401
4402 if (max >= 1) {
4403 __cpuid(1, a, b, c, d);
4404 }
4405
4406 if (max >= 7) {
4407 __cpuid_count(7, 0, a, b, c, d);
4408 }
4409
4410 return 0;
76a347e1
RH
4411}
4412EOF
4413if compile_prog "" "" ; then
4414 cpuid_h=yes
4415fi
4416
f540166b
RH
4417########################################
4418# check if __[u]int128_t is usable.
4419
4420int128=no
4421cat > $TMPC << EOF
a00f66ab
SW
4422#if defined(__clang_major__) && defined(__clang_minor__)
4423# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4424# error __int128_t does not work in CLANG before 3.2
4425# endif
4426#endif
f540166b
RH
4427__int128_t a;
4428__uint128_t b;
4429int main (void) {
4430 a = a + b;
4431 b = a * b;
464e3671 4432 a = a * a;
f540166b
RH
4433 return 0;
4434}
4435EOF
4436if compile_prog "" "" ; then
4437 int128=yes
4438fi
76a347e1 4439
1e6e9aca
RH
4440########################################
4441# check if getauxval is available.
4442
4443getauxval=no
4444cat > $TMPC << EOF
4445#include <sys/auxv.h>
4446int main(void) {
4447 return getauxval(AT_HWCAP) == 0;
4448}
4449EOF
4450if compile_prog "" "" ; then
4451 getauxval=yes
4452fi
4453
fd0e6053
JS
4454########################################
4455# check if ccache is interfering with
4456# semantic analysis of macros
4457
5e4dfd3d 4458unset CCACHE_CPP2
fd0e6053
JS
4459ccache_cpp2=no
4460cat > $TMPC << EOF
4461static const int Z = 1;
4462#define fn() ({ Z; })
4463#define TAUT(X) ((X) == Z)
4464#define PAREN(X, Y) (X == Y)
4465#define ID(X) (X)
4466int main(int argc, char *argv[])
4467{
4468 int x = 0, y = 0;
4469 x = ID(x);
4470 x = fn();
4471 fn();
4472 if (PAREN(x, y)) return 0;
4473 if (TAUT(Z)) return 0;
4474 return 0;
4475}
4476EOF
4477
4478if ! compile_object "-Werror"; then
4479 ccache_cpp2=yes
4480fi
4481
b553a042
JS
4482#################################################
4483# clang does not support glibc + FORTIFY_SOURCE.
4484
4485if test "$fortify_source" != "no"; then
4486 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4487 fortify_source="no";
cfcc7c14
JS
4488 elif test -n "$cxx" &&
4489 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
4490 fortify_source="no";
4491 else
4492 fortify_source="yes"
4493 fi
4494fi
4495
7e24e92a 4496##########################################
e86ecd4b
JQ
4497# End of CC checks
4498# After here, no more $cc or $ld runs
4499
1d728c39
BS
4500if test "$gcov" = "yes" ; then
4501 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4502 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
b553a042 4503elif test "$fortify_source" = "yes" ; then
e600cdf3 4504 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
ce278618
PM
4505elif test "$debug" = "no"; then
4506 CFLAGS="-O2 $CFLAGS"
e86ecd4b 4507fi
a316e378 4508
6542aa9c
PL
4509##########################################
4510# Do we have libnfs
4511if test "$libnfs" != "no" ; then
b7d769c9 4512 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
4513 libnfs="yes"
4514 libnfs_libs=$($pkg_config --libs libnfs)
4515 LIBS="$LIBS $libnfs_libs"
4516 else
4517 if test "$libnfs" = "yes" ; then
8efc9363 4518 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
4519 fi
4520 libnfs="no"
4521 fi
4522fi
1d728c39 4523
20ff6c80
AL
4524# Disable zero malloc errors for official releases unless explicitly told to
4525# enable/disable
4526if test -z "$zero_malloc" ; then
4527 if test "$z_version" = "50" ; then
4528 zero_malloc="no"
4529 else
4530 zero_malloc="yes"
4531 fi
4532fi
4533
6ca026cb
PM
4534# Now we've finished running tests it's OK to add -Werror to the compiler flags
4535if test "$werror" = "yes"; then
4536 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4537fi
4538
e86ecd4b
JQ
4539if test "$solaris" = "no" ; then
4540 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 4541 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
4542 fi
4543fi
4544
94dd53c5
GH
4545# test if pod2man has --utf8 option
4546if pod2man --help | grep -q utf8; then
4547 POD2MAN="pod2man --utf8"
4548else
4549 POD2MAN="pod2man"
4550fi
4551
952afb71
BS
4552# Use ASLR, no-SEH and DEP if available
4553if test "$mingw32" = "yes" ; then
4554 for flag in --dynamicbase --no-seh --nxcompat; do
4555 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4556 LDFLAGS="-Wl,$flag $LDFLAGS"
4557 fi
4558 done
4559fi
4560
10ea68b3 4561qemu_confdir=$sysconfdir$confsuffix
e26110cf 4562qemu_moddir=$libdir$confsuffix
528ae5b8 4563qemu_datadir=$datadir$confsuffix
834574ea 4564qemu_localedir="$datadir/locale"
e7b45cc4 4565
4b1c11fd
DB
4566tools=""
4567if test "$want_tools" = "yes" ; then
ca35f780 4568 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
4569 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4570 tools="qemu-nbd\$(EXESUF) $tools"
a75eb03b 4571 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd
DB
4572 fi
4573fi
4574if test "$softmmu" = yes ; then
983eef5a 4575 if test "$virtfs" != no ; then
aabfd88d
AF
4576 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4577 virtfs=yes
4578 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4579 else
4580 if test "$virtfs" = yes; then
76ad07a4 4581 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
983eef5a 4582 fi
17500370 4583 virtfs=no
aabfd88d 4584 fi
17bff52b 4585 fi
e8ef31a3 4586fi
9d6bc27b
MR
4587
4588# Probe for guest agent support/options
4589
e8ef31a3 4590if [ "$guest_agent" != "no" ]; then
b39297ae 4591 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 4592 tools="qemu-ga $tools"
e8ef31a3
MT
4593 guest_agent=yes
4594 elif [ "$guest_agent" != yes ]; then
4595 guest_agent=no
4596 else
4597 error_exit "Guest agent is not supported on this platform"
ca35f780 4598 fi
00c705fb 4599fi
ca35f780 4600
9d6bc27b
MR
4601# Guest agent Window MSI package
4602
4603if test "$guest_agent" != yes; then
4604 if test "$guest_agent_msi" = yes; then
4605 error_exit "MSI guest agent package requires guest agent enabled"
4606 fi
4607 guest_agent_msi=no
4608elif test "$mingw32" != "yes"; then
4609 if test "$guest_agent_msi" = "yes"; then
4610 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4611 fi
4612 guest_agent_msi=no
4613elif ! has wixl; then
4614 if test "$guest_agent_msi" = "yes"; then
4615 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4616 fi
4617 guest_agent_msi=no
1a34904e
MR
4618else
4619 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4620 # disabled explicitly
4621 if test "$guest_agent_msi" != "no"; then
4622 guest_agent_msi=yes
4623 fi
9d6bc27b
MR
4624fi
4625
1a34904e 4626if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
4627 if test "$guest_agent_with_vss" = "yes"; then
4628 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4629 fi
4630
4631 if test "$QEMU_GA_MANUFACTURER" = ""; then
4632 QEMU_GA_MANUFACTURER=QEMU
4633 fi
4634
4635 if test "$QEMU_GA_DISTRO" = ""; then
4636 QEMU_GA_DISTRO=Linux
4637 fi
4638
4639 if test "$QEMU_GA_VERSION" = ""; then
4640 QEMU_GA_VERSION=`cat $source_path/VERSION`
4641 fi
4642
4643 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
4644
4645 case "$cpu" in
4646 x86_64)
4647 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4648 ;;
4649 i386)
4650 QEMU_GA_MSI_ARCH="-D Arch=32"
4651 ;;
4652 *)
4653 error_exit "CPU $cpu not supported for building installation package"
4654 ;;
4655 esac
4656fi
4657
ca35f780
PB
4658# Mac OS X ships with a broken assembler
4659roms=
4660if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4661 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4662 "$softmmu" = yes ; then
4663 roms="optionrom"
4664fi
d0384d1d 4665if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
4666 roms="$roms spapr-rtas"
4667fi
ca35f780 4668
9933c305
CB
4669if test "$cpu" = "s390x" ; then
4670 roms="$roms s390-ccw"
4671fi
4672
964c6fa1
RH
4673# Probe for the need for relocating the user-only binary.
4674if test "$pie" = "no" ; then
4675 textseg_addr=
4676 case "$cpu" in
479eb121
RH
4677 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4678 # ??? Rationale for choosing this address
964c6fa1
RH
4679 textseg_addr=0x60000000
4680 ;;
4681 mips)
479eb121
RH
4682 # A 256M aligned address, high in the address space, with enough
4683 # room for the code_gen_buffer above it before the stack.
4684 textseg_addr=0x60000000
964c6fa1
RH
4685 ;;
4686 esac
4687 if [ -n "$textseg_addr" ]; then
4688 cat > $TMPC <<EOF
4689 int main(void) { return 0; }
4690EOF
4691 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4692 if ! compile_prog "" "$textseg_ldflags"; then
4693 # In case ld does not support -Ttext-segment, edit the default linker
4694 # script via sed to set the .text start addr. This is needed on FreeBSD
4695 # at least.
4696 $ld --verbose | sed \
4697 -e '1,/==================================================/d' \
4698 -e '/==================================================/,$d' \
4699 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4700 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4701 textseg_ldflags="-Wl,-T../config-host.ld"
4702 fi
4703 fi
4704fi
4705
50e12060
JK
4706# prepend pixman and ftd flags after all config tests are done
4707QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4708libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 4709
43ce4dfe 4710echo "Install prefix $prefix"
c00b2808 4711echo "BIOS directory `eval echo $qemu_datadir`"
f2b9e1e3 4712echo "binary directory `eval echo $bindir`"
3aa5d2be 4713echo "library directory `eval echo $libdir`"
e26110cf 4714echo "module directory `eval echo $qemu_moddir`"
8bf188aa 4715echo "libexec directory `eval echo $libexecdir`"
0f94d6da 4716echo "include directory `eval echo $includedir`"
1c0fd160 4717echo "config directory `eval echo $sysconfdir`"
11d9f695 4718if test "$mingw32" = "no" ; then
5a699bbb 4719echo "local state directory `eval echo $local_statedir`"
f2b9e1e3 4720echo "Manual directory `eval echo $mandir`"
43ce4dfe 4721echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
4722else
4723echo "local state directory queried at runtime"
d9840e25 4724echo "Windows SDK $win_sdk"
11d9f695 4725fi
5a67135a 4726echo "Source path $source_path"
43ce4dfe 4727echo "C compiler $cc"
83469015 4728echo "Host C compiler $host_cc"
83f73fce 4729echo "C++ compiler $cxx"
3c4a4d0d 4730echo "Objective-C compiler $objcc"
45d285ab 4731echo "ARFLAGS $ARFLAGS"
0c439cbf 4732echo "CFLAGS $CFLAGS"
a558ee17 4733echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 4734echo "LDFLAGS $LDFLAGS"
43ce4dfe 4735echo "make $make"
6a882643 4736echo "install $install"
c886edfb 4737echo "python $python"
e2d8830e
BS
4738if test "$slirp" = "yes" ; then
4739 echo "smbd $smbd"
4740fi
17969268 4741echo "module support $modules"
43ce4dfe 4742echo "host CPU $cpu"
de83cd02 4743echo "host big endian $bigendian"
97a847bc 4744echo "target list $target_list"
ade25b0d 4745echo "tcg debug enabled $debug_tcg"
43ce4dfe 4746echo "gprof enabled $gprof"
03b4fe7d 4747echo "sparse enabled $sparse"
1625af87 4748echo "strip binaries $strip_opt"
05c2a3e7 4749echo "profiler $profiler"
43ce4dfe 4750echo "static build $static"
5b0753e0
FB
4751if test "$darwin" = "yes" ; then
4752 echo "Cocoa support $cocoa"
4753fi
e2134eb9 4754echo "pixman $pixman"
97a847bc 4755echo "SDL support $sdl"
a4ccabcf 4756echo "GTK support $gtk"
925a0400 4757echo "GTK GL support $gtk_gl"
ddbb0d09
DB
4758echo "GNUTLS support $gnutls"
4759echo "GNUTLS hash $gnutls_hash"
91bfcdb0
DB
4760echo "libgcrypt $gcrypt"
4761echo "nettle $nettle ${nettle+($nettle_version)}"
9a2fd434 4762echo "libtasn1 $tasn1"
bbbf9bfb 4763echo "VTE support $vte"
4d3b6f6e 4764echo "curses support $curses"
9d9e1521 4765echo "virgl support $virglrenderer"
769ce76d 4766echo "curl support $curl"
67b915a5 4767echo "mingw32 support $mingw32"
0c58ac1c 4768echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
4769echo "Block whitelist (rw) $block_drv_rw_whitelist"
4770echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 4771echo "VirtFS support $virtfs"
821601ea
JS
4772echo "VNC support $vnc"
4773if test "$vnc" = "yes" ; then
821601ea
JS
4774 echo "VNC SASL support $vnc_sasl"
4775 echo "VNC JPEG support $vnc_jpeg"
4776 echo "VNC PNG support $vnc_png"
821601ea 4777fi
3142255c
BS
4778if test -n "$sparc_cpu"; then
4779 echo "Target Sparc Arch $sparc_cpu"
4780fi
e37630ca 4781echo "xen support $xen"
3996e85c
PD
4782if test "$xen" = "yes" ; then
4783 echo "xen ctrl version $xen_ctrl_version"
4784fi
2e4d9fb1 4785echo "brlapi support $brlapi"
a20a6f46 4786echo "bluez support $bluez"
a25dba17 4787echo "Documentation $docs"
40d6444e 4788echo "PIE $pie"
8a16d273 4789echo "vde support $vde"
58952137 4790echo "netmap support $netmap"
5c6c3a6c 4791echo "Linux AIO support $linux_aio"
758e8e38 4792echo "ATTR/XATTR support $attr"
77755340 4793echo "Install blobs $blobs"
b31a0277 4794echo "KVM support $kvm"
2da776db 4795echo "RDMA support $rdma"
9195b2c2 4796echo "TCG interpreter $tcg_interpreter"
f652e6af 4797echo "fdt support $fdt"
ceb42de8 4798echo "preadv support $preadv"
5f6b9e8f 4799echo "fdatasync $fdatasync"
e78815a5
AF
4800echo "madvise $madvise"
4801echo "posix_madvise $posix_madvise"
1e9737da 4802echo "sigev_thread_id $sigev_thread_id"
ee682d27 4803echo "uuid support $uuid"
47e98658 4804echo "libcap-ng support $cap_ng"
d5970055 4805echo "vhost-net support $vhost_net"
5e9be92d 4806echo "vhost-scsi support $vhost_scsi"
5b808275 4807echo "Trace backends $trace_backends"
e00e36fb 4808if test "$trace_backend" = "simple"; then
9410b56c 4809echo "Trace output file $trace_file-<pid>"
e00e36fb 4810fi
c9dd4074 4811if test "$spice" = "yes"; then
2e0e3c39 4812echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
c9dd4074
SW
4813else
4814echo "spice support $spice"
4815fi
f27aaf4b 4816echo "rbd support $rbd"
dce512de 4817echo "xfsctl support $xfs"
7b02f544 4818echo "smartcard support $smartcard"
2b2325ff 4819echo "libusb $libusb"
69354a83 4820echo "usb net redir $usb_redir"
da076ffe 4821echo "OpenGL support $opengl"
c589b249 4822echo "libiscsi support $libiscsi"
6542aa9c 4823echo "libnfs support $libnfs"
d138cee9 4824echo "build guest agent $guest_agent"
d9840e25 4825echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 4826echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 4827echo "QGA MSI support $guest_agent_msi"
f794573e 4828echo "seccomp support $seccomp"
7c2acc70 4829echo "coroutine backend $coroutine"
70c60c08 4830echo "coroutine pool $coroutine_pool"
eb100396 4831echo "GlusterFS support $glusterfs"
c9a12e75 4832echo "Archipelago support $archipelago"
1d728c39
BS
4833echo "gcov $gcov_tool"
4834echo "gcov enabled $gcov"
ab214c29 4835echo "TPM support $tpm"
0a12ec87 4836echo "libssh2 support $libssh2"
3b8acc11 4837echo "TPM passthrough $tpm_passthrough"
3556c233 4838echo "QOM debugging $qom_cast_debug"
4f18b782 4839echo "vhdx $vhdx"
607dacd0
QN
4840echo "lzo support $lzo"
4841echo "snappy support $snappy"
6b383c08 4842echo "bzip2 support $bzip2"
a99d57bb 4843echo "NUMA host support $numa"
2847b469 4844echo "tcmalloc support $tcmalloc"
7b01cb97 4845echo "jemalloc support $jemalloc"
67b915a5 4846
1ba16968 4847if test "$sdl_too_old" = "yes"; then
24b55b96 4848echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 4849fi
7d13299d 4850
98ec69ac 4851config_host_mak="config-host.mak"
98ec69ac 4852
dbd99ae3
SW
4853echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4854
98ec69ac 4855echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 4856echo >> $config_host_mak
98ec69ac 4857
e6c3b0f7 4858echo all: >> $config_host_mak
99d7cc75
PB
4859echo "prefix=$prefix" >> $config_host_mak
4860echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 4861echo "libdir=$libdir" >> $config_host_mak
8bf188aa 4862echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 4863echo "includedir=$includedir" >> $config_host_mak
99d7cc75 4864echo "mandir=$mandir" >> $config_host_mak
99d7cc75 4865echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 4866echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce
EH
4867echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4868echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 4869echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
4870if test "$mingw32" = "no" ; then
4871 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4872fi
f354b1a1 4873echo "qemu_helperdir=$libexecdir" >> $config_host_mak
f9943cd5
GH
4874echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4875echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
834574ea 4876echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 4877echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
804edf29 4878
98ec69ac 4879echo "ARCH=$ARCH" >> $config_host_mak
727e5283 4880
f8393946 4881if test "$debug_tcg" = "yes" ; then
2358a494 4882 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 4883fi
1625af87 4884if test "$strip_opt" = "yes" ; then
52ba784d 4885 echo "STRIP=${strip}" >> $config_host_mak
1625af87 4886fi
7d13299d 4887if test "$bigendian" = "yes" ; then
e2542fe2 4888 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 4889fi
67b915a5 4890if test "$mingw32" = "yes" ; then
98ec69ac 4891 echo "CONFIG_WIN32=y" >> $config_host_mak
9fe6de94
BS
4892 rc_version=`cat $source_path/VERSION`
4893 version_major=${rc_version%%.*}
4894 rc_version=${rc_version#*.}
4895 version_minor=${rc_version%%.*}
4896 rc_version=${rc_version#*.}
4897 version_subminor=${rc_version%%.*}
4898 version_micro=0
4899 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4900 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
4901 if test "$guest_agent_with_vss" = "yes" ; then
4902 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 4903 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
4904 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4905 fi
50cbebb9
MR
4906 if test "$guest_agent_ntddscsi" = "yes" ; then
4907 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4908 fi
1a34904e 4909 if test "$guest_agent_msi" = "yes"; then
9dacf32d
YH
4910 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4911 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4912 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4913 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4914 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4915 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4916 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4917 fi
210fa556 4918else
35f4df27 4919 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
4920fi
4921
4922if test "$linux" = "yes" ; then
4923 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 4924fi
128ab2ff 4925
83fb7adf 4926if test "$darwin" = "yes" ; then
98ec69ac 4927 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 4928fi
b29fe3ed 4929
4930if test "$aix" = "yes" ; then
98ec69ac 4931 echo "CONFIG_AIX=y" >> $config_host_mak
b29fe3ed 4932fi
4933
ec530c81 4934if test "$solaris" = "yes" ; then
98ec69ac 4935 echo "CONFIG_SOLARIS=y" >> $config_host_mak
2358a494 4936 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
0475a5ca 4937 if test "$needs_libsunmath" = "yes" ; then
75b5a697 4938 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
0475a5ca 4939 fi
ec530c81 4940fi
179cf400
AF
4941if test "$haiku" = "yes" ; then
4942 echo "CONFIG_HAIKU=y" >> $config_host_mak
4943fi
97a847bc 4944if test "$static" = "yes" ; then
98ec69ac 4945 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 4946fi
1ba16968 4947if test "$profiler" = "yes" ; then
2358a494 4948 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 4949fi
c20709aa 4950if test "$slirp" = "yes" ; then
98ec69ac 4951 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 4952 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 4953fi
8a16d273 4954if test "$vde" = "yes" ; then
98ec69ac 4955 echo "CONFIG_VDE=y" >> $config_host_mak
8a16d273 4956fi
58952137
VM
4957if test "$netmap" = "yes" ; then
4958 echo "CONFIG_NETMAP=y" >> $config_host_mak
4959fi
015a33bd
GA
4960if test "$l2tpv3" = "yes" ; then
4961 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4962fi
47e98658
CB
4963if test "$cap_ng" = "yes" ; then
4964 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4965fi
2358a494 4966echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 4967for drv in $audio_drv_list; do
bb55b712 4968 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
98ec69ac 4969 echo "$def=y" >> $config_host_mak
0c58ac1c 4970done
67f86e8e
JQ
4971if test "$audio_pt_int" = "yes" ; then
4972 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4973fi
d5631638 4974if test "$audio_win_int" = "yes" ; then
4975 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4976fi
b64ec4e4
FZ
4977echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4978echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
4979if test "$vnc" = "yes" ; then
4980 echo "CONFIG_VNC=y" >> $config_host_mak
4981fi
2f9606b3 4982if test "$vnc_sasl" = "yes" ; then
98ec69ac 4983 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 4984fi
821601ea 4985if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 4986 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 4987fi
821601ea 4988if test "$vnc_png" = "yes" ; then
efe556ad 4989 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 4990fi
76655d6d 4991if test "$fnmatch" = "yes" ; then
2358a494 4992 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 4993fi
ee682d27
SW
4994if test "$uuid" = "yes" ; then
4995 echo "CONFIG_UUID=y" >> $config_host_mak
4996fi
dce512de
CH
4997if test "$xfs" = "yes" ; then
4998 echo "CONFIG_XFS=y" >> $config_host_mak
4999fi
b1a550a0 5000qemu_version=`head $source_path/VERSION`
98ec69ac 5001echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 5002echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 5003echo "SRC_PATH=$source_path" >> $config_host_mak
98ec69ac 5004echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 5005if [ "$docs" = "yes" ] ; then
98ec69ac 5006 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 5007fi
17969268 5008if test "$modules" = "yes"; then
e26110cf
FZ
5009 # $shacmd can generate a hash started with digit, which the compiler doesn't
5010 # like as an symbol. So prefix it with an underscore
5011 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
17969268
FZ
5012 echo "CONFIG_MODULES=y" >> $config_host_mak
5013fi
1ac88f28 5014if test "$sdl" = "yes" ; then
98ec69ac 5015 echo "CONFIG_SDL=y" >> $config_host_mak
a3f4d63d 5016 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 5017 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
49ecc3fa
FB
5018fi
5019if test "$cocoa" = "yes" ; then
98ec69ac 5020 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
5021fi
5022if test "$curses" = "yes" ; then
98ec69ac 5023 echo "CONFIG_CURSES=y" >> $config_host_mak
49ecc3fa 5024fi
ebc996f3 5025if test "$utimens" = "yes" ; then
2358a494 5026 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
ebc996f3 5027fi
099d6b0f 5028if test "$pipe2" = "yes" ; then
2358a494 5029 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 5030fi
40ff6d7e
KW
5031if test "$accept4" = "yes" ; then
5032 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5033fi
3ce34dfb 5034if test "$splice" = "yes" ; then
2358a494 5035 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 5036fi
c2882b96
RV
5037if test "$eventfd" = "yes" ; then
5038 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5039fi
751bcc39
MAL
5040if test "$memfd" = "yes" ; then
5041 echo "CONFIG_MEMFD=y" >> $config_host_mak
5042fi
d0927938
UH
5043if test "$fallocate" = "yes" ; then
5044 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5045fi
3d4fa43e
KK
5046if test "$fallocate_punch_hole" = "yes" ; then
5047 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5048fi
b953f075
DL
5049if test "$fallocate_zero_range" = "yes" ; then
5050 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5051fi
ed911435
KW
5052if test "$posix_fallocate" = "yes" ; then
5053 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5054fi
c727f47d
PM
5055if test "$sync_file_range" = "yes" ; then
5056 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5057fi
dace20dc
PM
5058if test "$fiemap" = "yes" ; then
5059 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5060fi
d0927938
UH
5061if test "$dup3" = "yes" ; then
5062 echo "CONFIG_DUP3=y" >> $config_host_mak
5063fi
4e0c6529
AB
5064if test "$ppoll" = "yes" ; then
5065 echo "CONFIG_PPOLL=y" >> $config_host_mak
5066fi
cd758dd0
AB
5067if test "$prctl_pr_set_timerslack" = "yes" ; then
5068 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5069fi
3b6edd16
PM
5070if test "$epoll" = "yes" ; then
5071 echo "CONFIG_EPOLL=y" >> $config_host_mak
5072fi
5073if test "$epoll_create1" = "yes" ; then
5074 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5075fi
5076if test "$epoll_pwait" = "yes" ; then
5077 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
5078fi
a8fd1aba
PM
5079if test "$sendfile" = "yes" ; then
5080 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5081fi
51834341
RV
5082if test "$timerfd" = "yes" ; then
5083 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5084fi
9af5c906
RV
5085if test "$setns" = "yes" ; then
5086 echo "CONFIG_SETNS=y" >> $config_host_mak
5087fi
3b3f24ad 5088if test "$inotify" = "yes" ; then
2358a494 5089 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 5090fi
c05c7a73
RV
5091if test "$inotify1" = "yes" ; then
5092 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5093fi
6ae9a1f4
JQ
5094if test "$byteswap_h" = "yes" ; then
5095 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5096fi
5097if test "$bswap_h" = "yes" ; then
5098 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5099fi
769ce76d 5100if test "$curl" = "yes" ; then
d3399d7c 5101 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 5102 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 5103 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 5104fi
2e4d9fb1 5105if test "$brlapi" = "yes" ; then
98ec69ac 5106 echo "CONFIG_BRLAPI=y" >> $config_host_mak
2e4d9fb1 5107fi
fb599c9a 5108if test "$bluez" = "yes" ; then
98ec69ac 5109 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 5110 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 5111fi
d46f7c9e 5112if test "$glib_subprocess" = "yes" ; then
9d41401b
MT
5113 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5114fi
e18df141 5115echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
a4ccabcf
AL
5116if test "$gtk" = "yes" ; then
5117 echo "CONFIG_GTK=y" >> $config_host_mak
a3f4d63d 5118 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 5119 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
925a0400
GH
5120 if test "$gtk_gl" = "yes" ; then
5121 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5122 fi
bbbf9bfb 5123fi
ddbb0d09
DB
5124if test "$gnutls" = "yes" ; then
5125 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5126fi
5127if test "$gnutls_hash" = "yes" ; then
5128 echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
5129fi
91bfcdb0
DB
5130if test "$gcrypt" = "yes" ; then
5131 echo "CONFIG_GCRYPT=y" >> $config_host_mak
62893b67 5132fi
91bfcdb0
DB
5133if test "$nettle" = "yes" ; then
5134 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 5135 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
ed754746 5136fi
9a2fd434
DB
5137if test "$tasn1" = "yes" ; then
5138 echo "CONFIG_TASN1=y" >> $config_host_mak
5139fi
bbbf9bfb
SW
5140if test "$vte" = "yes" ; then
5141 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf
AL
5142 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5143fi
9d9e1521
GH
5144if test "$virglrenderer" = "yes" ; then
5145 echo "CONFIG_VIRGL=y" >> $config_host_mak
5146 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5147 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5148fi
e37630ca 5149if test "$xen" = "yes" ; then
6dbd588a 5150 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 5151 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
e37630ca 5152fi
5c6c3a6c
CH
5153if test "$linux_aio" = "yes" ; then
5154 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5155fi
758e8e38
VJ
5156if test "$attr" = "yes" ; then
5157 echo "CONFIG_ATTR=y" >> $config_host_mak
5158fi
4f26f2b6
AK
5159if test "$libattr" = "yes" ; then
5160 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5161fi
983eef5a
MI
5162if test "$virtfs" = "yes" ; then
5163 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 5164fi
5e9be92d
NB
5165if test "$vhost_scsi" = "yes" ; then
5166 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5167fi
03ce5744
NN
5168if test "$vhost_net" = "yes" ; then
5169 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5170fi
77755340 5171if test "$blobs" = "yes" ; then
98ec69ac 5172 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 5173fi
bf9298b9 5174if test "$iovec" = "yes" ; then
2358a494 5175 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 5176fi
ceb42de8 5177if test "$preadv" = "yes" ; then
2358a494 5178 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 5179fi
f652e6af 5180if test "$fdt" = "yes" ; then
3f0855b1 5181 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 5182fi
dcc38d1c
MT
5183if test "$signalfd" = "yes" ; then
5184 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5185fi
9195b2c2
SW
5186if test "$tcg_interpreter" = "yes" ; then
5187 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5188fi
5f6b9e8f
BS
5189if test "$fdatasync" = "yes" ; then
5190 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5191fi
e78815a5
AF
5192if test "$madvise" = "yes" ; then
5193 echo "CONFIG_MADVISE=y" >> $config_host_mak
5194fi
5195if test "$posix_madvise" = "yes" ; then
5196 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5197fi
1e9737da
RH
5198if test "$sigev_thread_id" = "yes" ; then
5199 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
5200fi
97a847bc 5201
cd4ec0b4
GH
5202if test "$spice" = "yes" ; then
5203 echo "CONFIG_SPICE=y" >> $config_host_mak
5204fi
36707144 5205
7b02f544
MAL
5206if test "$smartcard" = "yes" ; then
5207 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
111a38b0
RR
5208fi
5209
2b2325ff
GH
5210if test "$libusb" = "yes" ; then
5211 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5212fi
5213
69354a83
HG
5214if test "$usb_redir" = "yes" ; then
5215 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5216fi
5217
da076ffe
GH
5218if test "$opengl" = "yes" ; then
5219 echo "CONFIG_OPENGL=y" >> $config_host_mak
f676c67e 5220 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
da076ffe 5221 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
20ff075b
MW
5222fi
5223
607dacd0
QN
5224if test "$lzo" = "yes" ; then
5225 echo "CONFIG_LZO=y" >> $config_host_mak
5226fi
5227
5228if test "$snappy" = "yes" ; then
5229 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5230fi
5231
6b383c08
PW
5232if test "$bzip2" = "yes" ; then
5233 echo "CONFIG_BZIP2=y" >> $config_host_mak
5234 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5235fi
5236
c589b249 5237if test "$libiscsi" = "yes" ; then
d3399d7c 5238 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
5239 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5240 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
5241fi
5242
6542aa9c
PL
5243if test "$libnfs" = "yes" ; then
5244 echo "CONFIG_LIBNFS=y" >> $config_host_mak
5245fi
5246
f794573e
EO
5247if test "$seccomp" = "yes"; then
5248 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5249fi
5250
83fb7adf 5251# XXX: suppress that
7d3505c5 5252if [ "$bsd" = "yes" ] ; then
2358a494 5253 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
5254fi
5255
20ff6c80
AL
5256if test "$zero_malloc" = "yes" ; then
5257 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
5258fi
4d9310f4
DB
5259if test "$localtime_r" = "yes" ; then
5260 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5261fi
3556c233
PB
5262if test "$qom_cast_debug" = "yes" ; then
5263 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5264fi
f27aaf4b 5265if test "$rbd" = "yes" ; then
d3399d7c 5266 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
5267 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5268 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
5269fi
5270
7c2acc70 5271echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
5272if test "$coroutine_pool" = "yes" ; then
5273 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5274else
5275 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5276fi
20ff6c80 5277
d2042378
AK
5278if test "$open_by_handle_at" = "yes" ; then
5279 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5280fi
5281
e06a765e
HPB
5282if test "$linux_magic_h" = "yes" ; then
5283 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
5284fi
5285
cc6e3ca9
GH
5286if test "$pragma_diagnostic_available" = "yes" ; then
5287 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
5288fi
5289
3f4349dc
KW
5290if test "$valgrind_h" = "yes" ; then
5291 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5292fi
5293
8ab1bf12
LC
5294if test "$has_environ" = "yes" ; then
5295 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
5296fi
5297
76a347e1
RH
5298if test "$cpuid_h" = "yes" ; then
5299 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5300fi
5301
f540166b
RH
5302if test "$int128" = "yes" ; then
5303 echo "CONFIG_INT128=y" >> $config_host_mak
5304fi
5305
1e6e9aca
RH
5306if test "$getauxval" = "yes" ; then
5307 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5308fi
5309
eb100396 5310if test "$glusterfs" = "yes" ; then
d3399d7c 5311 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
5312 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5313 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
5314fi
5315
5316if test "$glusterfs_discard" = "yes" ; then
5317 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 5318fi
e06a765e 5319
7c815372
BR
5320if test "$glusterfs_zerofill" = "yes" ; then
5321 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5322fi
5323
c9a12e75
CN
5324if test "$archipelago" = "yes" ; then
5325 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5326 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5327fi
5328
0a12ec87 5329if test "$libssh2" = "yes" ; then
d3399d7c 5330 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
5331 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5332 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
5333fi
5334
4f18b782
JC
5335if test "$vhdx" = "yes" ; then
5336 echo "CONFIG_VHDX=y" >> $config_host_mak
5337fi
5338
68063649 5339# USB host support
b5613fdc
GH
5340if test "$libusb" = "yes"; then
5341 echo "HOST_USB=libusb legacy" >> $config_host_mak
5342else
98ec69ac 5343 echo "HOST_USB=stub" >> $config_host_mak
b5613fdc 5344fi
68063649 5345
3b8acc11
PB
5346# TPM passthrough support?
5347if test "$tpm" = "yes"; then
5348 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5349 if test "$tpm_passthrough" = "yes"; then
5350 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5351 fi
5352fi
5353
5b808275
LV
5354echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5355if have_backend "nop"; then
6d8a764e 5356 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 5357fi
5b808275 5358if have_backend "simple"; then
6d8a764e
LV
5359 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5360 # Set the appropriate trace file.
953ffe0f 5361 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 5362fi
5b808275 5363if have_backend "stderr"; then
6d8a764e
LV
5364 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5365fi
5b808275 5366if have_backend "ust"; then
6d8a764e
LV
5367 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5368fi
5b808275 5369if have_backend "dtrace"; then
6d8a764e
LV
5370 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5371 if test "$trace_backend_stap" = "yes" ; then
5372 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5373 fi
c276b17d 5374fi
5b808275 5375if have_backend "ftrace"; then
781e9545
ET
5376 if test "$linux" = "yes" ; then
5377 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 5378 else
21684af0 5379 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
5380 fi
5381fi
9410b56c
PS
5382echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5383
2da776db
MH
5384if test "$rdma" = "yes" ; then
5385 echo "CONFIG_RDMA=y" >> $config_host_mak
5386fi
5387
5c312079
DDAG
5388# Hold two types of flag:
5389# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5390# a thread we have a handle to
5391# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5392# platform
5393if test "$pthread_setname_np" = "yes" ; then
5394 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5395 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5396fi
5397
5b5e3037
PB
5398if test "$tcg_interpreter" = "yes"; then
5399 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5400elif test "$ARCH" = "sparc64" ; then
5401 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5402elif test "$ARCH" = "s390x" ; then
5403 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 5404elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5b5e3037 5405 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5
RH
5406elif test "$ARCH" = "ppc64" ; then
5407 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037
PB
5408else
5409 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5410fi
5411QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5412
98ec69ac 5413echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 5414echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
5415echo "MAKE=$make" >> $config_host_mak
5416echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
5417echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5418echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
21655882
PB
5419if test -n "$libtool"; then
5420 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5421 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5422else
5423 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5424 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5425fi
c886edfb 5426echo "PYTHON=$python" >> $config_host_mak
804edf29 5427echo "CC=$cc" >> $config_host_mak
a31a8642
MT
5428if $iasl -h > /dev/null 2>&1; then
5429 echo "IASL=$iasl" >> $config_host_mak
5430fi
2b2e59e6 5431echo "CC_I386=$cc_i386" >> $config_host_mak
804edf29 5432echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 5433echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 5434echo "OBJCC=$objcc" >> $config_host_mak
804edf29 5435echo "AR=$ar" >> $config_host_mak
45d285ab 5436echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
3dd46c78
BS
5437echo "AS=$as" >> $config_host_mak
5438echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
5439echo "OBJCOPY=$objcopy" >> $config_host_mak
5440echo "LD=$ld" >> $config_host_mak
4852ee95 5441echo "NM=$nm" >> $config_host_mak
9fe6de94 5442echo "WINDRES=$windres" >> $config_host_mak
44dc0ca3 5443echo "LIBTOOL=$libtool" >> $config_host_mak
e2a2ed06 5444echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 5445echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 5446echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
f9728943 5447echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
5448if test "$sparse" = "yes" ; then
5449 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 5450 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 5451 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
5452 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5453 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5454fi
42da6041
GH
5455if test "$cross_prefix" != ""; then
5456 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5457else
5458 echo "AUTOCONF_HOST := " >> $config_host_mak
5459fi
e2a2ed06 5460echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 5461echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
37746c5e 5462echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
73da375e 5463echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 5464echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
804edf29 5465echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
5466echo "DSOSUF=$DSOSUF" >> $config_host_mak
5467echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 5468echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
5469echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5470echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 5471echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 5472echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
5473if test "$gcov" = "yes" ; then
5474 echo "CONFIG_GCOV=y" >> $config_host_mak
5475 echo "GCOV=$gcov_tool" >> $config_host_mak
5476fi
804edf29 5477
6efd7517
PM
5478# use included Linux headers
5479if test "$linux" = "yes" ; then
a307beb6 5480 mkdir -p linux-headers
6efd7517 5481 case "$cpu" in
c72b26ec 5482 i386|x86_64|x32)
08312a63 5483 linux_arch=x86
6efd7517
PM
5484 ;;
5485 ppcemb|ppc|ppc64)
08312a63 5486 linux_arch=powerpc
6efd7517
PM
5487 ;;
5488 s390x)
08312a63
PM
5489 linux_arch=s390
5490 ;;
1f080313
CF
5491 aarch64)
5492 linux_arch=arm64
5493 ;;
222e7d11
SL
5494 mips64)
5495 linux_arch=mips
5496 ;;
08312a63
PM
5497 *)
5498 # For most CPUs the kernel architecture name and QEMU CPU name match.
5499 linux_arch="$cpu"
6efd7517
PM
5500 ;;
5501 esac
08312a63
PM
5502 # For non-KVM architectures we will not have asm headers
5503 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5504 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5505 fi
6efd7517
PM
5506fi
5507
1d14ffa9 5508for target in $target_list; do
97a847bc 5509target_dir="$target"
25be210f 5510config_target_mak=$target_dir/config-target.mak
c1799a84 5511target_name=`echo $target | cut -d '-' -f 1`
97a847bc 5512target_bigendian="no"
1f3d3c8f 5513
c1799a84 5514case "$target_name" in
d15a9c23 5515 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
5516 target_bigendian=yes
5517 ;;
5518esac
97a847bc 5519target_softmmu="no"
997344f3 5520target_user_only="no"
831b7825 5521target_linux_user="no"
84778508 5522target_bsd_user="no"
9e407a85 5523case "$target" in
c1799a84 5524 ${target_name}-softmmu)
9e407a85
PB
5525 target_softmmu="yes"
5526 ;;
c1799a84 5527 ${target_name}-linux-user)
9c7a4202 5528 if test "$linux" != "yes" ; then
76ad07a4 5529 error_exit "Target '$target' is only available on a Linux host"
9c7a4202 5530 fi
9e407a85
PB
5531 target_user_only="yes"
5532 target_linux_user="yes"
5533 ;;
c1799a84 5534 ${target_name}-bsd-user)
9cf55765 5535 if test "$bsd" != "yes" ; then
76ad07a4 5536 error_exit "Target '$target' is only available on a BSD host"
9c7a4202 5537 fi
84778508
BS
5538 target_user_only="yes"
5539 target_bsd_user="yes"
5540 ;;
9e407a85 5541 *)
76ad07a4 5542 error_exit "Target '$target' not recognised"
9e407a85
PB
5543 exit 1
5544 ;;
5545esac
831b7825 5546
97a847bc 5547mkdir -p $target_dir
25be210f 5548echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 5549
e5fe0c52 5550bflt="no"
c1799a84 5551interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
56aebc89 5552gdb_xml_files=""
7ba1e619 5553
c1799a84 5554TARGET_ARCH="$target_name"
6acff7da 5555TARGET_BASE_ARCH=""
e6e91b9c 5556TARGET_ABI_DIR=""
e73aae67 5557
c1799a84 5558case "$target_name" in
2408a527 5559 i386)
2408a527
AJ
5560 ;;
5561 x86_64)
6acff7da 5562 TARGET_BASE_ARCH=i386
2408a527
AJ
5563 ;;
5564 alpha)
2408a527
AJ
5565 ;;
5566 arm|armeb)
b498c8a0 5567 TARGET_ARCH=arm
2408a527 5568 bflt="yes"
56aebc89 5569 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 5570 ;;
6a49fa95
AG
5571 aarch64)
5572 TARGET_BASE_ARCH=arm
5573 bflt="yes"
8f95ce2e 5574 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 5575 ;;
2408a527 5576 cris)
2408a527 5577 ;;
613a22c9 5578 lm32)
613a22c9 5579 ;;
2408a527 5580 m68k)
2408a527 5581 bflt="yes"
56aebc89 5582 gdb_xml_files="cf-core.xml cf-fp.xml"
2408a527 5583 ;;
877fdc12
EI
5584 microblaze|microblazeel)
5585 TARGET_ARCH=microblaze
72b675ca 5586 bflt="yes"
72b675ca 5587 ;;
0adcffb1 5588 mips|mipsel)
b498c8a0 5589 TARGET_ARCH=mips
25be210f 5590 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
5591 ;;
5592 mipsn32|mipsn32el)
597e2cec 5593 TARGET_ARCH=mips64
6acff7da 5594 TARGET_BASE_ARCH=mips
25be210f 5595 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 5596 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
5597 ;;
5598 mips64|mips64el)
b498c8a0 5599 TARGET_ARCH=mips64
6acff7da 5600 TARGET_BASE_ARCH=mips
25be210f 5601 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 5602 ;;
d15a9c23
AG
5603 moxie)
5604 ;;
e67db06e
JL
5605 or32)
5606 TARGET_ARCH=openrisc
5607 TARGET_BASE_ARCH=openrisc
e67db06e 5608 ;;
2408a527 5609 ppc)
c8b3532d 5610 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5611 ;;
5612 ppcemb)
6acff7da 5613 TARGET_BASE_ARCH=ppc
e6e91b9c 5614 TARGET_ABI_DIR=ppc
c8b3532d 5615 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5616 ;;
5617 ppc64)
6acff7da 5618 TARGET_BASE_ARCH=ppc
e6e91b9c 5619 TARGET_ABI_DIR=ppc
c8b3532d 5620 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527 5621 ;;
9c35126c
DK
5622 ppc64le)
5623 TARGET_ARCH=ppc64
5624 TARGET_BASE_ARCH=ppc
5625 TARGET_ABI_DIR=ppc
5626 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5627 ;;
2408a527 5628 ppc64abi32)
b498c8a0 5629 TARGET_ARCH=ppc64
6acff7da 5630 TARGET_BASE_ARCH=ppc
e6e91b9c 5631 TARGET_ABI_DIR=ppc
25be210f 5632 echo "TARGET_ABI32=y" >> $config_target_mak
c8b3532d 5633 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5634 ;;
5635 sh4|sh4eb)
b498c8a0 5636 TARGET_ARCH=sh4
2408a527
AJ
5637 bflt="yes"
5638 ;;
5639 sparc)
2408a527
AJ
5640 ;;
5641 sparc64)
6acff7da 5642 TARGET_BASE_ARCH=sparc
2408a527
AJ
5643 ;;
5644 sparc32plus)
b498c8a0 5645 TARGET_ARCH=sparc64
6acff7da 5646 TARGET_BASE_ARCH=sparc
e6e91b9c 5647 TARGET_ABI_DIR=sparc
25be210f 5648 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 5649 ;;
24e804ec 5650 s390x)
8a641ff6 5651 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
24e804ec 5652 ;;
444e06b1
CG
5653 tilegx)
5654 ;;
5ecaa4ed
PC
5655 tricore)
5656 ;;
d2fbca94 5657 unicore32)
d2fbca94 5658 ;;
cfa550c6
MF
5659 xtensa|xtensaeb)
5660 TARGET_ARCH=xtensa
cfa550c6 5661 ;;
2408a527 5662 *)
76ad07a4 5663 error_exit "Unsupported target CPU"
2408a527
AJ
5664 ;;
5665esac
5e8861a0
PB
5666# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5667if [ "$TARGET_BASE_ARCH" = "" ]; then
5668 TARGET_BASE_ARCH=$TARGET_ARCH
5669fi
5670
5e8861a0
PB
5671symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5672
99afc91d
DB
5673upper() {
5674 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5675}
5676
99afc91d 5677target_arch_name="`upper $TARGET_ARCH`"
25be210f 5678echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 5679echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 5680echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
5681if [ "$TARGET_ABI_DIR" = "" ]; then
5682 TARGET_ABI_DIR=$TARGET_ARCH
5683fi
25be210f 5684echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
5685if [ "$HOST_VARIANT_DIR" != "" ]; then
5686 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5687fi
c1799a84 5688case "$target_name" in
1b0c87fc
JQ
5689 i386|x86_64)
5690 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
25be210f 5691 echo "CONFIG_XEN=y" >> $config_target_mak
eb6fda0f
AP
5692 if test "$xen_pci_passthrough" = yes; then
5693 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5694 fi
1b0c87fc 5695 fi
59d21e53
AG
5696 ;;
5697 *)
1b0c87fc 5698esac
c1799a84 5699case "$target_name" in
222e7d11 5700 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
c59249f9
JQ
5701 # Make sure the target and host cpus are compatible
5702 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
c1799a84
PB
5703 \( "$target_name" = "$cpu" -o \
5704 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5705 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5706 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5707 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
222e7d11 5708 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
c1799a84 5709 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
18b8263e
MT
5710 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5711 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5712 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
25be210f 5713 echo "CONFIG_KVM=y" >> $config_target_mak
1ba16968 5714 if test "$vhost_net" = "yes" ; then
d5970055 5715 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
421f4448 5716 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
d5970055 5717 fi
c59249f9
JQ
5718 fi
5719esac
de83cd02 5720if test "$target_bigendian" = "yes" ; then
25be210f 5721 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 5722fi
97a847bc 5723if test "$target_softmmu" = "yes" ; then
25be210f 5724 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
43ce4dfe 5725fi
997344f3 5726if test "$target_user_only" = "yes" ; then
25be210f 5727 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 5728 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 5729fi
831b7825 5730if test "$target_linux_user" = "yes" ; then
25be210f 5731 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 5732fi
56aebc89
PB
5733list=""
5734if test ! -z "$gdb_xml_files" ; then
5735 for x in $gdb_xml_files; do
5736 list="$list $source_path/gdb-xml/$x"
5737 done
3d0f1517 5738 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 5739fi
97a847bc 5740
e5fe0c52 5741if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 5742 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 5743fi
84778508 5744if test "$target_bsd_user" = "yes" ; then
25be210f 5745 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 5746fi
5b0753e0 5747
4afddb55 5748# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 5749
4afddb55 5750cflags=""
fa282484 5751ldflags=""
9b8e111f 5752
c765fcac
PC
5753disas_config() {
5754 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5755 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5756}
5757
64656024
JQ
5758for i in $ARCH $TARGET_BASE_ARCH ; do
5759 case "$i" in
5760 alpha)
c765fcac 5761 disas_config "ALPHA"
64656024 5762 ;;
82295d8a
RH
5763 aarch64)
5764 if test -n "${cxx}"; then
c765fcac 5765 disas_config "ARM_A64"
82295d8a
RH
5766 fi
5767 ;;
64656024 5768 arm)
c765fcac 5769 disas_config "ARM"
999b53ec 5770 if test -n "${cxx}"; then
c765fcac 5771 disas_config "ARM_A64"
999b53ec 5772 fi
64656024
JQ
5773 ;;
5774 cris)
c765fcac 5775 disas_config "CRIS"
64656024
JQ
5776 ;;
5777 hppa)
c765fcac 5778 disas_config "HPPA"
64656024 5779 ;;
c72b26ec 5780 i386|x86_64|x32)
c765fcac 5781 disas_config "I386"
64656024 5782 ;;
903ec55c 5783 ia64*)
c765fcac 5784 disas_config "IA64"
903ec55c 5785 ;;
79368f49 5786 lm32)
c765fcac 5787 disas_config "LM32"
79368f49 5788 ;;
64656024 5789 m68k)
c765fcac 5790 disas_config "M68K"
64656024 5791 ;;
877fdc12 5792 microblaze*)
c765fcac 5793 disas_config "MICROBLAZE"
64656024
JQ
5794 ;;
5795 mips*)
c765fcac 5796 disas_config "MIPS"
64656024 5797 ;;
d15a9c23 5798 moxie*)
c765fcac 5799 disas_config "MOXIE"
d15a9c23 5800 ;;
e67db06e 5801 or32)
c765fcac 5802 disas_config "OPENRISC"
e67db06e 5803 ;;
64656024 5804 ppc*)
c765fcac 5805 disas_config "PPC"
64656024 5806 ;;
24e804ec 5807 s390*)
c765fcac 5808 disas_config "S390"
64656024
JQ
5809 ;;
5810 sh4)
c765fcac 5811 disas_config "SH4"
64656024
JQ
5812 ;;
5813 sparc*)
c765fcac 5814 disas_config "SPARC"
64656024 5815 ;;
cfa550c6 5816 xtensa*)
c765fcac 5817 disas_config "XTENSA"
cfa550c6 5818 ;;
64656024
JQ
5819 esac
5820done
9195b2c2 5821if test "$tcg_interpreter" = "yes" ; then
c765fcac 5822 disas_config "TCI"
9195b2c2 5823fi
64656024 5824
6ee7126f
JQ
5825case "$ARCH" in
5826alpha)
5827 # Ensure there's only a single GP
5828 cflags="-msmall-data $cflags"
5829;;
5830esac
5831
d02c1db3 5832if test "$gprof" = "yes" ; then
25be210f 5833 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
5834 if test "$target_linux_user" = "yes" ; then
5835 cflags="-p $cflags"
5836 ldflags="-p $ldflags"
5837 fi
5838 if test "$target_softmmu" = "yes" ; then
5839 ldflags="-p $ldflags"
25be210f 5840 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
5841 fi
5842fi
5843
9b8e111f 5844if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 5845 ldflags="$ldflags $textseg_ldflags"
fa282484 5846fi
fa282484 5847
25be210f
JQ
5848echo "LDFLAGS+=$ldflags" >> $config_target_mak
5849echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 5850
97a847bc 5851done # for target in $targets
7d13299d 5852
b776eca1
GH
5853if [ "$pixman" = "internal" ]; then
5854 echo "config-host.h: subdir-pixman" >> $config_host_mak
2da776db
MH
5855fi
5856
a540f158
PC
5857if [ "$dtc_internal" = "yes" ]; then
5858 echo "config-host.h: subdir-dtc" >> $config_host_mak
5859fi
5860
a99d57bb
WG
5861if test "$numa" = "yes"; then
5862 echo "CONFIG_NUMA=y" >> $config_host_mak
5863fi
5864
fd0e6053
JS
5865if test "$ccache_cpp2" = "yes"; then
5866 echo "export CCACHE_CPP2=y" >> $config_host_mak
5867fi
5868
d1807a4f 5869# build tree in object directory in case the source is not in the current directory
f93296ea 5870DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
2b170eff 5871DIRS="$DIRS fsdev"
9933c305 5872DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 5873DIRS="$DIRS roms/seabios roms/vgabios"
2dee8d54 5874DIRS="$DIRS qapi-generated"
c09015dd
AL
5875FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5876FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 5877FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 5878FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 5879FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 5880FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 5881FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 5882FILES="$FILES pc-bios/qemu-icon.bmp"
753d11f2
RH
5883for bios_file in \
5884 $source_path/pc-bios/*.bin \
5acc2ec0 5885 $source_path/pc-bios/*.aml \
753d11f2
RH
5886 $source_path/pc-bios/*.rom \
5887 $source_path/pc-bios/*.dtb \
e89e33e1 5888 $source_path/pc-bios/*.img \
753d11f2 5889 $source_path/pc-bios/openbios-* \
4e73c781 5890 $source_path/pc-bios/u-boot.* \
753d11f2
RH
5891 $source_path/pc-bios/palcode-*
5892do
d1807a4f
PB
5893 FILES="$FILES pc-bios/`basename $bios_file`"
5894done
c2304b52
MA
5895for test_file in `find $source_path/tests/acpi-test-data -type f`
5896do
5897 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5898done
d1807a4f
PB
5899mkdir -p $DIRS
5900for f in $FILES ; do
cab00a5a 5901 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
5902 symlink "$source_path/$f" "$f"
5903 fi
d1807a4f 5904done
1ad2134f 5905
c34ebfdc 5906# temporary config to build submodules
2d9f27d2 5907for rom in seabios vgabios ; do
c34ebfdc 5908 config_mak=roms/$rom/config.mak
37116c89 5909 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 5910 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
3dd46c78 5911 echo "AS=$as" >> $config_mak
c34ebfdc
AL
5912 echo "CC=$cc" >> $config_mak
5913 echo "BCC=bcc" >> $config_mak
3dd46c78 5914 echo "CPP=$cpp" >> $config_mak
c34ebfdc 5915 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 5916 echo "IASL=$iasl" >> $config_mak
c34ebfdc
AL
5917 echo "LD=$ld" >> $config_mak
5918done
5919
76c7560a
HR
5920# set up qemu-iotests in this build directory
5921iotests_common_env="tests/qemu-iotests/common.env"
5922iotests_check="tests/qemu-iotests/check"
5923
5924echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5925echo >> "$iotests_common_env"
5926echo "export PYTHON='$python'" >> "$iotests_common_env"
5927
5928if [ ! -e "$iotests_check" ]; then
5929 symlink "$source_path/$iotests_check" "$iotests_check"
5930fi
5931
dc655404
MT
5932# Save the configure command line for later reuse.
5933cat <<EOD >config.status
5934#!/bin/sh
5935# Generated by configure.
5936# Run this file to recreate the current configuration.
5937# Compiler output produced by configure, useful for debugging
5938# configure, is in config.log if it exists.
5939EOD
5940printf "exec" >>config.status
5941printf " '%s'" "$0" "$@" >>config.status
5942echo >>config.status
5943chmod +x config.status
5944
8cd05ab6 5945rm -r "$TMPDIR1"