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