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