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