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