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