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