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