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