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