]> git.proxmox.com Git - mirror_qemu.git/blame - configure
Update version for v2.7.0-rc0 release
[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
409437e1 3124 PTHREAD_LIB="$pthread_lib"
bd00d539
AF
3125 break
3126 fi
3127 done
3128fi
414f0dab 3129
4617e593 3130if test "$mingw32" != yes -a "$pthread" = no; then
76ad07a4
PM
3131 error_exit "pthread check failed" \
3132 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3133fi
3134
5c312079
DDAG
3135# check for pthread_setname_np
3136pthread_setname_np=no
3137cat > $TMPC << EOF
3138#include <pthread.h>
3139
3140static void *f(void *p) { return NULL; }
3141int main(void)
3142{
3143 pthread_t thread;
3144 pthread_create(&thread, 0, f, 0);
3145 pthread_setname_np(thread, "QEMU");
3146 return 0;
3147}
3148EOF
3149if compile_prog "" "$pthread_lib" ; then
3150 pthread_setname_np=yes
3151fi
3152
f27aaf4b
CB
3153##########################################
3154# rbd probe
3155if test "$rbd" != "no" ; then
3156 cat > $TMPC <<EOF
3157#include <stdio.h>
ad32e9c0 3158#include <rbd/librbd.h>
f27aaf4b 3159int main(void) {
ad32e9c0
JD
3160 rados_t cluster;
3161 rados_create(&cluster, NULL);
f27aaf4b
CB
3162 return 0;
3163}
3164EOF
ad32e9c0
JD
3165 rbd_libs="-lrbd -lrados"
3166 if compile_prog "" "$rbd_libs" ; then
3167 rbd=yes
f27aaf4b
CB
3168 else
3169 if test "$rbd" = "yes" ; then
21684af0 3170 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3171 fi
3172 rbd=no
3173 fi
f27aaf4b
CB
3174fi
3175
0a12ec87
RJ
3176##########################################
3177# libssh2 probe
4fc16838 3178min_libssh2_version=1.2.8
0a12ec87 3179if test "$libssh2" != "no" ; then
65d5d3f9 3180 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
89138857
SW
3181 libssh2_cflags=$($pkg_config libssh2 --cflags)
3182 libssh2_libs=$($pkg_config libssh2 --libs)
0a12ec87 3183 libssh2=yes
0a12ec87
RJ
3184 else
3185 if test "$libssh2" = "yes" ; then
4fc16838 3186 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
0a12ec87
RJ
3187 fi
3188 libssh2=no
3189 fi
3190fi
3191
9a2d462e
RJ
3192##########################################
3193# libssh2_sftp_fsync probe
3194
3195if test "$libssh2" = "yes"; then
3196 cat > $TMPC <<EOF
3197#include <stdio.h>
3198#include <libssh2.h>
3199#include <libssh2_sftp.h>
3200int main(void) {
3201 LIBSSH2_SESSION *session;
3202 LIBSSH2_SFTP *sftp;
3203 LIBSSH2_SFTP_HANDLE *sftp_handle;
3204 session = libssh2_session_init ();
3205 sftp = libssh2_sftp_init (session);
3206 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3207 libssh2_sftp_fsync (sftp_handle);
3208 return 0;
3209}
3210EOF
3211 # libssh2_cflags/libssh2_libs defined in previous test.
3212 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3213 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3214 fi
3215fi
3216
5c6c3a6c
CH
3217##########################################
3218# linux-aio probe
5c6c3a6c
CH
3219
3220if test "$linux_aio" != "no" ; then
3221 cat > $TMPC <<EOF
3222#include <libaio.h>
3223#include <sys/eventfd.h>
832ce9c2 3224#include <stddef.h>
5c6c3a6c
CH
3225int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3226EOF
3227 if compile_prog "" "-laio" ; then
3228 linux_aio=yes
5c6c3a6c
CH
3229 else
3230 if test "$linux_aio" = "yes" ; then
21684af0 3231 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3232 fi
3cfcae3c 3233 linux_aio=no
5c6c3a6c
CH
3234 fi
3235fi
3236
3b8acc11
PB
3237##########################################
3238# TPM passthrough is only on x86 Linux
3239
3240if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3241 tpm_passthrough=$tpm
3242else
3243 tpm_passthrough=no
3244fi
3245
758e8e38
VJ
3246##########################################
3247# attr probe
3248
3249if test "$attr" != "no" ; then
3250 cat > $TMPC <<EOF
3251#include <stdio.h>
3252#include <sys/types.h>
f2338fb4
PB
3253#ifdef CONFIG_LIBATTR
3254#include <attr/xattr.h>
3255#else
4f26f2b6 3256#include <sys/xattr.h>
f2338fb4 3257#endif
758e8e38
VJ
3258int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3259EOF
4f26f2b6
AK
3260 if compile_prog "" "" ; then
3261 attr=yes
3262 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3263 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
3264 attr=yes
3265 LIBS="-lattr $LIBS"
4f26f2b6 3266 libattr=yes
758e8e38
VJ
3267 else
3268 if test "$attr" = "yes" ; then
21684af0 3269 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3270 fi
3271 attr=no
3272 fi
3273fi
3274
bf9298b9
AL
3275##########################################
3276# iovec probe
3277cat > $TMPC <<EOF
db34f0b3 3278#include <sys/types.h>
bf9298b9 3279#include <sys/uio.h>
db34f0b3 3280#include <unistd.h>
f91f9bee 3281int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3282EOF
3283iovec=no
52166aa0 3284if compile_prog "" "" ; then
bf9298b9
AL
3285 iovec=yes
3286fi
3287
ceb42de8
AL
3288##########################################
3289# preadv probe
3290cat > $TMPC <<EOF
3291#include <sys/types.h>
3292#include <sys/uio.h>
3293#include <unistd.h>
c075a723 3294int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3295EOF
3296preadv=no
52166aa0 3297if compile_prog "" "" ; then
ceb42de8
AL
3298 preadv=yes
3299fi
3300
f652e6af
AJ
3301##########################################
3302# fdt probe
e169e1e1
PM
3303# fdt support is mandatory for at least some target architectures,
3304# so insist on it if we're building those system emulators.
3305fdt_required=no
3306for target in $target_list; do
3307 case $target in
6a49fa95 3308 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
e169e1e1
PM
3309 fdt_required=yes
3310 ;;
3311 esac
3312done
3313
3314if test "$fdt_required" = "yes"; then
3315 if test "$fdt" = "no"; then
3316 error_exit "fdt disabled but some requested targets require it." \
3317 "You can turn off fdt only if you also disable all the system emulation" \
3318 "targets which need it (by specifying a cut down --target-list)."
3319 fi
3320 fdt=yes
3321fi
3322
2df87df7 3323if test "$fdt" != "no" ; then
b41af4ba 3324 fdt_libs="-lfdt"
96ce6545 3325 # explicitly check for libfdt_env.h as it is missing in some stable installs
31ce0adb 3326 # and test for required functions to make sure we are on a version >= 1.4.0
b41af4ba 3327 cat > $TMPC << EOF
31ce0adb 3328#include <libfdt.h>
96ce6545 3329#include <libfdt_env.h>
31ce0adb 3330int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
f652e6af 3331EOF
52166aa0 3332 if compile_prog "" "$fdt_libs" ; then
a540f158 3333 # system DTC is good - use it
f652e6af 3334 fdt=yes
a540f158
PC
3335 elif test -d ${source_path}/dtc/libfdt ; then
3336 # have submodule DTC - use it
3337 fdt=yes
3338 dtc_internal="yes"
3339 mkdir -p dtc
cab00a5a 3340 if [ "$pwd_is_source_path" != "y" ] ; then
a540f158
PC
3341 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3342 symlink "$source_path/dtc/scripts" "dtc/scripts"
2df87df7 3343 fi
a540f158
PC
3344 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3345 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3346 elif test "$fdt" = "yes" ; then
3347 # have neither and want - prompt for system/submodule install
31ce0adb 3348 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3f281822 3349 " (1) Preferred: Install the DTC (libfdt) devel package" \
a540f158
PC
3350 " (2) Fetch the DTC submodule, using:" \
3351 " git submodule update --init dtc"
3352 else
3353 # don't have and don't want
de3a354a 3354 fdt_libs=
2df87df7 3355 fdt=no
f652e6af
AJ
3356 fi
3357fi
3358
a540f158
PC
3359libs_softmmu="$libs_softmmu $fdt_libs"
3360
20ff075b 3361##########################################
fb719563 3362# opengl probe (for sdl2, gtk, milkymist-tmu2)
b1546f32 3363
da076ffe 3364if test "$opengl" != "no" ; then
014cb152 3365 opengl_pkgs="epoxy libdrm gbm"
fb719563 3366 if $pkg_config $opengl_pkgs x11; then
f676c67e
JW
3367 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3368 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
da076ffe 3369 opengl=yes
925a0400
GH
3370 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3371 gtk_gl="yes"
3372 fi
20ff075b 3373 else
da076ffe 3374 if test "$opengl" = "yes" ; then
dcf30025 3375 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 3376 fi
f676c67e 3377 opengl_cflags=""
da076ffe
GH
3378 opengl_libs=""
3379 opengl=no
20ff075b
MW
3380 fi
3381fi
3382
014cb152
GH
3383if test "$opengl" = "yes"; then
3384 cat > $TMPC << EOF
3385#include <epoxy/egl.h>
3386#ifndef EGL_MESA_image_dma_buf_export
3387# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3388#endif
3389int main(void) { return 0; }
3390EOF
3391 if compile_prog "" "" ; then
3392 opengl_dmabuf=yes
3393 fi
3394fi
c9a12e75
CN
3395
3396##########################################
3397# archipelago probe
3398if test "$archipelago" != "no" ; then
3399 cat > $TMPC <<EOF
3400#include <stdio.h>
3401#include <xseg/xseg.h>
3402#include <xseg/protocol.h>
3403int main(void) {
3404 xseg_initialize();
3405 return 0;
3406}
3407EOF
3408 archipelago_libs=-lxseg
3409 if compile_prog "" "$archipelago_libs"; then
3410 archipelago="yes"
3411 libs_tools="$archipelago_libs $libs_tools"
3412 libs_softmmu="$archipelago_libs $libs_softmmu"
6a460ed1
SH
3413
3414 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3415 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3416 echo "license and therefore prevent redistribution."
3417 echo
3418 echo "To disable Archipelago, use --disable-archipelago"
c9a12e75
CN
3419 else
3420 if test "$archipelago" = "yes" ; then
3421 feature_not_found "Archipelago backend support" "Install libxseg devel"
3422 fi
3423 archipelago="no"
3424 fi
3425fi
3426
3427
eb100396
BR
3428##########################################
3429# glusterfs probe
3430if test "$glusterfs" != "no" ; then
65d5d3f9 3431 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3432 glusterfs="yes"
89138857
SW
3433 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3434 glusterfs_libs=$($pkg_config --libs glusterfs-api)
d85fa9eb
JC
3435 if $pkg_config --atleast-version=4 glusterfs-api; then
3436 glusterfs_xlator_opt="yes"
3437 fi
65d5d3f9 3438 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3439 glusterfs_discard="yes"
3440 fi
7c815372
BR
3441 if $pkg_config --atleast-version=6 glusterfs-api; then
3442 glusterfs_zerofill="yes"
3443 fi
eb100396
BR
3444 else
3445 if test "$glusterfs" = "yes" ; then
8efc9363
HT
3446 feature_not_found "GlusterFS backend support" \
3447 "Install glusterfs-api devel >= 3"
eb100396 3448 fi
e01bee08 3449 glusterfs="no"
eb100396
BR
3450 fi
3451fi
3452
39386ac7 3453# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
3454# emulator. This is done because older glibc versions don't
3455# have syscall stubs for these implemented. In that case we
3456# don't provide them even if kernel supports them.
3457#
3458inotify=no
67ba57f6 3459cat > $TMPC << EOF
3b3f24ad
AJ
3460#include <sys/inotify.h>
3461
3462int
3463main(void)
3464{
3465 /* try to start inotify */
8690e420 3466 return inotify_init();
3b3f24ad
AJ
3467}
3468EOF
52166aa0 3469if compile_prog "" "" ; then
67ba57f6 3470 inotify=yes
3b3f24ad
AJ
3471fi
3472
c05c7a73
RV
3473inotify1=no
3474cat > $TMPC << EOF
3475#include <sys/inotify.h>
3476
3477int
3478main(void)
3479{
3480 /* try to start inotify */
3481 return inotify_init1(0);
3482}
3483EOF
3484if compile_prog "" "" ; then
3485 inotify1=yes
3486fi
3487
ebc996f3
RV
3488# check if utimensat and futimens are supported
3489utimens=no
3490cat > $TMPC << EOF
3491#define _ATFILE_SOURCE
ebc996f3
RV
3492#include <stddef.h>
3493#include <fcntl.h>
3014ee00 3494#include <sys/stat.h>
ebc996f3
RV
3495
3496int main(void)
3497{
3498 utimensat(AT_FDCWD, "foo", NULL, 0);
3499 futimens(0, NULL);
3500 return 0;
3501}
3502EOF
52166aa0 3503if compile_prog "" "" ; then
ebc996f3
RV
3504 utimens=yes
3505fi
3506
099d6b0f
RV
3507# check if pipe2 is there
3508pipe2=no
3509cat > $TMPC << EOF
099d6b0f
RV
3510#include <unistd.h>
3511#include <fcntl.h>
3512
3513int main(void)
3514{
3515 int pipefd[2];
9bca8162 3516 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
3517}
3518EOF
52166aa0 3519if compile_prog "" "" ; then
099d6b0f
RV
3520 pipe2=yes
3521fi
3522
40ff6d7e
KW
3523# check if accept4 is there
3524accept4=no
3525cat > $TMPC << EOF
40ff6d7e
KW
3526#include <sys/socket.h>
3527#include <stddef.h>
3528
3529int main(void)
3530{
3531 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3532 return 0;
3533}
3534EOF
3535if compile_prog "" "" ; then
3536 accept4=yes
3537fi
3538
3ce34dfb
VS
3539# check if tee/splice is there. vmsplice was added same time.
3540splice=no
3541cat > $TMPC << EOF
3ce34dfb
VS
3542#include <unistd.h>
3543#include <fcntl.h>
3544#include <limits.h>
3545
3546int main(void)
3547{
66ea0f22 3548 int len, fd = 0;
3ce34dfb
VS
3549 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3550 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3551 return 0;
3552}
3553EOF
52166aa0 3554if compile_prog "" "" ; then
3ce34dfb
VS
3555 splice=yes
3556fi
3557
a99d57bb
WG
3558##########################################
3559# libnuma probe
3560
3561if test "$numa" != "no" ; then
3562 cat > $TMPC << EOF
3563#include <numa.h>
3564int main(void) { return numa_available(); }
3565EOF
3566
3567 if compile_prog "" "-lnuma" ; then
3568 numa=yes
3569 libs_softmmu="-lnuma $libs_softmmu"
3570 else
3571 if test "$numa" = "yes" ; then
3572 feature_not_found "numa" "install numactl devel"
3573 fi
3574 numa=no
3575 fi
3576fi
3577
7b01cb97
AD
3578if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3579 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3580 exit 1
3581fi
3582
2847b469
FZ
3583##########################################
3584# tcmalloc probe
3585
3586if test "$tcmalloc" = "yes" ; then
3587 cat > $TMPC << EOF
3588#include <stdlib.h>
3589int main(void) { malloc(1); return 0; }
3590EOF
3591
3592 if compile_prog "" "-ltcmalloc" ; then
3593 LIBS="-ltcmalloc $LIBS"
3594 else
3595 feature_not_found "tcmalloc" "install gperftools devel"
3596 fi
3597fi
3598
7b01cb97
AD
3599##########################################
3600# jemalloc probe
3601
3602if test "$jemalloc" = "yes" ; then
3603 cat > $TMPC << EOF
3604#include <stdlib.h>
3605int main(void) { malloc(1); return 0; }
3606EOF
3607
3608 if compile_prog "" "-ljemalloc" ; then
3609 LIBS="-ljemalloc $LIBS"
3610 else
3611 feature_not_found "jemalloc" "install jemalloc devel"
3612 fi
3613fi
3614
dcc38d1c
MT
3615##########################################
3616# signalfd probe
3617signalfd="no"
3618cat > $TMPC << EOF
dcc38d1c
MT
3619#include <unistd.h>
3620#include <sys/syscall.h>
3621#include <signal.h>
3622int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3623EOF
3624
3625if compile_prog "" "" ; then
3626 signalfd=yes
3627fi
3628
c2882b96
RV
3629# check if eventfd is supported
3630eventfd=no
3631cat > $TMPC << EOF
3632#include <sys/eventfd.h>
3633
3634int main(void)
3635{
55cc7f3e 3636 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
3637}
3638EOF
3639if compile_prog "" "" ; then
3640 eventfd=yes
3641fi
3642
751bcc39
MAL
3643# check if memfd is supported
3644memfd=no
3645cat > $TMPC << EOF
3646#include <sys/memfd.h>
3647
3648int main(void)
3649{
3650 return memfd_create("foo", MFD_ALLOW_SEALING);
3651}
3652EOF
3653if compile_prog "" "" ; then
3654 memfd=yes
3655fi
3656
3657
3658
d0927938
UH
3659# check for fallocate
3660fallocate=no
3661cat > $TMPC << EOF
3662#include <fcntl.h>
3663
3664int main(void)
3665{
3666 fallocate(0, 0, 0, 0);
3667 return 0;
3668}
3669EOF
8fb03151 3670if compile_prog "" "" ; then
d0927938
UH
3671 fallocate=yes
3672fi
3673
3d4fa43e
KK
3674# check for fallocate hole punching
3675fallocate_punch_hole=no
3676cat > $TMPC << EOF
3677#include <fcntl.h>
3678#include <linux/falloc.h>
3679
3680int main(void)
3681{
3682 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3683 return 0;
3684}
3685EOF
3686if compile_prog "" "" ; then
3687 fallocate_punch_hole=yes
3688fi
3689
b953f075
DL
3690# check that fallocate supports range zeroing inside the file
3691fallocate_zero_range=no
3692cat > $TMPC << EOF
3693#include <fcntl.h>
3694#include <linux/falloc.h>
3695
3696int main(void)
3697{
3698 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3699 return 0;
3700}
3701EOF
3702if compile_prog "" "" ; then
3703 fallocate_zero_range=yes
3704fi
3705
ed911435
KW
3706# check for posix_fallocate
3707posix_fallocate=no
3708cat > $TMPC << EOF
3709#include <fcntl.h>
3710
3711int main(void)
3712{
3713 posix_fallocate(0, 0, 0);
3714 return 0;
3715}
3716EOF
3717if compile_prog "" "" ; then
3718 posix_fallocate=yes
3719fi
3720
c727f47d
PM
3721# check for sync_file_range
3722sync_file_range=no
3723cat > $TMPC << EOF
3724#include <fcntl.h>
3725
3726int main(void)
3727{
3728 sync_file_range(0, 0, 0, 0);
3729 return 0;
3730}
3731EOF
8fb03151 3732if compile_prog "" "" ; then
c727f47d
PM
3733 sync_file_range=yes
3734fi
3735
dace20dc
PM
3736# check for linux/fiemap.h and FS_IOC_FIEMAP
3737fiemap=no
3738cat > $TMPC << EOF
3739#include <sys/ioctl.h>
3740#include <linux/fs.h>
3741#include <linux/fiemap.h>
3742
3743int main(void)
3744{
3745 ioctl(0, FS_IOC_FIEMAP, 0);
3746 return 0;
3747}
3748EOF
8fb03151 3749if compile_prog "" "" ; then
dace20dc
PM
3750 fiemap=yes
3751fi
3752
d0927938
UH
3753# check for dup3
3754dup3=no
3755cat > $TMPC << EOF
3756#include <unistd.h>
3757
3758int main(void)
3759{
3760 dup3(0, 0, 0);
3761 return 0;
3762}
3763EOF
78f5d726 3764if compile_prog "" "" ; then
d0927938
UH
3765 dup3=yes
3766fi
3767
4e0c6529
AB
3768# check for ppoll support
3769ppoll=no
3770cat > $TMPC << EOF
3771#include <poll.h>
3772
3773int main(void)
3774{
3775 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3776 ppoll(&pfd, 1, 0, 0);
3777 return 0;
3778}
3779EOF
3780if compile_prog "" "" ; then
3781 ppoll=yes
3782fi
3783
cd758dd0
AB
3784# check for prctl(PR_SET_TIMERSLACK , ... ) support
3785prctl_pr_set_timerslack=no
3786cat > $TMPC << EOF
3787#include <sys/prctl.h>
3788
3789int main(void)
3790{
3791 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3792 return 0;
3793}
3794EOF
3795if compile_prog "" "" ; then
3796 prctl_pr_set_timerslack=yes
3797fi
3798
3b6edd16
PM
3799# check for epoll support
3800epoll=no
3801cat > $TMPC << EOF
3802#include <sys/epoll.h>
3803
3804int main(void)
3805{
3806 epoll_create(0);
3807 return 0;
3808}
3809EOF
8fb03151 3810if compile_prog "" "" ; then
3b6edd16
PM
3811 epoll=yes
3812fi
3813
227f0214
PM
3814# epoll_create1 is a later addition
3815# so we must check separately for its presence
3b6edd16
PM
3816epoll_create1=no
3817cat > $TMPC << EOF
3818#include <sys/epoll.h>
3819
3820int main(void)
3821{
19e83f6b
PM
3822 /* Note that we use epoll_create1 as a value, not as
3823 * a function being called. This is necessary so that on
3824 * old SPARC glibc versions where the function was present in
3825 * the library but not declared in the header file we will
3826 * fail the configure check. (Otherwise we will get a compiler
3827 * warning but not an error, and will proceed to fail the
3828 * qemu compile where we compile with -Werror.)
3829 */
c075a723 3830 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
3831}
3832EOF
8fb03151 3833if compile_prog "" "" ; then
3b6edd16
PM
3834 epoll_create1=yes
3835fi
3836
a8fd1aba
PM
3837# check for sendfile support
3838sendfile=no
3839cat > $TMPC << EOF
3840#include <sys/sendfile.h>
3841
3842int main(void)
3843{
3844 return sendfile(0, 0, 0, 0);
3845}
3846EOF
3847if compile_prog "" "" ; then
3848 sendfile=yes
3849fi
3850
51834341
RV
3851# check for timerfd support (glibc 2.8 and newer)
3852timerfd=no
3853cat > $TMPC << EOF
3854#include <sys/timerfd.h>
3855
3856int main(void)
3857{
3858 return(timerfd_create(CLOCK_REALTIME, 0));
3859}
3860EOF
3861if compile_prog "" "" ; then
3862 timerfd=yes
3863fi
3864
9af5c906
RV
3865# check for setns and unshare support
3866setns=no
3867cat > $TMPC << EOF
3868#include <sched.h>
3869
3870int main(void)
3871{
3872 int ret;
3873 ret = setns(0, 0);
3874 ret = unshare(0);
3875 return ret;
3876}
3877EOF
3878if compile_prog "" "" ; then
3879 setns=yes
3880fi
3881
cc8ae6de 3882# Check if tools are available to build documentation.
a25dba17 3883if test "$docs" != "no" ; then
01668d98 3884 if has makeinfo && has pod2man; then
a25dba17 3885 docs=yes
83a3ab8b 3886 else
a25dba17 3887 if test "$docs" = "yes" ; then
21684af0 3888 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 3889 fi
a25dba17 3890 docs=no
83a3ab8b 3891 fi
cc8ae6de
PB
3892fi
3893
f514f41c 3894# Search for bswap_32 function
6ae9a1f4
JQ
3895byteswap_h=no
3896cat > $TMPC << EOF
3897#include <byteswap.h>
3898int main(void) { return bswap_32(0); }
3899EOF
52166aa0 3900if compile_prog "" "" ; then
6ae9a1f4
JQ
3901 byteswap_h=yes
3902fi
3903
75f13596 3904# Search for bswap32 function
6ae9a1f4
JQ
3905bswap_h=no
3906cat > $TMPC << EOF
3907#include <sys/endian.h>
3908#include <sys/types.h>
3909#include <machine/bswap.h>
3910int main(void) { return bswap32(0); }
3911EOF
52166aa0 3912if compile_prog "" "" ; then
6ae9a1f4
JQ
3913 bswap_h=yes
3914fi
3915
c589b249 3916##########################################
e49ab19f 3917# Do we have libiscsi >= 1.9.0
c589b249 3918if test "$libiscsi" != "no" ; then
e49ab19f 3919 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 3920 libiscsi="yes"
ca871ec8
SW
3921 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3922 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
3923 else
3924 if test "$libiscsi" = "yes" ; then
e49ab19f 3925 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
3926 fi
3927 libiscsi="no"
3928 fi
3929fi
3930
8bacde8d
NC
3931##########################################
3932# Do we need libm
3933cat > $TMPC << EOF
3934#include <math.h>
f80ea986 3935int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
3936EOF
3937if compile_prog "" "" ; then
3938 :
3939elif compile_prog "" "-lm" ; then
3940 LIBS="-lm $LIBS"
3941 libs_qga="-lm $libs_qga"
3942else
76ad07a4 3943 error_exit "libm check failed"
8bacde8d
NC
3944fi
3945
da93a1fd
AL
3946##########################################
3947# Do we need librt
8bacde8d
NC
3948# uClibc provides 2 versions of clock_gettime(), one with realtime
3949# support and one without. This means that the clock_gettime() don't
3950# need -lrt. We still need it for timer_create() so we check for this
3951# function in addition.
da93a1fd
AL
3952cat > $TMPC <<EOF
3953#include <signal.h>
3954#include <time.h>
8bacde8d
NC
3955int main(void) {
3956 timer_create(CLOCK_REALTIME, NULL, NULL);
3957 return clock_gettime(CLOCK_REALTIME, NULL);
3958}
da93a1fd
AL
3959EOF
3960
52166aa0 3961if compile_prog "" "" ; then
07ffa4bd 3962 :
8bacde8d 3963# we need pthread for static linking. use previous pthread test result
18e588b1
RL
3964elif compile_prog "" "$pthread_lib -lrt" ; then
3965 LIBS="$LIBS -lrt"
3966 libs_qga="$libs_qga -lrt"
da93a1fd
AL
3967fi
3968
31ff504d 3969if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
179cf400 3970 "$aix" != "yes" -a "$haiku" != "yes" ; then
6362a53f
JQ
3971 libs_softmmu="-lutil $libs_softmmu"
3972fi
3973
de5071c5 3974##########################################
cd4ec0b4
GH
3975# spice probe
3976if test "$spice" != "no" ; then
3977 cat > $TMPC << EOF
3978#include <spice.h>
3979int main(void) { spice_server_new(); return 0; }
3980EOF
710fc4f5
JD
3981 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3982 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
65d5d3f9
SW
3983 if $pkg_config --atleast-version=0.12.0 spice-server && \
3984 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
3985 compile_prog "$spice_cflags" "$spice_libs" ; then
3986 spice="yes"
3987 libs_softmmu="$libs_softmmu $spice_libs"
3988 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
3989 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3990 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
3991 else
3992 if test "$spice" = "yes" ; then
8efc9363
HT
3993 feature_not_found "spice" \
3994 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
3995 fi
3996 spice="no"
3997 fi
3998fi
3999
7b02f544 4000# check for smartcard support
afd347ab 4001smartcard_cflags=""
7b02f544
MAL
4002if test "$smartcard" != "no"; then
4003 if $pkg_config libcacard; then
4004 libcacard_cflags=$($pkg_config --cflags libcacard)
4005 libcacard_libs=$($pkg_config --libs libcacard)
4006 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4007 libs_softmmu="$libs_softmmu $libcacard_libs"
4008 smartcard="yes"
afd347ab 4009 else
7b02f544
MAL
4010 if test "$smartcard" = "yes"; then
4011 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 4012 fi
7b02f544 4013 smartcard="no"
111a38b0
RR
4014 fi
4015fi
111a38b0 4016
2b2325ff
GH
4017# check for libusb
4018if test "$libusb" != "no" ; then
65d5d3f9 4019 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4020 libusb="yes"
ca871ec8
SW
4021 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4022 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4023 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4024 libs_softmmu="$libs_softmmu $libusb_libs"
4025 else
4026 if test "$libusb" = "yes"; then
8efc9363 4027 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4028 fi
4029 libusb="no"
4030 fi
4031fi
4032
69354a83
HG
4033# check for usbredirparser for usb network redirection support
4034if test "$usb_redir" != "no" ; then
65d5d3f9 4035 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4036 usb_redir="yes"
ca871ec8
SW
4037 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4038 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83 4039 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
56ab2ad1 4040 libs_softmmu="$libs_softmmu $usb_redir_libs"
69354a83
HG
4041 else
4042 if test "$usb_redir" = "yes"; then
21684af0 4043 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
4044 fi
4045 usb_redir="no"
4046 fi
4047fi
4048
d9840e25
TS
4049##########################################
4050# check if we have VSS SDK headers for win
4051
4052if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4053 case "$vss_win32_sdk" in
4054 "") vss_win32_include="-I$source_path" ;;
4055 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4056 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4057 vss_win32_include="-I$source_path/.sdk/vss"
4058 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4059 ;;
4060 *) vss_win32_include="-I$vss_win32_sdk"
4061 esac
4062 cat > $TMPC << EOF
4063#define __MIDL_user_allocate_free_DEFINED__
4064#include <inc/win2003/vss.h>
4065int main(void) { return VSS_CTX_BACKUP; }
4066EOF
4067 if compile_prog "$vss_win32_include" "" ; then
4068 guest_agent_with_vss="yes"
4069 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4070 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4071 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4072 else
4073 if test "$vss_win32_sdk" != "" ; then
4074 echo "ERROR: Please download and install Microsoft VSS SDK:"
4075 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4076 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4077 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4078 echo "ERROR: The headers are extracted in the directory \`inc'."
4079 feature_not_found "VSS support"
4080 fi
4081 guest_agent_with_vss="no"
4082 fi
4083fi
4084
4085##########################################
4086# lookup Windows platform SDK (if not specified)
4087# The SDK is needed only to build .tlb (type library) file of guest agent
4088# VSS provider from the source. It is usually unnecessary because the
4089# pre-compiled .tlb file is included.
4090
4091if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4092 if test -z "$win_sdk"; then
4093 programfiles="$PROGRAMFILES"
4094 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4095 if test -n "$programfiles"; then
4096 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4097 else
4098 feature_not_found "Windows SDK"
4099 fi
4100 elif test "$win_sdk" = "no"; then
4101 win_sdk=""
4102 fi
4103fi
4104
50cbebb9
MR
4105##########################################
4106# check if mingw environment provides a recent ntddscsi.h
4107if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4108 cat > $TMPC << EOF
4109#include <windows.h>
4110#include <ntddscsi.h>
4111int main(void) {
4112#if !defined(IOCTL_SCSI_GET_ADDRESS)
4113#error Missing required ioctl definitions
4114#endif
4115 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4116 return addr.Lun;
4117}
4118EOF
4119 if compile_prog "" "" ; then
4120 guest_agent_ntddscsi=yes
c54e1eb4 4121 libs_qga="-lsetupapi $libs_qga"
50cbebb9
MR
4122 fi
4123fi
4124
9d9e1521
GH
4125##########################################
4126# virgl renderer probe
4127
4128if test "$virglrenderer" != "no" ; then
4129 cat > $TMPC << EOF
4130#include <virglrenderer.h>
4131int main(void) { virgl_renderer_poll(); return 0; }
4132EOF
4133 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4134 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4135 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4136 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4137 virglrenderer="yes"
4138 else
4139 if test "$virglrenderer" = "yes" ; then
4140 feature_not_found "virglrenderer"
4141 fi
4142 virglrenderer="no"
4143 fi
4144fi
4145
5f6b9e8f
BS
4146##########################################
4147# check if we have fdatasync
4148
4149fdatasync=no
4150cat > $TMPC << EOF
4151#include <unistd.h>
d1722a27
AR
4152int main(void) {
4153#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4154return fdatasync(0);
4155#else
e172fe11 4156#error Not supported
d1722a27
AR
4157#endif
4158}
5f6b9e8f
BS
4159EOF
4160if compile_prog "" "" ; then
4161 fdatasync=yes
4162fi
4163
e78815a5
AF
4164##########################################
4165# check if we have madvise
4166
4167madvise=no
4168cat > $TMPC << EOF
4169#include <sys/types.h>
4170#include <sys/mman.h>
832ce9c2 4171#include <stddef.h>
e78815a5
AF
4172int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4173EOF
4174if compile_prog "" "" ; then
4175 madvise=yes
4176fi
4177
4178##########################################
4179# check if we have posix_madvise
4180
4181posix_madvise=no
4182cat > $TMPC << EOF
4183#include <sys/mman.h>
832ce9c2 4184#include <stddef.h>
e78815a5
AF
4185int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4186EOF
4187if compile_prog "" "" ; then
4188 posix_madvise=yes
4189fi
4190
94a420b1
SH
4191##########################################
4192# check if trace backend exists
4193
5b808275 4194$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4195if test "$?" -ne 0 ; then
5b808275
LV
4196 error_exit "invalid trace backends" \
4197 "Please choose supported trace backends."
94a420b1
SH
4198fi
4199
7e24e92a
SH
4200##########################################
4201# For 'ust' backend, test if ust headers are present
5b808275 4202if have_backend "ust"; then
7e24e92a 4203 cat > $TMPC << EOF
bf15f63c 4204#include <lttng/tracepoint.h>
7e24e92a
SH
4205int main(void) { return 0; }
4206EOF
4207 if compile_prog "" "" ; then
bf15f63c 4208 if $pkg_config lttng-ust --exists; then
89138857 4209 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c
MG
4210 else
4211 lttng_ust_libs="-llttng-ust"
4212 fi
4213 if $pkg_config liburcu-bp --exists; then
89138857 4214 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
4215 else
4216 urcu_bp_libs="-lurcu-bp"
4217 fi
4218
4219 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4220 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 4221 else
bf15f63c 4222 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4223 fi
4224fi
b3d08c02
DB
4225
4226##########################################
4227# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4228if have_backend "dtrace"; then
b3d08c02 4229 if ! has 'dtrace' ; then
76ad07a4 4230 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4231 fi
c276b17d
DB
4232 trace_backend_stap="no"
4233 if has 'stap' ; then
4234 trace_backend_stap="yes"
4235 fi
b3d08c02
DB
4236fi
4237
023367e6 4238##########################################
519175a2 4239# check and set a backend for coroutine
d0e2fce5 4240
7c2acc70
PM
4241# We prefer ucontext, but it's not always possible. The fallback
4242# is sigcontext. gthread is not selectable except explicitly, because
4243# it is not functional enough to run QEMU proper. (It is occasionally
4244# useful for debugging purposes.) On Windows the only valid backend
4245# is the Windows-specific one.
4246
4247ucontext_works=no
4248if test "$darwin" != "yes"; then
4249 cat > $TMPC << EOF
d0e2fce5 4250#include <ucontext.h>
cdf84806
PM
4251#ifdef __stub_makecontext
4252#error Ignoring glibc stub makecontext which will always fail
4253#endif
75cafad7 4254int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4255EOF
7c2acc70
PM
4256 if compile_prog "" "" ; then
4257 ucontext_works=yes
4258 fi
4259fi
4260
4261if test "$coroutine" = ""; then
4262 if test "$mingw32" = "yes"; then
4263 coroutine=win32
4264 elif test "$ucontext_works" = "yes"; then
4265 coroutine=ucontext
4266 else
4267 coroutine=sigaltstack
d0e2fce5 4268 fi
519175a2 4269else
7c2acc70
PM
4270 case $coroutine in
4271 windows)
4272 if test "$mingw32" != "yes"; then
4273 error_exit "'windows' coroutine backend only valid for Windows"
4274 fi
4275 # Unfortunately the user visible backend name doesn't match the
4276 # coroutine-*.c filename for this case, so we have to adjust it here.
4277 coroutine=win32
4278 ;;
4279 ucontext)
4280 if test "$ucontext_works" != "yes"; then
4281 feature_not_found "ucontext"
4282 fi
4283 ;;
4284 gthread|sigaltstack)
4285 if test "$mingw32" = "yes"; then
4286 error_exit "only the 'windows' coroutine backend is valid for Windows"
4287 fi
4288 ;;
4289 *)
4290 error_exit "unknown coroutine backend $coroutine"
4291 ;;
4292 esac
d0e2fce5
AK
4293fi
4294
70c60c08
SH
4295if test "$coroutine_pool" = ""; then
4296 if test "$coroutine" = "gthread"; then
4297 coroutine_pool=no
4298 else
4299 coroutine_pool=yes
4300 fi
4301fi
4302if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4303 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4304fi
4305
d2042378
AK
4306##########################################
4307# check if we have open_by_handle_at
4308
4e1797f9 4309open_by_handle_at=no
d2042378
AK
4310cat > $TMPC << EOF
4311#include <fcntl.h>
acc55ba8
SW
4312#if !defined(AT_EMPTY_PATH)
4313# error missing definition
4314#else
75cafad7 4315int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4316#endif
d2042378
AK
4317EOF
4318if compile_prog "" "" ; then
4319 open_by_handle_at=yes
4320fi
4321
e06a765e
HPB
4322########################################
4323# check if we have linux/magic.h
4324
4325linux_magic_h=no
4326cat > $TMPC << EOF
4327#include <linux/magic.h>
4328int main(void) {
75cafad7 4329 return 0;
e06a765e
HPB
4330}
4331EOF
4332if compile_prog "" "" ; then
4333 linux_magic_h=yes
4334fi
4335
06d71fa1 4336########################################
c95e3080
KW
4337# check whether we can disable warning option with a pragma (this is needed
4338# to silence warnings in the headers of some versions of external libraries).
4339# This test has to be compiled with -Werror as otherwise an unknown pragma is
4340# only a warning.
4341#
4342# If we can't selectively disable warning in the code, disable -Werror so that
4343# the build doesn't fail anyway.
4344
06d71fa1
PM
4345pragma_disable_unused_but_set=no
4346cat > $TMPC << EOF
e6f53fd5 4347#pragma GCC diagnostic push
06d71fa1 4348#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
c95e3080 4349#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 4350#pragma GCC diagnostic pop
c95e3080 4351
06d71fa1
PM
4352int main(void) {
4353 return 0;
4354}
4355EOF
4356if compile_prog "-Werror" "" ; then
cc6e3ca9 4357 pragma_diagnostic_available=yes
c95e3080
KW
4358else
4359 werror=no
06d71fa1
PM
4360fi
4361
3f4349dc 4362########################################
541be927 4363# check if we have valgrind/valgrind.h
3f4349dc
KW
4364
4365valgrind_h=no
4366cat > $TMPC << EOF
4367#include <valgrind/valgrind.h>
3f4349dc 4368int main(void) {
3f4349dc
KW
4369 return 0;
4370}
4371EOF
4372if compile_prog "" "" ; then
4373 valgrind_h=yes
4374fi
4375
8ab1bf12
LC
4376########################################
4377# check if environ is declared
4378
4379has_environ=no
4380cat > $TMPC << EOF
4381#include <unistd.h>
4382int main(void) {
c075a723 4383 environ = 0;
8ab1bf12
LC
4384 return 0;
4385}
4386EOF
4387if compile_prog "" "" ; then
4388 has_environ=yes
4389fi
4390
76a347e1
RH
4391########################################
4392# check if cpuid.h is usable.
4393
4394cpuid_h=no
4395cat > $TMPC << EOF
4396#include <cpuid.h>
4397int main(void) {
774d566c
PM
4398 unsigned a, b, c, d;
4399 int max = __get_cpuid_max(0, 0);
4400
4401 if (max >= 1) {
4402 __cpuid(1, a, b, c, d);
4403 }
4404
4405 if (max >= 7) {
4406 __cpuid_count(7, 0, a, b, c, d);
4407 }
4408
4409 return 0;
76a347e1
RH
4410}
4411EOF
4412if compile_prog "" "" ; then
4413 cpuid_h=yes
4414fi
4415
f540166b
RH
4416########################################
4417# check if __[u]int128_t is usable.
4418
4419int128=no
4420cat > $TMPC << EOF
a00f66ab
SW
4421#if defined(__clang_major__) && defined(__clang_minor__)
4422# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4423# error __int128_t does not work in CLANG before 3.2
4424# endif
4425#endif
f540166b
RH
4426__int128_t a;
4427__uint128_t b;
4428int main (void) {
4429 a = a + b;
4430 b = a * b;
464e3671 4431 a = a * a;
f540166b
RH
4432 return 0;
4433}
4434EOF
4435if compile_prog "" "" ; then
4436 int128=yes
4437fi
76a347e1 4438
1e6e9aca
RH
4439########################################
4440# check if getauxval is available.
4441
4442getauxval=no
4443cat > $TMPC << EOF
4444#include <sys/auxv.h>
4445int main(void) {
4446 return getauxval(AT_HWCAP) == 0;
4447}
4448EOF
4449if compile_prog "" "" ; then
4450 getauxval=yes
4451fi
4452
fd0e6053
JS
4453########################################
4454# check if ccache is interfering with
4455# semantic analysis of macros
4456
5e4dfd3d 4457unset CCACHE_CPP2
fd0e6053
JS
4458ccache_cpp2=no
4459cat > $TMPC << EOF
4460static const int Z = 1;
4461#define fn() ({ Z; })
4462#define TAUT(X) ((X) == Z)
4463#define PAREN(X, Y) (X == Y)
4464#define ID(X) (X)
4465int main(int argc, char *argv[])
4466{
4467 int x = 0, y = 0;
4468 x = ID(x);
4469 x = fn();
4470 fn();
4471 if (PAREN(x, y)) return 0;
4472 if (TAUT(Z)) return 0;
4473 return 0;
4474}
4475EOF
4476
4477if ! compile_object "-Werror"; then
4478 ccache_cpp2=yes
4479fi
4480
b553a042
JS
4481#################################################
4482# clang does not support glibc + FORTIFY_SOURCE.
4483
4484if test "$fortify_source" != "no"; then
4485 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4486 fortify_source="no";
cfcc7c14
JS
4487 elif test -n "$cxx" &&
4488 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
4489 fortify_source="no";
4490 else
4491 fortify_source="yes"
4492 fi
4493fi
4494
277abf15
JV
4495##########################################
4496# check if struct fsxattr is available via linux/fs.h
4497
4498have_fsxattr=no
4499cat > $TMPC << EOF
4500#include <linux/fs.h>
4501struct fsxattr foo;
4502int main(void) {
4503 return 0;
4504}
4505EOF
4506if compile_prog "" "" ; then
4507 have_fsxattr=yes
4508fi
4509
b66e10e4
PM
4510##########################################
4511# check if rtnetlink.h exists and is useful
575b22b1
LV
4512have_rtnetlink=no
4513cat > $TMPC << EOF
4514#include <linux/rtnetlink.h>
4515int main(void) {
4516 return IFLA_PROTO_DOWN;
4517}
4518EOF
4519if compile_prog "" "" ; then
4520 have_rtnetlink=yes
4521fi
4522
6969ec6c
JC
4523#################################################
4524# Sparc implicitly links with --relax, which is
4525# incompatible with -r, so --no-relax should be
4526# given. It does no harm to give it on other
4527# platforms too.
4528
4529# Note: the prototype is needed since QEMU_CFLAGS
4530# contains -Wmissing-prototypes
4531cat > $TMPC << EOF
4532extern int foo(void);
4533int foo(void) { return 0; }
4534EOF
4535if ! compile_object ""; then
4536 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4537fi
4538if do_cc -nostdlib -Wl,-r -Wl,--no-relax -o $TMPMO $TMPO; then
4539 LD_REL_FLAGS="-Wl,--no-relax"
4540fi
4541
7e24e92a 4542##########################################
e86ecd4b
JQ
4543# End of CC checks
4544# After here, no more $cc or $ld runs
4545
1d728c39
BS
4546if test "$gcov" = "yes" ; then
4547 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4548 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
b553a042 4549elif test "$fortify_source" = "yes" ; then
e600cdf3 4550 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
ce278618
PM
4551elif test "$debug" = "no"; then
4552 CFLAGS="-O2 $CFLAGS"
e86ecd4b 4553fi
a316e378 4554
6542aa9c
PL
4555##########################################
4556# Do we have libnfs
4557if test "$libnfs" != "no" ; then
b7d769c9 4558 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
4559 libnfs="yes"
4560 libnfs_libs=$($pkg_config --libs libnfs)
4561 LIBS="$LIBS $libnfs_libs"
4562 else
4563 if test "$libnfs" = "yes" ; then
8efc9363 4564 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
4565 fi
4566 libnfs="no"
4567 fi
4568fi
1d728c39 4569
6ca026cb
PM
4570# Now we've finished running tests it's OK to add -Werror to the compiler flags
4571if test "$werror" = "yes"; then
4572 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4573fi
4574
e86ecd4b
JQ
4575if test "$solaris" = "no" ; then
4576 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 4577 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
4578 fi
4579fi
4580
94dd53c5
GH
4581# test if pod2man has --utf8 option
4582if pod2man --help | grep -q utf8; then
4583 POD2MAN="pod2man --utf8"
4584else
4585 POD2MAN="pod2man"
4586fi
4587
952afb71
BS
4588# Use ASLR, no-SEH and DEP if available
4589if test "$mingw32" = "yes" ; then
4590 for flag in --dynamicbase --no-seh --nxcompat; do
4591 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4592 LDFLAGS="-Wl,$flag $LDFLAGS"
4593 fi
4594 done
4595fi
4596
10ea68b3 4597qemu_confdir=$sysconfdir$confsuffix
e26110cf 4598qemu_moddir=$libdir$confsuffix
528ae5b8 4599qemu_datadir=$datadir$confsuffix
834574ea 4600qemu_localedir="$datadir/locale"
e7b45cc4 4601
4b1c11fd
DB
4602tools=""
4603if test "$want_tools" = "yes" ; then
ca35f780 4604 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
4605 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4606 tools="qemu-nbd\$(EXESUF) $tools"
a75eb03b 4607 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd
DB
4608 fi
4609fi
4610if test "$softmmu" = yes ; then
983eef5a 4611 if test "$virtfs" != no ; then
aabfd88d
AF
4612 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4613 virtfs=yes
4614 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4615 else
4616 if test "$virtfs" = yes; then
3f3b5388 4617 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
983eef5a 4618 fi
17500370 4619 virtfs=no
aabfd88d 4620 fi
17bff52b 4621 fi
e8ef31a3 4622fi
9d6bc27b
MR
4623
4624# Probe for guest agent support/options
4625
e8ef31a3 4626if [ "$guest_agent" != "no" ]; then
b39297ae 4627 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 4628 tools="qemu-ga $tools"
e8ef31a3
MT
4629 guest_agent=yes
4630 elif [ "$guest_agent" != yes ]; then
4631 guest_agent=no
4632 else
4633 error_exit "Guest agent is not supported on this platform"
ca35f780 4634 fi
00c705fb 4635fi
ca35f780 4636
9d6bc27b
MR
4637# Guest agent Window MSI package
4638
4639if test "$guest_agent" != yes; then
4640 if test "$guest_agent_msi" = yes; then
4641 error_exit "MSI guest agent package requires guest agent enabled"
4642 fi
4643 guest_agent_msi=no
4644elif test "$mingw32" != "yes"; then
4645 if test "$guest_agent_msi" = "yes"; then
4646 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4647 fi
4648 guest_agent_msi=no
4649elif ! has wixl; then
4650 if test "$guest_agent_msi" = "yes"; then
4651 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4652 fi
4653 guest_agent_msi=no
1a34904e
MR
4654else
4655 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4656 # disabled explicitly
4657 if test "$guest_agent_msi" != "no"; then
4658 guest_agent_msi=yes
4659 fi
9d6bc27b
MR
4660fi
4661
1a34904e 4662if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
4663 if test "$guest_agent_with_vss" = "yes"; then
4664 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4665 fi
4666
4667 if test "$QEMU_GA_MANUFACTURER" = ""; then
4668 QEMU_GA_MANUFACTURER=QEMU
4669 fi
4670
4671 if test "$QEMU_GA_DISTRO" = ""; then
4672 QEMU_GA_DISTRO=Linux
4673 fi
4674
4675 if test "$QEMU_GA_VERSION" = ""; then
89138857 4676 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
4677 fi
4678
89138857 4679 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
4680
4681 case "$cpu" in
4682 x86_64)
4683 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4684 ;;
4685 i386)
4686 QEMU_GA_MSI_ARCH="-D Arch=32"
4687 ;;
4688 *)
4689 error_exit "CPU $cpu not supported for building installation package"
4690 ;;
4691 esac
4692fi
4693
ca35f780
PB
4694# Mac OS X ships with a broken assembler
4695roms=
4696if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4697 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4698 "$softmmu" = yes ; then
4699 roms="optionrom"
4700fi
d0384d1d 4701if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
4702 roms="$roms spapr-rtas"
4703fi
ca35f780 4704
9933c305
CB
4705if test "$cpu" = "s390x" ; then
4706 roms="$roms s390-ccw"
4707fi
4708
964c6fa1 4709# Probe for the need for relocating the user-only binary.
92fe2ba8 4710if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
964c6fa1
RH
4711 textseg_addr=
4712 case "$cpu" in
479eb121
RH
4713 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4714 # ??? Rationale for choosing this address
964c6fa1
RH
4715 textseg_addr=0x60000000
4716 ;;
4717 mips)
479eb121
RH
4718 # A 256M aligned address, high in the address space, with enough
4719 # room for the code_gen_buffer above it before the stack.
4720 textseg_addr=0x60000000
964c6fa1
RH
4721 ;;
4722 esac
4723 if [ -n "$textseg_addr" ]; then
4724 cat > $TMPC <<EOF
4725 int main(void) { return 0; }
4726EOF
4727 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4728 if ! compile_prog "" "$textseg_ldflags"; then
4729 # In case ld does not support -Ttext-segment, edit the default linker
4730 # script via sed to set the .text start addr. This is needed on FreeBSD
4731 # at least.
92fe2ba8
PM
4732 if ! $ld --verbose >/dev/null 2>&1; then
4733 error_exit \
4734 "We need to link the QEMU user mode binaries at a" \
4735 "specific text address. Unfortunately your linker" \
4736 "doesn't support either the -Ttext-segment option or" \
4737 "printing the default linker script with --verbose." \
4738 "If you don't want the user mode binaries, pass the" \
4739 "--disable-user option to configure."
4740 fi
4741
964c6fa1
RH
4742 $ld --verbose | sed \
4743 -e '1,/==================================================/d' \
4744 -e '/==================================================/,$d' \
4745 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4746 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4747 textseg_ldflags="-Wl,-T../config-host.ld"
4748 fi
4749 fi
4750fi
4751
02d34f62
CR
4752echo_version() {
4753 if test "$1" = "yes" ; then
4754 echo "($2)"
4755 fi
4756}
4757
50e12060
JK
4758# prepend pixman and ftd flags after all config tests are done
4759QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4760libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 4761
43ce4dfe 4762echo "Install prefix $prefix"
89138857
SW
4763echo "BIOS directory $(eval echo $qemu_datadir)"
4764echo "binary directory $(eval echo $bindir)"
4765echo "library directory $(eval echo $libdir)"
4766echo "module directory $(eval echo $qemu_moddir)"
4767echo "libexec directory $(eval echo $libexecdir)"
4768echo "include directory $(eval echo $includedir)"
4769echo "config directory $(eval echo $sysconfdir)"
11d9f695 4770if test "$mingw32" = "no" ; then
89138857
SW
4771echo "local state directory $(eval echo $local_statedir)"
4772echo "Manual directory $(eval echo $mandir)"
43ce4dfe 4773echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
4774else
4775echo "local state directory queried at runtime"
d9840e25 4776echo "Windows SDK $win_sdk"
11d9f695 4777fi
5a67135a 4778echo "Source path $source_path"
43ce4dfe 4779echo "C compiler $cc"
83469015 4780echo "Host C compiler $host_cc"
83f73fce 4781echo "C++ compiler $cxx"
3c4a4d0d 4782echo "Objective-C compiler $objcc"
45d285ab 4783echo "ARFLAGS $ARFLAGS"
0c439cbf 4784echo "CFLAGS $CFLAGS"
a558ee17 4785echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 4786echo "LDFLAGS $LDFLAGS"
43ce4dfe 4787echo "make $make"
6a882643 4788echo "install $install"
c886edfb 4789echo "python $python"
e2d8830e
BS
4790if test "$slirp" = "yes" ; then
4791 echo "smbd $smbd"
4792fi
17969268 4793echo "module support $modules"
43ce4dfe 4794echo "host CPU $cpu"
de83cd02 4795echo "host big endian $bigendian"
97a847bc 4796echo "target list $target_list"
ade25b0d 4797echo "tcg debug enabled $debug_tcg"
43ce4dfe 4798echo "gprof enabled $gprof"
03b4fe7d 4799echo "sparse enabled $sparse"
1625af87 4800echo "strip binaries $strip_opt"
05c2a3e7 4801echo "profiler $profiler"
43ce4dfe 4802echo "static build $static"
5b0753e0
FB
4803if test "$darwin" = "yes" ; then
4804 echo "Cocoa support $cocoa"
4805fi
e2134eb9 4806echo "pixman $pixman"
89138857
SW
4807echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
4808echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
925a0400 4809echo "GTK GL support $gtk_gl"
89138857 4810echo "VTE support $vte $(echo_version $vte $vteversion)"
a1c5e949 4811echo "TLS priority $tls_priority"
ddbb0d09 4812echo "GNUTLS support $gnutls"
b917da4c 4813echo "GNUTLS rnd $gnutls_rnd"
91bfcdb0 4814echo "libgcrypt $gcrypt"
37788f25 4815echo "libgcrypt kdf $gcrypt_kdf"
89138857 4816echo "nettle $nettle $(echo_version $nettle $nettle_version)"
fff2f982 4817echo "nettle kdf $nettle_kdf"
9a2fd434 4818echo "libtasn1 $tasn1"
4d3b6f6e 4819echo "curses support $curses"
9d9e1521 4820echo "virgl support $virglrenderer"
769ce76d 4821echo "curl support $curl"
67b915a5 4822echo "mingw32 support $mingw32"
0c58ac1c 4823echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
4824echo "Block whitelist (rw) $block_drv_rw_whitelist"
4825echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 4826echo "VirtFS support $virtfs"
821601ea
JS
4827echo "VNC support $vnc"
4828if test "$vnc" = "yes" ; then
821601ea
JS
4829 echo "VNC SASL support $vnc_sasl"
4830 echo "VNC JPEG support $vnc_jpeg"
4831 echo "VNC PNG support $vnc_png"
821601ea 4832fi
3142255c
BS
4833if test -n "$sparc_cpu"; then
4834 echo "Target Sparc Arch $sparc_cpu"
4835fi
e37630ca 4836echo "xen support $xen"
3996e85c
PD
4837if test "$xen" = "yes" ; then
4838 echo "xen ctrl version $xen_ctrl_version"
64a7ad6f 4839 echo "pv dom build $xen_pv_domain_build"
3996e85c 4840fi
2e4d9fb1 4841echo "brlapi support $brlapi"
a20a6f46 4842echo "bluez support $bluez"
a25dba17 4843echo "Documentation $docs"
40d6444e 4844echo "PIE $pie"
8a16d273 4845echo "vde support $vde"
58952137 4846echo "netmap support $netmap"
5c6c3a6c 4847echo "Linux AIO support $linux_aio"
758e8e38 4848echo "ATTR/XATTR support $attr"
77755340 4849echo "Install blobs $blobs"
b31a0277 4850echo "KVM support $kvm"
2da776db 4851echo "RDMA support $rdma"
9195b2c2 4852echo "TCG interpreter $tcg_interpreter"
f652e6af 4853echo "fdt support $fdt"
ceb42de8 4854echo "preadv support $preadv"
5f6b9e8f 4855echo "fdatasync $fdatasync"
e78815a5
AF
4856echo "madvise $madvise"
4857echo "posix_madvise $posix_madvise"
ee682d27 4858echo "uuid support $uuid"
47e98658 4859echo "libcap-ng support $cap_ng"
d5970055 4860echo "vhost-net support $vhost_net"
5e9be92d 4861echo "vhost-scsi support $vhost_scsi"
5b808275 4862echo "Trace backends $trace_backends"
713572a7 4863if have_backend "simple"; then
9410b56c 4864echo "Trace output file $trace_file-<pid>"
e00e36fb 4865fi
89138857 4866echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
f27aaf4b 4867echo "rbd support $rbd"
dce512de 4868echo "xfsctl support $xfs"
7b02f544 4869echo "smartcard support $smartcard"
2b2325ff 4870echo "libusb $libusb"
69354a83 4871echo "usb net redir $usb_redir"
da076ffe 4872echo "OpenGL support $opengl"
014cb152 4873echo "OpenGL dmabufs $opengl_dmabuf"
c589b249 4874echo "libiscsi support $libiscsi"
6542aa9c 4875echo "libnfs support $libnfs"
d138cee9 4876echo "build guest agent $guest_agent"
d9840e25 4877echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 4878echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 4879echo "QGA MSI support $guest_agent_msi"
f794573e 4880echo "seccomp support $seccomp"
7c2acc70 4881echo "coroutine backend $coroutine"
70c60c08 4882echo "coroutine pool $coroutine_pool"
eb100396 4883echo "GlusterFS support $glusterfs"
c9a12e75 4884echo "Archipelago support $archipelago"
1d728c39
BS
4885echo "gcov $gcov_tool"
4886echo "gcov enabled $gcov"
ab214c29 4887echo "TPM support $tpm"
0a12ec87 4888echo "libssh2 support $libssh2"
3b8acc11 4889echo "TPM passthrough $tpm_passthrough"
3556c233 4890echo "QOM debugging $qom_cast_debug"
4f18b782 4891echo "vhdx $vhdx"
607dacd0
QN
4892echo "lzo support $lzo"
4893echo "snappy support $snappy"
6b383c08 4894echo "bzip2 support $bzip2"
a99d57bb 4895echo "NUMA host support $numa"
2847b469 4896echo "tcmalloc support $tcmalloc"
7b01cb97 4897echo "jemalloc support $jemalloc"
99f2dbd3 4898echo "avx2 optimization $avx2_opt"
67b915a5 4899
1ba16968 4900if test "$sdl_too_old" = "yes"; then
24b55b96 4901echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 4902fi
7d13299d 4903
98ec69ac 4904config_host_mak="config-host.mak"
98ec69ac 4905
dbd99ae3
SW
4906echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4907
98ec69ac 4908echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 4909echo >> $config_host_mak
98ec69ac 4910
e6c3b0f7 4911echo all: >> $config_host_mak
99d7cc75
PB
4912echo "prefix=$prefix" >> $config_host_mak
4913echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 4914echo "libdir=$libdir" >> $config_host_mak
8bf188aa 4915echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 4916echo "includedir=$includedir" >> $config_host_mak
99d7cc75 4917echo "mandir=$mandir" >> $config_host_mak
99d7cc75 4918echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 4919echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce
EH
4920echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4921echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 4922echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
4923if test "$mingw32" = "no" ; then
4924 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4925fi
f354b1a1 4926echo "qemu_helperdir=$libexecdir" >> $config_host_mak
f9943cd5
GH
4927echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4928echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
834574ea 4929echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 4930echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
804edf29 4931
98ec69ac 4932echo "ARCH=$ARCH" >> $config_host_mak
727e5283 4933
f8393946 4934if test "$debug_tcg" = "yes" ; then
2358a494 4935 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 4936fi
1625af87 4937if test "$strip_opt" = "yes" ; then
52ba784d 4938 echo "STRIP=${strip}" >> $config_host_mak
1625af87 4939fi
7d13299d 4940if test "$bigendian" = "yes" ; then
e2542fe2 4941 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 4942fi
67b915a5 4943if test "$mingw32" = "yes" ; then
98ec69ac 4944 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 4945 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
4946 version_major=${rc_version%%.*}
4947 rc_version=${rc_version#*.}
4948 version_minor=${rc_version%%.*}
4949 rc_version=${rc_version#*.}
4950 version_subminor=${rc_version%%.*}
4951 version_micro=0
4952 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4953 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
4954 if test "$guest_agent_with_vss" = "yes" ; then
4955 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 4956 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
4957 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4958 fi
50cbebb9
MR
4959 if test "$guest_agent_ntddscsi" = "yes" ; then
4960 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4961 fi
1a34904e 4962 if test "$guest_agent_msi" = "yes"; then
9dacf32d
YH
4963 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4964 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4965 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4966 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4967 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4968 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4969 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4970 fi
210fa556 4971else
35f4df27 4972 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
4973fi
4974
4975if test "$linux" = "yes" ; then
4976 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 4977fi
128ab2ff 4978
83fb7adf 4979if test "$darwin" = "yes" ; then
98ec69ac 4980 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 4981fi
b29fe3ed 4982
4983if test "$aix" = "yes" ; then
98ec69ac 4984 echo "CONFIG_AIX=y" >> $config_host_mak
b29fe3ed 4985fi
4986
ec530c81 4987if test "$solaris" = "yes" ; then
98ec69ac 4988 echo "CONFIG_SOLARIS=y" >> $config_host_mak
2358a494 4989 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
0475a5ca 4990 if test "$needs_libsunmath" = "yes" ; then
75b5a697 4991 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
0475a5ca 4992 fi
ec530c81 4993fi
179cf400
AF
4994if test "$haiku" = "yes" ; then
4995 echo "CONFIG_HAIKU=y" >> $config_host_mak
4996fi
97a847bc 4997if test "$static" = "yes" ; then
98ec69ac 4998 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 4999fi
1ba16968 5000if test "$profiler" = "yes" ; then
2358a494 5001 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 5002fi
c20709aa 5003if test "$slirp" = "yes" ; then
98ec69ac 5004 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 5005 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 5006fi
8a16d273 5007if test "$vde" = "yes" ; then
98ec69ac 5008 echo "CONFIG_VDE=y" >> $config_host_mak
8a16d273 5009fi
58952137
VM
5010if test "$netmap" = "yes" ; then
5011 echo "CONFIG_NETMAP=y" >> $config_host_mak
5012fi
015a33bd
GA
5013if test "$l2tpv3" = "yes" ; then
5014 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5015fi
47e98658
CB
5016if test "$cap_ng" = "yes" ; then
5017 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5018fi
2358a494 5019echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 5020for drv in $audio_drv_list; do
89138857 5021 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
98ec69ac 5022 echo "$def=y" >> $config_host_mak
0c58ac1c 5023done
67f86e8e
JQ
5024if test "$audio_pt_int" = "yes" ; then
5025 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5026fi
d5631638 5027if test "$audio_win_int" = "yes" ; then
5028 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5029fi
b64ec4e4
FZ
5030echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5031echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
5032if test "$vnc" = "yes" ; then
5033 echo "CONFIG_VNC=y" >> $config_host_mak
5034fi
2f9606b3 5035if test "$vnc_sasl" = "yes" ; then
98ec69ac 5036 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 5037fi
821601ea 5038if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 5039 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 5040fi
821601ea 5041if test "$vnc_png" = "yes" ; then
efe556ad 5042 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 5043fi
76655d6d 5044if test "$fnmatch" = "yes" ; then
2358a494 5045 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 5046fi
ee682d27
SW
5047if test "$uuid" = "yes" ; then
5048 echo "CONFIG_UUID=y" >> $config_host_mak
5049fi
dce512de
CH
5050if test "$xfs" = "yes" ; then
5051 echo "CONFIG_XFS=y" >> $config_host_mak
5052fi
89138857 5053qemu_version=$(head $source_path/VERSION)
98ec69ac 5054echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 5055echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 5056echo "SRC_PATH=$source_path" >> $config_host_mak
98ec69ac 5057echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 5058if [ "$docs" = "yes" ] ; then
98ec69ac 5059 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 5060fi
17969268 5061if test "$modules" = "yes"; then
e26110cf
FZ
5062 # $shacmd can generate a hash started with digit, which the compiler doesn't
5063 # like as an symbol. So prefix it with an underscore
89138857 5064 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
5065 echo "CONFIG_MODULES=y" >> $config_host_mak
5066fi
1ac88f28 5067if test "$sdl" = "yes" ; then
98ec69ac 5068 echo "CONFIG_SDL=y" >> $config_host_mak
a3f4d63d 5069 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 5070 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
49ecc3fa
FB
5071fi
5072if test "$cocoa" = "yes" ; then
98ec69ac 5073 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
5074fi
5075if test "$curses" = "yes" ; then
98ec69ac 5076 echo "CONFIG_CURSES=y" >> $config_host_mak
49ecc3fa 5077fi
ebc996f3 5078if test "$utimens" = "yes" ; then
2358a494 5079 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
ebc996f3 5080fi
099d6b0f 5081if test "$pipe2" = "yes" ; then
2358a494 5082 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 5083fi
40ff6d7e
KW
5084if test "$accept4" = "yes" ; then
5085 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5086fi
3ce34dfb 5087if test "$splice" = "yes" ; then
2358a494 5088 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 5089fi
c2882b96
RV
5090if test "$eventfd" = "yes" ; then
5091 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5092fi
751bcc39
MAL
5093if test "$memfd" = "yes" ; then
5094 echo "CONFIG_MEMFD=y" >> $config_host_mak
5095fi
d0927938
UH
5096if test "$fallocate" = "yes" ; then
5097 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5098fi
3d4fa43e
KK
5099if test "$fallocate_punch_hole" = "yes" ; then
5100 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5101fi
b953f075
DL
5102if test "$fallocate_zero_range" = "yes" ; then
5103 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5104fi
ed911435
KW
5105if test "$posix_fallocate" = "yes" ; then
5106 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5107fi
c727f47d
PM
5108if test "$sync_file_range" = "yes" ; then
5109 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5110fi
dace20dc
PM
5111if test "$fiemap" = "yes" ; then
5112 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5113fi
d0927938
UH
5114if test "$dup3" = "yes" ; then
5115 echo "CONFIG_DUP3=y" >> $config_host_mak
5116fi
4e0c6529
AB
5117if test "$ppoll" = "yes" ; then
5118 echo "CONFIG_PPOLL=y" >> $config_host_mak
5119fi
cd758dd0
AB
5120if test "$prctl_pr_set_timerslack" = "yes" ; then
5121 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5122fi
3b6edd16
PM
5123if test "$epoll" = "yes" ; then
5124 echo "CONFIG_EPOLL=y" >> $config_host_mak
5125fi
5126if test "$epoll_create1" = "yes" ; then
5127 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5128fi
a8fd1aba
PM
5129if test "$sendfile" = "yes" ; then
5130 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5131fi
51834341
RV
5132if test "$timerfd" = "yes" ; then
5133 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5134fi
9af5c906
RV
5135if test "$setns" = "yes" ; then
5136 echo "CONFIG_SETNS=y" >> $config_host_mak
5137fi
3b3f24ad 5138if test "$inotify" = "yes" ; then
2358a494 5139 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 5140fi
c05c7a73
RV
5141if test "$inotify1" = "yes" ; then
5142 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5143fi
6ae9a1f4
JQ
5144if test "$byteswap_h" = "yes" ; then
5145 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5146fi
5147if test "$bswap_h" = "yes" ; then
5148 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5149fi
769ce76d 5150if test "$curl" = "yes" ; then
d3399d7c 5151 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 5152 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 5153 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 5154fi
2e4d9fb1 5155if test "$brlapi" = "yes" ; then
98ec69ac 5156 echo "CONFIG_BRLAPI=y" >> $config_host_mak
2e4d9fb1 5157fi
fb599c9a 5158if test "$bluez" = "yes" ; then
98ec69ac 5159 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 5160 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 5161fi
d46f7c9e 5162if test "$glib_subprocess" = "yes" ; then
9d41401b
MT
5163 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5164fi
e18df141 5165echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
a4ccabcf
AL
5166if test "$gtk" = "yes" ; then
5167 echo "CONFIG_GTK=y" >> $config_host_mak
a3f4d63d 5168 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 5169 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 5170 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
5171 if test "$gtk_gl" = "yes" ; then
5172 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5173 fi
bbbf9bfb 5174fi
a1c5e949 5175echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
5176if test "$gnutls" = "yes" ; then
5177 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5178fi
b917da4c
DB
5179if test "$gnutls_rnd" = "yes" ; then
5180 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5181fi
91bfcdb0
DB
5182if test "$gcrypt" = "yes" ; then
5183 echo "CONFIG_GCRYPT=y" >> $config_host_mak
37788f25
DB
5184 if test "$gcrypt_kdf" = "yes" ; then
5185 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5186 fi
62893b67 5187fi
91bfcdb0
DB
5188if test "$nettle" = "yes" ; then
5189 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 5190 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
fff2f982
DB
5191 if test "$nettle_kdf" = "yes" ; then
5192 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5193 fi
ed754746 5194fi
9a2fd434
DB
5195if test "$tasn1" = "yes" ; then
5196 echo "CONFIG_TASN1=y" >> $config_host_mak
5197fi
559607ea
DB
5198if test "$have_ifaddrs_h" = "yes" ; then
5199 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5200fi
277abf15
JV
5201
5202# Work around a system header bug with some kernel/XFS header
5203# versions where they both try to define 'struct fsxattr':
5204# xfs headers will not try to redefine structs from linux headers
5205# if this macro is set.
5206if test "$have_fsxattr" = "yes" ; then
5207 echo "HAVE_FSXATTR=y" >> $config_host_mak
5208fi
bbbf9bfb
SW
5209if test "$vte" = "yes" ; then
5210 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf
AL
5211 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5212fi
9d9e1521
GH
5213if test "$virglrenderer" = "yes" ; then
5214 echo "CONFIG_VIRGL=y" >> $config_host_mak
5215 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5216 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5217fi
e37630ca 5218if test "$xen" = "yes" ; then
6dbd588a 5219 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 5220 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
64a7ad6f
IC
5221 if test "$xen_pv_domain_build" = "yes" ; then
5222 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5223 fi
e37630ca 5224fi
5c6c3a6c
CH
5225if test "$linux_aio" = "yes" ; then
5226 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5227fi
758e8e38
VJ
5228if test "$attr" = "yes" ; then
5229 echo "CONFIG_ATTR=y" >> $config_host_mak
5230fi
4f26f2b6
AK
5231if test "$libattr" = "yes" ; then
5232 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5233fi
983eef5a
MI
5234if test "$virtfs" = "yes" ; then
5235 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 5236fi
5e9be92d
NB
5237if test "$vhost_scsi" = "yes" ; then
5238 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5239fi
03ce5744
NN
5240if test "$vhost_net" = "yes" ; then
5241 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5242fi
77755340 5243if test "$blobs" = "yes" ; then
98ec69ac 5244 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 5245fi
bf9298b9 5246if test "$iovec" = "yes" ; then
2358a494 5247 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 5248fi
ceb42de8 5249if test "$preadv" = "yes" ; then
2358a494 5250 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 5251fi
f652e6af 5252if test "$fdt" = "yes" ; then
3f0855b1 5253 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 5254fi
dcc38d1c
MT
5255if test "$signalfd" = "yes" ; then
5256 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5257fi
9195b2c2
SW
5258if test "$tcg_interpreter" = "yes" ; then
5259 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5260fi
5f6b9e8f
BS
5261if test "$fdatasync" = "yes" ; then
5262 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5263fi
e78815a5
AF
5264if test "$madvise" = "yes" ; then
5265 echo "CONFIG_MADVISE=y" >> $config_host_mak
5266fi
5267if test "$posix_madvise" = "yes" ; then
5268 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5269fi
97a847bc 5270
cd4ec0b4
GH
5271if test "$spice" = "yes" ; then
5272 echo "CONFIG_SPICE=y" >> $config_host_mak
5273fi
36707144 5274
7b02f544
MAL
5275if test "$smartcard" = "yes" ; then
5276 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
111a38b0
RR
5277fi
5278
2b2325ff
GH
5279if test "$libusb" = "yes" ; then
5280 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5281fi
5282
69354a83
HG
5283if test "$usb_redir" = "yes" ; then
5284 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5285fi
5286
da076ffe
GH
5287if test "$opengl" = "yes" ; then
5288 echo "CONFIG_OPENGL=y" >> $config_host_mak
f676c67e 5289 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
da076ffe 5290 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
5291 if test "$opengl_dmabuf" = "yes" ; then
5292 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5293 fi
20ff075b
MW
5294fi
5295
99f2dbd3
LL
5296if test "$avx2_opt" = "yes" ; then
5297 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5298fi
5299
607dacd0
QN
5300if test "$lzo" = "yes" ; then
5301 echo "CONFIG_LZO=y" >> $config_host_mak
5302fi
5303
5304if test "$snappy" = "yes" ; then
5305 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5306fi
5307
6b383c08
PW
5308if test "$bzip2" = "yes" ; then
5309 echo "CONFIG_BZIP2=y" >> $config_host_mak
5310 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5311fi
5312
c589b249 5313if test "$libiscsi" = "yes" ; then
d3399d7c 5314 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
5315 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5316 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
5317fi
5318
6542aa9c
PL
5319if test "$libnfs" = "yes" ; then
5320 echo "CONFIG_LIBNFS=y" >> $config_host_mak
5321fi
5322
f794573e
EO
5323if test "$seccomp" = "yes"; then
5324 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5325fi
5326
83fb7adf 5327# XXX: suppress that
7d3505c5 5328if [ "$bsd" = "yes" ] ; then
2358a494 5329 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
5330fi
5331
4d9310f4
DB
5332if test "$localtime_r" = "yes" ; then
5333 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5334fi
3556c233
PB
5335if test "$qom_cast_debug" = "yes" ; then
5336 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5337fi
f27aaf4b 5338if test "$rbd" = "yes" ; then
d3399d7c 5339 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
5340 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5341 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
5342fi
5343
7c2acc70 5344echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
5345if test "$coroutine_pool" = "yes" ; then
5346 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5347else
5348 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5349fi
20ff6c80 5350
d2042378
AK
5351if test "$open_by_handle_at" = "yes" ; then
5352 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5353fi
5354
e06a765e
HPB
5355if test "$linux_magic_h" = "yes" ; then
5356 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
5357fi
5358
cc6e3ca9
GH
5359if test "$pragma_diagnostic_available" = "yes" ; then
5360 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
5361fi
5362
3f4349dc
KW
5363if test "$valgrind_h" = "yes" ; then
5364 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5365fi
5366
8ab1bf12
LC
5367if test "$has_environ" = "yes" ; then
5368 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
5369fi
5370
76a347e1
RH
5371if test "$cpuid_h" = "yes" ; then
5372 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5373fi
5374
f540166b
RH
5375if test "$int128" = "yes" ; then
5376 echo "CONFIG_INT128=y" >> $config_host_mak
5377fi
5378
1e6e9aca
RH
5379if test "$getauxval" = "yes" ; then
5380 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5381fi
5382
eb100396 5383if test "$glusterfs" = "yes" ; then
d3399d7c 5384 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
5385 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5386 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
5387fi
5388
d85fa9eb
JC
5389if test "$glusterfs_xlator_opt" = "yes" ; then
5390 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5391fi
5392
0c14fb47
BR
5393if test "$glusterfs_discard" = "yes" ; then
5394 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 5395fi
e06a765e 5396
7c815372
BR
5397if test "$glusterfs_zerofill" = "yes" ; then
5398 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5399fi
5400
c9a12e75
CN
5401if test "$archipelago" = "yes" ; then
5402 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5403 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5404fi
5405
0a12ec87 5406if test "$libssh2" = "yes" ; then
d3399d7c 5407 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
5408 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5409 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
5410fi
5411
4f18b782
JC
5412if test "$vhdx" = "yes" ; then
5413 echo "CONFIG_VHDX=y" >> $config_host_mak
5414fi
5415
68063649 5416# USB host support
b5613fdc
GH
5417if test "$libusb" = "yes"; then
5418 echo "HOST_USB=libusb legacy" >> $config_host_mak
5419else
98ec69ac 5420 echo "HOST_USB=stub" >> $config_host_mak
b5613fdc 5421fi
68063649 5422
3b8acc11
PB
5423# TPM passthrough support?
5424if test "$tpm" = "yes"; then
5425 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5426 if test "$tpm_passthrough" = "yes"; then
5427 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5428 fi
5429fi
5430
5b808275
LV
5431echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5432if have_backend "nop"; then
6d8a764e 5433 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 5434fi
5b808275 5435if have_backend "simple"; then
6d8a764e
LV
5436 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5437 # Set the appropriate trace file.
953ffe0f 5438 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 5439fi
ed7f5f1d
PB
5440if have_backend "log"; then
5441 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 5442fi
5b808275 5443if have_backend "ust"; then
6d8a764e
LV
5444 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5445fi
5b808275 5446if have_backend "dtrace"; then
6d8a764e
LV
5447 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5448 if test "$trace_backend_stap" = "yes" ; then
5449 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5450 fi
c276b17d 5451fi
5b808275 5452if have_backend "ftrace"; then
781e9545
ET
5453 if test "$linux" = "yes" ; then
5454 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 5455 else
21684af0 5456 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
5457 fi
5458fi
9410b56c
PS
5459echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5460
2da776db
MH
5461if test "$rdma" = "yes" ; then
5462 echo "CONFIG_RDMA=y" >> $config_host_mak
5463fi
5464
575b22b1
LV
5465if test "$have_rtnetlink" = "yes" ; then
5466 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5467fi
5468
5c312079
DDAG
5469# Hold two types of flag:
5470# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5471# a thread we have a handle to
5472# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5473# platform
5474if test "$pthread_setname_np" = "yes" ; then
5475 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5476 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5477fi
5478
5b5e3037
PB
5479if test "$tcg_interpreter" = "yes"; then
5480 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5481elif test "$ARCH" = "sparc64" ; then
5482 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5483elif test "$ARCH" = "s390x" ; then
5484 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 5485elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5b5e3037 5486 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5
RH
5487elif test "$ARCH" = "ppc64" ; then
5488 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037
PB
5489else
5490 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5491fi
5492QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5493
98ec69ac 5494echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 5495echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
5496echo "MAKE=$make" >> $config_host_mak
5497echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
5498echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5499echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
e999ee44
MT
5500echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5501echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
c886edfb 5502echo "PYTHON=$python" >> $config_host_mak
804edf29 5503echo "CC=$cc" >> $config_host_mak
a31a8642
MT
5504if $iasl -h > /dev/null 2>&1; then
5505 echo "IASL=$iasl" >> $config_host_mak
5506fi
2b2e59e6 5507echo "CC_I386=$cc_i386" >> $config_host_mak
804edf29 5508echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 5509echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 5510echo "OBJCC=$objcc" >> $config_host_mak
804edf29 5511echo "AR=$ar" >> $config_host_mak
45d285ab 5512echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 5513echo "AS=$as" >> $config_host_mak
5f6f0e27 5514echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 5515echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
5516echo "OBJCOPY=$objcopy" >> $config_host_mak
5517echo "LD=$ld" >> $config_host_mak
4852ee95 5518echo "NM=$nm" >> $config_host_mak
9fe6de94 5519echo "WINDRES=$windres" >> $config_host_mak
e2a2ed06 5520echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 5521echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 5522echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
f9728943 5523echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
5524if test "$sparse" = "yes" ; then
5525 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 5526 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 5527 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
5528 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5529 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5530fi
42da6041
GH
5531if test "$cross_prefix" != ""; then
5532 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5533else
5534 echo "AUTOCONF_HOST := " >> $config_host_mak
5535fi
e2a2ed06 5536echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 5537echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6969ec6c 5538echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
73da375e 5539echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 5540echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
409437e1 5541echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
804edf29 5542echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
5543echo "DSOSUF=$DSOSUF" >> $config_host_mak
5544echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 5545echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
5546echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5547echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 5548echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 5549echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
5550if test "$gcov" = "yes" ; then
5551 echo "CONFIG_GCOV=y" >> $config_host_mak
5552 echo "GCOV=$gcov_tool" >> $config_host_mak
5553fi
804edf29 5554
6efd7517
PM
5555# use included Linux headers
5556if test "$linux" = "yes" ; then
a307beb6 5557 mkdir -p linux-headers
6efd7517 5558 case "$cpu" in
c72b26ec 5559 i386|x86_64|x32)
08312a63 5560 linux_arch=x86
6efd7517
PM
5561 ;;
5562 ppcemb|ppc|ppc64)
08312a63 5563 linux_arch=powerpc
6efd7517
PM
5564 ;;
5565 s390x)
08312a63
PM
5566 linux_arch=s390
5567 ;;
1f080313
CF
5568 aarch64)
5569 linux_arch=arm64
5570 ;;
222e7d11
SL
5571 mips64)
5572 linux_arch=mips
5573 ;;
08312a63
PM
5574 *)
5575 # For most CPUs the kernel architecture name and QEMU CPU name match.
5576 linux_arch="$cpu"
6efd7517
PM
5577 ;;
5578 esac
08312a63
PM
5579 # For non-KVM architectures we will not have asm headers
5580 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5581 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5582 fi
6efd7517
PM
5583fi
5584
1d14ffa9 5585for target in $target_list; do
97a847bc 5586target_dir="$target"
25be210f 5587config_target_mak=$target_dir/config-target.mak
89138857 5588target_name=$(echo $target | cut -d '-' -f 1)
97a847bc 5589target_bigendian="no"
1f3d3c8f 5590
c1799a84 5591case "$target_name" in
d15a9c23 5592 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
5593 target_bigendian=yes
5594 ;;
5595esac
97a847bc 5596target_softmmu="no"
997344f3 5597target_user_only="no"
831b7825 5598target_linux_user="no"
84778508 5599target_bsd_user="no"
9e407a85 5600case "$target" in
c1799a84 5601 ${target_name}-softmmu)
9e407a85
PB
5602 target_softmmu="yes"
5603 ;;
c1799a84 5604 ${target_name}-linux-user)
9c7a4202 5605 if test "$linux" != "yes" ; then
76ad07a4 5606 error_exit "Target '$target' is only available on a Linux host"
9c7a4202 5607 fi
9e407a85
PB
5608 target_user_only="yes"
5609 target_linux_user="yes"
5610 ;;
c1799a84 5611 ${target_name}-bsd-user)
9cf55765 5612 if test "$bsd" != "yes" ; then
76ad07a4 5613 error_exit "Target '$target' is only available on a BSD host"
9c7a4202 5614 fi
84778508
BS
5615 target_user_only="yes"
5616 target_bsd_user="yes"
5617 ;;
9e407a85 5618 *)
76ad07a4 5619 error_exit "Target '$target' not recognised"
9e407a85
PB
5620 exit 1
5621 ;;
5622esac
831b7825 5623
97a847bc 5624mkdir -p $target_dir
25be210f 5625echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 5626
e5fe0c52 5627bflt="no"
89138857 5628interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
56aebc89 5629gdb_xml_files=""
7ba1e619 5630
c1799a84 5631TARGET_ARCH="$target_name"
6acff7da 5632TARGET_BASE_ARCH=""
e6e91b9c 5633TARGET_ABI_DIR=""
e73aae67 5634
c1799a84 5635case "$target_name" in
2408a527 5636 i386)
2408a527
AJ
5637 ;;
5638 x86_64)
6acff7da 5639 TARGET_BASE_ARCH=i386
2408a527
AJ
5640 ;;
5641 alpha)
2408a527
AJ
5642 ;;
5643 arm|armeb)
b498c8a0 5644 TARGET_ARCH=arm
2408a527 5645 bflt="yes"
56aebc89 5646 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 5647 ;;
6a49fa95
AG
5648 aarch64)
5649 TARGET_BASE_ARCH=arm
5650 bflt="yes"
8f95ce2e 5651 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 5652 ;;
2408a527 5653 cris)
2408a527 5654 ;;
613a22c9 5655 lm32)
613a22c9 5656 ;;
2408a527 5657 m68k)
2408a527 5658 bflt="yes"
56aebc89 5659 gdb_xml_files="cf-core.xml cf-fp.xml"
2408a527 5660 ;;
877fdc12
EI
5661 microblaze|microblazeel)
5662 TARGET_ARCH=microblaze
72b675ca 5663 bflt="yes"
72b675ca 5664 ;;
0adcffb1 5665 mips|mipsel)
b498c8a0 5666 TARGET_ARCH=mips
25be210f 5667 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
5668 ;;
5669 mipsn32|mipsn32el)
597e2cec 5670 TARGET_ARCH=mips64
6acff7da 5671 TARGET_BASE_ARCH=mips
25be210f 5672 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 5673 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
5674 ;;
5675 mips64|mips64el)
b498c8a0 5676 TARGET_ARCH=mips64
6acff7da 5677 TARGET_BASE_ARCH=mips
25be210f 5678 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 5679 ;;
d15a9c23
AG
5680 moxie)
5681 ;;
e67db06e
JL
5682 or32)
5683 TARGET_ARCH=openrisc
5684 TARGET_BASE_ARCH=openrisc
e67db06e 5685 ;;
2408a527 5686 ppc)
c8b3532d 5687 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5688 ;;
5689 ppcemb)
6acff7da 5690 TARGET_BASE_ARCH=ppc
e6e91b9c 5691 TARGET_ABI_DIR=ppc
c8b3532d 5692 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5693 ;;
5694 ppc64)
6acff7da 5695 TARGET_BASE_ARCH=ppc
e6e91b9c 5696 TARGET_ABI_DIR=ppc
1438eff3 5697 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 5698 ;;
9c35126c
DK
5699 ppc64le)
5700 TARGET_ARCH=ppc64
5701 TARGET_BASE_ARCH=ppc
5702 TARGET_ABI_DIR=ppc
1438eff3 5703 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
9c35126c 5704 ;;
2408a527 5705 ppc64abi32)
b498c8a0 5706 TARGET_ARCH=ppc64
6acff7da 5707 TARGET_BASE_ARCH=ppc
e6e91b9c 5708 TARGET_ABI_DIR=ppc
25be210f 5709 echo "TARGET_ABI32=y" >> $config_target_mak
1438eff3 5710 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527
AJ
5711 ;;
5712 sh4|sh4eb)
b498c8a0 5713 TARGET_ARCH=sh4
2408a527
AJ
5714 bflt="yes"
5715 ;;
5716 sparc)
2408a527
AJ
5717 ;;
5718 sparc64)
6acff7da 5719 TARGET_BASE_ARCH=sparc
2408a527
AJ
5720 ;;
5721 sparc32plus)
b498c8a0 5722 TARGET_ARCH=sparc64
6acff7da 5723 TARGET_BASE_ARCH=sparc
e6e91b9c 5724 TARGET_ABI_DIR=sparc
25be210f 5725 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 5726 ;;
24e804ec 5727 s390x)
8a641ff6 5728 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
24e804ec 5729 ;;
444e06b1
CG
5730 tilegx)
5731 ;;
5ecaa4ed
PC
5732 tricore)
5733 ;;
d2fbca94 5734 unicore32)
d2fbca94 5735 ;;
cfa550c6
MF
5736 xtensa|xtensaeb)
5737 TARGET_ARCH=xtensa
cfa550c6 5738 ;;
2408a527 5739 *)
76ad07a4 5740 error_exit "Unsupported target CPU"
2408a527
AJ
5741 ;;
5742esac
5e8861a0
PB
5743# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5744if [ "$TARGET_BASE_ARCH" = "" ]; then
5745 TARGET_BASE_ARCH=$TARGET_ARCH
5746fi
5747
5e8861a0
PB
5748symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5749
99afc91d
DB
5750upper() {
5751 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5752}
5753
89138857 5754target_arch_name="$(upper $TARGET_ARCH)"
25be210f 5755echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 5756echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 5757echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
5758if [ "$TARGET_ABI_DIR" = "" ]; then
5759 TARGET_ABI_DIR=$TARGET_ARCH
5760fi
25be210f 5761echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
5762if [ "$HOST_VARIANT_DIR" != "" ]; then
5763 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5764fi
c1799a84 5765case "$target_name" in
1b0c87fc
JQ
5766 i386|x86_64)
5767 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
25be210f 5768 echo "CONFIG_XEN=y" >> $config_target_mak
eb6fda0f
AP
5769 if test "$xen_pci_passthrough" = yes; then
5770 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5771 fi
1b0c87fc 5772 fi
59d21e53
AG
5773 ;;
5774 *)
1b0c87fc 5775esac
c1799a84 5776case "$target_name" in
222e7d11 5777 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
c59249f9
JQ
5778 # Make sure the target and host cpus are compatible
5779 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
c1799a84
PB
5780 \( "$target_name" = "$cpu" -o \
5781 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5782 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5783 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5784 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
222e7d11 5785 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
c1799a84 5786 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
18b8263e
MT
5787 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5788 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5789 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
25be210f 5790 echo "CONFIG_KVM=y" >> $config_target_mak
1ba16968 5791 if test "$vhost_net" = "yes" ; then
d5970055 5792 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
421f4448 5793 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
d5970055 5794 fi
c59249f9
JQ
5795 fi
5796esac
de83cd02 5797if test "$target_bigendian" = "yes" ; then
25be210f 5798 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 5799fi
97a847bc 5800if test "$target_softmmu" = "yes" ; then
25be210f 5801 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
43ce4dfe 5802fi
997344f3 5803if test "$target_user_only" = "yes" ; then
25be210f 5804 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 5805 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 5806fi
831b7825 5807if test "$target_linux_user" = "yes" ; then
25be210f 5808 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 5809fi
56aebc89
PB
5810list=""
5811if test ! -z "$gdb_xml_files" ; then
5812 for x in $gdb_xml_files; do
5813 list="$list $source_path/gdb-xml/$x"
5814 done
3d0f1517 5815 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 5816fi
97a847bc 5817
e5fe0c52 5818if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 5819 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 5820fi
84778508 5821if test "$target_bsd_user" = "yes" ; then
25be210f 5822 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 5823fi
5b0753e0 5824
4afddb55 5825# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 5826
4afddb55 5827cflags=""
fa282484 5828ldflags=""
9b8e111f 5829
c765fcac
PC
5830disas_config() {
5831 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5832 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5833}
5834
64656024
JQ
5835for i in $ARCH $TARGET_BASE_ARCH ; do
5836 case "$i" in
5837 alpha)
c765fcac 5838 disas_config "ALPHA"
64656024 5839 ;;
82295d8a
RH
5840 aarch64)
5841 if test -n "${cxx}"; then
c765fcac 5842 disas_config "ARM_A64"
82295d8a
RH
5843 fi
5844 ;;
64656024 5845 arm)
c765fcac 5846 disas_config "ARM"
999b53ec 5847 if test -n "${cxx}"; then
c765fcac 5848 disas_config "ARM_A64"
999b53ec 5849 fi
64656024
JQ
5850 ;;
5851 cris)
c765fcac 5852 disas_config "CRIS"
64656024
JQ
5853 ;;
5854 hppa)
c765fcac 5855 disas_config "HPPA"
64656024 5856 ;;
c72b26ec 5857 i386|x86_64|x32)
c765fcac 5858 disas_config "I386"
64656024 5859 ;;
903ec55c 5860 ia64*)
c765fcac 5861 disas_config "IA64"
903ec55c 5862 ;;
79368f49 5863 lm32)
c765fcac 5864 disas_config "LM32"
79368f49 5865 ;;
64656024 5866 m68k)
c765fcac 5867 disas_config "M68K"
64656024 5868 ;;
877fdc12 5869 microblaze*)
c765fcac 5870 disas_config "MICROBLAZE"
64656024
JQ
5871 ;;
5872 mips*)
c765fcac 5873 disas_config "MIPS"
64656024 5874 ;;
d15a9c23 5875 moxie*)
c765fcac 5876 disas_config "MOXIE"
d15a9c23 5877 ;;
e67db06e 5878 or32)
c765fcac 5879 disas_config "OPENRISC"
e67db06e 5880 ;;
64656024 5881 ppc*)
c765fcac 5882 disas_config "PPC"
64656024 5883 ;;
24e804ec 5884 s390*)
c765fcac 5885 disas_config "S390"
64656024
JQ
5886 ;;
5887 sh4)
c765fcac 5888 disas_config "SH4"
64656024
JQ
5889 ;;
5890 sparc*)
c765fcac 5891 disas_config "SPARC"
64656024 5892 ;;
cfa550c6 5893 xtensa*)
c765fcac 5894 disas_config "XTENSA"
cfa550c6 5895 ;;
64656024
JQ
5896 esac
5897done
9195b2c2 5898if test "$tcg_interpreter" = "yes" ; then
c765fcac 5899 disas_config "TCI"
9195b2c2 5900fi
64656024 5901
6ee7126f
JQ
5902case "$ARCH" in
5903alpha)
5904 # Ensure there's only a single GP
5905 cflags="-msmall-data $cflags"
5906;;
5907esac
5908
d02c1db3 5909if test "$gprof" = "yes" ; then
25be210f 5910 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
5911 if test "$target_linux_user" = "yes" ; then
5912 cflags="-p $cflags"
5913 ldflags="-p $ldflags"
5914 fi
5915 if test "$target_softmmu" = "yes" ; then
5916 ldflags="-p $ldflags"
25be210f 5917 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
5918 fi
5919fi
5920
9b8e111f 5921if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 5922 ldflags="$ldflags $textseg_ldflags"
fa282484 5923fi
fa282484 5924
25be210f
JQ
5925echo "LDFLAGS+=$ldflags" >> $config_target_mak
5926echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 5927
97a847bc 5928done # for target in $targets
7d13299d 5929
b776eca1
GH
5930if [ "$pixman" = "internal" ]; then
5931 echo "config-host.h: subdir-pixman" >> $config_host_mak
2da776db
MH
5932fi
5933
a540f158
PC
5934if [ "$dtc_internal" = "yes" ]; then
5935 echo "config-host.h: subdir-dtc" >> $config_host_mak
5936fi
5937
a99d57bb
WG
5938if test "$numa" = "yes"; then
5939 echo "CONFIG_NUMA=y" >> $config_host_mak
5940fi
5941
fd0e6053
JS
5942if test "$ccache_cpp2" = "yes"; then
5943 echo "export CCACHE_CPP2=y" >> $config_host_mak
5944fi
5945
d1807a4f 5946# build tree in object directory in case the source is not in the current directory
f93296ea 5947DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
2b170eff 5948DIRS="$DIRS fsdev"
9933c305 5949DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 5950DIRS="$DIRS roms/seabios roms/vgabios"
2dee8d54 5951DIRS="$DIRS qapi-generated"
c09015dd
AL
5952FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5953FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 5954FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 5955FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 5956FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 5957FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 5958FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 5959FILES="$FILES pc-bios/qemu-icon.bmp"
753d11f2
RH
5960for bios_file in \
5961 $source_path/pc-bios/*.bin \
5acc2ec0 5962 $source_path/pc-bios/*.aml \
753d11f2
RH
5963 $source_path/pc-bios/*.rom \
5964 $source_path/pc-bios/*.dtb \
e89e33e1 5965 $source_path/pc-bios/*.img \
753d11f2 5966 $source_path/pc-bios/openbios-* \
4e73c781 5967 $source_path/pc-bios/u-boot.* \
753d11f2
RH
5968 $source_path/pc-bios/palcode-*
5969do
89138857 5970 FILES="$FILES pc-bios/$(basename $bios_file)"
d1807a4f 5971done
89138857 5972for test_file in $(find $source_path/tests/acpi-test-data -type f)
c2304b52 5973do
89138857 5974 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
c2304b52 5975done
d1807a4f
PB
5976mkdir -p $DIRS
5977for f in $FILES ; do
cab00a5a 5978 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
5979 symlink "$source_path/$f" "$f"
5980 fi
d1807a4f 5981done
1ad2134f 5982
c34ebfdc 5983# temporary config to build submodules
2d9f27d2 5984for rom in seabios vgabios ; do
c34ebfdc 5985 config_mak=roms/$rom/config.mak
37116c89 5986 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 5987 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 5988 echo "AS=$as" >> $config_mak
5f6f0e27 5989 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
5990 echo "CC=$cc" >> $config_mak
5991 echo "BCC=bcc" >> $config_mak
3dd46c78 5992 echo "CPP=$cpp" >> $config_mak
c34ebfdc 5993 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 5994 echo "IASL=$iasl" >> $config_mak
c34ebfdc
AL
5995 echo "LD=$ld" >> $config_mak
5996done
5997
76c7560a
HR
5998# set up qemu-iotests in this build directory
5999iotests_common_env="tests/qemu-iotests/common.env"
6000iotests_check="tests/qemu-iotests/check"
6001
6002echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6003echo >> "$iotests_common_env"
6004echo "export PYTHON='$python'" >> "$iotests_common_env"
6005
6006if [ ! -e "$iotests_check" ]; then
6007 symlink "$source_path/$iotests_check" "$iotests_check"
6008fi
6009
dc655404
MT
6010# Save the configure command line for later reuse.
6011cat <<EOD >config.status
6012#!/bin/sh
6013# Generated by configure.
6014# Run this file to recreate the current configuration.
6015# Compiler output produced by configure, useful for debugging
6016# configure, is in config.log if it exists.
6017EOD
6018printf "exec" >>config.status
6019printf " '%s'" "$0" "$@" >>config.status
cf7cc929 6020echo ' "$@"' >>config.status
dc655404
MT
6021chmod +x config.status
6022
8cd05ab6 6023rm -r "$TMPDIR1"