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