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