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