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