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