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