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