]> git.proxmox.com Git - mirror_qemu.git/blame - configure
hw/display/milkymist-tmu2: Move inlined code from header to source
[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
99e1a93b
PMD
4050if test "$opengl" = "yes" -a "$have_x11" = "yes"; then
4051 for target in $target_list; do
4052 case $target in
4053 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4054 need_x11=yes
4055 ;;
4056 esac
4057 done
4058fi
4059
ed279a06
KK
4060##########################################
4061# libxml2 probe
4062if test "$libxml2" != "no" ; then
4063 if $pkg_config --exists libxml-2.0; then
4064 libxml2="yes"
4065 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4066 libxml2_libs=$($pkg_config --libs libxml-2.0)
4067 else
4068 if test "$libxml2" = "yes"; then
4069 feature_not_found "libxml2" "Install libxml2 devel"
4070 fi
4071 libxml2="no"
4072 fi
4073fi
c9a12e75 4074
eb100396
BR
4075##########################################
4076# glusterfs probe
4077if test "$glusterfs" != "no" ; then
65d5d3f9 4078 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 4079 glusterfs="yes"
89138857
SW
4080 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4081 glusterfs_libs=$($pkg_config --libs glusterfs-api)
d85fa9eb
JC
4082 if $pkg_config --atleast-version=4 glusterfs-api; then
4083 glusterfs_xlator_opt="yes"
4084 fi
65d5d3f9 4085 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
4086 glusterfs_discard="yes"
4087 fi
7c815372 4088 if $pkg_config --atleast-version=6 glusterfs-api; then
df3a429a 4089 glusterfs_fallocate="yes"
7c815372
BR
4090 glusterfs_zerofill="yes"
4091 fi
eb100396
BR
4092 else
4093 if test "$glusterfs" = "yes" ; then
8efc9363
HT
4094 feature_not_found "GlusterFS backend support" \
4095 "Install glusterfs-api devel >= 3"
eb100396 4096 fi
e01bee08 4097 glusterfs="no"
eb100396
BR
4098 fi
4099fi
4100
39386ac7 4101# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
4102# emulator. This is done because older glibc versions don't
4103# have syscall stubs for these implemented. In that case we
4104# don't provide them even if kernel supports them.
4105#
4106inotify=no
67ba57f6 4107cat > $TMPC << EOF
3b3f24ad
AJ
4108#include <sys/inotify.h>
4109
4110int
4111main(void)
4112{
4113 /* try to start inotify */
8690e420 4114 return inotify_init();
3b3f24ad
AJ
4115}
4116EOF
52166aa0 4117if compile_prog "" "" ; then
67ba57f6 4118 inotify=yes
3b3f24ad
AJ
4119fi
4120
c05c7a73
RV
4121inotify1=no
4122cat > $TMPC << EOF
4123#include <sys/inotify.h>
4124
4125int
4126main(void)
4127{
4128 /* try to start inotify */
4129 return inotify_init1(0);
4130}
4131EOF
4132if compile_prog "" "" ; then
4133 inotify1=yes
4134fi
4135
099d6b0f
RV
4136# check if pipe2 is there
4137pipe2=no
4138cat > $TMPC << EOF
099d6b0f
RV
4139#include <unistd.h>
4140#include <fcntl.h>
4141
4142int main(void)
4143{
4144 int pipefd[2];
9bca8162 4145 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
4146}
4147EOF
52166aa0 4148if compile_prog "" "" ; then
099d6b0f
RV
4149 pipe2=yes
4150fi
4151
40ff6d7e
KW
4152# check if accept4 is there
4153accept4=no
4154cat > $TMPC << EOF
40ff6d7e
KW
4155#include <sys/socket.h>
4156#include <stddef.h>
4157
4158int main(void)
4159{
4160 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4161 return 0;
4162}
4163EOF
4164if compile_prog "" "" ; then
4165 accept4=yes
4166fi
4167
3ce34dfb
VS
4168# check if tee/splice is there. vmsplice was added same time.
4169splice=no
4170cat > $TMPC << EOF
3ce34dfb
VS
4171#include <unistd.h>
4172#include <fcntl.h>
4173#include <limits.h>
4174
4175int main(void)
4176{
66ea0f22 4177 int len, fd = 0;
3ce34dfb
VS
4178 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4179 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4180 return 0;
4181}
4182EOF
52166aa0 4183if compile_prog "" "" ; then
3ce34dfb
VS
4184 splice=yes
4185fi
4186
a99d57bb
WG
4187##########################################
4188# libnuma probe
4189
4190if test "$numa" != "no" ; then
4191 cat > $TMPC << EOF
4192#include <numa.h>
4193int main(void) { return numa_available(); }
4194EOF
4195
4196 if compile_prog "" "-lnuma" ; then
4197 numa=yes
4198 libs_softmmu="-lnuma $libs_softmmu"
4199 else
4200 if test "$numa" = "yes" ; then
4201 feature_not_found "numa" "install numactl devel"
4202 fi
4203 numa=no
4204 fi
4205fi
4206
7b01cb97
AD
4207if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4208 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4209 exit 1
4210fi
4211
5a22ab71
YZ
4212# Even if malloc_trim() is available, these non-libc memory allocators
4213# do not support it.
4214if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4215 if test "$malloc_trim" = "yes" ; then
4216 echo "Disabling malloc_trim with non-libc memory allocator"
4217 fi
4218 malloc_trim="no"
4219fi
4220
4221#######################################
4222# malloc_trim
4223
4224if test "$malloc_trim" != "no" ; then
4225 cat > $TMPC << EOF
4226#include <malloc.h>
4227int main(void) { malloc_trim(0); return 0; }
4228EOF
4229 if compile_prog "" "" ; then
4230 malloc_trim="yes"
4231 else
4232 malloc_trim="no"
4233 fi
4234fi
4235
2847b469
FZ
4236##########################################
4237# tcmalloc probe
4238
4239if test "$tcmalloc" = "yes" ; then
4240 cat > $TMPC << EOF
4241#include <stdlib.h>
4242int main(void) { malloc(1); return 0; }
4243EOF
4244
4245 if compile_prog "" "-ltcmalloc" ; then
4246 LIBS="-ltcmalloc $LIBS"
4247 else
4248 feature_not_found "tcmalloc" "install gperftools devel"
4249 fi
4250fi
4251
7b01cb97
AD
4252##########################################
4253# jemalloc probe
4254
4255if test "$jemalloc" = "yes" ; then
4256 cat > $TMPC << EOF
4257#include <stdlib.h>
4258int main(void) { malloc(1); return 0; }
4259EOF
4260
4261 if compile_prog "" "-ljemalloc" ; then
4262 LIBS="-ljemalloc $LIBS"
4263 else
4264 feature_not_found "jemalloc" "install jemalloc devel"
4265 fi
4266fi
4267
dcc38d1c
MT
4268##########################################
4269# signalfd probe
4270signalfd="no"
4271cat > $TMPC << EOF
dcc38d1c
MT
4272#include <unistd.h>
4273#include <sys/syscall.h>
4274#include <signal.h>
4275int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4276EOF
4277
4278if compile_prog "" "" ; then
4279 signalfd=yes
4280fi
4281
c2882b96
RV
4282# check if eventfd is supported
4283eventfd=no
4284cat > $TMPC << EOF
4285#include <sys/eventfd.h>
4286
4287int main(void)
4288{
55cc7f3e 4289 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
4290}
4291EOF
4292if compile_prog "" "" ; then
4293 eventfd=yes
4294fi
4295
751bcc39
MAL
4296# check if memfd is supported
4297memfd=no
4298cat > $TMPC << EOF
75e5b70e 4299#include <sys/mman.h>
751bcc39
MAL
4300
4301int main(void)
4302{
4303 return memfd_create("foo", MFD_ALLOW_SEALING);
4304}
4305EOF
4306if compile_prog "" "" ; then
4307 memfd=yes
4308fi
4309
955727d2
CT
4310# check for usbfs
4311have_usbfs=no
4312if test "$linux_user" = "yes"; then
4313 if check_include linux/usbdevice_fs.h; then
4314 have_usbfs=yes
4315 fi
4316 have_usbfs=yes
4317fi
751bcc39 4318
d0927938
UH
4319# check for fallocate
4320fallocate=no
4321cat > $TMPC << EOF
4322#include <fcntl.h>
4323
4324int main(void)
4325{
4326 fallocate(0, 0, 0, 0);
4327 return 0;
4328}
4329EOF
8fb03151 4330if compile_prog "" "" ; then
d0927938
UH
4331 fallocate=yes
4332fi
4333
3d4fa43e
KK
4334# check for fallocate hole punching
4335fallocate_punch_hole=no
4336cat > $TMPC << EOF
4337#include <fcntl.h>
4338#include <linux/falloc.h>
4339
4340int main(void)
4341{
4342 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4343 return 0;
4344}
4345EOF
4346if compile_prog "" "" ; then
4347 fallocate_punch_hole=yes
4348fi
4349
b953f075
DL
4350# check that fallocate supports range zeroing inside the file
4351fallocate_zero_range=no
4352cat > $TMPC << EOF
4353#include <fcntl.h>
4354#include <linux/falloc.h>
4355
4356int main(void)
4357{
4358 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4359 return 0;
4360}
4361EOF
4362if compile_prog "" "" ; then
4363 fallocate_zero_range=yes
4364fi
4365
ed911435
KW
4366# check for posix_fallocate
4367posix_fallocate=no
4368cat > $TMPC << EOF
4369#include <fcntl.h>
4370
4371int main(void)
4372{
4373 posix_fallocate(0, 0, 0);
4374 return 0;
4375}
4376EOF
4377if compile_prog "" "" ; then
4378 posix_fallocate=yes
4379fi
4380
c727f47d
PM
4381# check for sync_file_range
4382sync_file_range=no
4383cat > $TMPC << EOF
4384#include <fcntl.h>
4385
4386int main(void)
4387{
4388 sync_file_range(0, 0, 0, 0);
4389 return 0;
4390}
4391EOF
8fb03151 4392if compile_prog "" "" ; then
c727f47d
PM
4393 sync_file_range=yes
4394fi
4395
dace20dc
PM
4396# check for linux/fiemap.h and FS_IOC_FIEMAP
4397fiemap=no
4398cat > $TMPC << EOF
4399#include <sys/ioctl.h>
4400#include <linux/fs.h>
4401#include <linux/fiemap.h>
4402
4403int main(void)
4404{
4405 ioctl(0, FS_IOC_FIEMAP, 0);
4406 return 0;
4407}
4408EOF
8fb03151 4409if compile_prog "" "" ; then
dace20dc
PM
4410 fiemap=yes
4411fi
4412
d0927938
UH
4413# check for dup3
4414dup3=no
4415cat > $TMPC << EOF
4416#include <unistd.h>
4417
4418int main(void)
4419{
4420 dup3(0, 0, 0);
4421 return 0;
4422}
4423EOF
78f5d726 4424if compile_prog "" "" ; then
d0927938
UH
4425 dup3=yes
4426fi
4427
4e0c6529
AB
4428# check for ppoll support
4429ppoll=no
4430cat > $TMPC << EOF
4431#include <poll.h>
4432
4433int main(void)
4434{
4435 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4436 ppoll(&pfd, 1, 0, 0);
4437 return 0;
4438}
4439EOF
4440if compile_prog "" "" ; then
4441 ppoll=yes
4442fi
4443
cd758dd0
AB
4444# check for prctl(PR_SET_TIMERSLACK , ... ) support
4445prctl_pr_set_timerslack=no
4446cat > $TMPC << EOF
4447#include <sys/prctl.h>
4448
4449int main(void)
4450{
4451 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4452 return 0;
4453}
4454EOF
4455if compile_prog "" "" ; then
4456 prctl_pr_set_timerslack=yes
4457fi
4458
3b6edd16
PM
4459# check for epoll support
4460epoll=no
4461cat > $TMPC << EOF
4462#include <sys/epoll.h>
4463
4464int main(void)
4465{
4466 epoll_create(0);
4467 return 0;
4468}
4469EOF
8fb03151 4470if compile_prog "" "" ; then
3b6edd16
PM
4471 epoll=yes
4472fi
4473
227f0214
PM
4474# epoll_create1 is a later addition
4475# so we must check separately for its presence
3b6edd16
PM
4476epoll_create1=no
4477cat > $TMPC << EOF
4478#include <sys/epoll.h>
4479
4480int main(void)
4481{
19e83f6b
PM
4482 /* Note that we use epoll_create1 as a value, not as
4483 * a function being called. This is necessary so that on
4484 * old SPARC glibc versions where the function was present in
4485 * the library but not declared in the header file we will
4486 * fail the configure check. (Otherwise we will get a compiler
4487 * warning but not an error, and will proceed to fail the
4488 * qemu compile where we compile with -Werror.)
4489 */
c075a723 4490 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
4491}
4492EOF
8fb03151 4493if compile_prog "" "" ; then
3b6edd16
PM
4494 epoll_create1=yes
4495fi
4496
a8fd1aba
PM
4497# check for sendfile support
4498sendfile=no
4499cat > $TMPC << EOF
4500#include <sys/sendfile.h>
4501
4502int main(void)
4503{
4504 return sendfile(0, 0, 0, 0);
4505}
4506EOF
4507if compile_prog "" "" ; then
4508 sendfile=yes
4509fi
4510
51834341
RV
4511# check for timerfd support (glibc 2.8 and newer)
4512timerfd=no
4513cat > $TMPC << EOF
4514#include <sys/timerfd.h>
4515
4516int main(void)
4517{
4518 return(timerfd_create(CLOCK_REALTIME, 0));
4519}
4520EOF
4521if compile_prog "" "" ; then
4522 timerfd=yes
4523fi
4524
9af5c906
RV
4525# check for setns and unshare support
4526setns=no
4527cat > $TMPC << EOF
4528#include <sched.h>
4529
4530int main(void)
4531{
4532 int ret;
4533 ret = setns(0, 0);
4534 ret = unshare(0);
4535 return ret;
4536}
4537EOF
4538if compile_prog "" "" ; then
4539 setns=yes
4540fi
4541
38860a03
AM
4542# clock_adjtime probe
4543clock_adjtime=no
4544cat > $TMPC <<EOF
4545#include <time.h>
4546
4547int main(void)
4548{
4549 return clock_adjtime(0, 0);
4550}
4551EOF
4552clock_adjtime=no
4553if compile_prog "" "" ; then
4554 clock_adjtime=yes
4555fi
4556
5a03cd00
AM
4557# syncfs probe
4558syncfs=no
4559cat > $TMPC <<EOF
4560#include <unistd.h>
4561
4562int main(void)
4563{
4564 return syncfs(0);
4565}
4566EOF
4567syncfs=no
4568if compile_prog "" "" ; then
4569 syncfs=yes
4570fi
4571
cc8ae6de 4572# Check if tools are available to build documentation.
a25dba17 4573if test "$docs" != "no" ; then
01668d98 4574 if has makeinfo && has pod2man; then
a25dba17 4575 docs=yes
83a3ab8b 4576 else
a25dba17 4577 if test "$docs" = "yes" ; then
21684af0 4578 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 4579 fi
a25dba17 4580 docs=no
83a3ab8b 4581 fi
cc8ae6de
PB
4582fi
4583
f514f41c 4584# Search for bswap_32 function
6ae9a1f4
JQ
4585byteswap_h=no
4586cat > $TMPC << EOF
4587#include <byteswap.h>
4588int main(void) { return bswap_32(0); }
4589EOF
52166aa0 4590if compile_prog "" "" ; then
6ae9a1f4
JQ
4591 byteswap_h=yes
4592fi
4593
75f13596 4594# Search for bswap32 function
6ae9a1f4
JQ
4595bswap_h=no
4596cat > $TMPC << EOF
4597#include <sys/endian.h>
4598#include <sys/types.h>
4599#include <machine/bswap.h>
4600int main(void) { return bswap32(0); }
4601EOF
52166aa0 4602if compile_prog "" "" ; then
6ae9a1f4
JQ
4603 bswap_h=yes
4604fi
4605
c589b249 4606##########################################
e49ab19f 4607# Do we have libiscsi >= 1.9.0
c589b249 4608if test "$libiscsi" != "no" ; then
e49ab19f 4609 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 4610 libiscsi="yes"
ca871ec8
SW
4611 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4612 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
4613 else
4614 if test "$libiscsi" = "yes" ; then
e49ab19f 4615 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
4616 fi
4617 libiscsi="no"
4618 fi
4619fi
4620
8bacde8d
NC
4621##########################################
4622# Do we need libm
4623cat > $TMPC << EOF
4624#include <math.h>
f80ea986 4625int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
4626EOF
4627if compile_prog "" "" ; then
4628 :
4629elif compile_prog "" "-lm" ; then
4630 LIBS="-lm $LIBS"
4631 libs_qga="-lm $libs_qga"
4632else
76ad07a4 4633 error_exit "libm check failed"
8bacde8d
NC
4634fi
4635
da93a1fd
AL
4636##########################################
4637# Do we need librt
8bacde8d
NC
4638# uClibc provides 2 versions of clock_gettime(), one with realtime
4639# support and one without. This means that the clock_gettime() don't
4640# need -lrt. We still need it for timer_create() so we check for this
4641# function in addition.
da93a1fd
AL
4642cat > $TMPC <<EOF
4643#include <signal.h>
4644#include <time.h>
8bacde8d
NC
4645int main(void) {
4646 timer_create(CLOCK_REALTIME, NULL, NULL);
4647 return clock_gettime(CLOCK_REALTIME, NULL);
4648}
da93a1fd
AL
4649EOF
4650
52166aa0 4651if compile_prog "" "" ; then
07ffa4bd 4652 :
8bacde8d 4653# we need pthread for static linking. use previous pthread test result
18e588b1
RL
4654elif compile_prog "" "$pthread_lib -lrt" ; then
4655 LIBS="$LIBS -lrt"
4656 libs_qga="$libs_qga -lrt"
da93a1fd
AL
4657fi
4658
31ff504d 4659if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
78723752 4660 "$haiku" != "yes" ; then
6362a53f
JQ
4661 libs_softmmu="-lutil $libs_softmmu"
4662fi
4663
de5071c5 4664##########################################
cd4ec0b4
GH
4665# spice probe
4666if test "$spice" != "no" ; then
4667 cat > $TMPC << EOF
4668#include <spice.h>
4669int main(void) { spice_server_new(); return 0; }
4670EOF
710fc4f5
JD
4671 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4672 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
1b63665c 4673 if $pkg_config --atleast-version=0.12.5 spice-server && \
65d5d3f9 4674 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
4675 compile_prog "$spice_cflags" "$spice_libs" ; then
4676 spice="yes"
4677 libs_softmmu="$libs_softmmu $spice_libs"
4678 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
4679 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4680 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
4681 else
4682 if test "$spice" = "yes" ; then
8efc9363 4683 feature_not_found "spice" \
1b63665c 4684 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
4685 fi
4686 spice="no"
4687 fi
4688fi
4689
7b02f544 4690# check for smartcard support
7b02f544 4691if test "$smartcard" != "no"; then
0f5c642d 4692 if $pkg_config --atleast-version=2.5.1 libcacard; then
7b02f544
MAL
4693 libcacard_cflags=$($pkg_config --cflags libcacard)
4694 libcacard_libs=$($pkg_config --libs libcacard)
7b02f544 4695 smartcard="yes"
afd347ab 4696 else
7b02f544
MAL
4697 if test "$smartcard" = "yes"; then
4698 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 4699 fi
7b02f544 4700 smartcard="no"
111a38b0
RR
4701 fi
4702fi
111a38b0 4703
2b2325ff
GH
4704# check for libusb
4705if test "$libusb" != "no" ; then
65d5d3f9 4706 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4707 libusb="yes"
ca871ec8
SW
4708 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4709 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4710 else
4711 if test "$libusb" = "yes"; then
8efc9363 4712 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4713 fi
4714 libusb="no"
4715 fi
4716fi
4717
69354a83
HG
4718# check for usbredirparser for usb network redirection support
4719if test "$usb_redir" != "no" ; then
65d5d3f9 4720 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4721 usb_redir="yes"
ca871ec8
SW
4722 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4723 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83
HG
4724 else
4725 if test "$usb_redir" = "yes"; then
21684af0 4726 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
4727 fi
4728 usb_redir="no"
4729 fi
4730fi
4731
d9840e25
TS
4732##########################################
4733# check if we have VSS SDK headers for win
4734
4735if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4736 case "$vss_win32_sdk" in
690604f6 4737 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
4738 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4739 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 4740 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
4741 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4742 ;;
690604f6 4743 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
4744 esac
4745 cat > $TMPC << EOF
4746#define __MIDL_user_allocate_free_DEFINED__
4747#include <inc/win2003/vss.h>
4748int main(void) { return VSS_CTX_BACKUP; }
4749EOF
4750 if compile_prog "$vss_win32_include" "" ; then
4751 guest_agent_with_vss="yes"
4752 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 4753 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4754 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4755 else
4756 if test "$vss_win32_sdk" != "" ; then
4757 echo "ERROR: Please download and install Microsoft VSS SDK:"
4758 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4759 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4760 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4761 echo "ERROR: The headers are extracted in the directory \`inc'."
4762 feature_not_found "VSS support"
4763 fi
4764 guest_agent_with_vss="no"
4765 fi
4766fi
4767
4768##########################################
4769# lookup Windows platform SDK (if not specified)
4770# The SDK is needed only to build .tlb (type library) file of guest agent
4771# VSS provider from the source. It is usually unnecessary because the
4772# pre-compiled .tlb file is included.
4773
4774if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4775 if test -z "$win_sdk"; then
4776 programfiles="$PROGRAMFILES"
4777 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4778 if test -n "$programfiles"; then
4779 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4780 else
4781 feature_not_found "Windows SDK"
4782 fi
4783 elif test "$win_sdk" = "no"; then
4784 win_sdk=""
4785 fi
4786fi
4787
50cbebb9
MR
4788##########################################
4789# check if mingw environment provides a recent ntddscsi.h
4790if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4791 cat > $TMPC << EOF
4792#include <windows.h>
4793#include <ntddscsi.h>
4794int main(void) {
4795#if !defined(IOCTL_SCSI_GET_ADDRESS)
4796#error Missing required ioctl definitions
4797#endif
4798 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4799 return addr.Lun;
4800}
4801EOF
4802 if compile_prog "" "" ; then
4803 guest_agent_ntddscsi=yes
c54e1eb4 4804 libs_qga="-lsetupapi $libs_qga"
50cbebb9
MR
4805 fi
4806fi
4807
9d9e1521
GH
4808##########################################
4809# virgl renderer probe
4810
4811if test "$virglrenderer" != "no" ; then
4812 cat > $TMPC << EOF
4813#include <virglrenderer.h>
4814int main(void) { virgl_renderer_poll(); return 0; }
4815EOF
4816 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4817 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
47479c55 4818 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
9d9e1521
GH
4819 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4820 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4821 virglrenderer="yes"
4822 else
4823 if test "$virglrenderer" = "yes" ; then
4824 feature_not_found "virglrenderer"
4825 fi
4826 virglrenderer="no"
4827 fi
4828fi
4829
8ca80760
RH
4830##########################################
4831# capstone
4832
e219c499
RH
4833case "$capstone" in
4834 "" | yes)
4835 if $pkg_config capstone; then
4836 capstone=system
123ac0bb 4837 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
e219c499
RH
4838 capstone=git
4839 elif test -e "${source_path}/capstone/Makefile" ; then
4840 capstone=internal
4841 elif test -z "$capstone" ; then
4842 capstone=no
4843 else
4844 feature_not_found "capstone" "Install capstone devel or git submodule"
4845 fi
4846 ;;
4847
4848 system)
4849 if ! $pkg_config capstone; then
4850 feature_not_found "capstone" "Install capstone devel"
4851 fi
4852 ;;
4853esac
4854
4855case "$capstone" in
4856 git | internal)
4857 if test "$capstone" = git; then
4858 git_submodules="${git_submodules} capstone"
4859 fi
4860 mkdir -p capstone
4861 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4862 if test "$mingw32" = "yes"; then
4863 LIBCAPSTONE=capstone.lib
4864 else
4865 LIBCAPSTONE=libcapstone.a
4866 fi
4867 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4868 ;;
4869
4870 system)
8ca80760
RH
4871 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4872 LIBS="$($pkg_config --libs capstone) $LIBS"
e219c499
RH
4873 ;;
4874
4875 no)
4876 ;;
4877 *)
4878 error_exit "Unknown state for capstone: $capstone"
4879 ;;
4880esac
8ca80760 4881
5f6b9e8f
BS
4882##########################################
4883# check if we have fdatasync
4884
4885fdatasync=no
4886cat > $TMPC << EOF
4887#include <unistd.h>
d1722a27
AR
4888int main(void) {
4889#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4890return fdatasync(0);
4891#else
e172fe11 4892#error Not supported
d1722a27
AR
4893#endif
4894}
5f6b9e8f
BS
4895EOF
4896if compile_prog "" "" ; then
4897 fdatasync=yes
4898fi
4899
e78815a5
AF
4900##########################################
4901# check if we have madvise
4902
4903madvise=no
4904cat > $TMPC << EOF
4905#include <sys/types.h>
4906#include <sys/mman.h>
832ce9c2 4907#include <stddef.h>
e78815a5
AF
4908int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4909EOF
4910if compile_prog "" "" ; then
4911 madvise=yes
4912fi
4913
4914##########################################
4915# check if we have posix_madvise
4916
4917posix_madvise=no
4918cat > $TMPC << EOF
4919#include <sys/mman.h>
832ce9c2 4920#include <stddef.h>
e78815a5
AF
4921int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4922EOF
4923if compile_prog "" "" ; then
4924 posix_madvise=yes
4925fi
4926
9bc5a719
AG
4927##########################################
4928# check if we have posix_memalign()
4929
4930posix_memalign=no
4931cat > $TMPC << EOF
4932#include <stdlib.h>
4933int main(void) {
4934 void *p;
4935 return posix_memalign(&p, 8, 8);
4936}
4937EOF
4938if compile_prog "" "" ; then
4939 posix_memalign=yes
4940fi
4941
0a852417
PD
4942##########################################
4943# check if we have posix_syslog
4944
4945posix_syslog=no
4946cat > $TMPC << EOF
4947#include <syslog.h>
4948int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4949EOF
4950if compile_prog "" "" ; then
4951 posix_syslog=yes
4952fi
4953
401bc051
PM
4954##########################################
4955# check if we have sem_timedwait
4956
4957sem_timedwait=no
4958cat > $TMPC << EOF
4959#include <semaphore.h>
4960int main(void) { return sem_timedwait(0, 0); }
4961EOF
4962if compile_prog "" "" ; then
4963 sem_timedwait=yes
4964fi
4965
5c99fa37
KF
4966##########################################
4967# check if we have strchrnul
4968
4969strchrnul=no
4970cat > $TMPC << EOF
4971#include <string.h>
4972int main(void);
4973// Use a haystack that the compiler shouldn't be able to constant fold
4974char *haystack = (char*)&main;
4975int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4976EOF
4977if compile_prog "" "" ; then
4978 strchrnul=yes
4979fi
4980
94a420b1
SH
4981##########################################
4982# check if trace backend exists
4983
5b808275 4984$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4985if test "$?" -ne 0 ; then
5b808275
LV
4986 error_exit "invalid trace backends" \
4987 "Please choose supported trace backends."
94a420b1
SH
4988fi
4989
7e24e92a
SH
4990##########################################
4991# For 'ust' backend, test if ust headers are present
5b808275 4992if have_backend "ust"; then
7e24e92a 4993 cat > $TMPC << EOF
bf15f63c 4994#include <lttng/tracepoint.h>
7e24e92a
SH
4995int main(void) { return 0; }
4996EOF
c79ed23d 4997 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
bf15f63c 4998 if $pkg_config lttng-ust --exists; then
89138857 4999 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c 5000 else
c79ed23d 5001 lttng_ust_libs="-llttng-ust -ldl"
bf15f63c
MG
5002 fi
5003 if $pkg_config liburcu-bp --exists; then
89138857 5004 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
5005 else
5006 urcu_bp_libs="-lurcu-bp"
5007 fi
5008
5009 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5010 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 5011 else
bf15f63c 5012 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
5013 fi
5014fi
b3d08c02
DB
5015
5016##########################################
5017# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 5018if have_backend "dtrace"; then
b3d08c02 5019 if ! has 'dtrace' ; then
76ad07a4 5020 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 5021 fi
c276b17d
DB
5022 trace_backend_stap="no"
5023 if has 'stap' ; then
5024 trace_backend_stap="yes"
5025 fi
b3d08c02
DB
5026fi
5027
023367e6 5028##########################################
519175a2 5029# check and set a backend for coroutine
d0e2fce5 5030
7c2acc70 5031# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
5032# is sigcontext. On Windows the only valid backend is the Windows
5033# specific one.
7c2acc70
PM
5034
5035ucontext_works=no
5036if test "$darwin" != "yes"; then
5037 cat > $TMPC << EOF
d0e2fce5 5038#include <ucontext.h>
cdf84806
PM
5039#ifdef __stub_makecontext
5040#error Ignoring glibc stub makecontext which will always fail
5041#endif
75cafad7 5042int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 5043EOF
7c2acc70
PM
5044 if compile_prog "" "" ; then
5045 ucontext_works=yes
5046 fi
5047fi
5048
5049if test "$coroutine" = ""; then
5050 if test "$mingw32" = "yes"; then
5051 coroutine=win32
5052 elif test "$ucontext_works" = "yes"; then
5053 coroutine=ucontext
5054 else
5055 coroutine=sigaltstack
d0e2fce5 5056 fi
519175a2 5057else
7c2acc70
PM
5058 case $coroutine in
5059 windows)
5060 if test "$mingw32" != "yes"; then
5061 error_exit "'windows' coroutine backend only valid for Windows"
5062 fi
5063 # Unfortunately the user visible backend name doesn't match the
5064 # coroutine-*.c filename for this case, so we have to adjust it here.
5065 coroutine=win32
5066 ;;
5067 ucontext)
5068 if test "$ucontext_works" != "yes"; then
5069 feature_not_found "ucontext"
5070 fi
5071 ;;
33c53c54 5072 sigaltstack)
7c2acc70
PM
5073 if test "$mingw32" = "yes"; then
5074 error_exit "only the 'windows' coroutine backend is valid for Windows"
5075 fi
5076 ;;
5077 *)
5078 error_exit "unknown coroutine backend $coroutine"
5079 ;;
5080 esac
d0e2fce5
AK
5081fi
5082
70c60c08 5083if test "$coroutine_pool" = ""; then
33c53c54 5084 coroutine_pool=yes
70c60c08
SH
5085fi
5086
7d992e4d 5087if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
5088 if test "$coroutine_pool" = "yes"; then
5089 echo "WARN: disabling coroutine pool for stack usage debugging"
5090 coroutine_pool=no
5091 fi
5092fi
5093
5094
d2042378
AK
5095##########################################
5096# check if we have open_by_handle_at
5097
4e1797f9 5098open_by_handle_at=no
d2042378
AK
5099cat > $TMPC << EOF
5100#include <fcntl.h>
acc55ba8
SW
5101#if !defined(AT_EMPTY_PATH)
5102# error missing definition
5103#else
75cafad7 5104int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 5105#endif
d2042378
AK
5106EOF
5107if compile_prog "" "" ; then
5108 open_by_handle_at=yes
5109fi
5110
e06a765e
HPB
5111########################################
5112# check if we have linux/magic.h
5113
5114linux_magic_h=no
5115cat > $TMPC << EOF
5116#include <linux/magic.h>
5117int main(void) {
75cafad7 5118 return 0;
e06a765e
HPB
5119}
5120EOF
5121if compile_prog "" "" ; then
5122 linux_magic_h=yes
5123fi
5124
06d71fa1 5125########################################
c95e3080
KW
5126# check whether we can disable warning option with a pragma (this is needed
5127# to silence warnings in the headers of some versions of external libraries).
5128# This test has to be compiled with -Werror as otherwise an unknown pragma is
5129# only a warning.
5130#
5131# If we can't selectively disable warning in the code, disable -Werror so that
5132# the build doesn't fail anyway.
5133
06d71fa1
PM
5134pragma_disable_unused_but_set=no
5135cat > $TMPC << EOF
e6f53fd5 5136#pragma GCC diagnostic push
c95e3080 5137#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 5138#pragma GCC diagnostic pop
c95e3080 5139
06d71fa1
PM
5140int main(void) {
5141 return 0;
5142}
5143EOF
5144if compile_prog "-Werror" "" ; then
cc6e3ca9 5145 pragma_diagnostic_available=yes
c95e3080
KW
5146else
5147 werror=no
06d71fa1
PM
5148fi
5149
3f4349dc 5150########################################
541be927 5151# check if we have valgrind/valgrind.h
3f4349dc
KW
5152
5153valgrind_h=no
5154cat > $TMPC << EOF
5155#include <valgrind/valgrind.h>
3f4349dc 5156int main(void) {
3f4349dc
KW
5157 return 0;
5158}
5159EOF
5160if compile_prog "" "" ; then
5161 valgrind_h=yes
5162fi
5163
8ab1bf12
LC
5164########################################
5165# check if environ is declared
5166
5167has_environ=no
5168cat > $TMPC << EOF
5169#include <unistd.h>
5170int main(void) {
c075a723 5171 environ = 0;
8ab1bf12
LC
5172 return 0;
5173}
5174EOF
5175if compile_prog "" "" ; then
5176 has_environ=yes
5177fi
5178
76a347e1
RH
5179########################################
5180# check if cpuid.h is usable.
5181
76a347e1
RH
5182cat > $TMPC << EOF
5183#include <cpuid.h>
5184int main(void) {
774d566c
PM
5185 unsigned a, b, c, d;
5186 int max = __get_cpuid_max(0, 0);
5187
5188 if (max >= 1) {
5189 __cpuid(1, a, b, c, d);
5190 }
5191
5192 if (max >= 7) {
5193 __cpuid_count(7, 0, a, b, c, d);
5194 }
5195
5196 return 0;
76a347e1
RH
5197}
5198EOF
5199if compile_prog "" "" ; then
5200 cpuid_h=yes
5201fi
5202
5dd89908
RH
5203##########################################
5204# avx2 optimization requirement check
5205#
5206# There is no point enabling this if cpuid.h is not usable,
5207# since we won't be able to select the new routines.
5208
86583a07 5209if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
5dd89908
RH
5210 cat > $TMPC << EOF
5211#pragma GCC push_options
5212#pragma GCC target("avx2")
5213#include <cpuid.h>
5214#include <immintrin.h>
5215static int bar(void *a) {
5216 __m256i x = *(__m256i *)a;
5217 return _mm256_testz_si256(x, x);
5218}
5219int main(int argc, char *argv[]) { return bar(argv[0]); }
5220EOF
5221 if compile_object "" ; then
5222 avx2_opt="yes"
86583a07
LM
5223 else
5224 avx2_opt="no"
5dd89908
RH
5225 fi
5226fi
5227
f540166b
RH
5228########################################
5229# check if __[u]int128_t is usable.
5230
5231int128=no
5232cat > $TMPC << EOF
5233__int128_t a;
5234__uint128_t b;
5235int main (void) {
5236 a = a + b;
5237 b = a * b;
464e3671 5238 a = a * a;
f540166b
RH
5239 return 0;
5240}
5241EOF
5242if compile_prog "" "" ; then
5243 int128=yes
5244fi
76a347e1 5245
7ebee43e
RH
5246#########################################
5247# See if 128-bit atomic operations are supported.
5248
5249atomic128=no
5250if test "$int128" = "yes"; then
5251 cat > $TMPC << EOF
5252int main(void)
5253{
5254 unsigned __int128 x = 0, y = 0;
5255 y = __atomic_load_16(&x, 0);
5256 __atomic_store_16(&x, y, 0);
5257 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5258 return 0;
5259}
5260EOF
5261 if compile_prog "" "" ; then
5262 atomic128=yes
5263 fi
5264fi
5265
e6cd4bb5
RH
5266cmpxchg128=no
5267if test "$int128" = yes -a "$atomic128" = no; then
5268 cat > $TMPC << EOF
5269int main(void)
5270{
5271 unsigned __int128 x = 0, y = 0;
5272 __sync_val_compare_and_swap_16(&x, y, x);
5273 return 0;
5274}
5275EOF
5276 if compile_prog "" "" ; then
5277 cmpxchg128=yes
5278 fi
5279fi
5280
df79b996
RH
5281#########################################
5282# See if 64-bit atomic operations are supported.
5283# Note that without __atomic builtins, we can only
5284# assume atomic loads/stores max at pointer size.
5285
5286cat > $TMPC << EOF
5287#include <stdint.h>
5288int main(void)
5289{
5290 uint64_t x = 0, y = 0;
5291#ifdef __ATOMIC_RELAXED
5292 y = __atomic_load_8(&x, 0);
5293 __atomic_store_8(&x, y, 0);
5294 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5295 __atomic_exchange_8(&x, y, 0);
5296 __atomic_fetch_add_8(&x, y, 0);
5297#else
5298 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5299 __sync_lock_test_and_set(&x, y);
5300 __sync_val_compare_and_swap(&x, y, 0);
5301 __sync_fetch_and_add(&x, y);
5302#endif
5303 return 0;
5304}
5305EOF
5306if compile_prog "" "" ; then
5307 atomic64=yes
5308fi
5309
db432672
RH
5310########################################
5311# See if 16-byte vector operations are supported.
5312# Even without a vector unit the compiler may expand these.
5313# There is a bug in old GCC for PPC that crashes here.
5314# Unfortunately it's the system compiler for Centos 7.
5315
5316cat > $TMPC << EOF
5317typedef unsigned char U1 __attribute__((vector_size(16)));
5318typedef unsigned short U2 __attribute__((vector_size(16)));
5319typedef unsigned int U4 __attribute__((vector_size(16)));
5320typedef unsigned long long U8 __attribute__((vector_size(16)));
5321typedef signed char S1 __attribute__((vector_size(16)));
5322typedef signed short S2 __attribute__((vector_size(16)));
5323typedef signed int S4 __attribute__((vector_size(16)));
5324typedef signed long long S8 __attribute__((vector_size(16)));
5325static U1 a1, b1;
5326static U2 a2, b2;
5327static U4 a4, b4;
5328static U8 a8, b8;
5329static S1 c1;
5330static S2 c2;
5331static S4 c4;
5332static S8 c8;
5333static int i;
74912f6d
LV
5334void helper(void *d, void *a, int shift, int i);
5335void helper(void *d, void *a, int shift, int i)
5336{
5337 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5338 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5339 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5340 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5341}
db432672
RH
5342int main(void)
5343{
5344 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
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 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5351 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5352 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5353 return 0;
5354}
5355EOF
5356
5357vector16=no
5358if compile_prog "" "" ; then
5359 vector16=yes
5360fi
5361
1e6e9aca
RH
5362########################################
5363# check if getauxval is available.
5364
5365getauxval=no
5366cat > $TMPC << EOF
5367#include <sys/auxv.h>
5368int main(void) {
5369 return getauxval(AT_HWCAP) == 0;
5370}
5371EOF
5372if compile_prog "" "" ; then
5373 getauxval=yes
5374fi
5375
fd0e6053
JS
5376########################################
5377# check if ccache is interfering with
5378# semantic analysis of macros
5379
5e4dfd3d 5380unset CCACHE_CPP2
fd0e6053
JS
5381ccache_cpp2=no
5382cat > $TMPC << EOF
5383static const int Z = 1;
5384#define fn() ({ Z; })
5385#define TAUT(X) ((X) == Z)
5386#define PAREN(X, Y) (X == Y)
5387#define ID(X) (X)
5388int main(int argc, char *argv[])
5389{
5390 int x = 0, y = 0;
5391 x = ID(x);
5392 x = fn();
5393 fn();
5394 if (PAREN(x, y)) return 0;
5395 if (TAUT(Z)) return 0;
5396 return 0;
5397}
5398EOF
5399
5400if ! compile_object "-Werror"; then
5401 ccache_cpp2=yes
5402fi
5403
b553a042
JS
5404#################################################
5405# clang does not support glibc + FORTIFY_SOURCE.
5406
5407if test "$fortify_source" != "no"; then
5408 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5409 fortify_source="no";
e189091f 5410 elif test -n "$cxx" && has $cxx &&
cfcc7c14 5411 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
5412 fortify_source="no";
5413 else
5414 fortify_source="yes"
5415 fi
5416fi
5417
1efad060
FZ
5418###############################################
5419# Check if copy_file_range is provided by glibc
5420have_copy_file_range=no
5421cat > $TMPC << EOF
5422#include <unistd.h>
5423int main(void) {
5424 copy_file_range(0, NULL, 0, NULL, 0, 0);
5425 return 0;
5426}
5427EOF
5428if compile_prog "" "" ; then
5429 have_copy_file_range=yes
5430fi
5431
277abf15
JV
5432##########################################
5433# check if struct fsxattr is available via linux/fs.h
5434
5435have_fsxattr=no
5436cat > $TMPC << EOF
5437#include <linux/fs.h>
5438struct fsxattr foo;
5439int main(void) {
5440 return 0;
5441}
5442EOF
5443if compile_prog "" "" ; then
5444 have_fsxattr=yes
5445fi
5446
a40161cb
PB
5447##########################################
5448# check for usable membarrier system call
5449if test "$membarrier" = "yes"; then
5450 have_membarrier=no
5451 if test "$mingw32" = "yes" ; then
5452 have_membarrier=yes
5453 elif test "$linux" = "yes" ; then
5454 cat > $TMPC << EOF
5455 #include <linux/membarrier.h>
5456 #include <sys/syscall.h>
5457 #include <unistd.h>
5458 #include <stdlib.h>
5459 int main(void) {
5460 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5461 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5462 exit(0);
5463 }
5464EOF
5465 if compile_prog "" "" ; then
5466 have_membarrier=yes
5467 fi
5468 fi
5469 if test "$have_membarrier" = "no"; then
5470 feature_not_found "membarrier" "membarrier system call not available"
5471 fi
5472else
5473 # Do not enable it by default even for Mingw32, because it doesn't
5474 # work on Wine.
5475 membarrier=no
5476fi
5477
b66e10e4
PM
5478##########################################
5479# check if rtnetlink.h exists and is useful
575b22b1
LV
5480have_rtnetlink=no
5481cat > $TMPC << EOF
5482#include <linux/rtnetlink.h>
5483int main(void) {
5484 return IFLA_PROTO_DOWN;
5485}
5486EOF
5487if compile_prog "" "" ; then
5488 have_rtnetlink=yes
5489fi
5490
6a02c806
SH
5491##########################################
5492# check for usable AF_VSOCK environment
5493have_af_vsock=no
5494cat > $TMPC << EOF
5495#include <errno.h>
5496#include <sys/types.h>
5497#include <sys/socket.h>
5498#if !defined(AF_VSOCK)
5499# error missing AF_VSOCK flag
5500#endif
5501#include <linux/vm_sockets.h>
5502int main(void) {
5503 int sock, ret;
5504 struct sockaddr_vm svm;
5505 socklen_t len = sizeof(svm);
5506 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5507 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5508 if ((ret == -1) && (errno == ENOTCONN)) {
5509 return 0;
5510 }
5511 return -1;
5512}
5513EOF
5514if compile_prog "" "" ; then
5515 have_af_vsock=yes
5516fi
5517
f0d92b56
LM
5518##########################################
5519# check for usable AF_ALG environment
5520hava_afalg=no
5521cat > $TMPC << EOF
5522#include <errno.h>
5523#include <sys/types.h>
5524#include <sys/socket.h>
5525#include <linux/if_alg.h>
5526int main(void) {
5527 int sock;
5528 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5529 return sock;
5530}
5531EOF
5532if compile_prog "" "" ; then
5533 have_afalg=yes
5534fi
5535if test "$crypto_afalg" = "yes"
5536then
5537 if test "$have_afalg" != "yes"
5538 then
5539 error_exit "AF_ALG requested but could not be detected"
5540 fi
5541fi
5542
5543
c97d6d2c
SAGDR
5544#################################################
5545# Check to see if we have the Hypervisor framework
d2d08522 5546if [ "$darwin" = "yes" ] ; then
c97d6d2c
SAGDR
5547 cat > $TMPC << EOF
5548#include <Hypervisor/hv.h>
5549int main() { return 0;}
5550EOF
5551 if ! compile_object ""; then
5552 hvf='no'
5553 else
5554 hvf='yes'
5555 LDFLAGS="-framework Hypervisor $LDFLAGS"
5556 fi
5557fi
5558
6969ec6c
JC
5559#################################################
5560# Sparc implicitly links with --relax, which is
5561# incompatible with -r, so --no-relax should be
5562# given. It does no harm to give it on other
5563# platforms too.
5564
5565# Note: the prototype is needed since QEMU_CFLAGS
5566# contains -Wmissing-prototypes
5567cat > $TMPC << EOF
5568extern int foo(void);
5569int foo(void) { return 0; }
5570EOF
5571if ! compile_object ""; then
5572 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5573fi
7ecf44a5
PB
5574for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5575 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5576 LD_REL_FLAGS=$i
5577 break
5578 fi
5579done
5580if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5581 feature_not_found "modules" "Cannot find how to build relocatable objects"
6969ec6c
JC
5582fi
5583
4d04351f
CC
5584##########################################
5585# check for sysmacros.h
5586
5587have_sysmacros=no
5588cat > $TMPC << EOF
5589#include <sys/sysmacros.h>
5590int main(void) {
5591 return makedev(0, 0);
5592}
5593EOF
5594if compile_prog "" "" ; then
5595 have_sysmacros=yes
5596fi
5597
da92c3ff
AM
5598##########################################
5599# Veritas HyperScale block driver VxHS
5600# Check if libvxhs is installed
5601
5602if test "$vxhs" != "no" ; then
5603 cat > $TMPC <<EOF
5604#include <stdint.h>
5605#include <qnio/qnio_api.h>
5606
5607void *vxhs_callback;
5608
5609int main(void) {
5610 iio_init(QNIO_VERSION, vxhs_callback);
5611 return 0;
5612}
5613EOF
5614 vxhs_libs="-lvxhs -lssl"
5615 if compile_prog "" "$vxhs_libs" ; then
5616 vxhs=yes
5617 else
5618 if test "$vxhs" = "yes" ; then
5619 feature_not_found "vxhs block device" "Install libvxhs See github"
5620 fi
5621 vxhs=no
5622 fi
5623fi
5624
49e00a18
AG
5625##########################################
5626# check for _Static_assert()
5627
5628have_static_assert=no
5629cat > $TMPC << EOF
5630_Static_assert(1, "success");
5631int main(void) {
5632 return 0;
5633}
5634EOF
5635if compile_prog "" "" ; then
5636 have_static_assert=yes
5637fi
5638
e674605f
TG
5639##########################################
5640# check for utmpx.h, it is missing e.g. on OpenBSD
5641
5642have_utmpx=no
5643cat > $TMPC << EOF
5644#include <utmpx.h>
5645struct utmpx user_info;
5646int main(void) {
5647 return 0;
5648}
5649EOF
5650if compile_prog "" "" ; then
5651 have_utmpx=yes
5652fi
5653
247724cb
MAL
5654##########################################
5655# checks for sanitizers
5656
247724cb
MAL
5657have_asan=no
5658have_ubsan=no
d83414e1
MAL
5659have_asan_iface_h=no
5660have_asan_iface_fiber=no
247724cb
MAL
5661
5662if test "$sanitizers" = "yes" ; then
b9f44da2 5663 write_c_skeleton
247724cb
MAL
5664 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5665 have_asan=yes
5666 fi
b9f44da2
MAL
5667
5668 # we could use a simple skeleton for flags checks, but this also
5669 # detect the static linking issue of ubsan, see also:
5670 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5671 cat > $TMPC << EOF
5672#include <stdlib.h>
5673int main(void) {
5674 void *tmp = malloc(10);
5675 return *(int *)(tmp + 2);
5676}
5677EOF
247724cb
MAL
5678 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5679 have_ubsan=yes
5680 fi
d83414e1
MAL
5681
5682 if check_include "sanitizer/asan_interface.h" ; then
5683 have_asan_iface_h=yes
5684 fi
5685
5686 cat > $TMPC << EOF
5687#include <sanitizer/asan_interface.h>
5688int main(void) {
5689 __sanitizer_start_switch_fiber(0, 0, 0);
5690 return 0;
5691}
5692EOF
5693 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5694 have_asan_iface_fiber=yes
5695 fi
247724cb
MAL
5696fi
5697
51a12b51
AB
5698##########################################
5699# Docker and cross-compiler support
5700#
5701# This is specifically for building test
5702# cases for foreign architectures, not
5703# cross-compiling QEMU itself.
5704
5705if has "docker"; then
5706 docker=$($python $source_path/tests/docker/docker.py probe)
5707fi
5708
17824406
JH
5709##########################################
5710# check for libpmem
5711
5712if test "$libpmem" != "no"; then
5713 if $pkg_config --exists "libpmem"; then
5714 libpmem="yes"
5715 libpmem_libs=$($pkg_config --libs libpmem)
5716 libpmem_cflags=$($pkg_config --cflags libpmem)
5717 libs_softmmu="$libs_softmmu $libpmem_libs"
5718 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5719 else
5720 if test "$libpmem" = "yes" ; then
5721 feature_not_found "libpmem" "Install nvml or pmdk"
5722 fi
5723 libpmem="no"
5724 fi
5725fi
5726
7e24e92a 5727##########################################
e86ecd4b
JQ
5728# End of CC checks
5729# After here, no more $cc or $ld runs
5730
d83414e1
MAL
5731write_c_skeleton
5732
1d728c39
BS
5733if test "$gcov" = "yes" ; then
5734 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5735 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
b553a042 5736elif test "$fortify_source" = "yes" ; then
e600cdf3 5737 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
48e56d50
PB
5738elif test "$debug" = "no"; then
5739 CFLAGS="-O2 $CFLAGS"
e86ecd4b 5740fi
a316e378 5741
247724cb
MAL
5742if test "$have_asan" = "yes"; then
5743 CFLAGS="-fsanitize=address $CFLAGS"
d83414e1
MAL
5744 if test "$have_asan_iface_h" = "no" ; then
5745 echo "ASAN build enabled, but ASAN header missing." \
5746 "Without code annotation, the report may be inferior."
5747 elif test "$have_asan_iface_fiber" = "no" ; then
5748 echo "ASAN build enabled, but ASAN header is too old." \
5749 "Without code annotation, the report may be inferior."
5750 fi
247724cb
MAL
5751fi
5752if test "$have_ubsan" = "yes"; then
5753 CFLAGS="-fsanitize=undefined $CFLAGS"
5754fi
5755
6542aa9c
PL
5756##########################################
5757# Do we have libnfs
5758if test "$libnfs" != "no" ; then
b7d769c9 5759 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
5760 libnfs="yes"
5761 libnfs_libs=$($pkg_config --libs libnfs)
6542aa9c
PL
5762 else
5763 if test "$libnfs" = "yes" ; then
8efc9363 5764 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
5765 fi
5766 libnfs="no"
5767 fi
5768fi
1d728c39 5769
3efac6eb
TG
5770##########################################
5771# Do we have libudev
5772if test "$libudev" != "no" ; then
5773 if $pkg_config libudev && test "$static" != "yes"; then
5774 libudev="yes"
5775 libudev_libs=$($pkg_config --libs libudev)
5776 else
5777 libudev="no"
5778 fi
5779fi
5780
6ca026cb
PM
5781# Now we've finished running tests it's OK to add -Werror to the compiler flags
5782if test "$werror" = "yes"; then
5783 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5784fi
5785
e86ecd4b
JQ
5786if test "$solaris" = "no" ; then
5787 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 5788 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
5789 fi
5790fi
5791
94dd53c5
GH
5792# test if pod2man has --utf8 option
5793if pod2man --help | grep -q utf8; then
5794 POD2MAN="pod2man --utf8"
5795else
5796 POD2MAN="pod2man"
5797fi
5798
952afb71
BS
5799# Use ASLR, no-SEH and DEP if available
5800if test "$mingw32" = "yes" ; then
5801 for flag in --dynamicbase --no-seh --nxcompat; do
e9a3591f 5802 if ld_has $flag ; then
952afb71
BS
5803 LDFLAGS="-Wl,$flag $LDFLAGS"
5804 fi
5805 done
5806fi
5807
10ea68b3 5808qemu_confdir=$sysconfdir$confsuffix
e26110cf 5809qemu_moddir=$libdir$confsuffix
528ae5b8 5810qemu_datadir=$datadir$confsuffix
834574ea 5811qemu_localedir="$datadir/locale"
a8260d38 5812qemu_icondir="$datadir/icons"
67ea9546 5813qemu_desktopdir="$datadir/applications"
e7b45cc4 5814
e0580342
KR
5815# We can only support ivshmem if we have eventfd
5816if [ "$eventfd" = "yes" ]; then
5817 ivshmem=yes
5818fi
5819
4b1c11fd
DB
5820tools=""
5821if test "$want_tools" = "yes" ; then
72d277a7 5822 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
4b1c11fd
DB
5823 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5824 tools="qemu-nbd\$(EXESUF) $tools"
b1449edb
KR
5825 fi
5826 if [ "$ivshmem" = "yes" ]; then
a75eb03b 5827 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd 5828 fi
3fa2d384
VP
5829 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5830 tools="elf2dmp $tools"
5831 fi
4b1c11fd
DB
5832fi
5833if test "$softmmu" = yes ; then
b855f8d1
PB
5834 if test "$linux" = yes; then
5835 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
aabfd88d
AF
5836 virtfs=yes
5837 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5838 else
5839 if test "$virtfs" = yes; then
b855f8d1 5840 error_exit "VirtFS requires libcap devel and libattr devel"
983eef5a 5841 fi
17500370 5842 virtfs=no
aabfd88d 5843 fi
fe8fc5ae
PB
5844 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5845 mpath=yes
5846 else
5847 if test "$mpath" = yes; then
5848 error_exit "Multipath requires libmpathpersist devel"
5849 fi
5850 mpath=no
5851 fi
b855f8d1
PB
5852 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5853 else
5854 if test "$virtfs" = yes; then
5855 error_exit "VirtFS is supported only on Linux"
5856 fi
5857 virtfs=no
fe8fc5ae
PB
5858 if test "$mpath" = yes; then
5859 error_exit "Multipath is supported only on Linux"
5860 fi
5861 mpath=no
17bff52b 5862 fi
ff69fd8c
LV
5863 if test "$xkbcommon" = "yes"; then
5864 tools="qemu-keymap\$(EXESUF) $tools"
5865 fi
6a021536 5866fi
9d6bc27b
MR
5867
5868# Probe for guest agent support/options
5869
e8ef31a3 5870if [ "$guest_agent" != "no" ]; then
b39297ae 5871 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 5872 tools="qemu-ga $tools"
e8ef31a3
MT
5873 guest_agent=yes
5874 elif [ "$guest_agent" != yes ]; then
5875 guest_agent=no
5876 else
5877 error_exit "Guest agent is not supported on this platform"
ca35f780 5878 fi
00c705fb 5879fi
ca35f780 5880
9d6bc27b
MR
5881# Guest agent Window MSI package
5882
5883if test "$guest_agent" != yes; then
5884 if test "$guest_agent_msi" = yes; then
5885 error_exit "MSI guest agent package requires guest agent enabled"
5886 fi
5887 guest_agent_msi=no
5888elif test "$mingw32" != "yes"; then
5889 if test "$guest_agent_msi" = "yes"; then
5890 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5891 fi
5892 guest_agent_msi=no
5893elif ! has wixl; then
5894 if test "$guest_agent_msi" = "yes"; then
5895 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5896 fi
5897 guest_agent_msi=no
1a34904e
MR
5898else
5899 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5900 # disabled explicitly
5901 if test "$guest_agent_msi" != "no"; then
5902 guest_agent_msi=yes
5903 fi
9d6bc27b
MR
5904fi
5905
1a34904e 5906if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
5907 if test "$guest_agent_with_vss" = "yes"; then
5908 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5909 fi
5910
5911 if test "$QEMU_GA_MANUFACTURER" = ""; then
5912 QEMU_GA_MANUFACTURER=QEMU
5913 fi
5914
5915 if test "$QEMU_GA_DISTRO" = ""; then
5916 QEMU_GA_DISTRO=Linux
5917 fi
5918
5919 if test "$QEMU_GA_VERSION" = ""; then
89138857 5920 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
5921 fi
5922
89138857 5923 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
5924
5925 case "$cpu" in
5926 x86_64)
5927 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5928 ;;
5929 i386)
5930 QEMU_GA_MSI_ARCH="-D Arch=32"
5931 ;;
5932 *)
5933 error_exit "CPU $cpu not supported for building installation package"
5934 ;;
5935 esac
5936fi
5937
ca35f780
PB
5938# Mac OS X ships with a broken assembler
5939roms=
5940if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5941 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5942 "$softmmu" = yes ; then
e57218b6 5943 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
5944 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5945 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5946 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
5947 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5948 ld_i386_emulation="$emu"
5949 roms="optionrom"
5950 break
5951 fi
5952 done
ca35f780 5953fi
d0384d1d 5954if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
5955 roms="$roms spapr-rtas"
5956fi
ca35f780 5957
2e33c3f8 5958# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
9933c305 5959if test "$cpu" = "s390x" ; then
2e33c3f8
TH
5960 write_c_skeleton
5961 if compile_prog "-march=z900" ""; then
5962 roms="$roms s390-ccw"
5963 fi
9933c305
CB
5964fi
5965
964c6fa1 5966# Probe for the need for relocating the user-only binary.
92fe2ba8 5967if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
964c6fa1
RH
5968 textseg_addr=
5969 case "$cpu" in
479eb121
RH
5970 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5971 # ??? Rationale for choosing this address
964c6fa1
RH
5972 textseg_addr=0x60000000
5973 ;;
5974 mips)
479eb121
RH
5975 # A 256M aligned address, high in the address space, with enough
5976 # room for the code_gen_buffer above it before the stack.
5977 textseg_addr=0x60000000
964c6fa1
RH
5978 ;;
5979 esac
5980 if [ -n "$textseg_addr" ]; then
5981 cat > $TMPC <<EOF
5982 int main(void) { return 0; }
5983EOF
5984 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5985 if ! compile_prog "" "$textseg_ldflags"; then
5986 # In case ld does not support -Ttext-segment, edit the default linker
5987 # script via sed to set the .text start addr. This is needed on FreeBSD
5988 # at least.
92fe2ba8
PM
5989 if ! $ld --verbose >/dev/null 2>&1; then
5990 error_exit \
5991 "We need to link the QEMU user mode binaries at a" \
5992 "specific text address. Unfortunately your linker" \
5993 "doesn't support either the -Ttext-segment option or" \
5994 "printing the default linker script with --verbose." \
5995 "If you don't want the user mode binaries, pass the" \
5996 "--disable-user option to configure."
5997 fi
5998
964c6fa1
RH
5999 $ld --verbose | sed \
6000 -e '1,/==================================================/d' \
6001 -e '/==================================================/,$d' \
6002 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6003 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6004 textseg_ldflags="-Wl,-T../config-host.ld"
6005 fi
6006 fi
6007fi
6008
11cde1c8
BD
6009# Check that the C++ compiler exists and works with the C compiler.
6010# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6011if has $cxx; then
6012 cat > $TMPC <<EOF
6013int c_function(void);
6014int main(void) { return c_function(); }
6015EOF
6016
6017 compile_object
6018
6019 cat > $TMPCXX <<EOF
6020extern "C" {
6021 int c_function(void);
6022}
6023int c_function(void) { return 42; }
6024EOF
6025
6026 update_cxxflags
6027
6028 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6029 # C++ compiler $cxx works ok with C compiler $cc
6030 :
6031 else
6032 echo "C++ compiler $cxx does not work with C compiler $cc"
6033 echo "Disabling C++ specific optional code"
6034 cxx=
6035 fi
6036else
6037 echo "No C++ compiler available; disabling C++ specific optional code"
6038 cxx=
6039fi
6040
02d34f62
CR
6041echo_version() {
6042 if test "$1" = "yes" ; then
6043 echo "($2)"
6044 fi
6045}
6046
50e12060
JK
6047# prepend pixman and ftd flags after all config tests are done
6048QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
8a99e9a3 6049QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
50e12060 6050libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 6051
43ce4dfe 6052echo "Install prefix $prefix"
89138857 6053echo "BIOS directory $(eval echo $qemu_datadir)"
3d5eecab 6054echo "firmware path $(eval echo $firmwarepath)"
89138857
SW
6055echo "binary directory $(eval echo $bindir)"
6056echo "library directory $(eval echo $libdir)"
6057echo "module directory $(eval echo $qemu_moddir)"
6058echo "libexec directory $(eval echo $libexecdir)"
6059echo "include directory $(eval echo $includedir)"
6060echo "config directory $(eval echo $sysconfdir)"
11d9f695 6061if test "$mingw32" = "no" ; then
89138857
SW
6062echo "local state directory $(eval echo $local_statedir)"
6063echo "Manual directory $(eval echo $mandir)"
43ce4dfe 6064echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
6065else
6066echo "local state directory queried at runtime"
d9840e25 6067echo "Windows SDK $win_sdk"
11d9f695 6068fi
5a67135a 6069echo "Source path $source_path"
cc84d63a 6070echo "GIT binary $git"
aef45d51 6071echo "GIT submodules $git_submodules"
43ce4dfe 6072echo "C compiler $cc"
83469015 6073echo "Host C compiler $host_cc"
83f73fce 6074echo "C++ compiler $cxx"
3c4a4d0d 6075echo "Objective-C compiler $objcc"
45d285ab 6076echo "ARFLAGS $ARFLAGS"
0c439cbf 6077echo "CFLAGS $CFLAGS"
a558ee17 6078echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 6079echo "LDFLAGS $LDFLAGS"
8a99e9a3 6080echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
43ce4dfe 6081echo "make $make"
6a882643 6082echo "install $install"
755ee70f 6083echo "python $python ($python_version)"
e2d8830e
BS
6084if test "$slirp" = "yes" ; then
6085 echo "smbd $smbd"
6086fi
17969268 6087echo "module support $modules"
43ce4dfe 6088echo "host CPU $cpu"
de83cd02 6089echo "host big endian $bigendian"
97a847bc 6090echo "target list $target_list"
43ce4dfe 6091echo "gprof enabled $gprof"
03b4fe7d 6092echo "sparse enabled $sparse"
1625af87 6093echo "strip binaries $strip_opt"
05c2a3e7 6094echo "profiler $profiler"
43ce4dfe 6095echo "static build $static"
5b0753e0
FB
6096if test "$darwin" = "yes" ; then
6097 echo "Cocoa support $cocoa"
6098fi
89138857 6099echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
a442fe2f 6100echo "SDL image support $sdl_image"
89138857 6101echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
925a0400 6102echo "GTK GL support $gtk_gl"
89138857 6103echo "VTE support $vte $(echo_version $vte $vteversion)"
a1c5e949 6104echo "TLS priority $tls_priority"
ddbb0d09 6105echo "GNUTLS support $gnutls"
91bfcdb0 6106echo "libgcrypt $gcrypt"
89138857 6107echo "nettle $nettle $(echo_version $nettle $nettle_version)"
9a2fd434 6108echo "libtasn1 $tasn1"
4d3b6f6e 6109echo "curses support $curses"
47479c55 6110echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
769ce76d 6111echo "curl support $curl"
67b915a5 6112echo "mingw32 support $mingw32"
0c58ac1c 6113echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
6114echo "Block whitelist (rw) $block_drv_rw_whitelist"
6115echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 6116echo "VirtFS support $virtfs"
fe8fc5ae 6117echo "Multipath support $mpath"
821601ea
JS
6118echo "VNC support $vnc"
6119if test "$vnc" = "yes" ; then
821601ea
JS
6120 echo "VNC SASL support $vnc_sasl"
6121 echo "VNC JPEG support $vnc_jpeg"
6122 echo "VNC PNG support $vnc_png"
821601ea 6123fi
3142255c
BS
6124if test -n "$sparc_cpu"; then
6125 echo "Target Sparc Arch $sparc_cpu"
6126fi
e37630ca 6127echo "xen support $xen"
3996e85c
PD
6128if test "$xen" = "yes" ; then
6129 echo "xen ctrl version $xen_ctrl_version"
6130fi
2e4d9fb1 6131echo "brlapi support $brlapi"
a20a6f46 6132echo "bluez support $bluez"
a25dba17 6133echo "Documentation $docs"
40d6444e 6134echo "PIE $pie"
8a16d273 6135echo "vde support $vde"
58952137 6136echo "netmap support $netmap"
5c6c3a6c 6137echo "Linux AIO support $linux_aio"
758e8e38 6138echo "ATTR/XATTR support $attr"
77755340 6139echo "Install blobs $blobs"
b31a0277 6140echo "KVM support $kvm"
b0cb0a66 6141echo "HAX support $hax"
c97d6d2c 6142echo "HVF support $hvf"
d661d9a4 6143echo "WHPX support $whpx"
b3f6ea7e
PB
6144echo "TCG support $tcg"
6145if test "$tcg" = "yes" ; then
6146 echo "TCG debug enabled $debug_tcg"
6147 echo "TCG interpreter $tcg_interpreter"
6148fi
5a22ab71 6149echo "malloc trim support $malloc_trim"
2da776db 6150echo "RDMA support $rdma"
21ab34c9 6151echo "PVRDMA support $pvrdma"
f652e6af 6152echo "fdt support $fdt"
a40161cb 6153echo "membarrier $membarrier"
ceb42de8 6154echo "preadv support $preadv"
5f6b9e8f 6155echo "fdatasync $fdatasync"
e78815a5
AF
6156echo "madvise $madvise"
6157echo "posix_madvise $posix_madvise"
9bc5a719 6158echo "posix_memalign $posix_memalign"
47e98658 6159echo "libcap-ng support $cap_ng"
d5970055 6160echo "vhost-net support $vhost_net"
042cea27 6161echo "vhost-crypto support $vhost_crypto"
5e9be92d 6162echo "vhost-scsi support $vhost_scsi"
fc0b9b0e 6163echo "vhost-vsock support $vhost_vsock"
e6a74868 6164echo "vhost-user support $vhost_user"
5b808275 6165echo "Trace backends $trace_backends"
713572a7 6166if have_backend "simple"; then
9410b56c 6167echo "Trace output file $trace_file-<pid>"
e00e36fb 6168fi
89138857 6169echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
f27aaf4b 6170echo "rbd support $rbd"
dce512de 6171echo "xfsctl support $xfs"
7b02f544 6172echo "smartcard support $smartcard"
2b2325ff 6173echo "libusb $libusb"
69354a83 6174echo "usb net redir $usb_redir"
da076ffe 6175echo "OpenGL support $opengl"
014cb152 6176echo "OpenGL dmabufs $opengl_dmabuf"
c589b249 6177echo "libiscsi support $libiscsi"
6542aa9c 6178echo "libnfs support $libnfs"
d138cee9 6179echo "build guest agent $guest_agent"
d9840e25 6180echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 6181echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 6182echo "QGA MSI support $guest_agent_msi"
f794573e 6183echo "seccomp support $seccomp"
7c2acc70 6184echo "coroutine backend $coroutine"
70c60c08 6185echo "coroutine pool $coroutine_pool"
7d992e4d 6186echo "debug stack usage $debug_stack_usage"
ba59fb77 6187echo "mutex debugging $debug_mutex"
f0d92b56 6188echo "crypto afalg $crypto_afalg"
eb100396 6189echo "GlusterFS support $glusterfs"
1d728c39
BS
6190echo "gcov $gcov_tool"
6191echo "gcov enabled $gcov"
ab214c29 6192echo "TPM support $tpm"
0a12ec87 6193echo "libssh2 support $libssh2"
3b8acc11 6194echo "TPM passthrough $tpm_passthrough"
f4ede81e 6195echo "TPM emulator $tpm_emulator"
3556c233 6196echo "QOM debugging $qom_cast_debug"
ed1701c6 6197echo "Live block migration $live_block_migration"
607dacd0
QN
6198echo "lzo support $lzo"
6199echo "snappy support $snappy"
6b383c08 6200echo "bzip2 support $bzip2"
83bc1f97 6201echo "lzfse support $lzfse"
a99d57bb 6202echo "NUMA host support $numa"
ed279a06 6203echo "libxml2 $libxml2"
2847b469 6204echo "tcmalloc support $tcmalloc"
7b01cb97 6205echo "jemalloc support $jemalloc"
99f2dbd3 6206echo "avx2 optimization $avx2_opt"
a6b1d4c0 6207echo "replication support $replication"
da92c3ff 6208echo "VxHS block device $vxhs"
2f740136
JC
6209echo "bochs support $bochs"
6210echo "cloop support $cloop"
6211echo "dmg support $dmg"
6212echo "qcow v1 support $qcow1"
6213echo "vdi support $vdi"
6214echo "vvfat support $vvfat"
6215echo "qed support $qed"
6216echo "parallels support $parallels"
6217echo "sheepdog support $sheepdog"
8ca80760 6218echo "capstone $capstone"
51a12b51 6219echo "docker $docker"
17824406 6220echo "libpmem support $libpmem"
3efac6eb 6221echo "libudev $libudev"
67b915a5 6222
1ba16968 6223if test "$sdl_too_old" = "yes"; then
24b55b96 6224echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 6225fi
7d13299d 6226
e52c6ba3
DB
6227if test "$sdlabi" = "1.2"; then
6228 echo
6229 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6230 echo "WARNING: future releases. Please switch to using SDL 2.0"
6231fi
6232
898be3e0
PM
6233if test "$supported_cpu" = "no"; then
6234 echo
6235 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6236 echo
6237 echo "CPU host architecture $cpu support is not currently maintained."
6238 echo "The QEMU project intends to remove support for this host CPU in"
6239 echo "a future release if nobody volunteers to maintain it and to"
6240 echo "provide a build host for our continuous integration setup."
6241 echo "configure has succeeded and you can continue to build, but"
6242 echo "if you care about QEMU on this platform you should contact"
6243 echo "us upstream at qemu-devel@nongnu.org."
6244fi
6245
6246if test "$supported_os" = "no"; then
6247 echo
6248 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6249 echo
c50126aa
PM
6250 echo "Host OS $targetos support is not currently maintained."
6251 echo "The QEMU project intends to remove support for this host OS in"
898be3e0
PM
6252 echo "a future release if nobody volunteers to maintain it and to"
6253 echo "provide a build host for our continuous integration setup."
6254 echo "configure has succeeded and you can continue to build, but"
6255 echo "if you care about QEMU on this platform you should contact"
6256 echo "us upstream at qemu-devel@nongnu.org."
6257fi
6258
98ec69ac 6259config_host_mak="config-host.mak"
98ec69ac 6260
dbd99ae3
SW
6261echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6262
98ec69ac 6263echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 6264echo >> $config_host_mak
98ec69ac 6265
e6c3b0f7 6266echo all: >> $config_host_mak
99d7cc75
PB
6267echo "prefix=$prefix" >> $config_host_mak
6268echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 6269echo "libdir=$libdir" >> $config_host_mak
8bf188aa 6270echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 6271echo "includedir=$includedir" >> $config_host_mak
99d7cc75 6272echo "mandir=$mandir" >> $config_host_mak
99d7cc75 6273echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 6274echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce 6275echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
3d5eecab 6276echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
9afa52ce 6277echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 6278echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
6279if test "$mingw32" = "no" ; then
6280 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6281fi
f354b1a1 6282echo "qemu_helperdir=$libexecdir" >> $config_host_mak
834574ea 6283echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
a8260d38 6284echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
67ea9546 6285echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
f544a488 6286echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
cc84d63a 6287echo "GIT=$git" >> $config_host_mak
aef45d51 6288echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
f62bbee5 6289echo "GIT_UPDATE=$git_update" >> $config_host_mak
804edf29 6290
98ec69ac 6291echo "ARCH=$ARCH" >> $config_host_mak
727e5283 6292
f8393946 6293if test "$debug_tcg" = "yes" ; then
2358a494 6294 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 6295fi
1625af87 6296if test "$strip_opt" = "yes" ; then
52ba784d 6297 echo "STRIP=${strip}" >> $config_host_mak
1625af87 6298fi
7d13299d 6299if test "$bigendian" = "yes" ; then
e2542fe2 6300 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 6301fi
67b915a5 6302if test "$mingw32" = "yes" ; then
98ec69ac 6303 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 6304 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
6305 version_major=${rc_version%%.*}
6306 rc_version=${rc_version#*.}
6307 version_minor=${rc_version%%.*}
6308 rc_version=${rc_version#*.}
6309 version_subminor=${rc_version%%.*}
6310 version_micro=0
6311 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6312 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
6313 if test "$guest_agent_with_vss" = "yes" ; then
6314 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 6315 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
6316 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6317 fi
50cbebb9 6318 if test "$guest_agent_ntddscsi" = "yes" ; then
76dc75ca 6319 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
50cbebb9 6320 fi
1a34904e 6321 if test "$guest_agent_msi" = "yes"; then
d661d9a4 6322 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
9dacf32d
YH
6323 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6324 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6325 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6326 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6327 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6328 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6329 fi
210fa556 6330else
35f4df27 6331 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
6332fi
6333
6334if test "$linux" = "yes" ; then
6335 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 6336fi
128ab2ff 6337
83fb7adf 6338if test "$darwin" = "yes" ; then
98ec69ac 6339 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 6340fi
b29fe3ed 6341
ec530c81 6342if test "$solaris" = "yes" ; then
98ec69ac 6343 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 6344fi
179cf400
AF
6345if test "$haiku" = "yes" ; then
6346 echo "CONFIG_HAIKU=y" >> $config_host_mak
6347fi
97a847bc 6348if test "$static" = "yes" ; then
98ec69ac 6349 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 6350fi
1ba16968 6351if test "$profiler" = "yes" ; then
2358a494 6352 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 6353fi
c20709aa 6354if test "$slirp" = "yes" ; then
98ec69ac 6355 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 6356 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 6357fi
8a16d273 6358if test "$vde" = "yes" ; then
98ec69ac 6359 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 6360 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 6361fi
58952137
VM
6362if test "$netmap" = "yes" ; then
6363 echo "CONFIG_NETMAP=y" >> $config_host_mak
6364fi
015a33bd
GA
6365if test "$l2tpv3" = "yes" ; then
6366 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6367fi
47e98658
CB
6368if test "$cap_ng" = "yes" ; then
6369 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6370fi
2358a494 6371echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 6372for drv in $audio_drv_list; do
1ef1ec2a 6373 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
ce3dc033 6374 case "$drv" in
051c7d5c 6375 alsa | oss | pa | sdl)
ce3dc033
GH
6376 echo "$def=m" >> $config_host_mak ;;
6377 *)
6378 echo "$def=y" >> $config_host_mak ;;
6379 esac
0c58ac1c 6380done
b1149911
FZ
6381echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6382echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6383echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6384echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6385echo "OSS_LIBS=$oss_libs" >> $config_host_mak
67f86e8e
JQ
6386if test "$audio_pt_int" = "yes" ; then
6387 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6388fi
d5631638 6389if test "$audio_win_int" = "yes" ; then
6390 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6391fi
b64ec4e4
FZ
6392echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6393echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
6394if test "$vnc" = "yes" ; then
6395 echo "CONFIG_VNC=y" >> $config_host_mak
6396fi
2f9606b3 6397if test "$vnc_sasl" = "yes" ; then
98ec69ac 6398 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 6399fi
821601ea 6400if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 6401 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 6402fi
821601ea 6403if test "$vnc_png" = "yes" ; then
efe556ad 6404 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 6405fi
6a021536
GH
6406if test "$xkbcommon" = "yes" ; then
6407 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6408 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6409fi
76655d6d 6410if test "$fnmatch" = "yes" ; then
2358a494 6411 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 6412fi
dce512de
CH
6413if test "$xfs" = "yes" ; then
6414 echo "CONFIG_XFS=y" >> $config_host_mak
6415fi
89138857 6416qemu_version=$(head $source_path/VERSION)
98ec69ac 6417echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 6418echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 6419echo "SRC_PATH=$source_path" >> $config_host_mak
2b1f35b9 6420echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 6421if [ "$docs" = "yes" ] ; then
98ec69ac 6422 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 6423fi
17969268 6424if test "$modules" = "yes"; then
e26110cf
FZ
6425 # $shacmd can generate a hash started with digit, which the compiler doesn't
6426 # like as an symbol. So prefix it with an underscore
89138857 6427 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
6428 echo "CONFIG_MODULES=y" >> $config_host_mak
6429fi
8781595b
GH
6430if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6431 echo "CONFIG_X11=y" >> $config_host_mak
6432 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6433 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6434fi
1ac88f28 6435if test "$sdl" = "yes" ; then
96400a14 6436 echo "CONFIG_SDL=m" >> $config_host_mak
a3f4d63d 6437 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 6438 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
8ecc89f6 6439 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
a442fe2f
DB
6440 if test "$sdl_image" = "yes" ; then
6441 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6442 fi
49ecc3fa
FB
6443fi
6444if test "$cocoa" = "yes" ; then
98ec69ac 6445 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
6446fi
6447if test "$curses" = "yes" ; then
2373f7d5
GH
6448 echo "CONFIG_CURSES=m" >> $config_host_mak
6449 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6450 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
49ecc3fa 6451fi
099d6b0f 6452if test "$pipe2" = "yes" ; then
2358a494 6453 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 6454fi
40ff6d7e
KW
6455if test "$accept4" = "yes" ; then
6456 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6457fi
3ce34dfb 6458if test "$splice" = "yes" ; then
2358a494 6459 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 6460fi
c2882b96
RV
6461if test "$eventfd" = "yes" ; then
6462 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6463fi
751bcc39
MAL
6464if test "$memfd" = "yes" ; then
6465 echo "CONFIG_MEMFD=y" >> $config_host_mak
6466fi
955727d2
CT
6467if test "$have_usbfs" = "yes" ; then
6468 echo "CONFIG_USBFS=y" >> $config_host_mak
6469fi
d0927938
UH
6470if test "$fallocate" = "yes" ; then
6471 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6472fi
3d4fa43e
KK
6473if test "$fallocate_punch_hole" = "yes" ; then
6474 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6475fi
b953f075
DL
6476if test "$fallocate_zero_range" = "yes" ; then
6477 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6478fi
ed911435
KW
6479if test "$posix_fallocate" = "yes" ; then
6480 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6481fi
c727f47d
PM
6482if test "$sync_file_range" = "yes" ; then
6483 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6484fi
dace20dc
PM
6485if test "$fiemap" = "yes" ; then
6486 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6487fi
d0927938
UH
6488if test "$dup3" = "yes" ; then
6489 echo "CONFIG_DUP3=y" >> $config_host_mak
6490fi
4e0c6529
AB
6491if test "$ppoll" = "yes" ; then
6492 echo "CONFIG_PPOLL=y" >> $config_host_mak
6493fi
cd758dd0
AB
6494if test "$prctl_pr_set_timerslack" = "yes" ; then
6495 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6496fi
3b6edd16
PM
6497if test "$epoll" = "yes" ; then
6498 echo "CONFIG_EPOLL=y" >> $config_host_mak
6499fi
6500if test "$epoll_create1" = "yes" ; then
6501 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6502fi
a8fd1aba
PM
6503if test "$sendfile" = "yes" ; then
6504 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6505fi
51834341
RV
6506if test "$timerfd" = "yes" ; then
6507 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6508fi
9af5c906
RV
6509if test "$setns" = "yes" ; then
6510 echo "CONFIG_SETNS=y" >> $config_host_mak
6511fi
38860a03
AM
6512if test "$clock_adjtime" = "yes" ; then
6513 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6514fi
5a03cd00
AM
6515if test "$syncfs" = "yes" ; then
6516 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6517fi
3b3f24ad 6518if test "$inotify" = "yes" ; then
2358a494 6519 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 6520fi
c05c7a73
RV
6521if test "$inotify1" = "yes" ; then
6522 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6523fi
401bc051
PM
6524if test "$sem_timedwait" = "yes" ; then
6525 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6526fi
5c99fa37
KF
6527if test "$strchrnul" = "yes" ; then
6528 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6529fi
6ae9a1f4
JQ
6530if test "$byteswap_h" = "yes" ; then
6531 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6532fi
6533if test "$bswap_h" = "yes" ; then
6534 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6535fi
769ce76d 6536if test "$curl" = "yes" ; then
d3399d7c 6537 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 6538 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 6539 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 6540fi
2e4d9fb1 6541if test "$brlapi" = "yes" ; then
98ec69ac 6542 echo "CONFIG_BRLAPI=y" >> $config_host_mak
8eca2889 6543 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
2e4d9fb1 6544fi
fb599c9a 6545if test "$bluez" = "yes" ; then
98ec69ac 6546 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 6547 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 6548fi
a4ccabcf 6549if test "$gtk" = "yes" ; then
e0fb129c 6550 echo "CONFIG_GTK=m" >> $config_host_mak
a4ccabcf 6551 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 6552 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
6553 if test "$gtk_gl" = "yes" ; then
6554 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6555 fi
bbbf9bfb 6556fi
a1c5e949 6557echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
6558if test "$gnutls" = "yes" ; then
6559 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6560fi
91bfcdb0
DB
6561if test "$gcrypt" = "yes" ; then
6562 echo "CONFIG_GCRYPT=y" >> $config_host_mak
1f923c70
LM
6563 if test "$gcrypt_hmac" = "yes" ; then
6564 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6565 fi
62893b67 6566fi
91bfcdb0
DB
6567if test "$nettle" = "yes" ; then
6568 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 6569 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
ed754746 6570fi
9a2fd434
DB
6571if test "$tasn1" = "yes" ; then
6572 echo "CONFIG_TASN1=y" >> $config_host_mak
6573fi
559607ea
DB
6574if test "$have_ifaddrs_h" = "yes" ; then
6575 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6576fi
6b39b063
EB
6577if test "$have_broken_size_max" = "yes" ; then
6578 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6579fi
277abf15
JV
6580
6581# Work around a system header bug with some kernel/XFS header
6582# versions where they both try to define 'struct fsxattr':
6583# xfs headers will not try to redefine structs from linux headers
6584# if this macro is set.
6585if test "$have_fsxattr" = "yes" ; then
6586 echo "HAVE_FSXATTR=y" >> $config_host_mak
6587fi
1efad060
FZ
6588if test "$have_copy_file_range" = "yes" ; then
6589 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6590fi
bbbf9bfb
SW
6591if test "$vte" = "yes" ; then
6592 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf 6593 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
e0fb129c 6594 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
a4ccabcf 6595fi
9d9e1521
GH
6596if test "$virglrenderer" = "yes" ; then
6597 echo "CONFIG_VIRGL=y" >> $config_host_mak
6598 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6599 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6600fi
e37630ca 6601if test "$xen" = "yes" ; then
6dbd588a 6602 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 6603 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
e37630ca 6604fi
5c6c3a6c
CH
6605if test "$linux_aio" = "yes" ; then
6606 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6607fi
758e8e38
VJ
6608if test "$attr" = "yes" ; then
6609 echo "CONFIG_ATTR=y" >> $config_host_mak
6610fi
4f26f2b6
AK
6611if test "$libattr" = "yes" ; then
6612 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6613fi
983eef5a
MI
6614if test "$virtfs" = "yes" ; then
6615 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 6616fi
fe8fc5ae
PB
6617if test "$mpath" = "yes" ; then
6618 echo "CONFIG_MPATH=y" >> $config_host_mak
1b0578f5
MOA
6619 if test "$mpathpersist_new_api" = "yes"; then
6620 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6621 fi
fe8fc5ae 6622fi
5e9be92d
NB
6623if test "$vhost_scsi" = "yes" ; then
6624 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6625fi
e6a74868 6626if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
03ce5744
NN
6627 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6628fi
042cea27
GA
6629if test "$vhost_crypto" = "yes" ; then
6630 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6631fi
fc0b9b0e
SH
6632if test "$vhost_vsock" = "yes" ; then
6633 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6634fi
e6a74868
MAL
6635if test "$vhost_user" = "yes" ; then
6636 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6637fi
77755340 6638if test "$blobs" = "yes" ; then
98ec69ac 6639 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 6640fi
bf9298b9 6641if test "$iovec" = "yes" ; then
2358a494 6642 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 6643fi
ceb42de8 6644if test "$preadv" = "yes" ; then
2358a494 6645 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 6646fi
e3971d61 6647if test "$fdt" != "no" ; then
3f0855b1 6648 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 6649fi
a40161cb
PB
6650if test "$membarrier" = "yes" ; then
6651 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6652fi
dcc38d1c
MT
6653if test "$signalfd" = "yes" ; then
6654 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6655fi
b3f6ea7e
PB
6656if test "$tcg" = "yes"; then
6657 echo "CONFIG_TCG=y" >> $config_host_mak
6658 if test "$tcg_interpreter" = "yes" ; then
6659 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6660 fi
9195b2c2 6661fi
5f6b9e8f
BS
6662if test "$fdatasync" = "yes" ; then
6663 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6664fi
e78815a5
AF
6665if test "$madvise" = "yes" ; then
6666 echo "CONFIG_MADVISE=y" >> $config_host_mak
6667fi
6668if test "$posix_madvise" = "yes" ; then
6669 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6670fi
9bc5a719
AG
6671if test "$posix_memalign" = "yes" ; then
6672 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6673fi
97a847bc 6674
cd4ec0b4
GH
6675if test "$spice" = "yes" ; then
6676 echo "CONFIG_SPICE=y" >> $config_host_mak
6677fi
36707144 6678
7b02f544
MAL
6679if test "$smartcard" = "yes" ; then
6680 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7b62bf5a
FZ
6681 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6682 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
111a38b0
RR
6683fi
6684
2b2325ff
GH
6685if test "$libusb" = "yes" ; then
6686 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
b878b652
FZ
6687 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6688 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
2b2325ff
GH
6689fi
6690
69354a83
HG
6691if test "$usb_redir" = "yes" ; then
6692 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
cc7923fc
FZ
6693 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6694 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
69354a83
HG
6695fi
6696
da076ffe
GH
6697if test "$opengl" = "yes" ; then
6698 echo "CONFIG_OPENGL=y" >> $config_host_mak
6699 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
6700 if test "$opengl_dmabuf" = "yes" ; then
6701 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6702 fi
20ff075b
MW
6703fi
6704
5a22ab71
YZ
6705if test "$malloc_trim" = "yes" ; then
6706 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6707fi
6708
99f2dbd3
LL
6709if test "$avx2_opt" = "yes" ; then
6710 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6711fi
6712
607dacd0
QN
6713if test "$lzo" = "yes" ; then
6714 echo "CONFIG_LZO=y" >> $config_host_mak
6715fi
6716
6717if test "$snappy" = "yes" ; then
6718 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6719fi
6720
6b383c08
PW
6721if test "$bzip2" = "yes" ; then
6722 echo "CONFIG_BZIP2=y" >> $config_host_mak
6723 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6724fi
6725
83bc1f97
JF
6726if test "$lzfse" = "yes" ; then
6727 echo "CONFIG_LZFSE=y" >> $config_host_mak
6728 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6729fi
6730
c589b249 6731if test "$libiscsi" = "yes" ; then
d3399d7c 6732 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
6733 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6734 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
6735fi
6736
6542aa9c 6737if test "$libnfs" = "yes" ; then
4be4879f
CL
6738 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6739 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6542aa9c
PL
6740fi
6741
f794573e
EO
6742if test "$seccomp" = "yes"; then
6743 echo "CONFIG_SECCOMP=y" >> $config_host_mak
c3883e1f
FZ
6744 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6745 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
f794573e
EO
6746fi
6747
83fb7adf 6748# XXX: suppress that
7d3505c5 6749if [ "$bsd" = "yes" ] ; then
2358a494 6750 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
6751fi
6752
4d9310f4
DB
6753if test "$localtime_r" = "yes" ; then
6754 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6755fi
3556c233
PB
6756if test "$qom_cast_debug" = "yes" ; then
6757 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6758fi
f27aaf4b 6759if test "$rbd" = "yes" ; then
d3399d7c 6760 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
6761 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6762 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
6763fi
6764
7c2acc70 6765echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
6766if test "$coroutine_pool" = "yes" ; then
6767 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6768else
6769 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6770fi
20ff6c80 6771
7d992e4d
PL
6772if test "$debug_stack_usage" = "yes" ; then
6773 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6774fi
6775
f0d92b56
LM
6776if test "$crypto_afalg" = "yes" ; then
6777 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6778fi
6779
d2042378
AK
6780if test "$open_by_handle_at" = "yes" ; then
6781 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6782fi
6783
e06a765e
HPB
6784if test "$linux_magic_h" = "yes" ; then
6785 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
6786fi
6787
cc6e3ca9
GH
6788if test "$pragma_diagnostic_available" = "yes" ; then
6789 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
6790fi
6791
3f4349dc
KW
6792if test "$valgrind_h" = "yes" ; then
6793 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6794fi
6795
d83414e1
MAL
6796if test "$have_asan_iface_fiber" = "yes" ; then
6797 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6798fi
6799
8ab1bf12
LC
6800if test "$has_environ" = "yes" ; then
6801 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
6802fi
6803
76a347e1
RH
6804if test "$cpuid_h" = "yes" ; then
6805 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6806fi
6807
f540166b
RH
6808if test "$int128" = "yes" ; then
6809 echo "CONFIG_INT128=y" >> $config_host_mak
6810fi
6811
7ebee43e
RH
6812if test "$atomic128" = "yes" ; then
6813 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6814fi
6815
e6cd4bb5
RH
6816if test "$cmpxchg128" = "yes" ; then
6817 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6818fi
6819
df79b996
RH
6820if test "$atomic64" = "yes" ; then
6821 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6822fi
6823
db432672
RH
6824if test "$vector16" = "yes" ; then
6825 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6826fi
6827
1e6e9aca
RH
6828if test "$getauxval" = "yes" ; then
6829 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6830fi
6831
eb100396 6832if test "$glusterfs" = "yes" ; then
d3399d7c 6833 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
6834 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6835 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
6836fi
6837
d85fa9eb
JC
6838if test "$glusterfs_xlator_opt" = "yes" ; then
6839 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6840fi
6841
0c14fb47
BR
6842if test "$glusterfs_discard" = "yes" ; then
6843 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 6844fi
e06a765e 6845
df3a429a
NV
6846if test "$glusterfs_fallocate" = "yes" ; then
6847 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6848fi
6849
7c815372
BR
6850if test "$glusterfs_zerofill" = "yes" ; then
6851 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6852fi
6853
0a12ec87 6854if test "$libssh2" = "yes" ; then
d3399d7c 6855 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
6856 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6857 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
6858fi
6859
ed1701c6
DDAG
6860if test "$live_block_migration" = "yes" ; then
6861 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6862fi
6863
3b8acc11
PB
6864if test "$tpm" = "yes"; then
6865 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
f4ede81e 6866 # TPM passthrough support?
3b8acc11
PB
6867 if test "$tpm_passthrough" = "yes"; then
6868 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6869 fi
f4ede81e
AV
6870 # TPM emulator support?
6871 if test "$tpm_emulator" = "yes"; then
6872 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6873 fi
3b8acc11
PB
6874fi
6875
5b808275
LV
6876echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6877if have_backend "nop"; then
6d8a764e 6878 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 6879fi
5b808275 6880if have_backend "simple"; then
6d8a764e
LV
6881 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6882 # Set the appropriate trace file.
953ffe0f 6883 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 6884fi
ed7f5f1d
PB
6885if have_backend "log"; then
6886 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 6887fi
5b808275 6888if have_backend "ust"; then
6d8a764e
LV
6889 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6890fi
5b808275 6891if have_backend "dtrace"; then
6d8a764e
LV
6892 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6893 if test "$trace_backend_stap" = "yes" ; then
6894 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6895 fi
c276b17d 6896fi
5b808275 6897if have_backend "ftrace"; then
781e9545
ET
6898 if test "$linux" = "yes" ; then
6899 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 6900 else
21684af0 6901 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
6902 fi
6903fi
0a852417
PD
6904if have_backend "syslog"; then
6905 if test "$posix_syslog" = "yes" ; then
6906 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6907 else
6908 feature_not_found "syslog(trace backend)" "syslog not available"
6909 fi
6910fi
9410b56c
PS
6911echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6912
2da776db
MH
6913if test "$rdma" = "yes" ; then
6914 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 6915 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
6916fi
6917
21ab34c9
MA
6918if test "$pvrdma" = "yes" ; then
6919 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6920fi
6921
575b22b1
LV
6922if test "$have_rtnetlink" = "yes" ; then
6923 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6924fi
6925
ed279a06
KK
6926if test "$libxml2" = "yes" ; then
6927 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6928 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6929 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6930fi
6931
a6b1d4c0
CX
6932if test "$replication" = "yes" ; then
6933 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6934fi
6935
6a02c806
SH
6936if test "$have_af_vsock" = "yes" ; then
6937 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6938fi
6939
4d04351f
CC
6940if test "$have_sysmacros" = "yes" ; then
6941 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6942fi
6943
49e00a18
AG
6944if test "$have_static_assert" = "yes" ; then
6945 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6946fi
6947
e674605f
TG
6948if test "$have_utmpx" = "yes" ; then
6949 echo "HAVE_UTMPX=y" >> $config_host_mak
6950fi
6951
e0580342
KR
6952if test "$ivshmem" = "yes" ; then
6953 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
8ca80760 6954fi
e219c499 6955if test "$capstone" != "no" ; then
8ca80760 6956 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
e0580342 6957fi
ba59fb77
PB
6958if test "$debug_mutex" = "yes" ; then
6959 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6960fi
e0580342 6961
5c312079
DDAG
6962# Hold two types of flag:
6963# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6964# a thread we have a handle to
479a5747 6965# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
5c312079 6966# platform
479a5747
RB
6967if test "$pthread_setname_np_w_tid" = "yes" ; then
6968 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6969 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6970elif test "$pthread_setname_np_wo_tid" = "yes" ; then
5c312079 6971 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
479a5747 6972 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
5c312079
DDAG
6973fi
6974
da92c3ff
AM
6975if test "$vxhs" = "yes" ; then
6976 echo "CONFIG_VXHS=y" >> $config_host_mak
6977 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6978fi
6979
17824406
JH
6980if test "$libpmem" = "yes" ; then
6981 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6982fi
6983
2f740136
JC
6984if test "$bochs" = "yes" ; then
6985 echo "CONFIG_BOCHS=y" >> $config_host_mak
6986fi
6987if test "$cloop" = "yes" ; then
6988 echo "CONFIG_CLOOP=y" >> $config_host_mak
6989fi
6990if test "$dmg" = "yes" ; then
6991 echo "CONFIG_DMG=y" >> $config_host_mak
6992fi
6993if test "$qcow1" = "yes" ; then
6994 echo "CONFIG_QCOW1=y" >> $config_host_mak
6995fi
6996if test "$vdi" = "yes" ; then
6997 echo "CONFIG_VDI=y" >> $config_host_mak
6998fi
6999if test "$vvfat" = "yes" ; then
7000 echo "CONFIG_VVFAT=y" >> $config_host_mak
7001fi
7002if test "$qed" = "yes" ; then
7003 echo "CONFIG_QED=y" >> $config_host_mak
7004fi
7005if test "$parallels" = "yes" ; then
7006 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7007fi
7008if test "$sheepdog" = "yes" ; then
7009 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7010fi
7011
5b5e3037 7012if test "$tcg_interpreter" = "yes"; then
9edc19c9 7013 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5b5e3037 7014elif test "$ARCH" = "sparc64" ; then
9edc19c9 7015 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5b5e3037 7016elif test "$ARCH" = "s390x" ; then
9edc19c9 7017 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 7018elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
9edc19c9 7019 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5 7020elif test "$ARCH" = "ppc64" ; then
9edc19c9 7021 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
c4f80543
AF
7022elif test "$ARCH" = "riscv32" -o "$ARCH" = "riscv64" ; then
7023 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
5b5e3037 7024else
9edc19c9 7025 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5b5e3037 7026fi
9edc19c9 7027QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
5b5e3037 7028
98ec69ac 7029echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 7030echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
7031echo "MAKE=$make" >> $config_host_mak
7032echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
7033echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7034echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
e999ee44
MT
7035echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7036echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
c886edfb 7037echo "PYTHON=$python" >> $config_host_mak
755ee70f 7038echo "PYTHON_VERSION=$python_version" >> $config_host_mak
804edf29 7039echo "CC=$cc" >> $config_host_mak
a31a8642
MT
7040if $iasl -h > /dev/null 2>&1; then
7041 echo "IASL=$iasl" >> $config_host_mak
7042fi
804edf29 7043echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 7044echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 7045echo "OBJCC=$objcc" >> $config_host_mak
804edf29 7046echo "AR=$ar" >> $config_host_mak
45d285ab 7047echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 7048echo "AS=$as" >> $config_host_mak
5f6f0e27 7049echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 7050echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
7051echo "OBJCOPY=$objcopy" >> $config_host_mak
7052echo "LD=$ld" >> $config_host_mak
9f81aeb5 7053echo "RANLIB=$ranlib" >> $config_host_mak
4852ee95 7054echo "NM=$nm" >> $config_host_mak
9fe6de94 7055echo "WINDRES=$windres" >> $config_host_mak
e2a2ed06 7056echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 7057echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 7058echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 7059echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
f9728943 7060echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
7061if test "$sparse" = "yes" ; then
7062 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 7063 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 7064 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
7065 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7066 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7067fi
42da6041
GH
7068if test "$cross_prefix" != ""; then
7069 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
7070else
7071 echo "AUTOCONF_HOST := " >> $config_host_mak
7072fi
e2a2ed06 7073echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 7074echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
8a99e9a3 7075echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6969ec6c 7076echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
e57218b6 7077echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
73da375e 7078echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 7079echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
409437e1 7080echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
804edf29 7081echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
7082echo "DSOSUF=$DSOSUF" >> $config_host_mak
7083echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 7084echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
7085echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7086echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 7087echo "POD2MAN=$POD2MAN" >> $config_host_mak
1d728c39
BS
7088if test "$gcov" = "yes" ; then
7089 echo "CONFIG_GCOV=y" >> $config_host_mak
7090 echo "GCOV=$gcov_tool" >> $config_host_mak
7091fi
804edf29 7092
51a12b51
AB
7093if test "$docker" != "no"; then
7094 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7095fi
7096
3efac6eb
TG
7097if test "$libudev" != "no"; then
7098 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7099 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7100fi
7101
6efd7517
PM
7102# use included Linux headers
7103if test "$linux" = "yes" ; then
a307beb6 7104 mkdir -p linux-headers
6efd7517 7105 case "$cpu" in
c72b26ec 7106 i386|x86_64|x32)
08312a63 7107 linux_arch=x86
6efd7517 7108 ;;
a69dc537 7109 ppc|ppc64)
08312a63 7110 linux_arch=powerpc
6efd7517
PM
7111 ;;
7112 s390x)
08312a63
PM
7113 linux_arch=s390
7114 ;;
1f080313
CF
7115 aarch64)
7116 linux_arch=arm64
7117 ;;
222e7d11
SL
7118 mips64)
7119 linux_arch=mips
7120 ;;
08312a63
PM
7121 *)
7122 # For most CPUs the kernel architecture name and QEMU CPU name match.
7123 linux_arch="$cpu"
6efd7517
PM
7124 ;;
7125 esac
08312a63
PM
7126 # For non-KVM architectures we will not have asm headers
7127 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7128 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7129 fi
6efd7517
PM
7130fi
7131
1d14ffa9 7132for target in $target_list; do
97a847bc 7133target_dir="$target"
25be210f 7134config_target_mak=$target_dir/config-target.mak
89138857 7135target_name=$(echo $target | cut -d '-' -f 1)
97a847bc 7136target_bigendian="no"
1f3d3c8f 7137
c1799a84 7138case "$target_name" in
a69dc537 7139 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
7140 target_bigendian=yes
7141 ;;
7142esac
97a847bc 7143target_softmmu="no"
997344f3 7144target_user_only="no"
831b7825 7145target_linux_user="no"
84778508 7146target_bsd_user="no"
9e407a85 7147case "$target" in
c1799a84 7148 ${target_name}-softmmu)
9e407a85
PB
7149 target_softmmu="yes"
7150 ;;
c1799a84 7151 ${target_name}-linux-user)
9e407a85
PB
7152 target_user_only="yes"
7153 target_linux_user="yes"
7154 ;;
c1799a84 7155 ${target_name}-bsd-user)
84778508
BS
7156 target_user_only="yes"
7157 target_bsd_user="yes"
7158 ;;
9e407a85 7159 *)
76ad07a4 7160 error_exit "Target '$target' not recognised"
9e407a85
PB
7161 exit 1
7162 ;;
7163esac
831b7825 7164
d75402b5
AB
7165target_compiler=""
7166target_compiler_static=""
716a507c 7167target_compiler_cflags=""
d75402b5 7168
97a847bc 7169mkdir -p $target_dir
25be210f 7170echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 7171
e5fe0c52 7172bflt="no"
ca759f9e 7173mttcg="no"
89138857 7174interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
56aebc89 7175gdb_xml_files=""
7ba1e619 7176
c1799a84 7177TARGET_ARCH="$target_name"
6acff7da 7178TARGET_BASE_ARCH=""
e6e91b9c 7179TARGET_ABI_DIR=""
e73aae67 7180
c1799a84 7181case "$target_name" in
2408a527 7182 i386)
0a7fa00a 7183 mttcg="yes"
b8158192 7184 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
d75402b5 7185 target_compiler=$cross_cc_i386
716a507c 7186 target_compiler_cflags=$cross_cc_ccflags_i386
2408a527
AJ
7187 ;;
7188 x86_64)
6acff7da 7189 TARGET_BASE_ARCH=i386
0a7fa00a 7190 mttcg="yes"
b8158192 7191 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
d75402b5 7192 target_compiler=$cross_cc_x86_64
2408a527
AJ
7193 ;;
7194 alpha)
5ee4f3c2 7195 mttcg="yes"
d75402b5 7196 target_compiler=$cross_cc_alpha
2408a527
AJ
7197 ;;
7198 arm|armeb)
b498c8a0 7199 TARGET_ARCH=arm
2408a527 7200 bflt="yes"
ca759f9e 7201 mttcg="yes"
56aebc89 7202 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
d75402b5 7203 target_compiler=$cross_cc_arm
d422b2bc 7204 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
2408a527 7205 ;;
722dd7be
MW
7206 aarch64|aarch64_be)
7207 TARGET_ARCH=aarch64
6a49fa95
AG
7208 TARGET_BASE_ARCH=arm
7209 bflt="yes"
ca759f9e 7210 mttcg="yes"
8f95ce2e 7211 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
d75402b5 7212 target_compiler=$cross_cc_aarch64
d422b2bc 7213 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
6a49fa95 7214 ;;
2408a527 7215 cris)
d75402b5 7216 target_compiler=$cross_cc_cris
2408a527 7217 ;;
61766fe9 7218 hppa)
7b93dab5 7219 mttcg="yes"
d75402b5 7220 target_compiler=$cross_cc_hppa
61766fe9 7221 ;;
613a22c9 7222 lm32)
d75402b5 7223 target_compiler=$cross_cc_lm32
613a22c9 7224 ;;
2408a527 7225 m68k)
2408a527 7226 bflt="yes"
5a4526b2 7227 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
d75402b5 7228 target_compiler=$cross_cc_m68k
2408a527 7229 ;;
877fdc12
EI
7230 microblaze|microblazeel)
7231 TARGET_ARCH=microblaze
72b675ca 7232 bflt="yes"
be73ef64 7233 echo "TARGET_ABI32=y" >> $config_target_mak
d75402b5 7234 target_compiler=$cross_cc_microblaze
72b675ca 7235 ;;
0adcffb1 7236 mips|mipsel)
b498c8a0 7237 TARGET_ARCH=mips
d75402b5 7238 target_compiler=$cross_cc_mips
25be210f 7239 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
7240 ;;
7241 mipsn32|mipsn32el)
597e2cec 7242 TARGET_ARCH=mips64
6acff7da 7243 TARGET_BASE_ARCH=mips
d75402b5 7244 target_compiler=$cross_cc_mipsn32
25be210f 7245 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 7246 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
7247 ;;
7248 mips64|mips64el)
b498c8a0 7249 TARGET_ARCH=mips64
6acff7da 7250 TARGET_BASE_ARCH=mips
d75402b5 7251 target_compiler=$cross_cc_mips64
25be210f 7252 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 7253 ;;
d15a9c23 7254 moxie)
d75402b5 7255 target_compiler=$cross_cc_moxie
d15a9c23 7256 ;;
e671711c 7257 nios2)
d75402b5 7258 target_compiler=$cross_cc_nios2
e671711c 7259 ;;
4a09d0bb 7260 or1k)
d75402b5 7261 target_compiler=$cross_cc_or1k
e67db06e
JL
7262 TARGET_ARCH=openrisc
7263 TARGET_BASE_ARCH=openrisc
e67db06e 7264 ;;
2408a527 7265 ppc)
c8b3532d 7266 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
d75402b5 7267 target_compiler=$cross_cc_powerpc
2408a527 7268 ;;
2408a527 7269 ppc64)
6acff7da 7270 TARGET_BASE_ARCH=ppc
e6e91b9c 7271 TARGET_ABI_DIR=ppc
f0b0685d 7272 mttcg=yes
1438eff3 7273 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
d75402b5 7274 target_compiler=$cross_cc_ppc64
2408a527 7275 ;;
9c35126c
DK
7276 ppc64le)
7277 TARGET_ARCH=ppc64
7278 TARGET_BASE_ARCH=ppc
7279 TARGET_ABI_DIR=ppc
f0b0685d 7280 mttcg=yes
1438eff3 7281 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
d75402b5 7282 target_compiler=$cross_cc_ppc64le
9c35126c 7283 ;;
2408a527 7284 ppc64abi32)
b498c8a0 7285 TARGET_ARCH=ppc64
6acff7da 7286 TARGET_BASE_ARCH=ppc
e6e91b9c 7287 TARGET_ABI_DIR=ppc
25be210f 7288 echo "TARGET_ABI32=y" >> $config_target_mak
1438eff3 7289 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
d75402b5 7290 target_compiler=$cross_cc_ppc64abi32
2408a527 7291 ;;
25fa194b
MC
7292 riscv32)
7293 TARGET_BASE_ARCH=riscv
7294 TARGET_ABI_DIR=riscv
7295 mttcg=yes
d75402b5 7296 target_compiler=$cross_cc_riscv32
25fa194b
MC
7297 ;;
7298 riscv64)
7299 TARGET_BASE_ARCH=riscv
7300 TARGET_ABI_DIR=riscv
7301 mttcg=yes
d75402b5 7302 target_compiler=$cross_cc_riscv64
25fa194b 7303 ;;
2408a527 7304 sh4|sh4eb)
b498c8a0 7305 TARGET_ARCH=sh4
2408a527 7306 bflt="yes"
d75402b5 7307 target_compiler=$cross_cc_sh4
2408a527
AJ
7308 ;;
7309 sparc)
d75402b5 7310 target_compiler=$cross_cc_sparc
2408a527
AJ
7311 ;;
7312 sparc64)
6acff7da 7313 TARGET_BASE_ARCH=sparc
d75402b5 7314 target_compiler=$cross_cc_sparc64
2408a527
AJ
7315 ;;
7316 sparc32plus)
b498c8a0 7317 TARGET_ARCH=sparc64
6acff7da 7318 TARGET_BASE_ARCH=sparc
e6e91b9c 7319 TARGET_ABI_DIR=sparc
d75402b5 7320 target_compiler=$cross_cc_sparc32plus
25be210f 7321 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 7322 ;;
24e804ec 7323 s390x)
63685bc4 7324 mttcg=yes
86158a2a 7325 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 7326 target_compiler=$cross_cc_s390x
24e804ec 7327 ;;
444e06b1 7328 tilegx)
d75402b5 7329 target_compiler=$cross_cc_tilegx
444e06b1 7330 ;;
5ecaa4ed 7331 tricore)
d75402b5 7332 target_compiler=$cross_cc_tricore
5ecaa4ed 7333 ;;
d2fbca94 7334 unicore32)
d75402b5 7335 target_compiler=$cross_cc_unicore32
d2fbca94 7336 ;;
cfa550c6
MF
7337 xtensa|xtensaeb)
7338 TARGET_ARCH=xtensa
02e33e9f 7339 bflt="yes"
9fb40342 7340 mttcg="yes"
d75402b5 7341 target_compiler=$cross_cc_xtensa
cfa550c6 7342 ;;
2408a527 7343 *)
76ad07a4 7344 error_exit "Unsupported target CPU"
2408a527
AJ
7345 ;;
7346esac
5e8861a0
PB
7347# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7348if [ "$TARGET_BASE_ARCH" = "" ]; then
7349 TARGET_BASE_ARCH=$TARGET_ARCH
7350fi
7351
d75402b5
AB
7352# Do we have a cross compiler for this target?
7353if has $target_compiler; then
7354
7355 write_c_skeleton
7356
716a507c 7357 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
d75402b5 7358 # For host systems we might get away with building without -static
716a507c 7359 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
d75402b5
AB
7360 target_compiler=""
7361 else
7362 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7363 target_compiler_static="n"
7364 fi
7365 else
7366 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7367 target_compiler_static="y"
7368 fi
7369else
7370 target_compiler=""
7371fi
7372
5e8861a0
PB
7373symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7374
99afc91d
DB
7375upper() {
7376 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7377}
7378
89138857 7379target_arch_name="$(upper $TARGET_ARCH)"
25be210f 7380echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 7381echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 7382echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
7383if [ "$TARGET_ABI_DIR" = "" ]; then
7384 TARGET_ABI_DIR=$TARGET_ARCH
7385fi
25be210f 7386echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
7387if [ "$HOST_VARIANT_DIR" != "" ]; then
7388 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7389fi
3b6b7550
PB
7390
7391if supported_xen_target $target; then
7392 echo "CONFIG_XEN=y" >> $config_target_mak
7393 if test "$xen_pci_passthrough" = yes; then
eb6fda0f 7394 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
1b0c87fc 7395 fi
3b6b7550
PB
7396fi
7397if supported_kvm_target $target; then
7398 echo "CONFIG_KVM=y" >> $config_target_mak
7399 if test "$vhost_net" = "yes" ; then
d5970055 7400 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
e6a74868
MAL
7401 if test "$vhost_user" = "yes" ; then
7402 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7403 fi
c59249f9 7404 fi
3b6b7550
PB
7405fi
7406if supported_hax_target $target; then
7407 echo "CONFIG_HAX=y" >> $config_target_mak
b0cb0a66 7408fi
c97d6d2c
SAGDR
7409if supported_hvf_target $target; then
7410 echo "CONFIG_HVF=y" >> $config_target_mak
7411fi
d661d9a4
JTV
7412if supported_whpx_target $target; then
7413 echo "CONFIG_WHPX=y" >> $config_target_mak
7414fi
de83cd02 7415if test "$target_bigendian" = "yes" ; then
25be210f 7416 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 7417fi
97a847bc 7418if test "$target_softmmu" = "yes" ; then
25be210f 7419 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
ca759f9e
AB
7420 if test "$mttcg" = "yes" ; then
7421 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7422 fi
43ce4dfe 7423fi
997344f3 7424if test "$target_user_only" = "yes" ; then
25be210f 7425 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 7426 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 7427fi
831b7825 7428if test "$target_linux_user" = "yes" ; then
25be210f 7429 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 7430fi
56aebc89
PB
7431list=""
7432if test ! -z "$gdb_xml_files" ; then
7433 for x in $gdb_xml_files; do
7434 list="$list $source_path/gdb-xml/$x"
7435 done
3d0f1517 7436 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 7437fi
97a847bc 7438
e5fe0c52 7439if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 7440 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 7441fi
84778508 7442if test "$target_bsd_user" = "yes" ; then
25be210f 7443 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 7444fi
5b0753e0 7445
d75402b5
AB
7446if test -n "$target_compiler"; then
7447 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7448
7449 if test -n "$target_compiler_static"; then
7450 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7451 fi
716a507c
AB
7452
7453 if test -n "$target_compiler_cflags"; then
7454 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7455 fi
d75402b5
AB
7456fi
7457
716a507c 7458
4afddb55 7459# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 7460
4afddb55 7461cflags=""
fa282484 7462ldflags=""
9b8e111f 7463
c765fcac
PC
7464disas_config() {
7465 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7466 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7467}
7468
64656024
JQ
7469for i in $ARCH $TARGET_BASE_ARCH ; do
7470 case "$i" in
7471 alpha)
c765fcac 7472 disas_config "ALPHA"
64656024 7473 ;;
82295d8a
RH
7474 aarch64)
7475 if test -n "${cxx}"; then
c765fcac 7476 disas_config "ARM_A64"
82295d8a
RH
7477 fi
7478 ;;
64656024 7479 arm)
c765fcac 7480 disas_config "ARM"
999b53ec 7481 if test -n "${cxx}"; then
c765fcac 7482 disas_config "ARM_A64"
999b53ec 7483 fi
64656024
JQ
7484 ;;
7485 cris)
c765fcac 7486 disas_config "CRIS"
64656024 7487 ;;
429b31a2
RH
7488 hppa)
7489 disas_config "HPPA"
7490 ;;
c72b26ec 7491 i386|x86_64|x32)
c765fcac 7492 disas_config "I386"
64656024 7493 ;;
79368f49 7494 lm32)
c765fcac 7495 disas_config "LM32"
79368f49 7496 ;;
64656024 7497 m68k)
c765fcac 7498 disas_config "M68K"
64656024 7499 ;;
877fdc12 7500 microblaze*)
c765fcac 7501 disas_config "MICROBLAZE"
64656024
JQ
7502 ;;
7503 mips*)
c765fcac 7504 disas_config "MIPS"
89a955e8
AM
7505 if test -n "${cxx}"; then
7506 disas_config "NANOMIPS"
7507 fi
64656024 7508 ;;
d15a9c23 7509 moxie*)
c765fcac 7510 disas_config "MOXIE"
d15a9c23 7511 ;;
e671711c
MV
7512 nios2)
7513 disas_config "NIOS2"
7514 ;;
4a09d0bb 7515 or1k)
c765fcac 7516 disas_config "OPENRISC"
e67db06e 7517 ;;
64656024 7518 ppc*)
c765fcac 7519 disas_config "PPC"
64656024 7520 ;;
c4f80543 7521 riscv*)
25fa194b
MC
7522 disas_config "RISCV"
7523 ;;
24e804ec 7524 s390*)
c765fcac 7525 disas_config "S390"
64656024
JQ
7526 ;;
7527 sh4)
c765fcac 7528 disas_config "SH4"
64656024
JQ
7529 ;;
7530 sparc*)
c765fcac 7531 disas_config "SPARC"
64656024 7532 ;;
cfa550c6 7533 xtensa*)
c765fcac 7534 disas_config "XTENSA"
cfa550c6 7535 ;;
64656024
JQ
7536 esac
7537done
9195b2c2 7538if test "$tcg_interpreter" = "yes" ; then
c765fcac 7539 disas_config "TCI"
9195b2c2 7540fi
64656024 7541
6ee7126f
JQ
7542case "$ARCH" in
7543alpha)
7544 # Ensure there's only a single GP
7545 cflags="-msmall-data $cflags"
7546;;
7547esac
7548
d02c1db3 7549if test "$gprof" = "yes" ; then
0acf7ded 7550 echo "TARGET_GPROF=y" >> $config_target_mak
d02c1db3
JQ
7551 if test "$target_linux_user" = "yes" ; then
7552 cflags="-p $cflags"
7553 ldflags="-p $ldflags"
7554 fi
7555 if test "$target_softmmu" = "yes" ; then
7556 ldflags="-p $ldflags"
25be210f 7557 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
7558 fi
7559fi
7560
9b8e111f 7561if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 7562 ldflags="$ldflags $textseg_ldflags"
fa282484 7563fi
fa282484 7564
e9a3591f
CB
7565# Newer kernels on s390 check for an S390_PGSTE program header and
7566# enable the pgste page table extensions in that case. This makes
7567# the vm.allocate_pgste sysctl unnecessary. We enable this program
7568# header if
7569# - we build on s390x
7570# - we build the system emulation for s390x (qemu-system-s390x)
7571# - KVM is enabled
7572# - the linker supports --s390-pgste
7573if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7574 if ld_has --s390-pgste ; then
7575 ldflags="-Wl,--s390-pgste $ldflags"
7576 fi
7577fi
7578
25be210f
JQ
7579echo "LDFLAGS+=$ldflags" >> $config_target_mak
7580echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 7581
97a847bc 7582done # for target in $targets
7d13299d 7583
d75402b5
AB
7584if test -n "$enabled_cross_compilers"; then
7585 echo
7586 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7587fi
7588
e3971d61 7589if [ "$fdt" = "git" ]; then
a540f158
PC
7590 echo "config-host.h: subdir-dtc" >> $config_host_mak
7591fi
e219c499
RH
7592if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7593 echo "config-host.h: subdir-capstone" >> $config_host_mak
7594fi
7595if test -n "$LIBCAPSTONE"; then
7596 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7597fi
a540f158 7598
a99d57bb
WG
7599if test "$numa" = "yes"; then
7600 echo "CONFIG_NUMA=y" >> $config_host_mak
7601fi
7602
fd0e6053
JS
7603if test "$ccache_cpp2" = "yes"; then
7604 echo "export CCACHE_CPP2=y" >> $config_host_mak
7605fi
7606
e29e5c6e
PM
7607# If we're using a separate build tree, set it up now.
7608# DIRS are directories which we simply mkdir in the build tree;
7609# LINKS are things to symlink back into the source tree
7610# (these can be both files and directories).
7611# Caution: do not add files or directories here using wildcards. This
7612# will result in problems later if a new file matching the wildcard is
7613# added to the source tree -- nothing will cause configure to be rerun
7614# so the build tree will be missing the link back to the new file, and
7615# tests might fail. Prefer to keep the relevant files in their own
7616# directory and symlink the directory instead.
b1fb9a63 7617DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
3ac1f813 7618DIRS="$DIRS tests/fp"
b855f8d1 7619DIRS="$DIRS docs docs/interop fsdev scsi"
9933c305 7620DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 7621DIRS="$DIRS roms/seabios roms/vgabios"
e29e5c6e
PM
7622LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7623LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7624LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7625LINKS="$LINKS tests/fp/Makefile"
7626LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7627LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7628LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7629LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7630LINKS="$LINKS pc-bios/qemu-icon.bmp"
7631LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
39950353
PM
7632LINKS="$LINKS tests/acceptance tests/data"
7633LINKS="$LINKS tests/qemu-iotests/check"
753d11f2
RH
7634for bios_file in \
7635 $source_path/pc-bios/*.bin \
225a9ab8 7636 $source_path/pc-bios/*.lid \
5acc2ec0 7637 $source_path/pc-bios/*.aml \
753d11f2
RH
7638 $source_path/pc-bios/*.rom \
7639 $source_path/pc-bios/*.dtb \
e89e33e1 7640 $source_path/pc-bios/*.img \
753d11f2 7641 $source_path/pc-bios/openbios-* \
4e73c781 7642 $source_path/pc-bios/u-boot.* \
753d11f2
RH
7643 $source_path/pc-bios/palcode-*
7644do
e29e5c6e 7645 LINKS="$LINKS pc-bios/$(basename $bios_file)"
d1807a4f
PB
7646done
7647mkdir -p $DIRS
e29e5c6e 7648for f in $LINKS ; do
cab00a5a 7649 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
7650 symlink "$source_path/$f" "$f"
7651 fi
d1807a4f 7652done
1ad2134f 7653
c34ebfdc 7654# temporary config to build submodules
2d9f27d2 7655for rom in seabios vgabios ; do
c34ebfdc 7656 config_mak=roms/$rom/config.mak
37116c89 7657 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 7658 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 7659 echo "AS=$as" >> $config_mak
5f6f0e27 7660 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
7661 echo "CC=$cc" >> $config_mak
7662 echo "BCC=bcc" >> $config_mak
3dd46c78 7663 echo "CPP=$cpp" >> $config_mak
c34ebfdc 7664 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 7665 echo "IASL=$iasl" >> $config_mak
c34ebfdc 7666 echo "LD=$ld" >> $config_mak
9f81aeb5 7667 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
7668done
7669
76c7560a
HR
7670# set up qemu-iotests in this build directory
7671iotests_common_env="tests/qemu-iotests/common.env"
76c7560a
HR
7672
7673echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7674echo >> "$iotests_common_env"
7675echo "export PYTHON='$python'" >> "$iotests_common_env"
7676
dc655404
MT
7677# Save the configure command line for later reuse.
7678cat <<EOD >config.status
7679#!/bin/sh
7680# Generated by configure.
7681# Run this file to recreate the current configuration.
7682# Compiler output produced by configure, useful for debugging
7683# configure, is in config.log if it exists.
7684EOD
e811da7f
DB
7685
7686preserve_env() {
7687 envname=$1
7688
7689 eval envval=\$$envname
7690
7691 if test -n "$envval"
7692 then
7693 echo "$envname='$envval'" >> config.status
7694 echo "export $envname" >> config.status
7695 else
7696 echo "unset $envname" >> config.status
7697 fi
7698}
7699
7700# Preserve various env variables that influence what
7701# features/build target configure will detect
7702preserve_env AR
7703preserve_env AS
7704preserve_env CC
7705preserve_env CPP
7706preserve_env CXX
7707preserve_env INSTALL
7708preserve_env LD
7709preserve_env LD_LIBRARY_PATH
7710preserve_env LIBTOOL
7711preserve_env MAKE
7712preserve_env NM
7713preserve_env OBJCOPY
7714preserve_env PATH
7715preserve_env PKG_CONFIG
7716preserve_env PKG_CONFIG_LIBDIR
7717preserve_env PKG_CONFIG_PATH
7718preserve_env PYTHON
7719preserve_env SDL_CONFIG
7720preserve_env SDL2_CONFIG
7721preserve_env SMBD
7722preserve_env STRIP
7723preserve_env WINDRES
7724
dc655404
MT
7725printf "exec" >>config.status
7726printf " '%s'" "$0" "$@" >>config.status
cf7cc929 7727echo ' "$@"' >>config.status
dc655404
MT
7728chmod +x config.status
7729
8cd05ab6 7730rm -r "$TMPDIR1"