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