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