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