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