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