blob: 3fbb61905a30858e64e7d4dd68e29ae79c97de7b [file] [log] [blame]
bellard7d132992003-03-06 23:23:54 +00001#!/bin/sh
2#
bellard3ef693a2003-03-23 20:17:16 +00003# qemu configure script (c) 2003 Fabrice Bellard
bellard7d132992003-03-06 23:23:54 +00004#
Peter Maydell8cd05ab2014-05-23 17:07:24 +01005
Cornelia Huck99519e62014-05-28 12:39:17 +02006# 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
John Snow5e4dfd32015-10-28 13:56:40 -040011# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
Peter Maydell8cd05ab2014-05-23 17:07:24 +010014# 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
bellard7d132992003-03-06 23:23:54 +000025fi
26
Peter Maydell8cd05ab2014-05-23 17:07:24 +010027TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
Don Slutz66518bf2014-01-02 21:12:46 -050029TMPO="${TMPDIR1}/${TMPB}.o"
Peter Maydell9c83ffd2014-02-25 18:27:49 +000030TMPCXX="${TMPDIR1}/${TMPB}.cxx"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010031TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010032TMPMO="${TMPDIR1}/${TMPB}.mo"
Emilio G. Cota26fffe22018-10-21 13:56:29 -040033TMPTXT="${TMPDIR1}/${TMPB}.txt"
bellard7d132992003-03-06 23:23:54 +000034
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020035rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000036
Peter Maydellb48e3612011-11-23 17:26:44 +000037# Print a helpful header at the top of config.log
38echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000039printf "# Configured with:" >> config.log
40printf " '%s'" "$0" "$@" >> config.log
41echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000042echo "#" >> config.log
43
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020044print_error() {
45 (echo
Peter Maydell76ad07a2013-04-08 12:11:26 +010046 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020051 echo) >&2
52}
53
54error_exit() {
55 print_error "$@"
Peter Maydell76ad07a2013-04-08 12:11:26 +010056 exit 1
57}
58
Peter Maydell9c83ffd2014-02-25 18:27:49 +000059do_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
Ian Jackson8bbe05d2017-09-25 16:41:03 +010064 if test -n "$BASH_VERSION"; then eval '
65 echo >>config.log "
66funcs: ${FUNCNAME[*]}
67lines: ${BASH_LINENO[*]}"
68 '; fi
Peter Maydell9c83ffd2014-02-25 18:27:49 +000069 echo $compiler "$@" >> config.log
70 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010071 # 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
Peter Maydell9c83ffd2014-02-25 18:27:49 +000084 echo $compiler -Werror "$@" >> config.log
85 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010086 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."
Peter Maydell8dc38a72012-07-18 15:10:28 +010090}
91
Peter Maydell9c83ffd2014-02-25 18:27:49 +000092do_cc() {
93 do_compiler "$cc" "$@"
94}
95
96do_cxx() {
97 do_compiler "$cxx" "$@"
98}
99
100update_cxxflags() {
101 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
102 # options which some versions of GCC's C++ compiler complain about
103 # because they only make sense for C programs.
Paolo Bonzini53422042019-07-29 12:50:04 +0200104 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100105
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000106 for arg in $QEMU_CFLAGS; do
107 case $arg in
108 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
110 ;;
Thomas Huth7be41672019-01-07 11:25:22 +0100111 -std=gnu99)
112 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
113 ;;
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000114 *)
115 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
116 ;;
117 esac
118 done
119}
120
Juan Quintela52166aa2009-08-03 14:46:03 +0200121compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400122 local_cflags="$1"
123 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200124}
125
126compile_prog() {
127 local_cflags="$1"
128 local_ldflags="$2"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100129 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200130}
131
Paolo Bonzini11568d62010-12-23 11:43:58 +0100132# symbolically link $1 to $2. Portable version of "ln -sf".
133symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100134 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800135 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100136 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100137}
138
Loïc Minier0dba6192010-01-28 21:26:51 +0000139# check whether a command is available to this shell (may be either an
140# executable or a builtin)
141has() {
142 type "$1" >/dev/null 2>&1
143}
144
145# search for an executable in PATH
146path_of() {
147 local_command="$1"
148 local_ifs="$IFS"
149 local_dir=""
150
151 # pathname has a dir component?
152 if [ "${local_command#*/}" != "$local_command" ]; then
153 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
154 echo "$local_command"
155 return 0
156 fi
157 fi
158 if [ -z "$local_command" ]; then
159 return 1
160 fi
161
162 IFS=:
163 for local_dir in $PATH; do
164 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
165 echo "$local_dir/$local_command"
166 IFS="${local_ifs:-$(printf ' \t\n')}"
167 return 0
168 fi
169 done
170 # not found
171 IFS="${local_ifs:-$(printf ' \t\n')}"
172 return 1
173}
174
Lluís Vilanova5b808272014-05-27 15:02:14 +0200175have_backend () {
176 echo "$trace_backends" | grep "$1" >/dev/null
177}
178
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200179glob() {
180 eval test -z '"${1#'"$2"'}"'
181}
182
183supported_hax_target() {
184 test "$hax" = "yes" || return 1
185 glob "$1" "*-softmmu" || return 1
186 case "${1%-softmmu}" in
187 i386|x86_64)
188 return 0
189 ;;
190 esac
191 return 1
192}
193
194supported_kvm_target() {
195 test "$kvm" = "yes" || return 1
196 glob "$1" "*-softmmu" || return 1
197 case "${1%-softmmu}:$cpu" in
198 arm:arm | aarch64:aarch64 | \
199 i386:i386 | i386:x86_64 | i386:x32 | \
200 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
Huacai Chenaa2953f2020-05-03 18:20:15 +0800201 mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700202 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200203 s390x:s390x)
204 return 0
205 ;;
206 esac
207 return 1
208}
209
210supported_xen_target() {
211 test "$xen" = "yes" || return 1
212 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200213 # Only i386 and x86_64 provide the xenpv machine.
214 case "${1%-softmmu}" in
215 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200216 return 0
217 ;;
218 esac
219 return 1
220}
221
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500222supported_hvf_target() {
223 test "$hvf" = "yes" || return 1
224 glob "$1" "*-softmmu" || return 1
225 case "${1%-softmmu}" in
226 x86_64)
227 return 0
228 ;;
229 esac
230 return 1
231}
232
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800233supported_whpx_target() {
234 test "$whpx" = "yes" || return 1
235 glob "$1" "*-softmmu" || return 1
236 case "${1%-softmmu}" in
237 i386|x86_64)
238 return 0
239 ;;
240 esac
241 return 1
242}
243
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200244supported_target() {
245 case "$1" in
246 *-softmmu)
247 ;;
248 *-linux-user)
249 if test "$linux" != "yes"; then
250 print_error "Target '$target' is only available on a Linux host"
251 return 1
252 fi
253 ;;
254 *-bsd-user)
255 if test "$bsd" != "yes"; then
256 print_error "Target '$target' is only available on a BSD host"
257 return 1
258 fi
259 ;;
260 *)
261 print_error "Invalid target name '$target'"
262 return 1
263 ;;
264 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200265 test "$tcg" = "yes" && return 0
266 supported_kvm_target "$1" && return 0
267 supported_xen_target "$1" && return 0
268 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500269 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800270 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200271 print_error "TCG disabled, but hardware accelerator not available for '$target'"
272 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200273}
274
Christian Borntraegere9a35912017-08-23 12:16:23 +0200275
276ld_has() {
277 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
278}
279
Peter Maydell79d77bc2019-04-29 17:35:57 +0100280# make source path absolute
Antonio Ospite14211822019-05-26 16:47:46 +0200281source_path=$(cd "$(dirname -- "$0")"; pwd)
282
Antonio Ospite4ace32e2019-05-26 16:47:47 +0200283if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
284then
285 error_exit "main directory cannot contain spaces nor colons"
286fi
287
Antonio Ospite14211822019-05-26 16:47:46 +0200288# default parameters
Juan Quintela2ff6b912009-08-03 14:45:55 +0200289cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300290iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000291interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000292static="no"
bellard7d132992003-03-06 23:23:54 +0000293cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000294audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800295block_drv_rw_whitelist=""
296block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000297host_cc="cc"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +0100298libs_cpu=""
Juan Quintela73da3752009-08-03 14:46:26 +0200299libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200300libs_tools=""
malcd5631632009-10-10 01:13:41 +0400301audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500302libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100303debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100304stack_protector=""
Alex Bennéeafc3a8f2019-11-28 16:35:24 +0100305use_containers="yes"
Alex Bennéef2385392020-04-30 20:01:14 +0100306gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
aliguoriac0df512008-12-29 17:14:15 +0000307
Daniel P. Berrange92712822017-09-29 11:11:58 +0100308if test -e "$source_path/.git"
309then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100310 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100311 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500312 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
313 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100314else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100315 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100316 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100317
318 if ! test -f "$source_path/ui/keycodemapdb/README"
319 then
320 echo
321 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
322 echo
323 echo "This is not a GIT checkout but module content appears to"
324 echo "be missing. Do not use 'git archive' or GitHub download links"
325 echo "to acquire QEMU source archives. Non-GIT builds are only"
326 echo "supported with source archives linked from:"
327 echo
Peter Maydella3e3b522019-07-22 14:07:39 +0100328 echo " https://www.qemu.org/download/#source"
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100329 echo
330 echo "Developers working with GIT can use scripts/archive-source.sh"
331 echo "if they need to create valid source archives."
332 echo
333 exit 1
334 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100335fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100336git="git"
aliguoriac0df512008-12-29 17:14:15 +0000337
Stefan Weilafb63eb2012-09-26 22:04:38 +0200338# Don't accept a target_list environment variable.
339unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000340unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100341
342# Default value for a variable defining feature "foo".
343# * foo="no" feature will only be used if --enable-foo arg is given
344# * foo="" feature will be searched for, and if found, will be used
345# unless --disable-foo is given
346# * foo="yes" this value will only be set by --enable-foo flag.
347# feature will searched for,
348# if not found, configure exits with error
349#
350# Always add --enable-foo and --disable-foo command line args.
351# Distributions want to ensure that several features are compiled in, and it
352# is impossible without a --enable-foo that exits if a feature is not found.
353
Paolo Bonzini377529c2010-12-23 11:43:50 +0100354brlapi=""
355curl=""
356curses=""
357docs=""
358fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100359netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100360sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000361sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530362virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200363mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100364vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100367vnc_sasl=""
368vnc_jpeg=""
369vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200370xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100371xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000372xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000373xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100374linux_aio=""
Aarushi Mehtac10dd852020-01-20 14:18:44 +0000375linux_io_uring=""
Corey Bryant47e98652012-01-26 09:42:26 -0500376cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100377attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200378libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100379xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200380tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100381membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100382vhost_net=""
383vhost_crypto=""
384vhost_scsi=""
385vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200386vhost_user=""
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +0100387vhost_user_fs=""
Bradd41a75a2011-07-26 23:11:26 -0400388kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100389hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500390hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800391whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400392rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300393pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100394gprof="no"
395debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100396debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100397sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500398fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100399strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200400tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100401bigendian="no"
402mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000403gcov="no"
404gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100405EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800406DSOSUF=".so"
407LDFLAGS_SHARED="-shared"
408modules="no"
Christian Ehrhardtbd83c862020-03-10 15:58:06 +0100409module_upgrades="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100410prefix="/usr/local"
411mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300412datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200413firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300414qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100415bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300416libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400417libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200418includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100419sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300420local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100421confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100422slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100423oss_lib=""
424bsd="no"
425linux="no"
426solaris="no"
427profiler="no"
428cocoa="no"
429softmmu="yes"
430linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100431bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100432blobs="yes"
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +0100433edk2_blobs="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100434pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200435pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200436qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300437trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100438trace_file="trace"
439spice=""
440rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200441smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100442libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200443usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100444opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100445opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000446cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100447avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300448zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700449capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200450lzo=""
451snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100452bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200453lzfse=""
Juan Quintela3a678482019-12-17 21:15:24 +0100454zstd=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400455guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400456guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500457guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300458guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400459vss_win32_sdk=""
460win_sdk="no"
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +0100461want_tools=""
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100462libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100463libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100464coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200465coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200466debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400467crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300468seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530469glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400470glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530471glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530472glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530473glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100474glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100475glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600476gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200477gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100478tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100479gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100480nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100481nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100482gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800483gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100484gcrypt_xts="no"
485qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100486auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100487vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200488virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800489tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200490libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100491live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800492numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800493tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200494jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800495replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700496vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100497bochs="yes"
498cloop="yes"
499dmg="yes"
500qcow1="yes"
501vdi="yes"
502vvfat="yes"
503qed="yes"
504parallels="yes"
505sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300506libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200507debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800508libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800509default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100510plugins="no"
Alexander Bulekovadc28022020-02-19 23:11:14 -0500511fuzzing="no"
Marek Marczykowski-Góreckib767d252020-05-20 15:20:23 +0200512rng_none="no"
Alexey Krasikov54e7aac2020-05-25 14:19:12 +0300513secret_keyring=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100514
Peter Maydell898be3e2017-03-21 14:31:57 +0000515supported_cpu="no"
516supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100517bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800518malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000519
aliguoriac0df512008-12-29 17:14:15 +0000520# parse CC options first
521for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200522 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000523 case "$opt" in
524 --cross-prefix=*) cross_prefix="$optarg"
525 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100526 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000527 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400528 --cxx=*) CXX="$optarg"
529 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200530 --cpu=*) cpu="$optarg"
531 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100532 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100533 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200534 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100535 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100536 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100537 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100538 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200539 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100540 --enable-debug-info) debug_info="yes"
541 ;;
542 --disable-debug-info) debug_info="no"
543 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100544 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
545 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100546 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
547 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200548 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100549 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100550 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200551 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100552 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200553 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100554 ;;
aliguoriac0df512008-12-29 17:14:15 +0000555 esac
556done
aliguoriac0df512008-12-29 17:14:15 +0000557# OS specific
558# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100559# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000560
Peter Maydelle49d0212012-12-07 15:39:13 +0000561# Preferred compiler:
562# ${CC} (if set)
563# ${cross_prefix}gcc (if cross-prefix specified)
564# system compiler
565if test -z "${CC}${cross_prefix}"; then
566 cc="$host_cc"
567else
568 cc="${CC-${cross_prefix}gcc}"
569fi
570
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400571if test -z "${CXX}${cross_prefix}"; then
572 cxx="c++"
573else
574 cxx="${CXX-${cross_prefix}g++}"
575fi
576
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500577ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700578as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700579ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000580cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500581objcopy="${OBJCOPY-${cross_prefix}objcopy}"
582ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800583ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200584nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500585strip="${STRIP-${cross_prefix}strip}"
586windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300587pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
588query_pkg_config() {
589 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
590}
591pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000592sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000593
Peter Maydell45d285a2013-10-21 21:03:06 +0100594# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
595ARFLAGS="${ARFLAGS-rv}"
596
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200597# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100598# We use -fwrapv to tell the compiler that we require a C dialect where
599# left shift of signed integers is well defined and has the expected
600# 2s-complement style results. (Both clang and gcc agree that it
601# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100602QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400603QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100604QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200605QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200606QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200607QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100608if test "$debug_info" = "yes"; then
609 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100610fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200611
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300612# running configure in the source tree?
613# we know that's the case if configure is there.
614if test -f "./configure"; then
615 pwd_is_source_path="y"
616else
617 pwd_is_source_path="n"
618fi
619
aliguoriac0df512008-12-29 17:14:15 +0000620check_define() {
621cat > $TMPC <<EOF
622#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000623#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000624#endif
625int main(void) { return 0; }
626EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200627 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000628}
629
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200630check_include() {
631cat > $TMPC <<EOF
632#include <$1>
633int main(void) { return 0; }
634EOF
635 compile_object
636}
637
John Snow93b25862015-03-25 18:57:37 -0400638write_c_skeleton() {
639 cat > $TMPC <<EOF
640int main(void) { return 0; }
641EOF
642}
643
Alexander Bulekovadc28022020-02-19 23:11:14 -0500644write_c_fuzzer_skeleton() {
645 cat > $TMPC <<EOF
646#include <stdint.h>
647#include <sys/types.h>
648int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
649int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
650EOF
651}
652
Peter Maydellbbea4052012-08-14 15:35:34 +0100653if check_define __linux__ ; then
654 targetos="Linux"
655elif check_define _WIN32 ; then
656 targetos='MINGW32'
657elif check_define __OpenBSD__ ; then
658 targetos='OpenBSD'
659elif check_define __sun__ ; then
660 targetos='SunOS'
661elif check_define __HAIKU__ ; then
662 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100663elif check_define __FreeBSD__ ; then
664 targetos='FreeBSD'
665elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
666 targetos='GNU/kFreeBSD'
667elif check_define __DragonFly__ ; then
668 targetos='DragonFly'
669elif check_define __NetBSD__; then
670 targetos='NetBSD'
671elif check_define __APPLE__; then
672 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100673else
Peter Maydell951fedf2017-07-13 16:15:32 +0100674 # This is a fatal error, but don't report it yet, because we
675 # might be going to just print the --help text, or it might
676 # be the result of a missing compiler.
677 targetos='bogus'
678 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100679fi
680
681# Some host OSes need non-standard checks for which CPU to use.
682# Note that these checks are broken for cross-compilation: if you're
683# cross-compiling to one of these OSes then you'll need to specify
684# the correct CPU with the --cpu option.
685case $targetos in
686Darwin)
687 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
688 # run 64-bit userspace code.
689 # If the user didn't specify a CPU explicitly and the kernel says this is
690 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
691 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
692 cpu="x86_64"
693 fi
694 ;;
695SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200696 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100697 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
698 cpu="x86_64"
699 fi
700esac
701
Juan Quintela2ff6b912009-08-03 14:45:55 +0200702if test ! -z "$cpu" ; then
703 # command line argument
704 :
705elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000706 cpu="i386"
707elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700708 if check_define __ILP32__ ; then
709 cpu="x32"
710 else
711 cpu="x86_64"
712 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000713elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000714 if check_define __arch64__ ; then
715 cpu="sparc64"
716 else
717 cpu="sparc"
718 fi
malcfdf7ed92009-01-14 18:39:52 +0000719elif check_define _ARCH_PPC ; then
720 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700721 if check_define _LITTLE_ENDIAN ; then
722 cpu="ppc64le"
723 else
724 cpu="ppc64"
725 fi
malcfdf7ed92009-01-14 18:39:52 +0000726 else
727 cpu="ppc"
728 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200729elif check_define __mips__ ; then
730 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200731elif check_define __s390__ ; then
732 if check_define __s390x__ ; then
733 cpu="s390x"
734 else
735 cpu="s390"
736 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000737elif check_define __riscv ; then
738 if check_define _LP64 ; then
739 cpu="riscv64"
740 else
741 cpu="riscv32"
742 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100743elif check_define __arm__ ; then
744 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100745elif check_define __aarch64__ ; then
746 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000747else
Stefan Weil89138852016-05-16 15:10:20 +0200748 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000749fi
750
Peter Maydell359bc952011-12-24 13:07:25 +0000751ARCH=
752# Normalise host CPU name and set ARCH.
753# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000754case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200755 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000756 supported_cpu="yes"
757 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700758 ppc64le)
759 ARCH="ppc64"
760 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700761 ;;
bellard7d132992003-03-06 23:23:54 +0000762 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000763 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000764 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000765 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000766 x86_64|amd64)
767 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000768 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000769 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100770 armv*b|armv*l|arm)
771 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000772 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000773 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100774 aarch64)
775 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000776 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100777 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200778 mips*)
779 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000780 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200781 ;;
blueswir131422552007-04-16 18:27:06 +0000782 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000783 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100784 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000785 ;;
bellard7d132992003-03-06 23:23:54 +0000786 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000787 # This will result in either an error or falling back to TCI later
788 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000789 ;;
790esac
Peter Maydell359bc952011-12-24 13:07:25 +0000791if test -z "$ARCH"; then
792 ARCH="$cpu"
793fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200794
bellard7d132992003-03-06 23:23:54 +0000795# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200796
Stacey Sonadfc3e92014-06-08 09:57:22 -0700797# host *BSD for user mode
798HOST_VARIANT_DIR=""
799
bellard7d132992003-03-06 23:23:54 +0000800case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000801MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200802 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100803 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100804 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200805 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200806 if check_include dsound.h; then
807 audio_drv_list="dsound"
808 else
809 audio_drv_list=""
810 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000811 supported_os="yes"
Alex Bennée469a7882020-04-14 21:06:22 +0100812 pie="no"
bellard67b915a2004-03-31 23:37:16 +0000813;;
ths5c40d2b2007-06-23 16:03:36 +0000814GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100815 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100816 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200817 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000818;;
bellard7d3505c2004-05-12 19:32:15 +0000819FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200820 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100821 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100822 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200823 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100824 # needed for kinfo_getvmmap(3) in libutil.h
825 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500826 # needed for kinfo_getproc
827 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100828 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700829 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000830 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000831;;
blueswir1c5e97232009-03-07 20:06:23 +0000832DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200833 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100834 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100835 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200836 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700837 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000838;;
bellard7d3505c2004-05-12 19:32:15 +0000839NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200840 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100841 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100842 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100843 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200844 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200845 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700846 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200847 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000848;;
849OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200850 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100851 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100852 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200853 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700854 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500855 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000856;;
bellard83fb7ad2004-07-05 21:25:26 +0000857Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200858 bsd="yes"
859 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100860 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500861 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800862 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200863 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200864 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100865 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200866 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200867 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100868 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200869 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100870 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200871 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100872 # Disable attempts to use ObjectiveC features in os/object.h since they
873 # won't work when we're compiling with gcc as a C compiler.
874 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700875 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000876 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000877;;
bellardec530c82006-04-25 22:36:06 +0000878SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200879 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100880 make="${MAKE-gmake}"
881 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400882 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200883 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100884 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200885 fi
886 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000887# needed for CMSG_ macros in sys/socket.h
888 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
889# needed for TIOCWIN* defines in termios.h
890 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200891 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200892 solarisnetlibs="-lsocket -lnsl -lresolv"
893 LIBS="$solarisnetlibs $LIBS"
894 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000895;;
Andreas Färber179cf402010-09-20 00:50:43 +0200896Haiku)
897 haiku="yes"
898 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
899 LIBS="-lposix_error_mapper -lnetwork $LIBS"
900;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000901Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100902 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200903 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200904 linux="yes"
905 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200906 kvm="yes"
Eduardo Habkost67cf3f52020-03-11 19:23:41 -0400907 QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000908 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200909 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000910;;
bellard7d132992003-03-06 23:23:54 +0000911esac
912
bellard7d3505c2004-05-12 19:32:15 +0000913if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000914 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200915 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000916 fi
bellard7d3505c2004-05-12 19:32:15 +0000917fi
918
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100919: ${make=${MAKE-make}}
920: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000921# We prefer python 3.x. A bare 'python' is traditionally
922# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300923# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000924python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300925for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000926do
927 if has "$binary"
928 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200929 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000930 break
931 fi
932done
Markus Armbruster903458c2020-02-14 18:18:41 +0100933
934sphinx_build=
935for binary in sphinx-build-3 sphinx-build
936do
937 if has "$binary"
938 then
939 sphinx_build=$(command -v "$binary")
940 break
941 fi
942done
943
Alex Bennée39d87c82020-03-03 15:06:20 +0000944# Check for ancillary tools used in testing
945genisoimage=
Alex Bennée3df437c2020-05-19 09:22:48 -0400946for binary in genisoimage mkisofs
Alex Bennée39d87c82020-03-03 15:06:20 +0000947do
948 if has $binary
949 then
950 genisoimage=$(command -v "$binary")
951 break
952 fi
953done
954
Brade2d88302011-09-02 16:53:28 -0400955: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100956
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100957# Default objcc to clang if available, otherwise use CC
958if has clang; then
959 objcc=clang
960else
961 objcc="$cc"
962fi
963
Juan Quintela3457a3f2009-08-03 14:46:07 +0200964if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200965 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800966 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100967 # MinGW needs -mthreads for TLS and macro _MT.
968 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100969 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400970 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100971 if compile_prog "" "-liberty" ; then
972 LIBS="-liberty $LIBS"
973 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200974 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200975 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300976 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300977 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200978 bindir="\${prefix}"
979 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200980 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200981 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300982 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200983fi
984
Anthony Liguori487fefd2009-06-11 13:28:25 -0500985werror=""
bellard85aa5182007-11-11 20:17:03 +0000986
bellard7d132992003-03-06 23:23:54 +0000987for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200988 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000989 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000990 --help|-h) show_help=yes
991 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400992 --version|-V) exec cat $source_path/VERSION
993 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000994 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000995 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000996 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000997 ;;
aliguoriac0df512008-12-29 17:14:15 +0000998 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000999 ;;
aliguoriac0df512008-12-29 17:14:15 +00001000 --cc=*)
bellard7d132992003-03-06 23:23:54 +00001001 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001002 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +00001003 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04001004 --cxx=*)
1005 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +02001006 --iasl=*) iasl="$optarg"
1007 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +01001008 --objcc=*) objcc="$optarg"
1009 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001010 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +00001011 ;;
pbrook6a882642006-04-17 13:57:12 +00001012 --install=*) install="$optarg"
1013 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +00001014 --python=*) python="$optarg"
1015 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001016 --sphinx-build=*) sphinx_build="$optarg"
1017 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001018 --gcov=*) gcov_tool="$optarg"
1019 ;;
Brade2d88302011-09-02 16:53:28 -04001020 --smbd=*) smbd="$optarg"
1021 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001022 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001023 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001024 --extra-cxxflags=*)
1025 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001026 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001027 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001028 --enable-debug-info)
1029 ;;
1030 --disable-debug-info)
1031 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001032 --cross-cc-*)
1033 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001034 --enable-modules)
1035 modules="yes"
1036 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001037 --disable-modules)
1038 modules="no"
1039 ;;
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01001040 --disable-module-upgrades) module_upgrades="no"
1041 ;;
1042 --enable-module-upgrades) module_upgrades="yes"
1043 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001044 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001045 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001046 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001047 if test "$target_list_exclude"; then
1048 error_exit "Can't mix --target-list with --target-list-exclude"
1049 fi
1050 ;;
1051 --target-list-exclude=*) target_list_exclude="$optarg"
1052 if test "$target_list"; then
1053 error_exit "Can't mix --target-list-exclude with --target-list"
1054 fi
bellardde83cd02003-06-15 20:25:43 +00001055 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001056 --enable-trace-backends=*) trace_backends="$optarg"
1057 ;;
1058 # XXX: backwards compatibility
1059 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001060 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001061 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001062 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001063 --with-default-devices) default_devices="yes"
1064 ;;
1065 --without-default-devices) default_devices="no"
1066 ;;
bellard7d132992003-03-06 23:23:54 +00001067 --enable-gprof) gprof="yes"
1068 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001069 --enable-gcov) gcov="yes"
1070 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001071 --static)
1072 static="yes"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001073 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001074 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001075 --mandir=*) mandir="$optarg"
1076 ;;
1077 --bindir=*) bindir="$optarg"
1078 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001079 --libdir=*) libdir="$optarg"
1080 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001081 --libexecdir=*) libexecdir="$optarg"
1082 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001083 --includedir=*) includedir="$optarg"
1084 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001085 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001086 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001087 --with-confsuffix=*) confsuffix="$optarg"
1088 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001089 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001090 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001091 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001092 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001093 --localstatedir=*) local_statedir="$optarg"
1094 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001095 --firmwarepath=*) firmwarepath="$optarg"
1096 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001097 --host=*|--build=*|\
1098 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001099 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001100 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1101 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1102 # These switches are silently ignored, for compatibility with
1103 # autoconf-generated configure scripts. This allows QEMU's
1104 # configure to be used by RPM and similar macros that set
1105 # lots of directory switches by default.
1106 ;;
bellard97a847b2003-08-10 21:36:04 +00001107 --disable-sdl) sdl="no"
1108 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001109 --enable-sdl) sdl="yes"
1110 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001111 --disable-sdl-image) sdl_image="no"
1112 ;;
1113 --enable-sdl-image) sdl_image="yes"
1114 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001115 --disable-qom-cast-debug) qom_cast_debug="no"
1116 ;;
1117 --enable-qom-cast-debug) qom_cast_debug="yes"
1118 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301119 --disable-virtfs) virtfs="no"
1120 ;;
1121 --enable-virtfs) virtfs="yes"
1122 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001123 --disable-mpath) mpath="no"
1124 ;;
1125 --enable-mpath) mpath="yes"
1126 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001127 --disable-vnc) vnc="no"
1128 ;;
1129 --enable-vnc) vnc="yes"
1130 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001131 --oss-lib=*) oss_lib="$optarg"
1132 ;;
malc0c58ac12008-06-25 21:04:05 +00001133 --audio-drv-list=*) audio_drv_list="$optarg"
1134 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001135 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001136 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001137 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001138 ;;
aurel32f8393942009-04-13 18:45:38 +00001139 --enable-debug-tcg) debug_tcg="yes"
1140 ;;
1141 --disable-debug-tcg) debug_tcg="no"
1142 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001143 --enable-debug)
1144 # Enable debugging options that aren't excessively noisy
1145 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001146 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001147 debug="yes"
1148 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001149 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001150 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001151 --enable-sanitizers) sanitizers="yes"
1152 ;;
1153 --disable-sanitizers) sanitizers="no"
1154 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001155 --enable-sparse) sparse="yes"
1156 ;;
1157 --disable-sparse) sparse="no"
1158 ;;
aliguori1625af82009-04-05 17:41:02 +00001159 --disable-strip) strip_opt="no"
1160 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001161 --disable-vnc-sasl) vnc_sasl="no"
1162 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001163 --enable-vnc-sasl) vnc_sasl="yes"
1164 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001165 --disable-vnc-jpeg) vnc_jpeg="no"
1166 ;;
1167 --enable-vnc-jpeg) vnc_jpeg="yes"
1168 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001169 --disable-vnc-png) vnc_png="no"
1170 ;;
1171 --enable-vnc-png) vnc_png="yes"
1172 ;;
bellard443f1372004-06-04 11:13:20 +00001173 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001174 ;;
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02001175 --enable-slirp=git) slirp="git"
1176 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001177 --enable-slirp=system) slirp="system"
1178 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001179 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001180 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001181 --enable-vde) vde="yes"
1182 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001183 --disable-netmap) netmap="no"
1184 ;;
1185 --enable-netmap) netmap="yes"
1186 ;;
aliguorie37630c2009-04-22 15:19:10 +00001187 --disable-xen) xen="no"
1188 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001189 --enable-xen) xen="yes"
1190 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001191 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1192 ;;
1193 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1194 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001195 --disable-brlapi) brlapi="no"
1196 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001197 --enable-brlapi) brlapi="yes"
1198 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001199 --disable-kvm) kvm="no"
1200 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001201 --enable-kvm) kvm="yes"
1202 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001203 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001204 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001205 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001206 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001207 --disable-hvf) hvf="no"
1208 ;;
1209 --enable-hvf) hvf="yes"
1210 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001211 --disable-whpx) whpx="no"
1212 ;;
1213 --enable-whpx) whpx="yes"
1214 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001215 --disable-tcg-interpreter) tcg_interpreter="no"
1216 ;;
1217 --enable-tcg-interpreter) tcg_interpreter="yes"
1218 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001219 --disable-cap-ng) cap_ng="no"
1220 ;;
1221 --enable-cap-ng) cap_ng="yes"
1222 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001223 --disable-tcg) tcg="no"
1224 ;;
1225 --enable-tcg) tcg="yes"
1226 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001227 --disable-malloc-trim) malloc_trim="no"
1228 ;;
1229 --enable-malloc-trim) malloc_trim="yes"
1230 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001231 --disable-spice) spice="no"
1232 ;;
1233 --enable-spice) spice="yes"
1234 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001235 --disable-libiscsi) libiscsi="no"
1236 ;;
1237 --enable-libiscsi) libiscsi="yes"
1238 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001239 --disable-libnfs) libnfs="no"
1240 ;;
1241 --enable-libnfs) libnfs="yes"
1242 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001243 --enable-profiler) profiler="yes"
1244 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001245 --disable-cocoa) cocoa="no"
1246 ;;
malcc2de5c92008-06-28 19:13:06 +00001247 --enable-cocoa)
1248 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001249 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001250 ;;
pbrookcad25d62006-03-19 16:31:11 +00001251 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001252 ;;
pbrookcad25d62006-03-19 16:31:11 +00001253 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001254 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001255 --disable-user)
1256 linux_user="no" ;
1257 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001258 ;;
1259 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001260 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001261 ;;
ths831b7822007-01-18 20:06:33 +00001262 --enable-linux-user) linux_user="yes"
1263 ;;
blueswir184778502008-10-26 20:33:16 +00001264 --disable-bsd-user) bsd_user="no"
1265 ;;
1266 --enable-bsd-user) bsd_user="yes"
1267 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001268 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001269 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001270 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001271 ;;
bellard85aa5182007-11-11 20:17:03 +00001272 --enable-werror) werror="yes"
1273 ;;
1274 --disable-werror) werror="no"
1275 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001276 --enable-stack-protector) stack_protector="yes"
1277 ;;
1278 --disable-stack-protector) stack_protector="no"
1279 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001280 --disable-curses) curses="no"
1281 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001282 --enable-curses) curses="yes"
1283 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001284 --disable-iconv) iconv="no"
1285 ;;
1286 --enable-iconv) iconv="yes"
1287 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001288 --disable-curl) curl="no"
1289 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001290 --enable-curl) curl="yes"
1291 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001292 --disable-fdt) fdt="no"
1293 ;;
1294 --enable-fdt) fdt="yes"
1295 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001296 --disable-linux-aio) linux_aio="no"
1297 ;;
1298 --enable-linux-aio) linux_aio="yes"
1299 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001300 --disable-linux-io-uring) linux_io_uring="no"
1301 ;;
1302 --enable-linux-io-uring) linux_io_uring="yes"
1303 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001304 --disable-attr) attr="no"
1305 ;;
1306 --enable-attr) attr="yes"
1307 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001308 --disable-membarrier) membarrier="no"
1309 ;;
1310 --enable-membarrier) membarrier="yes"
1311 ;;
ths77755342008-11-27 15:45:16 +00001312 --disable-blobs) blobs="no"
1313 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001314 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001315 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001316 --with-coroutine=*) coroutine="$optarg"
1317 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001318 --disable-coroutine-pool) coroutine_pool="no"
1319 ;;
1320 --enable-coroutine-pool) coroutine_pool="yes"
1321 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001322 --enable-debug-stack-usage) debug_stack_usage="yes"
1323 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001324 --enable-crypto-afalg) crypto_afalg="yes"
1325 ;;
1326 --disable-crypto-afalg) crypto_afalg="no"
1327 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001328 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001329 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001330 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001331 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001332 --disable-vhost-net) vhost_net="no"
1333 ;;
1334 --enable-vhost-net) vhost_net="yes"
1335 ;;
Gonglei042cea22018-03-01 21:46:28 +08001336 --disable-vhost-crypto) vhost_crypto="no"
1337 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001338 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001339 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001340 --disable-vhost-scsi) vhost_scsi="no"
1341 ;;
1342 --enable-vhost-scsi) vhost_scsi="yes"
1343 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001344 --disable-vhost-vsock) vhost_vsock="no"
1345 ;;
1346 --enable-vhost-vsock) vhost_vsock="yes"
1347 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001348 --disable-vhost-user-fs) vhost_user_fs="no"
1349 ;;
1350 --enable-vhost-user-fs) vhost_user_fs="yes"
1351 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001352 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001353 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001354 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001355 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001356 --disable-rbd) rbd="no"
1357 ;;
1358 --enable-rbd) rbd="yes"
1359 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001360 --disable-xfsctl) xfs="no"
1361 ;;
1362 --enable-xfsctl) xfs="yes"
1363 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001364 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001365 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001366 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001367 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001368 --disable-libusb) libusb="no"
1369 ;;
1370 --enable-libusb) libusb="yes"
1371 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001372 --disable-usb-redir) usb_redir="no"
1373 ;;
1374 --enable-usb-redir) usb_redir="yes"
1375 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001376 --disable-zlib-test) zlib="no"
1377 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001378 --disable-lzo) lzo="no"
1379 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001380 --enable-lzo) lzo="yes"
1381 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001382 --disable-snappy) snappy="no"
1383 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001384 --enable-snappy) snappy="yes"
1385 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001386 --disable-bzip2) bzip2="no"
1387 ;;
1388 --enable-bzip2) bzip2="yes"
1389 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001390 --enable-lzfse) lzfse="yes"
1391 ;;
1392 --disable-lzfse) lzfse="no"
1393 ;;
Juan Quintela3a678482019-12-17 21:15:24 +01001394 --disable-zstd) zstd="no"
1395 ;;
1396 --enable-zstd) zstd="yes"
1397 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001398 --enable-guest-agent) guest_agent="yes"
1399 ;;
1400 --disable-guest-agent) guest_agent="no"
1401 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001402 --enable-guest-agent-msi) guest_agent_msi="yes"
1403 ;;
1404 --disable-guest-agent-msi) guest_agent_msi="no"
1405 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001406 --with-vss-sdk) vss_win32_sdk=""
1407 ;;
1408 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1409 ;;
1410 --without-vss-sdk) vss_win32_sdk="no"
1411 ;;
1412 --with-win-sdk) win_sdk=""
1413 ;;
1414 --with-win-sdk=*) win_sdk="$optarg"
1415 ;;
1416 --without-win-sdk) win_sdk="no"
1417 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001418 --enable-tools) want_tools="yes"
1419 ;;
1420 --disable-tools) want_tools="no"
1421 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001422 --enable-seccomp) seccomp="yes"
1423 ;;
1424 --disable-seccomp) seccomp="no"
1425 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301426 --disable-glusterfs) glusterfs="no"
1427 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001428 --disable-avx2) avx2_opt="no"
1429 ;;
1430 --enable-avx2) avx2_opt="yes"
1431 ;;
Robert Hoo6b8cd442020-02-29 20:34:34 +08001432 --disable-avx512f) avx512f_opt="no"
1433 ;;
1434 --enable-avx512f) avx512f_opt="yes"
1435 ;;
1436
Bharata B Raoeb100392012-09-24 14:42:45 +05301437 --enable-glusterfs) glusterfs="yes"
1438 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001439 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1440 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001441 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001442 --enable-vhdx|--disable-vhdx)
1443 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1444 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001445 --enable-uuid|--disable-uuid)
1446 echo "$0: $opt is obsolete, UUID support is always built" >&2
1447 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001448 --disable-gtk) gtk="no"
1449 ;;
1450 --enable-gtk) gtk="yes"
1451 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001452 --tls-priority=*) tls_priority="$optarg"
1453 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001454 --disable-gnutls) gnutls="no"
1455 ;;
1456 --enable-gnutls) gnutls="yes"
1457 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001458 --disable-nettle) nettle="no"
1459 ;;
1460 --enable-nettle) nettle="yes"
1461 ;;
1462 --disable-gcrypt) gcrypt="no"
1463 ;;
1464 --enable-gcrypt) gcrypt="yes"
1465 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001466 --disable-auth-pam) auth_pam="no"
1467 ;;
1468 --enable-auth-pam) auth_pam="yes"
1469 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001470 --enable-rdma) rdma="yes"
1471 ;;
1472 --disable-rdma) rdma="no"
1473 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001474 --enable-pvrdma) pvrdma="yes"
1475 ;;
1476 --disable-pvrdma) pvrdma="no"
1477 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001478 --disable-vte) vte="no"
1479 ;;
1480 --enable-vte) vte="yes"
1481 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001482 --disable-virglrenderer) virglrenderer="no"
1483 ;;
1484 --enable-virglrenderer) virglrenderer="yes"
1485 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001486 --disable-tpm) tpm="no"
1487 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001488 --enable-tpm) tpm="yes"
1489 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001490 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001491 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001492 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001493 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001494 --disable-live-block-migration) live_block_migration="no"
1495 ;;
1496 --enable-live-block-migration) live_block_migration="yes"
1497 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001498 --disable-numa) numa="no"
1499 ;;
1500 --enable-numa) numa="yes"
1501 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001502 --disable-libxml2) libxml2="no"
1503 ;;
1504 --enable-libxml2) libxml2="yes"
1505 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001506 --disable-tcmalloc) tcmalloc="no"
1507 ;;
1508 --enable-tcmalloc) tcmalloc="yes"
1509 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001510 --disable-jemalloc) jemalloc="no"
1511 ;;
1512 --enable-jemalloc) jemalloc="yes"
1513 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001514 --disable-replication) replication="no"
1515 ;;
1516 --enable-replication) replication="yes"
1517 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001518 --disable-vxhs) vxhs="no"
1519 ;;
1520 --enable-vxhs) vxhs="yes"
1521 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001522 --disable-bochs) bochs="no"
1523 ;;
1524 --enable-bochs) bochs="yes"
1525 ;;
1526 --disable-cloop) cloop="no"
1527 ;;
1528 --enable-cloop) cloop="yes"
1529 ;;
1530 --disable-dmg) dmg="no"
1531 ;;
1532 --enable-dmg) dmg="yes"
1533 ;;
1534 --disable-qcow1) qcow1="no"
1535 ;;
1536 --enable-qcow1) qcow1="yes"
1537 ;;
1538 --disable-vdi) vdi="no"
1539 ;;
1540 --enable-vdi) vdi="yes"
1541 ;;
1542 --disable-vvfat) vvfat="no"
1543 ;;
1544 --enable-vvfat) vvfat="yes"
1545 ;;
1546 --disable-qed) qed="no"
1547 ;;
1548 --enable-qed) qed="yes"
1549 ;;
1550 --disable-parallels) parallels="no"
1551 ;;
1552 --enable-parallels) parallels="yes"
1553 ;;
1554 --disable-sheepdog) sheepdog="no"
1555 ;;
1556 --enable-sheepdog) sheepdog="yes"
1557 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001558 --disable-vhost-user) vhost_user="no"
1559 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001560 --enable-vhost-user) vhost_user="yes"
1561 ;;
1562 --disable-vhost-kernel) vhost_kernel="no"
1563 ;;
1564 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001565 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001566 --disable-capstone) capstone="no"
1567 ;;
1568 --enable-capstone) capstone="yes"
1569 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001570 --enable-capstone=git) capstone="git"
1571 ;;
1572 --enable-capstone=system) capstone="system"
1573 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001574 --with-git=*) git="$optarg"
1575 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001576 --enable-git-update) git_update=yes
1577 ;;
1578 --disable-git-update) git_update=no
1579 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001580 --enable-debug-mutex) debug_mutex=yes
1581 ;;
1582 --disable-debug-mutex) debug_mutex=no
1583 ;;
Junyan He17824402018-07-18 15:47:59 +08001584 --enable-libpmem) libpmem=yes
1585 ;;
1586 --disable-libpmem) libpmem=no
1587 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001588 --enable-xkbcommon) xkbcommon=yes
1589 ;;
1590 --disable-xkbcommon) xkbcommon=no
1591 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001592 --enable-plugins) plugins="yes"
1593 ;;
1594 --disable-plugins) plugins="no"
1595 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001596 --enable-containers) use_containers="yes"
1597 ;;
1598 --disable-containers) use_containers="no"
1599 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001600 --enable-fuzzing) fuzzing=yes
1601 ;;
1602 --disable-fuzzing) fuzzing=no
1603 ;;
Alex Bennéef48e5902020-03-16 17:21:48 +00001604 --gdb=*) gdb_bin="$optarg"
1605 ;;
Marek Marczykowski-Góreckib767d252020-05-20 15:20:23 +02001606 --enable-rng-none) rng_none=yes
1607 ;;
1608 --disable-rng-none) rng_none=no
1609 ;;
Alexey Krasikov54e7aac2020-05-25 14:19:12 +03001610 --enable-keyring) secret_keyring="yes"
1611 ;;
1612 --disable-keyring) secret_keyring="no"
1613 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001614 *)
1615 echo "ERROR: unknown option $opt"
1616 echo "Try '$0 --help' for more information"
1617 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001618 ;;
bellard7d132992003-03-06 23:23:54 +00001619 esac
1620done
1621
bellard40293e52008-01-31 11:32:10 +00001622case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001623 ppc)
1624 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001625 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001626 ;;
1627 ppc64)
1628 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001629 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001630 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001631 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001632 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001633 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001634 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001635 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001636 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001637 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001638 ;;
ths76d83bd2007-11-18 21:22:10 +00001639 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001640 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001641 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001642 ;;
1643 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001644 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001645 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001646 ;;
bellard40293e52008-01-31 11:32:10 +00001647 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001648 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001649 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001650 ;;
1651 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001652 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1653 # If we truly care, we should simply detect this case at
1654 # runtime and generate the fallback to serial emulation.
1655 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001656 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001657 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001658 x32)
1659 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001660 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001661 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001662 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001663esac
1664
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001665eval "cross_cc_${cpu}=\$host_cc"
1666cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001667QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001668
Peter Maydellaffc88c2016-06-13 11:32:24 +01001669# For user-mode emulation the host arch has to be one we explicitly
1670# support, even if we're using TCI.
1671if [ "$ARCH" = "unknown" ]; then
1672 bsd_user="no"
1673 linux_user="no"
1674fi
1675
Philippe Mathieu-Daudé1cf295b2020-05-22 19:24:59 +02001676if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1677 tcg="no"
1678fi
1679
Peter Maydell60e0df22011-05-03 14:50:13 +01001680default_target_list=""
1681
Peter Maydell6e92f822013-05-20 16:16:15 +01001682mak_wilds=""
1683
1684if [ "$softmmu" = "yes" ]; then
1685 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001686fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001687if [ "$linux_user" = "yes" ]; then
1688 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001689fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001690if [ "$bsd_user" = "yes" ]; then
1691 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001692fi
1693
Alex Bennée447e1332019-03-19 11:59:12 +00001694if test -z "$target_list_exclude"; then
1695 for config in $mak_wilds; do
1696 default_target_list="${default_target_list} $(basename "$config" .mak)"
1697 done
1698else
1699 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1700 for config in $mak_wilds; do
1701 target="$(basename "$config" .mak)"
1702 exclude="no"
1703 for excl in $exclude_list; do
1704 if test "$excl" = "$target"; then
1705 exclude="yes"
1706 break;
1707 fi
1708 done
1709 if test "$exclude" = "no"; then
1710 default_target_list="${default_target_list} $target"
1711 fi
1712 done
1713fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001714
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001715# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001716trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001717
pbrookaf5db582006-04-08 14:26:41 +00001718if test x"$show_help" = x"yes" ; then
1719cat << EOF
1720
1721Usage: configure [options]
1722Options: [defaults in brackets after descriptions]
1723
Stefan Weil08fb77e2013-12-18 22:09:39 +01001724Standard options:
1725 --help print this message
1726 --prefix=PREFIX install in PREFIX [$prefix]
1727 --interp-prefix=PREFIX where to find shared libraries, etc.
1728 use %M for cpu name [$interp_prefix]
1729 --target-list=LIST set target list (default: build everything)
1730$(echo Available targets: $default_target_list | \
1731 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001732 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001733
1734Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001735 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1736 --cc=CC use C compiler CC [$cc]
1737 --iasl=IASL use ACPI compiler IASL [$iasl]
1738 --host-cc=CC use C compiler CC [$host_cc] for code run at
1739 build time
1740 --cxx=CXX use C++ compiler CXX [$cxx]
1741 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1742 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001743 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001744 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001745 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001746 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001747 --make=MAKE use specified make [$make]
1748 --install=INSTALL use specified install [$install]
1749 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001750 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001751 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001752 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001753 --static enable static build [$static]
1754 --mandir=PATH install man pages in PATH
1755 --datadir=PATH install firmware in PATH$confsuffix
1756 --docdir=PATH install documentation in PATH$confsuffix
1757 --bindir=PATH install binaries in PATH
1758 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001759 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001760 --sysconfdir=PATH install config in PATH$confsuffix
1761 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001762 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001763 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001764 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001765 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001766 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001767 --disable-strip disable stripping binaries
1768 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001769 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001770 --audio-drv-list=LIST set audio drivers list:
1771 Available drivers: $audio_possible_drivers
1772 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1773 --block-drv-rw-whitelist=L
1774 set block driver read-write whitelist
1775 (affects only QEMU, not qemu-img)
1776 --block-drv-ro-whitelist=L
1777 set block driver read-only whitelist
1778 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001779 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001780 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001781 --with-trace-file=NAME Full PATH,NAME of file to store traces
1782 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001783 --disable-slirp disable SLIRP userspace network connectivity
1784 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001785 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001786 --oss-lib path to OSS library
1787 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001788 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001789 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001790 --enable-gcov enable test coverage analysis with gcov
1791 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001792 --disable-blobs disable installing provided firmware blobs
1793 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1794 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001795 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001796 --enable-gprof QEMU profiling with gprof
1797 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001798 --enable-debug-stack-usage
1799 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001800 --enable-plugins
1801 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001802 --disable-containers don't use containers for cross-building
Alex Bennéef48e5902020-03-16 17:21:48 +00001803 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001804
1805Optional features, enabled with --enable-FEATURE and
1806disabled with --disable-FEATURE, default is enabled if available:
1807
1808 system all system emulation targets
1809 user supported user emulation targets
1810 linux-user all linux usermode emulation targets
1811 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001812 docs build documentation
1813 guest-agent build the QEMU Guest Agent
1814 guest-agent-msi build guest agent Windows MSI installation package
1815 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001816 modules modules support (non-Windows)
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01001817 module-upgrades try to load modules from alternate paths for upgrades
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001818 debug-tcg TCG debugging (default is disabled)
1819 debug-info debugging information
1820 sparse sparse checker
1821
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001822 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001823 nettle nettle cryptography support
1824 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001825 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001826 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001827 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001828 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001829 vte vte support for the gtk UI
1830 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001831 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001832 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001833 vnc-sasl SASL encryption for VNC server
1834 vnc-jpeg JPEG lossy compression for VNC server
1835 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001836 cocoa Cocoa UI (Mac OS X only)
1837 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001838 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001839 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001840 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001841 brlapi BrlAPI (Braile)
1842 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001843 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001844 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001845 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001846 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001847 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001848 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001849 rdma Enable RDMA-based migration
1850 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001851 vde support for vde network
1852 netmap support for netmap network
1853 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001854 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001855 cap-ng libcap-ng support
1856 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001857 vhost-net vhost-net kernel acceleration support
1858 vhost-vsock virtio sockets device support
1859 vhost-scsi vhost-scsi kernel target support
1860 vhost-crypto vhost-user-crypto backend support
1861 vhost-kernel vhost kernel backend support
1862 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001863 spice spice
1864 rbd rados block device (rbd)
1865 libiscsi iscsi support
1866 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001867 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001868 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001869 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001870 usb-redir usb network redirection support
1871 lzo support of lzo compression library
1872 snappy support of snappy compression library
1873 bzip2 support of bzip2 compression library
1874 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001875 lzfse support of lzfse compression library
1876 (for reading lzfse-compressed dmg images)
Juan Quintela3a678482019-12-17 21:15:24 +01001877 zstd support for zstd compression library
Denis Plotnikovd298ac12020-05-07 11:25:20 +03001878 (for migration compression and qcow2 cluster compression)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001879 seccomp seccomp support
1880 coroutine-pool coroutine freelist (better performance)
1881 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001882 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001883 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001884 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001885 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001886 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001887 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001888 avx2 AVX2 optimization support
Robert Hoo6b8cd442020-02-29 20:34:34 +08001889 avx512f AVX512F optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001890 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001891 opengl opengl support
1892 virglrenderer virgl rendering support
1893 xfsctl xfsctl support
1894 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001895 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001896 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001897 bochs bochs image format support
1898 cloop cloop image format support
1899 dmg dmg image format support
1900 qcow1 qcow v1 image format support
1901 vdi vdi image format support
1902 vvfat vvfat image format support
1903 qed qed image format support
1904 parallels parallels image format support
1905 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001906 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001907 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001908 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001909 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001910 xkbcommon xkbcommon support
Marek Marczykowski-Góreckib767d252020-05-20 15:20:23 +02001911 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
Stefan Weil08fb77e2013-12-18 22:09:39 +01001912
1913NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001914EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001915exit 0
pbrookaf5db582006-04-08 14:26:41 +00001916fi
1917
Thomas Huth9c790242019-03-11 11:20:34 +01001918# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001919rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001920
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001921# Remove syscall_nr.h to be sure they will be regenerated in the build
1922# directory, not in the source directory
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01001923for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
Laurent Vivier686a0fe2020-03-10 11:33:59 +01001924 i386 x86_64 mips mips64 ; do
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001925 # remove the file if it has been generated in the source directory
1926 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1927 # remove the dependency files
Laurent Vivier91e59982020-03-25 08:57:57 +01001928 for target in ${arch}*-linux-user ; do
1929 test -d "${target}" && find "${target}" -type f -name "*.d" \
1930 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1931 -print | while read file ; do rm "${file}" "${file%.d}.o" ; done
1932 done
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001933done
1934
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001935if test -z "$python"
1936then
1937 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001938fi
1939
1940# Note that if the Python conditional here evaluates True we will exit
1941# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001942if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1943 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001944 "Use --python=/path/to/python to specify a supported Python."
1945fi
1946
Cleber Rosa755ee702018-11-09 10:07:07 -05001947# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001948python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
Cleber Rosa755ee702018-11-09 10:07:07 -05001949
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001950# Suppress writing compiled files
1951python="$python -B"
1952
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001953# Check that the C compiler works. Doing this here before testing
1954# the host CPU ensures that we had a valid CC to autodetect the
1955# $cpu var (and we should bail right here if that's not the case).
1956# It also allows the help message to be printed without a CC.
1957write_c_skeleton;
1958if compile_object ; then
1959 : C compiler works ok
1960else
1961 error_exit "\"$cc\" either does not exist or does not work"
1962fi
1963if ! compile_prog ; then
1964 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1965fi
1966
Peter Maydell359bc952011-12-24 13:07:25 +00001967# Now we have handled --enable-tcg-interpreter and know we're not just
1968# printing the help message, bail out if the host CPU isn't supported.
1969if test "$ARCH" = "unknown"; then
1970 if test "$tcg_interpreter" = "yes" ; then
1971 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001972 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001973 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001974 fi
1975fi
1976
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001977# Consult white-list to determine whether to enable werror
1978# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001979if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001980 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001981 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001982 werror="yes"
1983 else
1984 werror="no"
1985 fi
1986fi
1987
Peter Maydellfb59dab2017-03-28 14:01:52 +01001988if test "$bogus_os" = "yes"; then
1989 # Now that we know that we're not printing the help and that
1990 # the compiler works (so the results of the check_defines we used
1991 # to identify the OS are reliable), if we didn't recognize the
1992 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001993 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001994fi
1995
Thomas Huthefc6c072018-12-03 10:12:32 +01001996# Check whether the compiler matches our minimum requirements:
1997cat > $TMPC << EOF
1998#if defined(__clang_major__) && defined(__clang_minor__)
1999# ifdef __apple_build_version__
2000# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2001# error You need at least XCode Clang v5.1 to compile QEMU
2002# endif
2003# else
2004# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2005# error You need at least Clang v3.4 to compile QEMU
2006# endif
2007# endif
2008#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2009# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2010# error You need at least GCC v4.8 to compile QEMU
2011# endif
2012#else
2013# error You either need GCC or Clang to compiler QEMU
2014#endif
2015int main (void) { return 0; }
2016EOF
2017if ! compile_prog "" "" ; then
2018 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2019fi
2020
Paolo Bonzini8d050952010-12-23 11:43:52 +01002021gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
2022gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00002023gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04002024gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02002025gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02002026gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01002027# Note that we do not add -Werror to gcc_flags here, because that would
2028# enable it for all configure tests. If a configure test failed due
2029# to -Werror this would just silently disable some features,
2030# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04002031
2032cc_has_warning_flag() {
2033 write_c_skeleton;
2034
Peter Maydella1d29d62012-10-27 22:19:07 +01002035 # Use the positive sense of the flag when testing for -Wno-wombat
2036 # support (gcc will happily accept the -Wno- form of unknown
2037 # warning options).
John Snow93b25862015-03-25 18:57:37 -04002038 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2039 compile_prog "-Werror $optflag" ""
2040}
2041
2042for flag in $gcc_flags; do
2043 if cc_has_warning_flag $flag ; then
2044 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01002045 fi
2046done
2047
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002048if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02002049 cat > $TMPC << EOF
2050int main(int argc, char *argv[])
2051{
2052 char arr[64], *p = arr, *c = argv[0];
2053 while (*c) {
2054 *p++ = *c++;
2055 }
2056 return 0;
2057}
2058EOF
Steven Noonan63678e12014-03-28 17:19:02 +01002059 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002060 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01002061 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01002062 # We need to check both a compile and a link, since some compiler
2063 # setups fail only on a .c->.o compile and some only at link time
2064 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2065 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01002066 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002067 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002068 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01002069 break
2070 fi
2071 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002072 if test "$stack_protector" = yes; then
2073 if test $sp_on = 0; then
2074 error_exit "Stack protector not supported"
2075 fi
2076 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01002077fi
2078
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02002079# Disable -Wmissing-braces on older compilers that warn even for
2080# the "universal" C zero initializer {0}.
2081cat > $TMPC << EOF
2082struct {
2083 int a[2];
2084} x = {0};
2085EOF
2086if compile_object "-Werror" "" ; then
2087 :
2088else
2089 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2090fi
2091
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002092# Our module code doesn't support Windows
2093if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2094 error_exit "Modules are not available for Windows"
2095fi
2096
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01002097# module_upgrades is only reasonable if modules are enabled
2098if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2099 error_exit "Can't enable module-upgrades as Modules are not enabled"
2100fi
2101
Thomas Huthd376e9d2018-12-03 11:41:38 +01002102# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002103if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002104 if test "$modules" = "yes" ; then
2105 error_exit "static and modules are mutually incompatible"
2106 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002107fi
2108
Emilio G. Cota768b7852015-04-29 13:09:02 +02002109# Unconditional check for compiler __thread support
2110 cat > $TMPC << EOF
2111static __thread int tls_var;
2112int main(void) { return tls_var; }
2113EOF
2114
2115if ! compile_prog "-Werror" "" ; then
2116 error_exit "Your compiler does not support the __thread specifier for " \
2117 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2118fi
2119
Richard Hendersonb2634122019-12-17 13:54:56 -10002120cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002121
2122#ifdef __linux__
2123# define THREAD __thread
2124#else
2125# define THREAD
2126#endif
Avi Kivity21d4a792011-11-23 11:24:25 +02002127static THREAD int tls_var;
Avi Kivity21d4a792011-11-23 11:24:25 +02002128int main(void) { return tls_var; }
Avi Kivity40d64442011-11-15 20:12:17 +02002129EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002130
Richard Hendersonb2634122019-12-17 13:54:56 -10002131# Check we support --no-pie first; we will need this for building ROMs.
2132if compile_prog "-Werror -fno-pie" "-no-pie"; then
2133 CFLAGS_NOPIE="-fno-pie"
2134 LDFLAGS_NOPIE="-no-pie"
2135fi
2136
Richard Henderson12781462019-12-17 15:30:14 -10002137if test "$static" = "yes"; then
Richard Hendersoneca7a8e2020-04-03 20:11:50 +01002138 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
Richard Henderson12781462019-12-17 15:30:14 -10002139 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2140 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2141 pie="yes"
2142 elif test "$pie" = "yes"; then
2143 error_exit "-static-pie not available due to missing toolchain support"
2144 else
2145 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2146 pie="no"
2147 fi
2148elif test "$pie" = "no"; then
Richard Henderson2c674102019-12-17 15:15:01 -10002149 QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS"
2150 QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS"
Richard Hendersoneca7a8e2020-04-03 20:11:50 +01002151elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
Richard Henderson2c674102019-12-17 15:15:01 -10002152 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2153 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
2154 pie="yes"
2155elif test "$pie" = "yes"; then
2156 error_exit "PIE not available due to missing toolchain support"
2157else
2158 echo "Disabling PIE due to missing toolchain support"
2159 pie="no"
Avi Kivity40d64442011-11-15 20:12:17 +02002160fi
2161
Richard Hendersone6cbd752019-12-17 14:00:39 -10002162# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2163# The combination is known as "full relro", because .got.plt is read-only too.
2164if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2165 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2166fi
2167
Paolo Bonzini09dada42013-04-17 16:26:47 +02002168##########################################
2169# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2170# use i686 as default anyway, but for those that don't, an explicit
2171# specification is necessary
2172
2173if test "$cpu" = "i386"; then
2174 cat > $TMPC << EOF
2175static int sfaa(int *ptr)
2176{
2177 return __sync_fetch_and_and(ptr, 0);
2178}
2179
2180int main(void)
2181{
2182 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002183 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002184 sfaa(&val);
2185 return val;
2186}
2187EOF
2188 if ! compile_prog "" "" ; then
2189 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2190 fi
2191fi
2192
2193#########################################
bellardec530c82006-04-25 22:36:06 +00002194# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002195
bellardec530c82006-04-25 22:36:06 +00002196if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002197 if has $install; then
2198 :
2199 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002200 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2201 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2202 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002203 fi
Stefan Weil89138852016-05-16 15:10:20 +02002204 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002205 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2206 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2207 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002208 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002209 if has ar; then
2210 :
2211 else
bellardec530c82006-04-25 22:36:06 +00002212 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002213 error_exit "No path includes ar" \
2214 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002215 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002216 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002217 fi
ths5fafdf22007-09-16 21:08:06 +00002218fi
bellardec530c82006-04-25 22:36:06 +00002219
Stefan Weilafb63eb2012-09-26 22:04:38 +02002220if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002221 for target in $default_target_list; do
2222 supported_target $target 2>/dev/null && \
2223 target_list="$target_list $target"
2224 done
2225 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002226else
Stefan Weil89138852016-05-16 15:10:20 +02002227 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002228 for target in $target_list; do
2229 # Check that we recognised the target name; this allows a more
2230 # friendly error message than if we let it fall through.
2231 case " $default_target_list " in
2232 *" $target "*)
2233 ;;
2234 *)
2235 error_exit "Unknown target name '$target'"
2236 ;;
2237 esac
2238 supported_target $target || exit 1
2239 done
bellard5327cf42005-01-10 23:18:50 +00002240fi
Peter Maydell25b48332013-05-20 16:16:16 +01002241
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002242# see if system emulation was really requested
2243case " $target_list " in
2244 *"-softmmu "*) softmmu=yes
2245 ;;
2246 *) softmmu=no
2247 ;;
2248esac
bellard5327cf42005-01-10 23:18:50 +00002249
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002250for target in $target_list; do
2251 case "$target" in
2252 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2253 edk2_blobs="yes"
2254 ;;
2255 esac
2256done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002257# The EDK2 binaries are compressed with bzip2
2258if test "$edk2_blobs" = "yes" && ! has bzip2; then
2259 error_exit "The bzip2 program is required for building QEMU"
2260fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002261
Juan Quintela249247c2009-08-12 18:20:25 +02002262feature_not_found() {
2263 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002264 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002265
Peter Maydell76ad07a2013-04-08 12:11:26 +01002266 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002267 "configure was not able to find it." \
2268 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002269}
2270
bellard7d132992003-03-06 23:23:54 +00002271# ---
2272# big/little endian test
2273cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002274short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2275short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2276extern int foo(short *, short *);
2277int main(int argc, char *argv[]) {
2278 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002279}
2280EOF
2281
Mike Frysinger61cc9192013-06-30 23:30:18 -04002282if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002283 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002284 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002285 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002286 bigendian="no"
2287 else
2288 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002289 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002290else
2291 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002292fi
2293
Juan Quintelab0a47e72009-08-12 18:29:49 +02002294##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002295# system tools
2296if test -z "$want_tools"; then
2297 if test "$softmmu" = "no"; then
2298 want_tools=no
2299 else
2300 want_tools=yes
2301 fi
2302fi
2303
2304##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002305# cocoa implies not SDL or GTK
2306# (the cocoa UI code currently assumes it is always the active UI
2307# and doesn't interact well with other UI frontend code)
2308if test "$cocoa" = "yes"; then
2309 if test "$sdl" = "yes"; then
2310 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2311 fi
2312 if test "$gtk" = "yes"; then
2313 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2314 fi
2315 gtk=no
2316 sdl=no
2317fi
2318
Eric Blake6b39b062016-10-11 10:46:23 -05002319# Some versions of Mac OS X incorrectly define SIZE_MAX
2320cat > $TMPC << EOF
2321#include <stdint.h>
2322#include <stdio.h>
2323int main(int argc, char *argv[]) {
2324 return printf("%zu", SIZE_MAX);
2325}
2326EOF
2327have_broken_size_max=no
2328if ! compile_object -Werror ; then
2329 have_broken_size_max=yes
2330fi
2331
Peter Maydella30878e2015-08-14 16:10:52 +01002332##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002333# L2TPV3 probe
2334
2335cat > $TMPC <<EOF
2336#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002337#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002338int main(void) { return sizeof(struct mmsghdr); }
2339EOF
2340if compile_prog "" "" ; then
2341 l2tpv3=yes
2342else
2343 l2tpv3=no
2344fi
2345
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002346#########################################
2347# vhost interdependencies and host support
2348
2349# vhost backends
2350test "$vhost_user" = "" && vhost_user=yes
2351if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2352 error_exit "vhost-user isn't available on win32"
2353fi
2354test "$vhost_kernel" = "" && vhost_kernel=$linux
2355if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2356 error_exit "vhost-kernel is only available on Linux"
2357fi
2358
2359# vhost-kernel devices
2360test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2361if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2362 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2363fi
2364test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2365if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2366 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2367fi
2368
2369# vhost-user backends
2370test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2371if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2372 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2373fi
2374test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2375if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2376 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2377fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002378test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2379if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2380 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2381fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002382
2383# OR the vhost-kernel and vhost-user values for simplicity
2384if test "$vhost_net" = ""; then
2385 test "$vhost_net_user" = "yes" && vhost_net=yes
2386 test "$vhost_kernel" = "yes" && vhost_net=yes
2387fi
2388
Gonglei015a33b2014-07-01 20:58:08 +08002389##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002390# MinGW / Mingw-w64 localtime_r/gmtime_r check
2391
2392if test "$mingw32" = "yes"; then
2393 # Some versions of MinGW / Mingw-w64 lack localtime_r
2394 # and gmtime_r entirely.
2395 #
2396 # Some versions of Mingw-w64 define a macro for
2397 # localtime_r/gmtime_r.
2398 #
2399 # Some versions of Mingw-w64 will define functions
2400 # for localtime_r/gmtime_r, but only if you have
2401 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2402 # though, unistd.h and pthread.h both define
2403 # that for you.
2404 #
2405 # So this #undef localtime_r and #include <unistd.h>
2406 # are not in fact redundant.
2407cat > $TMPC << EOF
2408#include <unistd.h>
2409#include <time.h>
2410#undef localtime_r
2411int main(void) { localtime_r(NULL, NULL); return 0; }
2412EOF
2413 if compile_prog "" "" ; then
2414 localtime_r="yes"
2415 else
2416 localtime_r="no"
2417 fi
2418fi
2419
2420##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002421# pkg-config probe
2422
2423if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002424 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002425fi
2426
2427##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002428# NPTL probe
2429
Peter Maydell24cb36a2013-07-16 18:45:00 +01002430if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002431 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002432#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002433#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002434int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002435#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2436#error bork
2437#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002438 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002439}
2440EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002441 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002442 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002443 fi
pbrookbd0c5662008-05-29 14:34:11 +00002444fi
2445
balrogac629222008-10-11 09:56:04 +00002446##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002447# lzo check
2448
2449if test "$lzo" != "no" ; then
2450 cat > $TMPC << EOF
2451#include <lzo/lzo1x.h>
2452int main(void) { lzo_version(); return 0; }
2453EOF
2454 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002455 libs_softmmu="$libs_softmmu -llzo2"
2456 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002457 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002458 if test "$lzo" = "yes"; then
2459 feature_not_found "liblzo2" "Install liblzo2 devel"
2460 fi
2461 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002462 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002463fi
2464
2465##########################################
2466# snappy check
2467
2468if test "$snappy" != "no" ; then
2469 cat > $TMPC << EOF
2470#include <snappy-c.h>
2471int main(void) { snappy_max_compressed_length(4096); return 0; }
2472EOF
2473 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002474 libs_softmmu="$libs_softmmu -lsnappy"
2475 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002476 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002477 if test "$snappy" = "yes"; then
2478 feature_not_found "libsnappy" "Install libsnappy devel"
2479 fi
2480 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002481 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002482fi
2483
2484##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002485# bzip2 check
2486
2487if test "$bzip2" != "no" ; then
2488 cat > $TMPC << EOF
2489#include <bzlib.h>
2490int main(void) { BZ2_bzlibVersion(); return 0; }
2491EOF
2492 if compile_prog "" "-lbz2" ; then
2493 bzip2="yes"
2494 else
2495 if test "$bzip2" = "yes"; then
2496 feature_not_found "libbzip2" "Install libbzip2 devel"
2497 fi
2498 bzip2="no"
2499 fi
2500fi
2501
2502##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002503# lzfse check
2504
2505if test "$lzfse" != "no" ; then
2506 cat > $TMPC << EOF
2507#include <lzfse.h>
2508int main(void) { lzfse_decode_scratch_size(); return 0; }
2509EOF
2510 if compile_prog "" "-llzfse" ; then
2511 lzfse="yes"
2512 else
2513 if test "$lzfse" = "yes"; then
2514 feature_not_found "lzfse" "Install lzfse devel"
2515 fi
2516 lzfse="no"
2517 fi
2518fi
2519
2520##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002521# zstd check
2522
2523if test "$zstd" != "no" ; then
Juan Quintela297254c2020-03-10 12:14:31 +01002524 libzstd_minver="1.4.0"
2525 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
Juan Quintela3a678482019-12-17 21:15:24 +01002526 zstd_cflags="$($pkg_config --cflags libzstd)"
2527 zstd_libs="$($pkg_config --libs libzstd)"
2528 LIBS="$zstd_libs $LIBS"
2529 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2530 zstd="yes"
2531 else
2532 if test "$zstd" = "yes" ; then
2533 feature_not_found "libzstd" "Install libzstd devel"
2534 fi
2535 zstd="no"
2536 fi
2537fi
2538
2539##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002540# libseccomp check
2541
2542if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002543 libseccomp_minver="2.3.0"
2544 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002545 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2546 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002547 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002548 else
Andrew Jones693e5912015-09-30 11:59:18 -04002549 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002550 feature_not_found "libseccomp" \
2551 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002552 fi
2553 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002554 fi
2555fi
2556##########################################
aliguorie37630c2009-04-22 15:19:10 +00002557# xen probe
2558
Juan Quintelafc321b42009-08-12 18:29:55 +02002559if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002560 # Check whether Xen library path is specified via --extra-ldflags to avoid
2561 # overriding this setting with pkg-config output. If not, try pkg-config
2562 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002563
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002564 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2565 $pkg_config --exists xencontrol ; then
2566 xen_ctrl_version="$(printf '%d%02d%02d' \
2567 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2568 xen=yes
2569 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2570 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002571 if $pkg_config --exists xentoolcore; then
2572 xen_pc="$xen_pc xentoolcore"
2573 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002574 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2575 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002576 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002577
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002578 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002579 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002580
2581 # First we test whether Xen headers and libraries are available.
2582 # If no, we are done and there is no Xen support.
2583 # If yes, more tests are run to detect the Xen version.
2584
2585 # Xen (any)
2586 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002587#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002588int main(void) {
2589 return 0;
2590}
2591EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002592 if ! compile_prog "" "$xen_libs" ; then
2593 # Xen not found
2594 if test "$xen" = "yes" ; then
2595 feature_not_found "xen" "Install xen devel"
2596 fi
2597 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002598
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002599 # Xen unstable
2600 elif
2601 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002602#undef XC_WANT_COMPAT_DEVICEMODEL_API
2603#define __XEN_TOOLS__
2604#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002605#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002606int main(void) {
2607 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002608 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002609
2610 xd = xendevicemodel_open(0, 0);
2611 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2612
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002613 xfmem = xenforeignmemory_open(0, 0);
2614 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2615
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002616 return 0;
2617}
2618EOF
2619 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2620 then
2621 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2622 xen_ctrl_version=41100
2623 xen=yes
2624 elif
2625 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002626#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2627#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002628#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002629int main(void) {
2630 xenforeignmemory_handle *xfmem;
2631
2632 xfmem = xenforeignmemory_open(0, 0);
2633 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002634 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002635
2636 return 0;
2637}
2638EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002639 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002640 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002641 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002642 xen_ctrl_version=41000
2643 xen=yes
2644 elif
2645 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002646#undef XC_WANT_COMPAT_DEVICEMODEL_API
2647#define __XEN_TOOLS__
2648#include <xendevicemodel.h>
2649int main(void) {
2650 xendevicemodel_handle *xd;
2651
2652 xd = xendevicemodel_open(0, 0);
2653 xendevicemodel_close(xd);
2654
2655 return 0;
2656}
2657EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002658 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2659 then
2660 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2661 xen_ctrl_version=40900
2662 xen=yes
2663 elif
2664 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002665/*
2666 * If we have stable libs the we don't want the libxc compat
2667 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002668 *
2669 * Also, check if xengnttab_grant_copy_segment_t is defined and
2670 * grant copy operation is implemented.
2671 */
2672#undef XC_WANT_COMPAT_EVTCHN_API
2673#undef XC_WANT_COMPAT_GNTTAB_API
2674#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2675#include <xenctrl.h>
2676#include <xenstore.h>
2677#include <xenevtchn.h>
2678#include <xengnttab.h>
2679#include <xenforeignmemory.h>
2680#include <stdint.h>
2681#include <xen/hvm/hvm_info_table.h>
2682#if !defined(HVM_MAX_VCPUS)
2683# error HVM_MAX_VCPUS not defined
2684#endif
2685int main(void) {
2686 xc_interface *xc = NULL;
2687 xenforeignmemory_handle *xfmem;
2688 xenevtchn_handle *xe;
2689 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002690 xengnttab_grant_copy_segment_t* seg = NULL;
2691
2692 xs_daemon_open();
2693
2694 xc = xc_interface_open(0, 0, 0);
2695 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2696 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2697 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2698 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002699
2700 xfmem = xenforeignmemory_open(0, 0);
2701 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2702
2703 xe = xenevtchn_open(0, 0);
2704 xenevtchn_fd(xe);
2705
2706 xg = xengnttab_open(0, 0);
2707 xengnttab_grant_copy(xg, 0, seg);
2708
2709 return 0;
2710}
2711EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002712 compile_prog "" "$xen_libs $xen_stable_libs"
2713 then
2714 xen_ctrl_version=40800
2715 xen=yes
2716 elif
2717 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002718/*
2719 * If we have stable libs the we don't want the libxc compat
2720 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002721 */
2722#undef XC_WANT_COMPAT_EVTCHN_API
2723#undef XC_WANT_COMPAT_GNTTAB_API
2724#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2725#include <xenctrl.h>
2726#include <xenstore.h>
2727#include <xenevtchn.h>
2728#include <xengnttab.h>
2729#include <xenforeignmemory.h>
2730#include <stdint.h>
2731#include <xen/hvm/hvm_info_table.h>
2732#if !defined(HVM_MAX_VCPUS)
2733# error HVM_MAX_VCPUS not defined
2734#endif
2735int main(void) {
2736 xc_interface *xc = NULL;
2737 xenforeignmemory_handle *xfmem;
2738 xenevtchn_handle *xe;
2739 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002740
2741 xs_daemon_open();
2742
2743 xc = xc_interface_open(0, 0, 0);
2744 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2745 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2746 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2747 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002748
2749 xfmem = xenforeignmemory_open(0, 0);
2750 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2751
2752 xe = xenevtchn_open(0, 0);
2753 xenevtchn_fd(xe);
2754
2755 xg = xengnttab_open(0, 0);
2756 xengnttab_map_grant_ref(xg, 0, 0, 0);
2757
2758 return 0;
2759}
2760EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002761 compile_prog "" "$xen_libs $xen_stable_libs"
2762 then
2763 xen_ctrl_version=40701
2764 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002765
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002766 # Xen 4.6
2767 elif
2768 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002769#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002770#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002771#include <stdint.h>
2772#include <xen/hvm/hvm_info_table.h>
2773#if !defined(HVM_MAX_VCPUS)
2774# error HVM_MAX_VCPUS not defined
2775#endif
2776int main(void) {
2777 xc_interface *xc;
2778 xs_daemon_open();
2779 xc = xc_interface_open(0, 0, 0);
2780 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2781 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002782 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002783 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002784 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002785 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002786 return 0;
2787}
2788EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002789 compile_prog "" "$xen_libs"
2790 then
2791 xen_ctrl_version=40600
2792 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002793
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002794 # Xen 4.5
2795 elif
2796 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002797#include <xenctrl.h>
2798#include <xenstore.h>
2799#include <stdint.h>
2800#include <xen/hvm/hvm_info_table.h>
2801#if !defined(HVM_MAX_VCPUS)
2802# error HVM_MAX_VCPUS not defined
2803#endif
2804int main(void) {
2805 xc_interface *xc;
2806 xs_daemon_open();
2807 xc = xc_interface_open(0, 0, 0);
2808 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2809 xc_gnttab_open(NULL, 0);
2810 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2811 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002812 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2813 return 0;
2814}
2815EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002816 compile_prog "" "$xen_libs"
2817 then
2818 xen_ctrl_version=40500
2819 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002820
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002821 elif
2822 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002823#include <xenctrl.h>
2824#include <xenstore.h>
2825#include <stdint.h>
2826#include <xen/hvm/hvm_info_table.h>
2827#if !defined(HVM_MAX_VCPUS)
2828# error HVM_MAX_VCPUS not defined
2829#endif
2830int main(void) {
2831 xc_interface *xc;
2832 xs_daemon_open();
2833 xc = xc_interface_open(0, 0, 0);
2834 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2835 xc_gnttab_open(NULL, 0);
2836 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2837 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002838 return 0;
2839}
2840EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002841 compile_prog "" "$xen_libs"
2842 then
2843 xen_ctrl_version=40200
2844 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002845
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002846 else
2847 if test "$xen" = "yes" ; then
2848 feature_not_found "xen (unsupported version)" \
2849 "Install a supported xen (xen 4.2 or newer)"
2850 fi
2851 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002852 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002853
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002854 if test "$xen" = yes; then
2855 if test $xen_ctrl_version -ge 40701 ; then
2856 libs_softmmu="$xen_stable_libs $libs_softmmu"
2857 fi
2858 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002859 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002860 fi
aliguorie37630c2009-04-22 15:19:10 +00002861fi
2862
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002863if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002864 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002865 xen_pci_passthrough=yes
2866 else
2867 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002868 error_exit "User requested feature Xen PCI Passthrough" \
2869 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002870 fi
2871 xen_pci_passthrough=no
2872 fi
2873fi
2874
aliguorie37630c2009-04-22 15:19:10 +00002875##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002876# Windows Hypervisor Platform accelerator (WHPX) check
2877if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002878 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002879 whpx="yes"
2880 else
2881 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002882 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002883 fi
2884 whpx="no"
2885 fi
2886fi
2887
2888##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002889# Sparse probe
2890if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002891 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002892 sparse=yes
2893 else
2894 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002895 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002896 fi
2897 sparse=no
2898 fi
2899fi
2900
2901##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002902# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002903if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002904 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002905 x11_cflags=$($pkg_config --cflags x11)
2906 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002907fi
2908
2909##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002910# GTK probe
2911
2912if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002913 gtkpackage="gtk+-3.0"
2914 gtkx11package="gtk+-x11-3.0"
Volker Rümelin7b23d122020-05-16 09:20:14 +02002915 gtkversion="3.22.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002916 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002917 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2918 gtk_libs=$($pkg_config --libs $gtkpackage)
2919 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002920 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002921 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002922 gtk_cflags="$gtk_cflags $x11_cflags"
2923 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002924 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002925 gtk="yes"
2926 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002927 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002928 else
2929 gtk="no"
2930 fi
2931fi
2932
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002933
2934##########################################
2935# GNUTLS probe
2936
2937if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002938 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002939 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002940 gnutls_cflags=$($pkg_config --cflags gnutls)
2941 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002942 # Packaging for the static libraries is not always correct.
2943 # At least ubuntu 18.04 ships only shared libraries.
2944 write_c_skeleton
2945 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002946 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002947 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2948 pass="yes"
2949 fi
2950 fi
2951 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002952 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002953 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002954 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002955 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002956fi
2957
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002958
2959# If user didn't give a --disable/enable-gcrypt flag,
2960# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002961# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002962if test -z "$gcrypt"
2963then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002964 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002965 then
2966 gcrypt="no"
2967 fi
2968fi
2969
2970# If user didn't give a --disable/enable-nettle flag,
2971# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002972# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002973if test -z "$nettle"
2974then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002975 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002976 then
2977 nettle="no"
2978 fi
2979fi
2980
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002981has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002982 if ! has "libgcrypt-config"
2983 then
2984 return 1
2985 fi
2986
2987 if test -n "$cross_prefix"
2988 then
Stefan Weil89138852016-05-16 15:10:20 +02002989 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002990 if test "$host-" != $cross_prefix
2991 then
2992 return 1
2993 fi
2994 fi
2995
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002996 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2997 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2998
2999 if test $maj != 1 || test $min -lt 5
3000 then
3001 return 1
3002 fi
3003
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003004 return 0
3005}
3006
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003007
3008if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003009 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01003010 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003011 nettle_cflags=$($pkg_config --cflags nettle)
3012 nettle_libs=$($pkg_config --libs nettle)
3013 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003014 # Link test to make sure the given libraries work (e.g for static).
3015 write_c_skeleton
3016 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003017 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003018 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3019 if test -z "$gcrypt"; then
3020 gcrypt="no"
3021 fi
3022 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003023 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003024 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01003025 if test "$pass" = "yes"
3026 then
3027 cat > $TMPC << EOF
3028#include <nettle/xts.h>
3029int main(void) {
3030 return 0;
3031}
3032EOF
3033 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3034 nettle_xts=yes
3035 qemu_private_xts=no
3036 fi
3037 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003038 if test "$pass" = "no" && test "$nettle" = "yes"; then
3039 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003040 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003041 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003042 fi
3043fi
3044
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003045if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003046 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003047 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003048 gcrypt_cflags=$(libgcrypt-config --cflags)
3049 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003050 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003051 # as it "spreads unnecessary dependencies" which in
3052 # turn breaks static builds...
3053 if test "$static" = "yes"
3054 then
3055 gcrypt_libs="$gcrypt_libs -lgpg-error"
3056 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003057
Richard Hendersona73e82e2019-05-09 18:24:35 -07003058 # Link test to make sure the given libraries work (e.g for static).
3059 write_c_skeleton
3060 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003061 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003062 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3063 pass="yes"
3064 fi
3065 fi
3066 if test "$pass" = "yes"; then
3067 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003068 cat > $TMPC << EOF
3069#include <gcrypt.h>
3070int main(void) {
3071 gcry_mac_hd_t handle;
3072 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3073 GCRY_MAC_FLAG_SECURE, NULL);
3074 return 0;
3075}
3076EOF
3077 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3078 gcrypt_hmac=yes
3079 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003080 cat > $TMPC << EOF
3081#include <gcrypt.h>
3082int main(void) {
3083 gcry_cipher_hd_t handle;
3084 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3085 return 0;
3086}
3087EOF
3088 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3089 gcrypt_xts=yes
3090 qemu_private_xts=no
3091 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003092 elif test "$gcrypt" = "yes"; then
3093 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003094 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003095 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003096 fi
3097fi
3098
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003099
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003100if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3101then
3102 error_exit "Only one of gcrypt & nettle can be enabled"
3103fi
3104
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003105##########################################
3106# libtasn1 - only for the TLS creds/session test suite
3107
3108tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003109tasn1_cflags=""
3110tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003111if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003112 tasn1_cflags=$($pkg_config --cflags libtasn1)
3113 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003114else
3115 tasn1=no
3116fi
3117
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003118
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003119##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003120# PAM probe
3121
3122if test "$auth_pam" != "no"; then
3123 cat > $TMPC <<EOF
3124#include <security/pam_appl.h>
3125#include <stdio.h>
3126int main(void) {
3127 const char *service_name = "qemu";
3128 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003129 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003130 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003131 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003132 return 0;
3133}
3134EOF
3135 if compile_prog "" "-lpam" ; then
3136 auth_pam=yes
3137 else
3138 if test "$auth_pam" = "yes"; then
3139 feature_not_found "PAM" "Install PAM development package"
3140 else
3141 auth_pam=no
3142 fi
3143 fi
3144fi
3145
3146##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003147# getifaddrs (for tests/test-io-channel-socket )
3148
3149have_ifaddrs_h=yes
3150if ! check_include "ifaddrs.h" ; then
3151 have_ifaddrs_h=no
3152fi
3153
3154##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003155# VTE probe
3156
3157if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003158 vteminversion="0.32.0"
3159 if $pkg_config --exists "vte-2.91"; then
3160 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003161 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003162 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003163 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003164 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003165 vte_cflags=$($pkg_config --cflags $vtepackage)
3166 vte_libs=$($pkg_config --libs $vtepackage)
3167 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003168 vte="yes"
3169 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003170 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003171 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003172 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003173 fi
3174fi
3175
3176##########################################
bellard11d9f692004-04-02 20:55:59 +00003177# SDL probe
3178
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003179# Look for sdl configuration program (pkg-config or sdl2-config). Try
3180# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003181
Peter Xuc6093a02018-04-10 13:40:34 +08003182sdl_probe ()
3183{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003184 if $pkg_config sdl2 --exists; then
3185 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003186 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003187 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003188 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003189 sdlversion=$($sdlconfig --version)
3190 else
3191 if test "$sdl" = "yes" ; then
3192 feature_not_found "sdl" "Install SDL2-devel"
3193 fi
3194 sdl=no
3195 # no need to do the rest
3196 return
3197 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003198 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003199 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3200 fi
3201
Juan Quintelaac119f92009-07-27 16:13:15 +02003202 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003203#include <SDL.h>
3204#undef main /* We don't want SDL to override our main() */
3205int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3206EOF
Stefan Weil89138852016-05-16 15:10:20 +02003207 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003208 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003209 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003210 if $pkg_config sdl2 --exists; then
3211 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003212 else
3213 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3214 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003215 else
Stefan Weil89138852016-05-16 15:10:20 +02003216 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003217 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003218 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003219 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003220
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003221 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003222 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003223 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003224 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3225 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003226 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003227 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003228 :
3229 else
3230 sdl=no
3231 fi
3232 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003233 else # sdl not found
3234 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003235 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003236 fi
3237 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003238 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003239}
3240
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003241sdl_image_probe ()
3242{
3243 if test "$sdl_image" != "no" ; then
3244 if $pkg_config SDL2_image --exists; then
3245 if test "$static" = "yes"; then
3246 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3247 else
3248 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3249 fi
3250 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3251 sdl_image=yes
3252
3253 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3254 sdl_libs="$sdl_libs $sdl_image_libs"
3255 else
3256 if test "$sdl_image" = "yes" ; then
3257 feature_not_found "sdl_image" "Install SDL Image devel"
3258 else
3259 sdl_image=no
3260 fi
3261 fi
3262 fi
3263}
3264
Peter Xuc6093a02018-04-10 13:40:34 +08003265if test "$sdl" != "no" ; then
3266 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003267fi
bellard11d9f692004-04-02 20:55:59 +00003268
aliguori5368a422009-03-03 17:37:21 +00003269if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003270 sdl_image_probe
3271else
3272 if test "$sdl_image" = "yes"; then
3273 echo "warning: SDL Image requested, but SDL is not available, disabling"
3274 fi
3275 sdl_image=no
3276fi
3277
3278if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003279 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003280#include <SDL.h>
3281#if defined(SDL_VIDEO_DRIVER_X11)
3282#include <X11/XKBlib.h>
3283#else
3284#error No x11 support
3285#endif
3286int main(void) { return 0; }
3287EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003288 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003289 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003290 sdl_cflags="$sdl_cflags $x11_cflags"
3291 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003292 fi
aliguori5368a422009-03-03 17:37:21 +00003293fi
3294
ths8f28f3f2007-01-05 21:25:54 +00003295##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003296# RDMA needs OpenFabrics libraries
3297if test "$rdma" != "no" ; then
3298 cat > $TMPC <<EOF
3299#include <rdma/rdma_cma.h>
3300int main(void) { return 0; }
3301EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003302 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003303 if compile_prog "" "$rdma_libs" ; then
3304 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003305 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003306 else
3307 if test "$rdma" = "yes" ; then
3308 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003309 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003310 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003311 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003312 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3313 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3314 fi
3315 rdma="no"
3316 fi
3317fi
3318
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003319##########################################
3320# PVRDMA detection
3321
3322cat > $TMPC <<EOF &&
3323#include <sys/mman.h>
3324
3325int
3326main(void)
3327{
3328 char buf = 0;
3329 void *addr = &buf;
3330 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3331
3332 return 0;
3333}
3334EOF
3335
3336if test "$rdma" = "yes" ; then
3337 case "$pvrdma" in
3338 "")
3339 if compile_prog "" ""; then
3340 pvrdma="yes"
3341 else
3342 pvrdma="no"
3343 fi
3344 ;;
3345 "yes")
3346 if ! compile_prog "" ""; then
3347 error_exit "PVRDMA is not supported since mremap is not implemented"
3348 fi
3349 pvrdma="yes"
3350 ;;
3351 "no")
3352 pvrdma="no"
3353 ;;
3354 esac
3355else
3356 if test "$pvrdma" = "yes" ; then
3357 error_exit "PVRDMA requires rdma suppport"
3358 fi
3359 pvrdma="no"
3360fi
ths8d5d2d42007-08-25 01:37:51 +00003361
Yuval Shaiaee108582019-08-18 16:21:06 +03003362# Let's see if enhanced reg_mr is supported
3363if test "$pvrdma" = "yes" ; then
3364
3365cat > $TMPC <<EOF &&
3366#include <infiniband/verbs.h>
3367
3368int
3369main(void)
3370{
3371 struct ibv_mr *mr;
3372 struct ibv_pd *pd = NULL;
3373 size_t length = 10;
3374 uint64_t iova = 0;
3375 int access = 0;
3376 void *addr = NULL;
3377
3378 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3379
3380 ibv_dereg_mr(mr);
3381
3382 return 0;
3383}
3384EOF
3385 if ! compile_prog "" "-libverbs"; then
3386 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3387 fi
3388fi
3389
ths8d5d2d42007-08-25 01:37:51 +00003390##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003391# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003392if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003393 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003394#include <sasl/sasl.h>
3395#include <stdio.h>
3396int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3397EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003398 # Assuming Cyrus-SASL installed in /usr prefix
Philippe Mathieu-Daudébd702ff2020-03-09 13:24:53 +01003399 # QEMU defines struct iovec in "qemu/osdep.h",
3400 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3401 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
Juan Quintelaea784e32009-08-12 18:20:29 +02003402 vnc_sasl_libs="-lsasl2"
3403 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3404 vnc_sasl=yes
3405 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003406 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003407 else
3408 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003409 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003410 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003411 vnc_sasl=no
3412 fi
aliguori2f9606b2009-03-06 20:27:28 +00003413fi
3414
3415##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003416# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003417if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003418cat > $TMPC <<EOF
3419#include <stdio.h>
3420#include <jpeglib.h>
3421int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3422EOF
3423 vnc_jpeg_cflags=""
3424 vnc_jpeg_libs="-ljpeg"
3425 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3426 vnc_jpeg=yes
3427 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003428 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003429 else
3430 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003431 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003432 fi
3433 vnc_jpeg=no
3434 fi
3435fi
3436
3437##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003438# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003439if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003440cat > $TMPC <<EOF
3441//#include <stdio.h>
3442#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003443#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003444int main(void) {
3445 png_structp png_ptr;
3446 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003447 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003448}
3449EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003450 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003451 vnc_png_cflags=$($pkg_config libpng --cflags)
3452 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003453 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003454 vnc_png_cflags=""
3455 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003456 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003457 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3458 vnc_png=yes
3459 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003460 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003461 else
3462 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003463 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003464 fi
3465 vnc_png=no
3466 fi
3467fi
3468
3469##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003470# xkbcommon probe
3471if test "$xkbcommon" != "no" ; then
3472 if $pkg_config xkbcommon --exists; then
3473 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3474 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3475 xkbcommon=yes
3476 else
3477 if test "$xkbcommon" = "yes" ; then
3478 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3479 fi
3480 xkbcommon=no
3481 fi
3482fi
3483
aliguori76655d62009-03-06 20:27:37 +00003484
3485##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003486# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003487if test "$xfs" != "no" ; then
3488 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003489#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003490#include <xfs/xfs.h>
3491int main(void)
3492{
3493 xfsctl(NULL, 0, 0, NULL);
3494 return 0;
3495}
3496EOF
3497 if compile_prog "" "" ; then
3498 xfs="yes"
3499 else
3500 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003501 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003502 fi
3503 xfs=no
3504 fi
3505fi
3506
3507##########################################
ths8a16d272008-07-19 09:56:24 +00003508# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003509if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003510 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003511 cat > $TMPC << EOF
3512#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003513int main(void)
3514{
3515 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003516 char s[] = "";
3517 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003518 return 0;
3519}
ths8a16d272008-07-19 09:56:24 +00003520EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003521 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003522 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003523 else
3524 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003525 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003526 fi
3527 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003528 fi
ths8a16d272008-07-19 09:56:24 +00003529fi
3530
3531##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003532# netmap support probe
3533# Apart from looking for netmap headers, we make sure that the host API version
3534# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3535# a minor/major version number. Minor new features will be marked with values up
3536# to 15, and if something happens that requires a change to the backend we will
3537# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003538if test "$netmap" != "no" ; then
3539 cat > $TMPC << EOF
3540#include <inttypes.h>
3541#include <net/if.h>
3542#include <net/netmap.h>
3543#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003544#if (NETMAP_API < 11) || (NETMAP_API > 15)
3545#error
3546#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003547int main(void) { return 0; }
3548EOF
3549 if compile_prog "" "" ; then
3550 netmap=yes
3551 else
3552 if test "$netmap" = "yes" ; then
3553 feature_not_found "netmap"
3554 fi
3555 netmap=no
3556 fi
3557fi
3558
3559##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003560# libcap-ng library probe
3561if test "$cap_ng" != "no" ; then
3562 cap_libs="-lcap-ng"
3563 cat > $TMPC << EOF
3564#include <cap-ng.h>
3565int main(void)
3566{
3567 capng_capability_to_name(CAPNG_EFFECTIVE);
3568 return 0;
3569}
3570EOF
3571 if compile_prog "" "$cap_libs" ; then
3572 cap_ng=yes
3573 libs_tools="$cap_libs $libs_tools"
3574 else
3575 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003576 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003577 fi
3578 cap_ng=no
3579 fi
3580fi
3581
3582##########################################
malcc2de5c92008-06-28 19:13:06 +00003583# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003584
Stefan Weil89138852016-05-16 15:10:20 +02003585audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003586for drv in $audio_drv_list; do
3587 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003588 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003589 if $pkg_config alsa --exists; then
3590 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003591 if test "$drv" = "try-alsa"; then
3592 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3593 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003594 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003595 if test "$drv" = "try-alsa"; then
3596 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3597 else
3598 error_exit "$drv check failed" \
3599 "Make sure to have the $drv libs and headers installed."
3600 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003601 fi
malcc2de5c92008-06-28 19:13:06 +00003602 ;;
3603
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003604 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003605 if $pkg_config libpulse --exists; then
3606 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003607 if test "$drv" = "try-pa"; then
3608 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3609 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003610 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003611 if test "$drv" = "try-pa"; then
3612 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3613 else
3614 error_exit "$drv check failed" \
3615 "Make sure to have the $drv libs and headers installed."
3616 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003617 fi
malcb8e59f12008-07-02 21:03:08 +00003618 ;;
3619
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003620 sdl)
3621 if test "$sdl" = "no"; then
3622 error_exit "sdl not found or disabled, can not use sdl audio driver"
3623 fi
3624 ;;
3625
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003626 try-sdl)
3627 if test "$sdl" = "no"; then
3628 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3629 else
3630 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3631 fi
3632 ;;
3633
Juan Quintela997e6902009-08-03 14:46:29 +02003634 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003635 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003636 ;;
3637
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003638 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003639 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003640 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003641 ;;
3642
3643 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003644 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003645 ;;
3646
Geoffrey McRae2e445702020-04-29 15:53:58 +10003647 jack | try-jack)
3648 if $pkg_config jack --exists; then
3649 jack_libs=$($pkg_config jack --libs)
3650 if test "$drv" = "try-jack"; then
3651 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3652 fi
3653 else
3654 if test "$drv" = "try-jack"; then
3655 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3656 else
3657 error_exit "$drv check failed" \
3658 "Make sure to have the $drv libs and headers installed."
3659 fi
3660 fi
3661 ;;
3662
malce4c63a62008-07-19 16:15:16 +00003663 *)
malc1c9b2a52008-07-19 16:57:30 +00003664 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003665 error_exit "Unknown driver '$drv' selected" \
3666 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003667 }
3668 ;;
malcc2de5c92008-06-28 19:13:06 +00003669 esac
3670done
ths8f28f3f2007-01-05 21:25:54 +00003671
balrog4d3b6f62008-02-10 16:33:14 +00003672##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003673# BrlAPI probe
3674
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003675if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003676 brlapi_libs="-lbrlapi"
3677 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003678#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003679#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003680int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3681EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003682 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003683 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003684 else
3685 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003686 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003687 fi
3688 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003689 fi
3690fi
aurel322e4d9fb2008-04-08 06:01:02 +00003691
3692##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003693# iconv probe
3694if test "$iconv" != "no" ; then
3695 cat > $TMPC << EOF
3696#include <iconv.h>
3697int main(void) {
3698 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3699 return conv != (iconv_t) -1;
3700}
3701EOF
3702 iconv_prefix_list="/usr/local:/usr"
3703 iconv_lib_list=":-liconv"
3704 IFS=:
3705 for iconv_prefix in $iconv_prefix_list; do
3706 IFS=:
3707 iconv_cflags="-I$iconv_prefix/include"
3708 iconv_ldflags="-L$iconv_prefix/lib"
3709 for iconv_link in $iconv_lib_list; do
3710 unset IFS
3711 iconv_lib="$iconv_ldflags $iconv_link"
3712 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3713 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3714 iconv_found=yes
3715 break
3716 fi
3717 done
3718 if test "$iconv_found" = yes ; then
3719 break
3720 fi
3721 done
3722 if test "$iconv_found" = "yes" ; then
3723 iconv=yes
3724 else
3725 if test "$iconv" = "yes" ; then
3726 feature_not_found "iconv" "Install iconv devel"
3727 fi
3728 iconv=no
3729 fi
3730fi
3731
3732##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003733# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003734if test "$iconv" = "no" ; then
3735 # curses will need iconv
3736 curses=no
3737fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003738if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003739 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003740 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3741 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003742 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003743 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003744 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003745 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003746 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003747 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003748#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003749#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003750#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003751#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003752int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003753 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003754 wchar_t wch = L'w';
3755 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003756 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003757 addwstr(L"wide chars\n");
3758 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003759 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003760 codeset = nl_langinfo(CODESET);
3761 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003762}
balrog4d3b6f62008-02-10 16:33:14 +00003763EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003764 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003765 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003766 # Make sure we get the wide character prototypes
3767 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003768 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003769 for curses_lib in $curses_lib_list; do
3770 unset IFS
3771 if compile_prog "$curses_inc" "$curses_lib" ; then
3772 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003773 break
3774 fi
3775 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003776 if test "$curses_found" = yes ; then
3777 break
3778 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003779 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003780 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003781 if test "$curses_found" = "yes" ; then
3782 curses=yes
3783 else
3784 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003785 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003786 fi
3787 curses=no
3788 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003789fi
balrog4d3b6f62008-02-10 16:33:14 +00003790
blueswir1414f0da2008-08-15 18:20:52 +00003791##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003792# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003793if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003794 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003795 curlconfig="$pkg_config libcurl"
3796 else
3797 curlconfig=curl-config
3798 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003799 cat > $TMPC << EOF
3800#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003801int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003802EOF
Stefan Weil89138852016-05-16 15:10:20 +02003803 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3804 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003805 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003806 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003807 else
3808 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003809 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003810 fi
3811 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003812 fi
3813fi # test "$curl"
3814
3815##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003816# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003817
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003818glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003819glib_modules=gthread-2.0
3820if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003821 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003822fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003823if test "$plugins" = yes; then
3824 glib_modules="$glib_modules gmodule-2.0"
3825fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003826
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003827# This workaround is required due to a bug in pkg-config file for glib as it
3828# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3829
Eric Blakee633a5c2019-02-04 20:39:37 -06003830if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003831 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3832fi
3833
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003834for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003835 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003836 glib_cflags=$($pkg_config --cflags $i)
3837 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003838 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003839 LIBS="$glib_libs $LIBS"
3840 libs_qga="$glib_libs $libs_qga"
3841 else
3842 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3843 fi
3844done
3845
Marc-André Lureauf876b762019-02-21 12:07:00 +01003846if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3847 gio=yes
3848 gio_cflags=$($pkg_config --cflags gio-2.0)
3849 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003850 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003851 if [ ! -x "$gdbus_codegen" ]; then
3852 gdbus_codegen=
3853 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003854else
3855 gio=no
3856fi
3857
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003858if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3859 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3860 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3861fi
3862
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003863# Sanity check that the current size_t matches the
3864# size that glib thinks it should be. This catches
3865# problems on multi-arch where people try to build
3866# 32-bit QEMU while pointing at 64-bit glib headers
3867cat > $TMPC <<EOF
3868#include <glib.h>
3869#include <unistd.h>
3870
3871#define QEMU_BUILD_BUG_ON(x) \
3872 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3873
3874int main(void) {
3875 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3876 return 0;
3877}
3878EOF
3879
Stefan Weil5919e032016-04-28 23:33:41 +02003880if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003881 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3882 "You probably need to set PKG_CONFIG_LIBDIR"\
3883 "to point to the right pkg-config files for your"\
3884 "build target"
3885fi
3886
John Snowbbbf2e02015-03-25 18:57:38 -04003887# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3888cat > $TMPC << EOF
3889#include <glib.h>
3890int main(void) { return 0; }
3891EOF
3892if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3893 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3894 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3895 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3896 fi
3897fi
3898
Eric Blake9bda6002020-03-17 12:55:34 -05003899# Silence clang warnings triggered by glib < 2.57.2
3900cat > $TMPC << EOF
3901#include <glib.h>
3902typedef struct Foo {
3903 int i;
3904} Foo;
3905static void foo_free(Foo *f)
3906{
3907 g_free(f);
3908}
3909G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3910int main(void) { return 0; }
3911EOF
3912if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3913 if cc_has_warning_flag "-Wno-unused-function"; then
3914 glib_cflags="$glib_cflags -Wno-unused-function"
3915 CFLAGS="$CFLAGS -Wno-unused-function"
3916 fi
3917fi
3918
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003919#########################################
3920# zlib check
3921
3922if test "$zlib" != "no" ; then
3923 if $pkg_config --exists zlib; then
3924 zlib_cflags=$($pkg_config --cflags zlib)
3925 zlib_libs=$($pkg_config --libs zlib)
3926 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3927 LIBS="$zlib_libs $LIBS"
3928 else
3929 cat > $TMPC << EOF
3930#include <zlib.h>
3931int main(void) { zlibVersion(); return 0; }
3932EOF
3933 if compile_prog "" "-lz" ; then
3934 LIBS="$LIBS -lz"
3935 else
3936 error_exit "zlib check failed" \
3937 "Make sure to have the zlib libs and headers installed."
3938 fi
3939 fi
3940fi
3941
Fam Zhenge26110c2014-02-10 14:48:57 +08003942##########################################
3943# SHA command probe for modules
3944if test "$modules" = yes; then
3945 shacmd_probe="sha1sum sha1 shasum"
3946 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003947 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003948 shacmd="$c"
3949 break
3950 fi
3951 done
3952 if test "$shacmd" = ""; then
3953 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3954 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003955fi
3956
3957##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003958# pixman support probe
3959
Eric Blakee633a5c2019-02-04 20:39:37 -06003960if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003961 pixman_cflags=
3962 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003963elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003964 pixman_cflags=$($pkg_config --cflags pixman-1)
3965 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003966else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003967 error_exit "pixman >= 0.21.8 not present." \
3968 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003969fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003970
3971##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003972# libmpathpersist probe
3973
3974if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003975 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003976 cat > $TMPC <<EOF
3977#include <libudev.h>
3978#include <mpath_persist.h>
3979unsigned mpath_mx_alloc_len = 1024;
3980int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003981static struct config *multipath_conf;
3982extern struct udev *udev;
3983extern struct config *get_multipath_config(void);
3984extern void put_multipath_config(struct config *conf);
3985struct udev *udev;
3986struct config *get_multipath_config(void) { return multipath_conf; }
3987void put_multipath_config(struct config *conf) { }
3988
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003989int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003990 udev = udev_new();
3991 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003992 return 0;
3993}
3994EOF
3995 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3996 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003997 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003998 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003999 # probe for the old API
4000 cat > $TMPC <<EOF
4001#include <libudev.h>
4002#include <mpath_persist.h>
4003unsigned mpath_mx_alloc_len = 1024;
4004int logsink;
4005int main(void) {
4006 struct udev *udev = udev_new();
4007 mpath_lib_init(udev);
4008 return 0;
4009}
4010EOF
4011 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4012 mpathpersist=yes
4013 mpathpersist_new_api=no
4014 else
4015 mpathpersist=no
4016 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02004017 fi
4018else
4019 mpathpersist=no
4020fi
4021
4022##########################################
aliguorie5d355d2009-04-24 18:03:15 +00004023# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04004024PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00004025
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02004026pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00004027cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00004028#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01004029static void *f(void *p) { return NULL; }
4030int main(void) {
4031 pthread_t thread;
4032 pthread_create(&thread, 0, f, 0);
4033 return 0;
4034}
blueswir1414f0da2008-08-15 18:20:52 +00004035EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02004036if compile_prog "" "" ; then
4037 pthread=yes
4038else
4039 for pthread_lib in $PTHREADLIBS_LIST; do
4040 if compile_prog "" "$pthread_lib" ; then
4041 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04004042 found=no
4043 for lib_entry in $LIBS; do
4044 if test "$lib_entry" = "$pthread_lib"; then
4045 found=yes
4046 break
4047 fi
4048 done
4049 if test "$found" = "no"; then
4050 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01004051 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04004052 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01004053 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02004054 break
4055 fi
4056 done
4057fi
blueswir1414f0da2008-08-15 18:20:52 +00004058
Eric Blakee633a5c2019-02-04 20:39:37 -06004059if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004060 error_exit "pthread check failed" \
4061 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00004062fi
4063
Roman Bolshakov479a5742018-12-17 23:26:01 +03004064# check for pthread_setname_np with thread id
4065pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004066cat > $TMPC << EOF
4067#include <pthread.h>
4068
4069static void *f(void *p) { return NULL; }
4070int main(void)
4071{
4072 pthread_t thread;
4073 pthread_create(&thread, 0, f, 0);
4074 pthread_setname_np(thread, "QEMU");
4075 return 0;
4076}
4077EOF
4078if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03004079 pthread_setname_np_w_tid=yes
4080fi
4081
4082# check for pthread_setname_np without thread id
4083pthread_setname_np_wo_tid=no
4084cat > $TMPC << EOF
4085#include <pthread.h>
4086
4087static void *f(void *p) { pthread_setname_np("QEMU"); }
4088int main(void)
4089{
4090 pthread_t thread;
4091 pthread_create(&thread, 0, f, 0);
4092 return 0;
4093}
4094EOF
4095if compile_prog "" "$pthread_lib" ; then
4096 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004097fi
4098
aliguoribf9298b2008-12-05 20:05:26 +00004099##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004100# rbd probe
4101if test "$rbd" != "no" ; then
4102 cat > $TMPC <<EOF
4103#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004104#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004105int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004106 rados_t cluster;
4107 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004108 return 0;
4109}
4110EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004111 rbd_libs="-lrbd -lrados"
4112 if compile_prog "" "$rbd_libs" ; then
4113 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004114 else
4115 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004116 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004117 fi
4118 rbd=no
4119 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004120fi
4121
4122##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004123# libssh probe
4124if test "$libssh" != "no" ; then
4125 if $pkg_config --exists libssh; then
4126 libssh_cflags=$($pkg_config libssh --cflags)
4127 libssh_libs=$($pkg_config libssh --libs)
4128 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004129 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004130 if test "$libssh" = "yes" ; then
4131 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004132 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004133 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004134 fi
4135fi
4136
4137##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004138# Check for libssh 0.8
4139# This is done like this instead of using the LIBSSH_VERSION_* and
4140# SSH_VERSION_* macros because some distributions in the past shipped
4141# snapshots of the future 0.8 from Git, and those snapshots did not
4142# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004143
Pino Toscanob10d49d2019-06-20 22:08:40 +02004144if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004145 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004146#include <libssh/libssh.h>
4147int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004148EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004149 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4150 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004151 fi
4152fi
4153
4154##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004155# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004156
4157if test "$linux_aio" != "no" ; then
4158 cat > $TMPC <<EOF
4159#include <libaio.h>
4160#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004161#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004162int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4163EOF
4164 if compile_prog "" "-laio" ; then
4165 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004166 else
4167 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004168 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004169 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004170 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004171 fi
4172fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004173##########################################
4174# linux-io-uring probe
4175
4176if test "$linux_io_uring" != "no" ; then
4177 if $pkg_config liburing; then
4178 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4179 linux_io_uring_libs=$($pkg_config --libs liburing)
4180 linux_io_uring=yes
Stefan Hajnoczi73fd2822020-03-05 17:08:04 +00004181
4182 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4183 # seen by programs linking the archive. It's not ideal, but just add the
4184 # library dependency globally.
4185 LIBS="$linux_io_uring_libs $LIBS"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004186 else
4187 if test "$linux_io_uring" = "yes" ; then
4188 feature_not_found "linux io_uring" "Install liburing devel"
4189 fi
4190 linux_io_uring=no
4191 fi
4192fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004193
4194##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004195# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004196
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004197if test "$tpm" = ""; then
4198 if test "$mingw32" = "yes"; then
4199 tpm=no
4200 else
4201 tpm=yes
4202 fi
4203elif test "$tpm" = "yes"; then
4204 if test "$mingw32" = "yes" ; then
4205 error_exit "TPM emulation only available on POSIX systems"
4206 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004207fi
4208
4209##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004210# attr probe
4211
4212if test "$attr" != "no" ; then
4213 cat > $TMPC <<EOF
4214#include <stdio.h>
4215#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004216#ifdef CONFIG_LIBATTR
4217#include <attr/xattr.h>
4218#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004219#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004220#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004221int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4222EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004223 if compile_prog "" "" ; then
4224 attr=yes
4225 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004226 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004227 attr=yes
4228 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004229 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004230 else
4231 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004232 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004233 fi
4234 attr=no
4235 fi
4236fi
4237
4238##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004239# iovec probe
4240cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004241#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004242#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004243#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004244int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004245EOF
4246iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004247if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004248 iovec=yes
4249fi
4250
aurel32f652e6a2008-12-16 10:43:48 +00004251##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004252# preadv probe
4253cat > $TMPC <<EOF
4254#include <sys/types.h>
4255#include <sys/uio.h>
4256#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004257int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004258EOF
4259preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004260if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004261 preadv=yes
4262fi
4263
4264##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004265# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004266# fdt support is mandatory for at least some target architectures,
4267# so insist on it if we're building those system emulators.
4268fdt_required=no
4269for target in $target_list; do
4270 case $target in
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08004271 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004272 fdt_required=yes
4273 ;;
4274 esac
4275done
4276
4277if test "$fdt_required" = "yes"; then
4278 if test "$fdt" = "no"; then
4279 error_exit "fdt disabled but some requested targets require it." \
4280 "You can turn off fdt only if you also disable all the system emulation" \
4281 "targets which need it (by specifying a cut down --target-list)."
4282 fi
4283 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004284elif test "$fdt" != "yes" ; then
4285 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004286fi
4287
Laurent Vivierd5999382019-06-21 15:05:44 +02004288# fdt is only required when building softmmu targets
4289if test -z "$fdt" -a "$softmmu" != "yes" ; then
4290 fdt="no"
4291fi
4292
Juan Quintela2df87df2009-08-12 18:29:54 +02004293if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004294 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004295 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004296 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004297 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004298#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004299#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004300int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004301EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004302 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004303 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004304 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004305 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004306 # have GIT checkout, so activate dtc submodule
4307 if test -e "${source_path}/.git" ; then
4308 git_submodules="${git_submodules} dtc"
4309 fi
4310 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004311 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004312 mkdir -p dtc
4313 if [ "$pwd_is_source_path" != "y" ] ; then
4314 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4315 symlink "$source_path/dtc/scripts" "dtc/scripts"
4316 fi
4317 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004318 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4319 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004320 elif test "$fdt" = "yes" ; then
4321 # Not a git build & no libfdt found, prompt for system install
4322 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4323 "Please install the DTC (libfdt) devel package"
4324 else
4325 # don't have and don't want
4326 fdt_libs=
4327 fdt=no
4328 fi
aurel32f652e6a2008-12-16 10:43:48 +00004329 fi
4330fi
4331
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004332libs_softmmu="$libs_softmmu $fdt_libs"
4333
Michael Walle20ff0752011-03-07 23:32:39 +01004334##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004335# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004336
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004337gbm="no"
4338if $pkg_config gbm; then
4339 gbm_cflags="$($pkg_config --cflags gbm)"
4340 gbm_libs="$($pkg_config --libs gbm)"
4341 gbm="yes"
4342fi
4343
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004344if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004345 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004346 if $pkg_config $opengl_pkgs; then
4347 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4348 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004349 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004350 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4351 gtk_gl="yes"
4352 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004353 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004354 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004355 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004356 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004357 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004358 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004359 opengl_libs=""
4360 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004361 fi
4362fi
4363
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004364if test "$opengl" = "yes"; then
4365 cat > $TMPC << EOF
4366#include <epoxy/egl.h>
4367#ifndef EGL_MESA_image_dma_buf_export
4368# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4369#endif
4370int main(void) { return 0; }
4371EOF
4372 if compile_prog "" "" ; then
4373 opengl_dmabuf=yes
4374 fi
4375fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004376
Eric Blakee633a5c2019-02-04 20:39:37 -06004377if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004378 for target in $target_list; do
4379 case $target in
4380 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4381 need_x11=yes
4382 ;;
4383 esac
4384 done
4385fi
4386
Klim Kireeved279a02018-01-12 12:01:19 +03004387##########################################
4388# libxml2 probe
4389if test "$libxml2" != "no" ; then
4390 if $pkg_config --exists libxml-2.0; then
4391 libxml2="yes"
4392 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4393 libxml2_libs=$($pkg_config --libs libxml-2.0)
4394 else
4395 if test "$libxml2" = "yes"; then
4396 feature_not_found "libxml2" "Install libxml2 devel"
4397 fi
4398 libxml2="no"
4399 fi
4400fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004401
Bharata B Raoeb100392012-09-24 14:42:45 +05304402##########################################
4403# glusterfs probe
4404if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004405 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304406 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004407 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4408 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004409 if $pkg_config --atleast-version=4 glusterfs-api; then
4410 glusterfs_xlator_opt="yes"
4411 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004412 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304413 glusterfs_discard="yes"
4414 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304415 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304416 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304417 glusterfs_zerofill="yes"
4418 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004419 cat > $TMPC << EOF
4420#include <glusterfs/api/glfs.h>
4421
4422int
4423main(void)
4424{
4425 /* new glfs_ftruncate() passes two additional args */
4426 return glfs_ftruncate(NULL, 0, NULL, NULL);
4427}
4428EOF
4429 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4430 glusterfs_ftruncate_has_stat="yes"
4431 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004432 cat > $TMPC << EOF
4433#include <glusterfs/api/glfs.h>
4434
4435/* new glfs_io_cbk() passes two additional glfs_stat structs */
4436static void
4437glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4438{}
4439
4440int
4441main(void)
4442{
4443 glfs_io_cbk iocb = &glusterfs_iocb;
4444 iocb(NULL, 0 , NULL, NULL, NULL);
4445 return 0;
4446}
4447EOF
4448 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4449 glusterfs_iocb_has_stat="yes"
4450 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304451 else
4452 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004453 feature_not_found "GlusterFS backend support" \
4454 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304455 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304456 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304457 fi
4458fi
4459
aurel3239386ac2009-04-15 19:48:17 +00004460# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004461# emulator. This is done because older glibc versions don't
4462# have syscall stubs for these implemented. In that case we
4463# don't provide them even if kernel supports them.
4464#
4465inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004466cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004467#include <sys/inotify.h>
4468
4469int
4470main(void)
4471{
4472 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004473 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004474}
4475EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004476if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004477 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004478fi
4479
Riku Voipioc05c7a72010-03-26 15:25:11 +00004480inotify1=no
4481cat > $TMPC << EOF
4482#include <sys/inotify.h>
4483
4484int
4485main(void)
4486{
4487 /* try to start inotify */
4488 return inotify_init1(0);
4489}
4490EOF
4491if compile_prog "" "" ; then
4492 inotify1=yes
4493fi
4494
Riku Voipio099d6b02009-05-05 12:10:04 +03004495# check if pipe2 is there
4496pipe2=no
4497cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004498#include <unistd.h>
4499#include <fcntl.h>
4500
4501int main(void)
4502{
4503 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004504 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004505}
4506EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004507if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004508 pipe2=yes
4509fi
4510
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004511# check if accept4 is there
4512accept4=no
4513cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004514#include <sys/socket.h>
4515#include <stddef.h>
4516
4517int main(void)
4518{
4519 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4520 return 0;
4521}
4522EOF
4523if compile_prog "" "" ; then
4524 accept4=yes
4525fi
4526
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304527# check if tee/splice is there. vmsplice was added same time.
4528splice=no
4529cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304530#include <unistd.h>
4531#include <fcntl.h>
4532#include <limits.h>
4533
4534int main(void)
4535{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004536 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304537 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4538 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4539 return 0;
4540}
4541EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004542if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304543 splice=yes
4544fi
4545
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004546##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004547# libnuma probe
4548
4549if test "$numa" != "no" ; then
4550 cat > $TMPC << EOF
4551#include <numa.h>
4552int main(void) { return numa_available(); }
4553EOF
4554
4555 if compile_prog "" "-lnuma" ; then
4556 numa=yes
4557 libs_softmmu="-lnuma $libs_softmmu"
4558 else
4559 if test "$numa" = "yes" ; then
4560 feature_not_found "numa" "install numactl devel"
4561 fi
4562 numa=no
4563 fi
4564fi
4565
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004566if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4567 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4568 exit 1
4569fi
4570
Yang Zhong5a22ab72017-12-20 21:16:46 +08004571# Even if malloc_trim() is available, these non-libc memory allocators
4572# do not support it.
4573if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4574 if test "$malloc_trim" = "yes" ; then
4575 echo "Disabling malloc_trim with non-libc memory allocator"
4576 fi
4577 malloc_trim="no"
4578fi
4579
4580#######################################
4581# malloc_trim
4582
4583if test "$malloc_trim" != "no" ; then
4584 cat > $TMPC << EOF
4585#include <malloc.h>
4586int main(void) { malloc_trim(0); return 0; }
4587EOF
4588 if compile_prog "" "" ; then
4589 malloc_trim="yes"
4590 else
4591 malloc_trim="no"
4592 fi
4593fi
4594
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004595##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004596# tcmalloc probe
4597
4598if test "$tcmalloc" = "yes" ; then
4599 cat > $TMPC << EOF
4600#include <stdlib.h>
Leonid Blochf2dfe542020-05-25 01:12:04 +03004601int main(void) {
4602 void *tmp = malloc(1);
4603 if (tmp != NULL) {
4604 return 0;
4605 }
4606 return 1;
4607}
Fam Zheng2847b462015-03-26 11:03:12 +08004608EOF
4609
4610 if compile_prog "" "-ltcmalloc" ; then
4611 LIBS="-ltcmalloc $LIBS"
4612 else
4613 feature_not_found "tcmalloc" "install gperftools devel"
4614 fi
4615fi
4616
4617##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004618# jemalloc probe
4619
4620if test "$jemalloc" = "yes" ; then
4621 cat > $TMPC << EOF
4622#include <stdlib.h>
Leonid Blochf2dfe542020-05-25 01:12:04 +03004623int main(void) {
4624 void *tmp = malloc(1);
4625 if (tmp != NULL) {
4626 return 0;
4627 }
4628 return 1;
4629}
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004630EOF
4631
4632 if compile_prog "" "-ljemalloc" ; then
4633 LIBS="-ljemalloc $LIBS"
4634 else
4635 feature_not_found "jemalloc" "install jemalloc devel"
4636 fi
4637fi
4638
4639##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004640# signalfd probe
4641signalfd="no"
4642cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004643#include <unistd.h>
4644#include <sys/syscall.h>
4645#include <signal.h>
4646int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4647EOF
4648
4649if compile_prog "" "" ; then
4650 signalfd=yes
4651fi
4652
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004653# check if optreset global is declared by <getopt.h>
4654optreset="no"
4655cat > $TMPC << EOF
4656#include <getopt.h>
4657int main(void) { return optreset; }
4658EOF
4659
4660if compile_prog "" "" ; then
4661 optreset=yes
4662fi
4663
Riku Voipioc2882b92009-08-12 15:08:24 +03004664# check if eventfd is supported
4665eventfd=no
4666cat > $TMPC << EOF
4667#include <sys/eventfd.h>
4668
4669int main(void)
4670{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004671 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004672}
4673EOF
4674if compile_prog "" "" ; then
4675 eventfd=yes
4676fi
4677
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004678# check if memfd is supported
4679memfd=no
4680cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004681#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004682
4683int main(void)
4684{
4685 return memfd_create("foo", MFD_ALLOW_SEALING);
4686}
4687EOF
4688if compile_prog "" "" ; then
4689 memfd=yes
4690fi
4691
Cortland Tölva955727d2018-10-08 09:35:19 -07004692# check for usbfs
4693have_usbfs=no
4694if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004695 cat > $TMPC << EOF
4696#include <linux/usbdevice_fs.h>
4697
4698#ifndef USBDEVFS_GET_CAPABILITIES
4699#error "USBDEVFS_GET_CAPABILITIES undefined"
4700#endif
4701
4702#ifndef USBDEVFS_DISCONNECT_CLAIM
4703#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4704#endif
4705
4706int main(void)
4707{
4708 return 0;
4709}
4710EOF
4711 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004712 have_usbfs=yes
4713 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004714fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004715
Ulrich Hechtd0927932009-09-17 20:22:14 +03004716# check for fallocate
4717fallocate=no
4718cat > $TMPC << EOF
4719#include <fcntl.h>
4720
4721int main(void)
4722{
4723 fallocate(0, 0, 0, 0);
4724 return 0;
4725}
4726EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004727if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004728 fallocate=yes
4729fi
4730
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004731# check for fallocate hole punching
4732fallocate_punch_hole=no
4733cat > $TMPC << EOF
4734#include <fcntl.h>
4735#include <linux/falloc.h>
4736
4737int main(void)
4738{
4739 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4740 return 0;
4741}
4742EOF
4743if compile_prog "" "" ; then
4744 fallocate_punch_hole=yes
4745fi
4746
Denis V. Lunevb953f072015-01-30 11:42:14 +03004747# check that fallocate supports range zeroing inside the file
4748fallocate_zero_range=no
4749cat > $TMPC << EOF
4750#include <fcntl.h>
4751#include <linux/falloc.h>
4752
4753int main(void)
4754{
4755 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4756 return 0;
4757}
4758EOF
4759if compile_prog "" "" ; then
4760 fallocate_zero_range=yes
4761fi
4762
Kevin Wolfed911432014-09-29 17:12:59 +02004763# check for posix_fallocate
4764posix_fallocate=no
4765cat > $TMPC << EOF
4766#include <fcntl.h>
4767
4768int main(void)
4769{
4770 posix_fallocate(0, 0, 0);
4771 return 0;
4772}
4773EOF
4774if compile_prog "" "" ; then
4775 posix_fallocate=yes
4776fi
4777
Peter Maydellc727f472011-01-06 11:05:10 +00004778# check for sync_file_range
4779sync_file_range=no
4780cat > $TMPC << EOF
4781#include <fcntl.h>
4782
4783int main(void)
4784{
4785 sync_file_range(0, 0, 0, 0);
4786 return 0;
4787}
4788EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004789if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004790 sync_file_range=yes
4791fi
4792
Peter Maydelldace20d2011-01-10 13:11:24 +00004793# check for linux/fiemap.h and FS_IOC_FIEMAP
4794fiemap=no
4795cat > $TMPC << EOF
4796#include <sys/ioctl.h>
4797#include <linux/fs.h>
4798#include <linux/fiemap.h>
4799
4800int main(void)
4801{
4802 ioctl(0, FS_IOC_FIEMAP, 0);
4803 return 0;
4804}
4805EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004806if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004807 fiemap=yes
4808fi
4809
Ulrich Hechtd0927932009-09-17 20:22:14 +03004810# check for dup3
4811dup3=no
4812cat > $TMPC << EOF
4813#include <unistd.h>
4814
4815int main(void)
4816{
4817 dup3(0, 0, 0);
4818 return 0;
4819}
4820EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004821if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004822 dup3=yes
4823fi
4824
Alex Bligh4e0c6522013-08-21 16:02:43 +01004825# check for ppoll support
4826ppoll=no
4827cat > $TMPC << EOF
4828#include <poll.h>
4829
4830int main(void)
4831{
4832 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4833 ppoll(&pfd, 1, 0, 0);
4834 return 0;
4835}
4836EOF
4837if compile_prog "" "" ; then
4838 ppoll=yes
4839fi
4840
Alex Blighcd758dd2013-08-21 16:02:44 +01004841# check for prctl(PR_SET_TIMERSLACK , ... ) support
4842prctl_pr_set_timerslack=no
4843cat > $TMPC << EOF
4844#include <sys/prctl.h>
4845
4846int main(void)
4847{
4848 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4849 return 0;
4850}
4851EOF
4852if compile_prog "" "" ; then
4853 prctl_pr_set_timerslack=yes
4854fi
4855
Peter Maydell3b6edd12011-02-15 18:35:05 +00004856# check for epoll support
4857epoll=no
4858cat > $TMPC << EOF
4859#include <sys/epoll.h>
4860
4861int main(void)
4862{
4863 epoll_create(0);
4864 return 0;
4865}
4866EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004867if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004868 epoll=yes
4869fi
4870
Peter Maydell227f0212016-06-06 19:58:11 +01004871# epoll_create1 is a later addition
4872# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004873epoll_create1=no
4874cat > $TMPC << EOF
4875#include <sys/epoll.h>
4876
4877int main(void)
4878{
Peter Maydell19e83f62011-04-26 16:56:40 +01004879 /* Note that we use epoll_create1 as a value, not as
4880 * a function being called. This is necessary so that on
4881 * old SPARC glibc versions where the function was present in
4882 * the library but not declared in the header file we will
4883 * fail the configure check. (Otherwise we will get a compiler
4884 * warning but not an error, and will proceed to fail the
4885 * qemu compile where we compile with -Werror.)
4886 */
Blue Swirlc075a722012-08-09 20:21:25 +00004887 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004888}
4889EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004890if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004891 epoll_create1=yes
4892fi
4893
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004894# check for sendfile support
4895sendfile=no
4896cat > $TMPC << EOF
4897#include <sys/sendfile.h>
4898
4899int main(void)
4900{
4901 return sendfile(0, 0, 0, 0);
4902}
4903EOF
4904if compile_prog "" "" ; then
4905 sendfile=yes
4906fi
4907
Riku Voipio51834342014-06-22 11:25:42 +01004908# check for timerfd support (glibc 2.8 and newer)
4909timerfd=no
4910cat > $TMPC << EOF
4911#include <sys/timerfd.h>
4912
4913int main(void)
4914{
4915 return(timerfd_create(CLOCK_REALTIME, 0));
4916}
4917EOF
4918if compile_prog "" "" ; then
4919 timerfd=yes
4920fi
4921
Riku Voipio9af5c902014-08-12 15:58:57 +03004922# check for setns and unshare support
4923setns=no
4924cat > $TMPC << EOF
4925#include <sched.h>
4926
4927int main(void)
4928{
4929 int ret;
4930 ret = setns(0, 0);
4931 ret = unshare(0);
4932 return ret;
4933}
4934EOF
4935if compile_prog "" "" ; then
4936 setns=yes
4937fi
4938
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004939# clock_adjtime probe
4940clock_adjtime=no
4941cat > $TMPC <<EOF
4942#include <time.h>
4943
4944int main(void)
4945{
4946 return clock_adjtime(0, 0);
4947}
4948EOF
4949clock_adjtime=no
4950if compile_prog "" "" ; then
4951 clock_adjtime=yes
4952fi
4953
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004954# syncfs probe
4955syncfs=no
4956cat > $TMPC <<EOF
4957#include <unistd.h>
4958
4959int main(void)
4960{
4961 return syncfs(0);
4962}
4963EOF
4964syncfs=no
4965if compile_prog "" "" ; then
4966 syncfs=yes
4967fi
4968
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004969# check for kcov support (kernel must be 4.4+, compiled with certain options)
4970kcov=no
4971if check_include sys/kcov.h ; then
4972 kcov=yes
4973fi
4974
Peter Maydell516e8b72020-04-11 19:29:32 +01004975# If we're making warnings fatal, apply this to Sphinx runs as well
4976sphinx_werror=""
4977if test "$werror" = "yes"; then
4978 sphinx_werror="-W"
4979fi
4980
Peter Maydell5f71eac2019-03-07 14:26:46 +00004981# Check we have a new enough version of sphinx-build
4982has_sphinx_build() {
4983 # This is a bit awkward but works: create a trivial document and
4984 # try to run it with our configuration file (which enforces a
4985 # version requirement). This will fail if either
4986 # sphinx-build doesn't exist at all or if it is too old.
4987 mkdir -p "$TMPDIR1/sphinx"
4988 touch "$TMPDIR1/sphinx/index.rst"
Alex Bennée988ae6c2020-04-14 21:06:21 +01004989 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
4990 -b html "$TMPDIR1/sphinx" \
4991 "$TMPDIR1/sphinx/out" >> config.log 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004992}
4993
pbrookcc8ae6d2006-04-23 17:57:59 +00004994# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004995if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004996 if has_sphinx_build; then
4997 sphinx_ok=yes
4998 else
4999 sphinx_ok=no
5000 fi
5001 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02005002 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02005003 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02005004 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00005005 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
5006 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
5007 fi
5008 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02005009 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02005010 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02005011 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00005012fi
5013
Stefan Weilf514f412009-10-11 12:44:07 +02005014# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005015byteswap_h=no
5016cat > $TMPC << EOF
5017#include <byteswap.h>
5018int main(void) { return bswap_32(0); }
5019EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02005020if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005021 byteswap_h=yes
5022fi
5023
Stefan Weil75f13592013-01-05 12:17:38 +01005024# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005025bswap_h=no
5026cat > $TMPC << EOF
5027#include <sys/endian.h>
5028#include <sys/types.h>
5029#include <machine/bswap.h>
5030int main(void) { return bswap32(0); }
5031EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02005032if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005033 bswap_h=yes
5034fi
5035
aliguorida93a1f2008-12-12 20:02:52 +00005036##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02005037# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005038if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02005039 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01005040 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005041 libiscsi_cflags=$($pkg_config --cflags libiscsi)
5042 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005043 else
5044 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02005045 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005046 fi
5047 libiscsi="no"
5048 fi
5049fi
5050
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005051##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00005052# Do we need libm
5053cat > $TMPC << EOF
5054#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10005055int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00005056EOF
5057if compile_prog "" "" ; then
5058 :
5059elif compile_prog "" "-lm" ; then
5060 LIBS="-lm $LIBS"
5061 libs_qga="-lm $libs_qga"
5062else
Peter Maydell76ad07a2013-04-08 12:11:26 +01005063 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00005064fi
5065
5066##########################################
aliguorida93a1f2008-12-12 20:02:52 +00005067# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00005068# uClibc provides 2 versions of clock_gettime(), one with realtime
5069# support and one without. This means that the clock_gettime() don't
5070# need -lrt. We still need it for timer_create() so we check for this
5071# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00005072cat > $TMPC <<EOF
5073#include <signal.h>
5074#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00005075int main(void) {
5076 timer_create(CLOCK_REALTIME, NULL, NULL);
5077 return clock_gettime(CLOCK_REALTIME, NULL);
5078}
aliguorida93a1f2008-12-12 20:02:52 +00005079EOF
5080
Juan Quintela52166aa2009-08-03 14:46:03 +02005081if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02005082 :
Natanael Copa8bacde82012-09-12 09:06:51 +00005083# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07005084elif compile_prog "" "$pthread_lib -lrt" ; then
5085 LIBS="$LIBS -lrt"
5086 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00005087fi
5088
Thomas Huthd99e97e2019-01-17 18:14:08 +01005089# Check whether we need to link libutil for openpty()
5090cat > $TMPC << EOF
5091extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5092int main(void) { return openpty(0, 0, 0, 0, 0); }
5093EOF
5094
5095if ! compile_prog "" "" ; then
5096 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02005097 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01005098 libs_tools="-lutil $libs_tools"
5099 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005100fi
5101
Blue Swirlde5071c2009-09-12 09:58:46 +00005102##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005103# spice probe
5104if test "$spice" != "no" ; then
5105 cat > $TMPC << EOF
5106#include <spice.h>
5107int main(void) { spice_server_new(); return 0; }
5108EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005109 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5110 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005111 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005112 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005113 compile_prog "$spice_cflags" "$spice_libs" ; then
5114 spice="yes"
5115 libs_softmmu="$libs_softmmu $spice_libs"
5116 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005117 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5118 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005119 else
5120 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005121 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005122 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005123 fi
5124 spice="no"
5125 fi
5126fi
5127
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005128# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005129if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005130 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005131 libcacard_cflags=$($pkg_config --cflags libcacard)
5132 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005133 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005134 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005135 if test "$smartcard" = "yes"; then
5136 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005137 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005138 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005139 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005140fi
5141
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005142# check for libusb
5143if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005144 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005145 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005146 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5147 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005148 else
5149 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005150 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005151 fi
5152 libusb="no"
5153 fi
5154fi
5155
Hans de Goede69354a82011-07-19 11:04:10 +02005156# check for usbredirparser for usb network redirection support
5157if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005158 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005159 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005160 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5161 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005162 else
5163 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005164 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005165 fi
5166 usb_redir="no"
5167 fi
5168fi
5169
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005170##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005171# check if we have VSS SDK headers for win
5172
Eric Blakee633a5c2019-02-04 20:39:37 -06005173if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5174 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005175 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005176 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005177 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5178 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005179 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005180 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5181 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005182 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005183 esac
5184 cat > $TMPC << EOF
5185#define __MIDL_user_allocate_free_DEFINED__
5186#include <inc/win2003/vss.h>
5187int main(void) { return VSS_CTX_BACKUP; }
5188EOF
5189 if compile_prog "$vss_win32_include" "" ; then
5190 guest_agent_with_vss="yes"
5191 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005192 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005193 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005194 else
5195 if test "$vss_win32_sdk" != "" ; then
5196 echo "ERROR: Please download and install Microsoft VSS SDK:"
5197 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5198 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5199 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5200 echo "ERROR: The headers are extracted in the directory \`inc'."
5201 feature_not_found "VSS support"
5202 fi
5203 guest_agent_with_vss="no"
5204 fi
5205fi
5206
5207##########################################
5208# lookup Windows platform SDK (if not specified)
5209# The SDK is needed only to build .tlb (type library) file of guest agent
5210# VSS provider from the source. It is usually unnecessary because the
5211# pre-compiled .tlb file is included.
5212
Eric Blakee633a5c2019-02-04 20:39:37 -06005213if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5214 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005215 if test -z "$win_sdk"; then
5216 programfiles="$PROGRAMFILES"
5217 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5218 if test -n "$programfiles"; then
5219 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5220 else
5221 feature_not_found "Windows SDK"
5222 fi
5223 elif test "$win_sdk" = "no"; then
5224 win_sdk=""
5225 fi
5226fi
5227
5228##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005229# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005230if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005231 cat > $TMPC << EOF
5232#include <windows.h>
5233#include <ntddscsi.h>
5234int main(void) {
5235#if !defined(IOCTL_SCSI_GET_ADDRESS)
5236#error Missing required ioctl definitions
5237#endif
5238 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5239 return addr.Lun;
5240}
5241EOF
5242 if compile_prog "" "" ; then
5243 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005244 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005245 fi
5246fi
5247
5248##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005249# virgl renderer probe
5250
5251if test "$virglrenderer" != "no" ; then
5252 cat > $TMPC << EOF
5253#include <virglrenderer.h>
5254int main(void) { virgl_renderer_poll(); return 0; }
5255EOF
5256 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5257 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005258 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005259 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5260 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5261 virglrenderer="yes"
5262 else
5263 if test "$virglrenderer" = "yes" ; then
5264 feature_not_found "virglrenderer"
5265 fi
5266 virglrenderer="no"
5267 fi
5268fi
5269
5270##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005271# capstone
5272
Richard Hendersone219c492017-09-28 09:01:23 -07005273case "$capstone" in
5274 "" | yes)
5275 if $pkg_config capstone; then
5276 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005277 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005278 capstone=git
5279 elif test -e "${source_path}/capstone/Makefile" ; then
5280 capstone=internal
5281 elif test -z "$capstone" ; then
5282 capstone=no
5283 else
5284 feature_not_found "capstone" "Install capstone devel or git submodule"
5285 fi
5286 ;;
5287
5288 system)
5289 if ! $pkg_config capstone; then
5290 feature_not_found "capstone" "Install capstone devel"
5291 fi
5292 ;;
5293esac
5294
5295case "$capstone" in
5296 git | internal)
5297 if test "$capstone" = git; then
5298 git_submodules="${git_submodules} capstone"
5299 fi
5300 mkdir -p capstone
5301 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5302 if test "$mingw32" = "yes"; then
5303 LIBCAPSTONE=capstone.lib
5304 else
5305 LIBCAPSTONE=libcapstone.a
5306 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005307 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005308 ;;
5309
5310 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005311 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005312 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005313 ;;
5314
5315 no)
5316 ;;
5317 *)
5318 error_exit "Unknown state for capstone: $capstone"
5319 ;;
5320esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005321
5322##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005323# check if we have fdatasync
5324
5325fdatasync=no
5326cat > $TMPC << EOF
5327#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005328int main(void) {
5329#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5330return fdatasync(0);
5331#else
Stefan Weile172fe12012-04-06 21:33:20 +02005332#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005333#endif
5334}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005335EOF
5336if compile_prog "" "" ; then
5337 fdatasync=yes
5338fi
5339
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005340##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005341# check if we have madvise
5342
5343madvise=no
5344cat > $TMPC << EOF
5345#include <sys/types.h>
5346#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005347#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005348int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5349EOF
5350if compile_prog "" "" ; then
5351 madvise=yes
5352fi
5353
5354##########################################
5355# check if we have posix_madvise
5356
5357posix_madvise=no
5358cat > $TMPC << EOF
5359#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005360#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005361int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5362EOF
5363if compile_prog "" "" ; then
5364 posix_madvise=yes
5365fi
5366
5367##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005368# check if we have posix_memalign()
5369
5370posix_memalign=no
5371cat > $TMPC << EOF
5372#include <stdlib.h>
5373int main(void) {
5374 void *p;
5375 return posix_memalign(&p, 8, 8);
5376}
5377EOF
5378if compile_prog "" "" ; then
5379 posix_memalign=yes
5380fi
5381
5382##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005383# check if we have posix_syslog
5384
5385posix_syslog=no
5386cat > $TMPC << EOF
5387#include <syslog.h>
5388int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5389EOF
5390if compile_prog "" "" ; then
5391 posix_syslog=yes
5392fi
5393
5394##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005395# check if we have sem_timedwait
5396
5397sem_timedwait=no
5398cat > $TMPC << EOF
5399#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005400int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005401EOF
5402if compile_prog "" "" ; then
5403 sem_timedwait=yes
5404fi
5405
5406##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005407# check if we have strchrnul
5408
5409strchrnul=no
5410cat > $TMPC << EOF
5411#include <string.h>
5412int main(void);
5413// Use a haystack that the compiler shouldn't be able to constant fold
5414char *haystack = (char*)&main;
5415int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5416EOF
5417if compile_prog "" "" ; then
5418 strchrnul=yes
5419fi
5420
Jiufei Xue8a792b02019-04-17 03:08:56 +08005421#########################################
5422# check if we have st_atim
5423
5424st_atim=no
5425cat > $TMPC << EOF
5426#include <sys/stat.h>
5427#include <stddef.h>
5428int main(void) { return offsetof(struct stat, st_atim); }
5429EOF
5430if compile_prog "" "" ; then
5431 st_atim=yes
5432fi
5433
Keno Fischer5c99fa32018-06-29 12:32:10 +02005434##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005435# check if trace backend exists
5436
Lluís Vilanova5b808272014-05-27 15:02:14 +02005437$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005438if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005439 error_exit "invalid trace backends" \
5440 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005441fi
5442
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005443##########################################
5444# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005445if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005446 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005447#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005448int main(void) { return 0; }
5449EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005450 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005451 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005452 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005453 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005454 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005455 fi
5456 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005457 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005458 else
5459 urcu_bp_libs="-lurcu-bp"
5460 fi
5461
5462 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5463 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005464 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005465 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005466 fi
5467fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005468
5469##########################################
5470# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005471if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005472 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005473 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005474 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005475 trace_backend_stap="no"
5476 if has 'stap' ; then
5477 trace_backend_stap="yes"
5478 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005479fi
5480
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005481##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005482# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305483
Peter Maydell7c2acc72013-04-08 12:11:27 +01005484# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005485# is sigcontext. On Windows the only valid backend is the Windows
5486# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005487
5488ucontext_works=no
5489if test "$darwin" != "yes"; then
5490 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305491#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005492#ifdef __stub_makecontext
5493#error Ignoring glibc stub makecontext which will always fail
5494#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005495int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305496EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005497 if compile_prog "" "" ; then
5498 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305499 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005500fi
5501
5502if test "$coroutine" = ""; then
5503 if test "$mingw32" = "yes"; then
5504 coroutine=win32
5505 elif test "$ucontext_works" = "yes"; then
5506 coroutine=ucontext
5507 else
5508 coroutine=sigaltstack
5509 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005510else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005511 case $coroutine in
5512 windows)
5513 if test "$mingw32" != "yes"; then
5514 error_exit "'windows' coroutine backend only valid for Windows"
5515 fi
5516 # Unfortunately the user visible backend name doesn't match the
5517 # coroutine-*.c filename for this case, so we have to adjust it here.
5518 coroutine=win32
5519 ;;
5520 ucontext)
5521 if test "$ucontext_works" != "yes"; then
5522 feature_not_found "ucontext"
5523 fi
5524 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005525 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005526 if test "$mingw32" = "yes"; then
5527 error_exit "only the 'windows' coroutine backend is valid for Windows"
5528 fi
5529 ;;
5530 *)
5531 error_exit "unknown coroutine backend $coroutine"
5532 ;;
5533 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305534fi
5535
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005536if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005537 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005538fi
5539
Peter Lieven7d992e42016-09-27 11:58:45 +02005540if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005541 if test "$coroutine_pool" = "yes"; then
5542 echo "WARN: disabling coroutine pool for stack usage debugging"
5543 coroutine_pool=no
5544 fi
5545fi
5546
5547
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305548##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305549# check if we have open_by_handle_at
5550
Stefan Weil4e1797f2012-06-18 22:11:06 +02005551open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305552cat > $TMPC << EOF
5553#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005554#if !defined(AT_EMPTY_PATH)
5555# error missing definition
5556#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005557int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005558#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305559EOF
5560if compile_prog "" "" ; then
5561 open_by_handle_at=yes
5562fi
5563
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305564########################################
5565# check if we have linux/magic.h
5566
5567linux_magic_h=no
5568cat > $TMPC << EOF
5569#include <linux/magic.h>
5570int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005571 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305572}
5573EOF
5574if compile_prog "" "" ; then
5575 linux_magic_h=yes
5576fi
5577
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005578########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005579# check whether we can disable warning option with a pragma (this is needed
5580# to silence warnings in the headers of some versions of external libraries).
5581# This test has to be compiled with -Werror as otherwise an unknown pragma is
5582# only a warning.
5583#
5584# If we can't selectively disable warning in the code, disable -Werror so that
5585# the build doesn't fail anyway.
5586
Peter Maydell06d71fa2012-07-30 16:13:07 +01005587pragma_disable_unused_but_set=no
5588cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005589#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005590#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005591#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005592
Peter Maydell06d71fa2012-07-30 16:13:07 +01005593int main(void) {
5594 return 0;
5595}
5596EOF
5597if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005598 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005599else
5600 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005601fi
5602
5603########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005604# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005605
5606valgrind_h=no
5607cat > $TMPC << EOF
5608#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005609int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005610 return 0;
5611}
5612EOF
5613if compile_prog "" "" ; then
5614 valgrind_h=yes
5615fi
5616
5617########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005618# check if environ is declared
5619
5620has_environ=no
5621cat > $TMPC << EOF
5622#include <unistd.h>
5623int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005624 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005625 return 0;
5626}
5627EOF
5628if compile_prog "" "" ; then
5629 has_environ=yes
5630fi
5631
Richard Henderson76a347e2012-12-28 14:17:02 -08005632########################################
5633# check if cpuid.h is usable.
5634
Richard Henderson76a347e2012-12-28 14:17:02 -08005635cat > $TMPC << EOF
5636#include <cpuid.h>
5637int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005638 unsigned a, b, c, d;
5639 int max = __get_cpuid_max(0, 0);
5640
5641 if (max >= 1) {
5642 __cpuid(1, a, b, c, d);
5643 }
5644
5645 if (max >= 7) {
5646 __cpuid_count(7, 0, a, b, c, d);
5647 }
5648
5649 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005650}
5651EOF
5652if compile_prog "" "" ; then
5653 cpuid_h=yes
5654fi
5655
Richard Henderson5dd89902017-07-18 18:40:18 -10005656##########################################
5657# avx2 optimization requirement check
5658#
5659# There is no point enabling this if cpuid.h is not usable,
5660# since we won't be able to select the new routines.
5661
Eric Blakee633a5c2019-02-04 20:39:37 -06005662if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005663 cat > $TMPC << EOF
5664#pragma GCC push_options
5665#pragma GCC target("avx2")
5666#include <cpuid.h>
5667#include <immintrin.h>
5668static int bar(void *a) {
5669 __m256i x = *(__m256i *)a;
5670 return _mm256_testz_si256(x, x);
5671}
5672int main(int argc, char *argv[]) { return bar(argv[0]); }
5673EOF
5674 if compile_object "" ; then
5675 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005676 else
5677 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005678 fi
5679fi
5680
Robert Hoo6b8cd442020-02-29 20:34:34 +08005681##########################################
5682# avx512f optimization requirement check
5683#
5684# There is no point enabling this if cpuid.h is not usable,
5685# since we won't be able to select the new routines.
5686# by default, it is turned off.
5687# if user explicitly want to enable it, check environment
5688
5689if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5690 cat > $TMPC << EOF
5691#pragma GCC push_options
5692#pragma GCC target("avx512f")
5693#include <cpuid.h>
5694#include <immintrin.h>
5695static int bar(void *a) {
5696 __m512i x = *(__m512i *)a;
5697 return _mm512_test_epi64_mask(x, x);
5698}
5699int main(int argc, char *argv[])
5700{
5701 return bar(argv[0]);
5702}
5703EOF
5704 if ! compile_object "" ; then
5705 avx512f_opt="no"
5706 fi
5707else
5708 avx512f_opt="no"
5709fi
5710
Richard Hendersonf5401662013-02-16 12:46:59 -08005711########################################
5712# check if __[u]int128_t is usable.
5713
5714int128=no
5715cat > $TMPC << EOF
5716__int128_t a;
5717__uint128_t b;
5718int main (void) {
5719 a = a + b;
5720 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005721 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005722 return 0;
5723}
5724EOF
5725if compile_prog "" "" ; then
5726 int128=yes
5727fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005728
Richard Henderson7ebee432016-06-29 21:10:59 -07005729#########################################
5730# See if 128-bit atomic operations are supported.
5731
5732atomic128=no
5733if test "$int128" = "yes"; then
5734 cat > $TMPC << EOF
5735int main(void)
5736{
5737 unsigned __int128 x = 0, y = 0;
5738 y = __atomic_load_16(&x, 0);
5739 __atomic_store_16(&x, y, 0);
5740 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5741 return 0;
5742}
5743EOF
5744 if compile_prog "" "" ; then
5745 atomic128=yes
5746 fi
5747fi
5748
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005749cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005750if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005751 cat > $TMPC << EOF
5752int main(void)
5753{
5754 unsigned __int128 x = 0, y = 0;
5755 __sync_val_compare_and_swap_16(&x, y, x);
5756 return 0;
5757}
5758EOF
5759 if compile_prog "" "" ; then
5760 cmpxchg128=yes
5761 fi
5762fi
5763
Richard Hendersondf79b992016-09-02 12:23:57 -07005764#########################################
5765# See if 64-bit atomic operations are supported.
5766# Note that without __atomic builtins, we can only
5767# assume atomic loads/stores max at pointer size.
5768
5769cat > $TMPC << EOF
5770#include <stdint.h>
5771int main(void)
5772{
5773 uint64_t x = 0, y = 0;
5774#ifdef __ATOMIC_RELAXED
5775 y = __atomic_load_8(&x, 0);
5776 __atomic_store_8(&x, y, 0);
5777 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5778 __atomic_exchange_8(&x, y, 0);
5779 __atomic_fetch_add_8(&x, y, 0);
5780#else
5781 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5782 __sync_lock_test_and_set(&x, y);
5783 __sync_val_compare_and_swap(&x, y, 0);
5784 __sync_fetch_and_add(&x, y);
5785#endif
5786 return 0;
5787}
5788EOF
5789if compile_prog "" "" ; then
5790 atomic64=yes
5791fi
5792
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005793#########################################
5794# See if --dynamic-list is supported by the linker
5795ld_dynamic_list="no"
5796if test "$static" = "no" ; then
5797 cat > $TMPTXT <<EOF
5798{
5799 foo;
5800};
5801EOF
5802
5803 cat > $TMPC <<EOF
5804#include <stdio.h>
5805void foo(void);
5806
5807void foo(void)
5808{
5809 printf("foo\n");
5810}
5811
5812int main(void)
5813{
5814 foo();
5815 return 0;
5816}
5817EOF
5818
5819 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5820 ld_dynamic_list="yes"
5821 fi
5822fi
5823
5824#########################################
5825# See if -exported_symbols_list is supported by the linker
5826
5827ld_exported_symbols_list="no"
5828if test "$static" = "no" ; then
5829 cat > $TMPTXT <<EOF
5830 _foo
5831EOF
5832
5833 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5834 ld_exported_symbols_list="yes"
5835 fi
5836fi
5837
5838if test "$plugins" = "yes" &&
5839 test "$ld_dynamic_list" = "no" &&
5840 test "$ld_exported_symbols_list" = "no" ; then
5841 error_exit \
5842 "Plugin support requires dynamic linking and specifying a set of symbols " \
5843 "that are exported to plugins. Unfortunately your linker doesn't " \
5844 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5845 "for this purpose. You can't build with --static."
5846fi
5847
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005848########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005849# See if __attribute__((alias)) is supported.
5850# This false for Xcode 9, but has been remedied for Xcode 10.
5851# Unfortunately, travis uses Xcode 9 by default.
5852
5853attralias=no
5854cat > $TMPC << EOF
5855int x = 1;
5856extern const int y __attribute__((alias("x")));
5857int main(void) { return 0; }
5858EOF
5859if compile_prog "" "" ; then
5860 attralias=yes
5861fi
5862
5863########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005864# check if getauxval is available.
5865
5866getauxval=no
5867cat > $TMPC << EOF
5868#include <sys/auxv.h>
5869int main(void) {
5870 return getauxval(AT_HWCAP) == 0;
5871}
5872EOF
5873if compile_prog "" "" ; then
5874 getauxval=yes
5875fi
5876
John Snowfd0e6052015-03-25 18:57:39 -04005877########################################
5878# check if ccache is interfering with
5879# semantic analysis of macros
5880
John Snow5e4dfd32015-10-28 13:56:40 -04005881unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005882ccache_cpp2=no
5883cat > $TMPC << EOF
5884static const int Z = 1;
5885#define fn() ({ Z; })
5886#define TAUT(X) ((X) == Z)
5887#define PAREN(X, Y) (X == Y)
5888#define ID(X) (X)
5889int main(int argc, char *argv[])
5890{
5891 int x = 0, y = 0;
5892 x = ID(x);
5893 x = fn();
5894 fn();
5895 if (PAREN(x, y)) return 0;
5896 if (TAUT(Z)) return 0;
5897 return 0;
5898}
5899EOF
5900
5901if ! compile_object "-Werror"; then
5902 ccache_cpp2=yes
5903fi
5904
John Snowb553a042015-11-03 15:43:42 -05005905#################################################
5906# clang does not support glibc + FORTIFY_SOURCE.
5907
5908if test "$fortify_source" != "no"; then
5909 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5910 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005911 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005912 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005913 fortify_source="no";
5914 else
5915 fortify_source="yes"
5916 fi
5917fi
5918
Fam Zheng1efad062018-06-01 17:26:43 +08005919###############################################
5920# Check if copy_file_range is provided by glibc
5921have_copy_file_range=no
5922cat > $TMPC << EOF
5923#include <unistd.h>
5924int main(void) {
5925 copy_file_range(0, NULL, 0, NULL, 0, 0);
5926 return 0;
5927}
5928EOF
5929if compile_prog "" "" ; then
5930 have_copy_file_range=yes
5931fi
5932
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305933##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005934# check if struct fsxattr is available via linux/fs.h
5935
5936have_fsxattr=no
5937cat > $TMPC << EOF
5938#include <linux/fs.h>
5939struct fsxattr foo;
5940int main(void) {
5941 return 0;
5942}
5943EOF
5944if compile_prog "" "" ; then
5945 have_fsxattr=yes
5946fi
5947
Peter Maydellb66e10e2016-06-08 18:34:32 +01005948##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005949# check for usable membarrier system call
5950if test "$membarrier" = "yes"; then
5951 have_membarrier=no
5952 if test "$mingw32" = "yes" ; then
5953 have_membarrier=yes
5954 elif test "$linux" = "yes" ; then
5955 cat > $TMPC << EOF
5956 #include <linux/membarrier.h>
5957 #include <sys/syscall.h>
5958 #include <unistd.h>
5959 #include <stdlib.h>
5960 int main(void) {
5961 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5962 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5963 exit(0);
5964 }
5965EOF
5966 if compile_prog "" "" ; then
5967 have_membarrier=yes
5968 fi
5969 fi
5970 if test "$have_membarrier" = "no"; then
5971 feature_not_found "membarrier" "membarrier system call not available"
5972 fi
5973else
5974 # Do not enable it by default even for Mingw32, because it doesn't
5975 # work on Wine.
5976 membarrier=no
5977fi
5978
5979##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005980# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005981have_rtnetlink=no
5982cat > $TMPC << EOF
5983#include <linux/rtnetlink.h>
5984int main(void) {
5985 return IFLA_PROTO_DOWN;
5986}
5987EOF
5988if compile_prog "" "" ; then
5989 have_rtnetlink=yes
5990fi
5991
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005992##########################################
5993# check for usable AF_VSOCK environment
5994have_af_vsock=no
5995cat > $TMPC << EOF
5996#include <errno.h>
5997#include <sys/types.h>
5998#include <sys/socket.h>
5999#if !defined(AF_VSOCK)
6000# error missing AF_VSOCK flag
6001#endif
6002#include <linux/vm_sockets.h>
6003int main(void) {
6004 int sock, ret;
6005 struct sockaddr_vm svm;
6006 socklen_t len = sizeof(svm);
6007 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
6008 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
6009 if ((ret == -1) && (errno == ENOTCONN)) {
6010 return 0;
6011 }
6012 return -1;
6013}
6014EOF
6015if compile_prog "" "" ; then
6016 have_af_vsock=yes
6017fi
6018
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006019##########################################
6020# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01006021have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006022cat > $TMPC << EOF
6023#include <errno.h>
6024#include <sys/types.h>
6025#include <sys/socket.h>
6026#include <linux/if_alg.h>
6027int main(void) {
6028 int sock;
6029 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6030 return sock;
6031}
6032EOF
6033if compile_prog "" "" ; then
6034 have_afalg=yes
6035fi
6036if test "$crypto_afalg" = "yes"
6037then
6038 if test "$have_afalg" != "yes"
6039 then
6040 error_exit "AF_ALG requested but could not be detected"
6041 fi
6042fi
6043
6044
James Clarke6969ec62016-06-06 12:02:50 +01006045#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006046# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00006047if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006048 cat > $TMPC << EOF
6049#include <Hypervisor/hv.h>
6050int main() { return 0;}
6051EOF
6052 if ! compile_object ""; then
6053 hvf='no'
6054 else
6055 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006056 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006057 fi
6058fi
6059
6060#################################################
James Clarke6969ec62016-06-06 12:02:50 +01006061# Sparc implicitly links with --relax, which is
6062# incompatible with -r, so --no-relax should be
6063# given. It does no harm to give it on other
6064# platforms too.
6065
6066# Note: the prototype is needed since QEMU_CFLAGS
6067# contains -Wmissing-prototypes
6068cat > $TMPC << EOF
6069extern int foo(void);
6070int foo(void) { return 0; }
6071EOF
6072if ! compile_object ""; then
6073 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6074fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01006075for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6076 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6077 LD_REL_FLAGS=$i
6078 break
6079 fi
6080done
6081if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6082 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006083fi
6084
Jan Vesely277abf12016-04-29 13:15:23 -04006085##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006086# check for sysmacros.h
6087
6088have_sysmacros=no
6089cat > $TMPC << EOF
6090#include <sys/sysmacros.h>
6091int main(void) {
6092 return makedev(0, 0);
6093}
6094EOF
6095if compile_prog "" "" ; then
6096 have_sysmacros=yes
6097fi
6098
6099##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006100# Veritas HyperScale block driver VxHS
6101# Check if libvxhs is installed
6102
6103if test "$vxhs" != "no" ; then
6104 cat > $TMPC <<EOF
6105#include <stdint.h>
6106#include <qnio/qnio_api.h>
6107
6108void *vxhs_callback;
6109
6110int main(void) {
6111 iio_init(QNIO_VERSION, vxhs_callback);
6112 return 0;
6113}
6114EOF
6115 vxhs_libs="-lvxhs -lssl"
6116 if compile_prog "" "$vxhs_libs" ; then
6117 vxhs=yes
6118 else
6119 if test "$vxhs" = "yes" ; then
6120 feature_not_found "vxhs block device" "Install libvxhs See github"
6121 fi
6122 vxhs=no
6123 fi
6124fi
6125
6126##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006127# check for _Static_assert()
6128
6129have_static_assert=no
6130cat > $TMPC << EOF
6131_Static_assert(1, "success");
6132int main(void) {
6133 return 0;
6134}
6135EOF
6136if compile_prog "" "" ; then
6137 have_static_assert=yes
6138fi
6139
6140##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006141# check for utmpx.h, it is missing e.g. on OpenBSD
6142
6143have_utmpx=no
6144cat > $TMPC << EOF
6145#include <utmpx.h>
6146struct utmpx user_info;
6147int main(void) {
6148 return 0;
6149}
6150EOF
6151if compile_prog "" "" ; then
6152 have_utmpx=yes
6153fi
6154
6155##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006156# check for getrandom()
6157
6158have_getrandom=no
6159cat > $TMPC << EOF
6160#include <sys/random.h>
6161int main(void) {
6162 return getrandom(0, 0, GRND_NONBLOCK);
6163}
6164EOF
6165if compile_prog "" "" ; then
6166 have_getrandom=yes
6167fi
6168
6169##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006170# checks for sanitizers
6171
Marc-André Lureau247724c2018-01-16 16:11:51 +01006172have_asan=no
6173have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006174have_asan_iface_h=no
6175have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006176
6177if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006178 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006179 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6180 have_asan=yes
6181 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006182
6183 # we could use a simple skeleton for flags checks, but this also
6184 # detect the static linking issue of ubsan, see also:
6185 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6186 cat > $TMPC << EOF
6187#include <stdlib.h>
6188int main(void) {
6189 void *tmp = malloc(10);
Leonid Blochf2dfe542020-05-25 01:12:04 +03006190 if (tmp != NULL) {
6191 return *(int *)(tmp + 2);
6192 }
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006193}
6194EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006195 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6196 have_ubsan=yes
6197 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006198
6199 if check_include "sanitizer/asan_interface.h" ; then
6200 have_asan_iface_h=yes
6201 fi
6202
6203 cat > $TMPC << EOF
6204#include <sanitizer/asan_interface.h>
6205int main(void) {
6206 __sanitizer_start_switch_fiber(0, 0, 0);
6207 return 0;
6208}
6209EOF
6210 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6211 have_asan_iface_fiber=yes
6212 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006213fi
6214
6215##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006216# checks for fuzzer
6217if test "$fuzzing" = "yes" ; then
6218 write_c_fuzzer_skeleton
6219 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6220 have_fuzzer=yes
6221 fi
6222fi
6223
6224##########################################
Junyan He17824402018-07-18 15:47:59 +08006225# check for libpmem
6226
6227if test "$libpmem" != "no"; then
6228 if $pkg_config --exists "libpmem"; then
6229 libpmem="yes"
6230 libpmem_libs=$($pkg_config --libs libpmem)
6231 libpmem_cflags=$($pkg_config --cflags libpmem)
6232 libs_softmmu="$libs_softmmu $libpmem_libs"
6233 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6234 else
6235 if test "$libpmem" = "yes" ; then
6236 feature_not_found "libpmem" "Install nvml or pmdk"
6237 fi
6238 libpmem="no"
6239 fi
6240fi
6241
6242##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006243# check for slirp
6244
Laurent Vivierd5999382019-06-21 15:05:44 +02006245# slirp is only required when building softmmu targets
6246if test -z "$slirp" -a "$softmmu" != "yes" ; then
6247 slirp="no"
6248fi
6249
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006250case "$slirp" in
6251 "" | yes)
6252 if $pkg_config slirp; then
6253 slirp=system
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02006254 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6255 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006256 elif test -e "${source_path}/slirp/Makefile" ; then
6257 slirp=internal
6258 elif test -z "$slirp" ; then
6259 slirp=no
6260 else
6261 feature_not_found "slirp" "Install slirp devel or git submodule"
6262 fi
6263 ;;
6264
6265 system)
6266 if ! $pkg_config slirp; then
6267 feature_not_found "slirp" "Install slirp devel"
6268 fi
6269 ;;
6270esac
6271
6272case "$slirp" in
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02006273 git | internal)
6274 if test "$slirp" = git; then
6275 git_submodules="${git_submodules} slirp"
6276 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006277 mkdir -p slirp
6278 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6279 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006280 if test "$mingw32" = "yes" ; then
6281 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6282 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006283 ;;
6284
6285 system)
6286 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6287 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6288 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6289 ;;
6290
6291 no)
6292 ;;
6293 *)
6294 error_exit "Unknown state for slirp: $slirp"
6295 ;;
6296esac
6297
Alexey Krasikov54e7aac2020-05-25 14:19:12 +03006298##########################################
6299# check for usable __NR_keyctl syscall
6300
6301if test "$linux" = "yes" ; then
6302
6303 have_keyring=no
6304 cat > $TMPC << EOF
6305#include <errno.h>
6306#include <asm/unistd.h>
6307#include <linux/keyctl.h>
6308#include <unistd.h>
6309int main(void) {
6310 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
6311}
6312EOF
6313 if compile_prog "" "" ; then
6314 have_keyring=yes
6315 fi
6316fi
6317if test "$secret_keyring" != "no"
6318then
6319 if test "$have_keyring" == "yes"
6320 then
6321 secret_keyring=yes
6322 else
6323 if test "$secret_keyring" = "yes"
6324 then
6325 error_exit "syscall __NR_keyctl requested, \
6326but not implemented on your system"
6327 else
6328 secret_keyring=no
6329 fi
6330 fi
6331fi
6332
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006333
6334##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006335# End of CC checks
6336# After here, no more $cc or $ld runs
6337
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006338write_c_skeleton
6339
Blue Swirl1d728c32012-05-01 18:45:39 +00006340if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006341 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6342 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006343elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006344 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006345elif test "$debug" = "no"; then
6346 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006347fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006348
Marc-André Lureau247724c2018-01-16 16:11:51 +01006349if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006350 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6351 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006352 if test "$have_asan_iface_h" = "no" ; then
6353 echo "ASAN build enabled, but ASAN header missing." \
6354 "Without code annotation, the report may be inferior."
6355 elif test "$have_asan_iface_fiber" = "no" ; then
6356 echo "ASAN build enabled, but ASAN header is too old." \
6357 "Without code annotation, the report may be inferior."
6358 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006359fi
6360if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006361 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6362 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006363fi
6364
Peter Lieven6542aa92014-02-03 10:26:13 +01006365##########################################
6366# Do we have libnfs
6367if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006368 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006369 libnfs="yes"
6370 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006371 else
6372 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006373 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006374 fi
6375 libnfs="no"
6376 fi
6377fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006378
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006379##########################################
6380# Do we have libudev
6381if test "$libudev" != "no" ; then
6382 if $pkg_config libudev && test "$static" != "yes"; then
6383 libudev="yes"
6384 libudev_libs=$($pkg_config --libs libudev)
6385 else
6386 libudev="no"
6387 fi
6388fi
6389
Peter Maydell6ca026c2012-07-18 15:10:18 +01006390# Now we've finished running tests it's OK to add -Werror to the compiler flags
6391if test "$werror" = "yes"; then
6392 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6393fi
6394
Juan Quintelae86ecd42009-08-03 14:45:59 +02006395if test "$solaris" = "no" ; then
6396 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006397 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006398 fi
6399fi
6400
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006401# test if pod2man has --utf8 option
6402if pod2man --help | grep -q utf8; then
6403 POD2MAN="pod2man --utf8"
6404else
6405 POD2MAN="pod2man"
6406fi
6407
Blue Swirl952afb72010-09-19 08:36:34 +00006408# Use ASLR, no-SEH and DEP if available
6409if test "$mingw32" = "yes" ; then
6410 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006411 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006412 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006413 fi
6414 done
6415fi
6416
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006417# Disable OpenBSD W^X if available
6418if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6419 cat > $TMPC <<EOF
6420 int main(void) { return 0; }
6421EOF
6422 wx_ldflags="-Wl,-z,wxneeded"
6423 if compile_prog "" "$wx_ldflags"; then
6424 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6425 fi
6426fi
6427
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006428qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006429qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006430qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006431qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006432qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006433qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006434
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006435# We can only support ivshmem if we have eventfd
6436if [ "$eventfd" = "yes" ]; then
6437 ivshmem=yes
6438fi
6439
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006440tools=""
6441if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006442 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006443 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006444 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006445 fi
6446 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006447 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006448 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006449 if [ "$curl" = "yes" ]; then
6450 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006451 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006452fi
6453if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006454 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006455 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006456 virtfs=yes
Philippe Mathieu-Daudéfdbff6b2020-04-23 12:43:45 +02006457 helpers="$helpers fsdev/virtfs-proxy-helper\$(EXESUF)"
Andreas Färberaabfd882012-05-01 01:12:02 +02006458 else
6459 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006460 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306461 fi
Andreas Färber17500372012-05-01 01:12:03 +02006462 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006463 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006464 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6465 mpath=yes
6466 else
6467 if test "$mpath" = yes; then
6468 error_exit "Multipath requires libmpathpersist devel"
6469 fi
6470 mpath=no
6471 fi
Philippe Mathieu-Daudéfdbff6b2020-04-23 12:43:45 +02006472 helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006473 else
6474 if test "$virtfs" = yes; then
6475 error_exit "VirtFS is supported only on Linux"
6476 fi
6477 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006478 if test "$mpath" = yes; then
6479 error_exit "Multipath is supported only on Linux"
6480 fi
6481 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306482 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006483 if test "$xkbcommon" = "yes"; then
6484 tools="qemu-keymap\$(EXESUF) $tools"
6485 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006486fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006487
6488# Probe for guest agent support/options
6489
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006490if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006491 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6492 guest_agent=no
6493 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006494 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006495 guest_agent=yes
6496 elif [ "$guest_agent" != yes ]; then
6497 guest_agent=no
6498 else
6499 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006500 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006501fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006502
Michael Roth9d6bc272015-08-26 10:49:13 -05006503# Guest agent Window MSI package
6504
6505if test "$guest_agent" != yes; then
6506 if test "$guest_agent_msi" = yes; then
6507 error_exit "MSI guest agent package requires guest agent enabled"
6508 fi
6509 guest_agent_msi=no
6510elif test "$mingw32" != "yes"; then
6511 if test "$guest_agent_msi" = "yes"; then
6512 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6513 fi
6514 guest_agent_msi=no
6515elif ! has wixl; then
6516 if test "$guest_agent_msi" = "yes"; then
6517 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6518 fi
6519 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006520else
6521 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6522 # disabled explicitly
6523 if test "$guest_agent_msi" != "no"; then
6524 guest_agent_msi=yes
6525 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006526fi
6527
Michael Roth1a349042015-08-26 11:14:31 -05006528if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006529 if test "$guest_agent_with_vss" = "yes"; then
6530 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6531 fi
6532
6533 if test "$QEMU_GA_MANUFACTURER" = ""; then
6534 QEMU_GA_MANUFACTURER=QEMU
6535 fi
6536
6537 if test "$QEMU_GA_DISTRO" = ""; then
6538 QEMU_GA_DISTRO=Linux
6539 fi
6540
6541 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006542 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006543 fi
6544
Stefan Weil89138852016-05-16 15:10:20 +02006545 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006546
6547 case "$cpu" in
6548 x86_64)
6549 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6550 ;;
6551 i386)
6552 QEMU_GA_MSI_ARCH="-D Arch=32"
6553 ;;
6554 *)
6555 error_exit "CPU $cpu not supported for building installation package"
6556 ;;
6557 esac
6558fi
6559
Paolo Bonzinica35f782010-05-26 16:08:29 +02006560# Mac OS X ships with a broken assembler
6561roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006562if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6563 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6564 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006565 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006566 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6567 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6568 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006569 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6570 ld_i386_emulation="$emu"
6571 roms="optionrom"
6572 break
6573 fi
6574 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006575fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006576
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006577# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006578if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006579 write_c_skeleton
6580 if compile_prog "-march=z900" ""; then
6581 roms="$roms s390-ccw"
6582 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006583fi
6584
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006585# Check that the C++ compiler exists and works with the C compiler.
6586# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6587if has $cxx; then
6588 cat > $TMPC <<EOF
6589int c_function(void);
6590int main(void) { return c_function(); }
6591EOF
6592
6593 compile_object
6594
6595 cat > $TMPCXX <<EOF
6596extern "C" {
6597 int c_function(void);
6598}
6599int c_function(void) { return 42; }
6600EOF
6601
6602 update_cxxflags
6603
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006604 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006605 # C++ compiler $cxx works ok with C compiler $cc
6606 :
6607 else
6608 echo "C++ compiler $cxx does not work with C compiler $cc"
6609 echo "Disabling C++ specific optional code"
6610 cxx=
6611 fi
6612else
6613 echo "No C++ compiler available; disabling C++ specific optional code"
6614 cxx=
6615fi
6616
Cole Robinson02d34f62016-05-06 14:03:09 -04006617echo_version() {
6618 if test "$1" = "yes" ; then
6619 echo "($2)"
6620 fi
6621}
6622
Jan Kiszka50e12062014-10-02 10:03:55 +02006623# prepend pixman and ftd flags after all config tests are done
6624QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006625QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006626libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006627
bellard43ce4df2003-06-09 19:53:12 +00006628echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006629echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006630echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006631echo "binary directory $(eval echo $bindir)"
6632echo "library directory $(eval echo $libdir)"
6633echo "module directory $(eval echo $qemu_moddir)"
6634echo "libexec directory $(eval echo $libexecdir)"
6635echo "include directory $(eval echo $includedir)"
6636echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006637if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006638echo "local state directory $(eval echo $local_statedir)"
6639echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006640echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006641else
6642echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006643echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006644fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006645echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006646echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006647echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006648echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006649echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006650echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006651echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006652echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006653echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006654echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006655echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006656echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006657echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006658echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006659echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006660if test "$docs" != "no"; then
6661 echo "sphinx-build $sphinx_build"
6662fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006663echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006664echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6665if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006666 echo "smbd $smbd"
6667fi
Fam Zheng17969262014-02-10 14:48:56 +08006668echo "module support $modules"
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006669echo "alt path mod load $module_upgrades"
bellard43ce4df2003-06-09 19:53:12 +00006670echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006671echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006672echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006673echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006674echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006675echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006676echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006677echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006678if test "$darwin" = "yes" ; then
6679 echo "Cocoa support $cocoa"
6680fi
Stefan Weil89138852016-05-16 15:10:20 +02006681echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006682echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006683echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006684echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006685echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006686echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006687echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006688echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006689if test "$gcrypt" = "yes"
6690then
6691 echo " hmac $gcrypt_hmac"
6692 echo " XTS $gcrypt_xts"
6693fi
Stefan Weil89138852016-05-16 15:10:20 +02006694echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006695if test "$nettle" = "yes"
6696then
6697 echo " XTS $nettle_xts"
6698fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006699echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006700echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006701echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006702echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006703echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006704echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006705echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006706echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006707echo "Block whitelist (rw) $block_drv_rw_whitelist"
6708echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306709echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006710echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006711echo "VNC support $vnc"
6712if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006713 echo "VNC SASL support $vnc_sasl"
6714 echo "VNC JPEG support $vnc_jpeg"
6715 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006716fi
aliguorie37630c2009-04-22 15:19:10 +00006717echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006718if test "$xen" = "yes" ; then
6719 echo "xen ctrl version $xen_ctrl_version"
6720fi
aurel322e4d9fb2008-04-08 06:01:02 +00006721echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006722echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006723echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006724echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006725echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006726echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006727echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006728echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006729echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006730echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006731echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006732echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006733echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006734echo "TCG support $tcg"
6735if test "$tcg" = "yes" ; then
6736 echo "TCG debug enabled $debug_tcg"
6737 echo "TCG interpreter $tcg_interpreter"
6738fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006739echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006740echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006741echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006742echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006743echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006744echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006745echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006746echo "madvise $madvise"
6747echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006748echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006749echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006750echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006751echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006752echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006753echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006754echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006755echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006756echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006757if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006758echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006759fi
Stefan Weil89138852016-05-16 15:10:20 +02006760echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006761echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006762echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006763echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006764echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006765echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006766echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006767echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006768echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006769echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006770echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006771echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006772echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006773echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006774echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006775echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006776echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006777echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006778echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006779echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306780echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006781echo "gcov $gcov_tool"
6782echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006783echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006784echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006785echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006786echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006787echo "lzo support $lzo"
6788echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006789echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006790echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006791echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006792echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006793echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006794echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006795echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006796echo "avx2 optimization $avx2_opt"
Robert Hoo6b8cd442020-02-29 20:34:34 +08006797echo "avx512f optimization $avx512f_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006798echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006799echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006800echo "bochs support $bochs"
6801echo "cloop support $cloop"
6802echo "dmg support $dmg"
6803echo "qcow v1 support $qcow1"
6804echo "vdi support $vdi"
6805echo "vvfat support $vvfat"
6806echo "qed support $qed"
6807echo "parallels support $parallels"
6808echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006809echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006810echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006811echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006812echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006813echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006814echo "fuzzing support $fuzzing"
Alex Bennéef48e5902020-03-16 17:21:48 +00006815echo "gdb $gdb_bin"
Marek Marczykowski-Góreckib767d252020-05-20 15:20:23 +02006816echo "rng-none $rng_none"
Alexey Krasikov54e7aac2020-05-25 14:19:12 +03006817echo "Linux keyring $secret_keyring"
bellard67b915a2004-03-31 23:37:16 +00006818
Peter Maydell898be3e2017-03-21 14:31:57 +00006819if test "$supported_cpu" = "no"; then
6820 echo
6821 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6822 echo
6823 echo "CPU host architecture $cpu support is not currently maintained."
6824 echo "The QEMU project intends to remove support for this host CPU in"
6825 echo "a future release if nobody volunteers to maintain it and to"
6826 echo "provide a build host for our continuous integration setup."
6827 echo "configure has succeeded and you can continue to build, but"
6828 echo "if you care about QEMU on this platform you should contact"
6829 echo "us upstream at qemu-devel@nongnu.org."
6830fi
6831
6832if test "$supported_os" = "no"; then
6833 echo
6834 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6835 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006836 echo "Host OS $targetos support is not currently maintained."
6837 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006838 echo "a future release if nobody volunteers to maintain it and to"
6839 echo "provide a build host for our continuous integration setup."
6840 echo "configure has succeeded and you can continue to build, but"
6841 echo "if you care about QEMU on this platform you should contact"
6842 echo "us upstream at qemu-devel@nongnu.org."
6843fi
6844
Juan Quintela98ec69a2009-07-16 18:34:18 +02006845config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006846
Stefan Weildbd99ae2013-01-01 18:33:44 +01006847echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6848
Juan Quintela98ec69a2009-07-16 18:34:18 +02006849echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006850echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006851
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006852echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006853echo "prefix=$prefix" >> $config_host_mak
6854echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006855echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006856echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006857echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006858echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006859echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006860echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006861echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006862echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006863echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006864echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006865if test "$mingw32" = "no" ; then
6866 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6867fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006868echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006869echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006870echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006871echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006872echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006873echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006874echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006875echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006876echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006877
Juan Quintela98ec69a2009-07-16 18:34:18 +02006878echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006879
Paolo Bonzinif3494742019-01-23 14:56:17 +08006880if test "$default_devices" = "yes" ; then
6881 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6882else
6883 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6884fi
aurel32f8393942009-04-13 18:45:38 +00006885if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006886 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006887fi
aliguori1625af82009-04-05 17:41:02 +00006888if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006889 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006890fi
bellard7d132992003-03-06 23:23:54 +00006891if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006892 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006893fi
bellard67b915a2004-03-31 23:37:16 +00006894if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006895 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006896 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006897 version_major=${rc_version%%.*}
6898 rc_version=${rc_version#*.}
6899 version_minor=${rc_version%%.*}
6900 rc_version=${rc_version#*.}
6901 version_subminor=${rc_version%%.*}
6902 version_micro=0
6903 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6904 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006905 if test "$guest_agent_with_vss" = "yes" ; then
6906 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006907 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006908 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6909 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006910 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006911 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006912 fi
Michael Roth1a349042015-08-26 11:14:31 -05006913 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006914 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006915 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6916 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6917 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6918 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6919 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6920 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6921 fi
pbrook210fa552007-02-27 21:04:49 +00006922else
Juan Quintela35f4df22009-07-27 16:13:07 +02006923 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006924fi
blueswir1128ab2f2008-08-15 18:33:42 +00006925
Mark McLoughlindffcb712009-10-22 17:49:11 +01006926if test "$linux" = "yes" ; then
6927 echo "CONFIG_LINUX=y" >> $config_host_mak
6928fi
6929
bellard83fb7ad2004-07-05 21:25:26 +00006930if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006931 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006932fi
malcb29fe3e2008-11-18 01:42:22 +00006933
bellardec530c82006-04-25 22:36:06 +00006934if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006935 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006936fi
Andreas Färber179cf402010-09-20 00:50:43 +02006937if test "$haiku" = "yes" ; then
6938 echo "CONFIG_HAIKU=y" >> $config_host_mak
6939fi
bellard97a847b2003-08-10 21:36:04 +00006940if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006941 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006942fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006943if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006944 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006945fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006946if test "$want_tools" = "yes" ; then
6947 echo "CONFIG_TOOLS=y" >> $config_host_mak
6948fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006949if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006950 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006951 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006952 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6953 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6954fi
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02006955if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006956 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006957fi
ths8a16d272008-07-19 09:56:24 +00006958if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006959 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006960 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006961fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006962if test "$netmap" = "yes" ; then
6963 echo "CONFIG_NETMAP=y" >> $config_host_mak
6964fi
Gonglei015a33b2014-07-01 20:58:08 +08006965if test "$l2tpv3" = "yes" ; then
6966 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6967fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006968if test "$gprof" = "yes" ; then
6969 echo "CONFIG_GPROF=y" >> $config_host_mak
6970fi
Corey Bryant47e98652012-01-26 09:42:26 -05006971if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006972 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006973fi
Juan Quintela2358a492009-07-27 16:13:25 +02006974echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006975for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006976 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006977 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006978 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006979 echo "$def=m" >> $config_host_mak ;;
6980 *)
6981 echo "$def=y" >> $config_host_mak ;;
6982 esac
malc0c58ac12008-06-25 21:04:05 +00006983done
Fam Zhengb1149912017-09-07 16:29:13 +08006984echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6985echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6986echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6987echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6988echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Geoffrey McRae2e445702020-04-29 15:53:58 +10006989echo "JACK_LIBS=$jack_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006990if test "$audio_win_int" = "yes" ; then
6991 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6992fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006993echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6994echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006995if test "$vnc" = "yes" ; then
6996 echo "CONFIG_VNC=y" >> $config_host_mak
6997fi
aliguori2f9606b2009-03-06 20:27:28 +00006998if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006999 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00007000fi
Jes Sorensen821601e2011-03-16 13:33:36 +01007001if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02007002 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02007003fi
Jes Sorensen821601e2011-03-16 13:33:36 +01007004if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02007005 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02007006fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02007007if test "$xkbcommon" = "yes" ; then
7008 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
7009 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
7010fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01007011if test "$xfs" = "yes" ; then
7012 echo "CONFIG_XFS=y" >> $config_host_mak
7013fi
Stefan Weil89138852016-05-16 15:10:20 +02007014qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02007015echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02007016echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007017echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01007018echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02007019if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007020 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00007021fi
Fam Zheng17969262014-02-10 14:48:56 +08007022if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08007023 # $shacmd can generate a hash started with digit, which the compiler doesn't
7024 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02007025 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007026 echo "CONFIG_MODULES=y" >> $config_host_mak
7027fi
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01007028if test "$module_upgrades" = "yes"; then
7029 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
7030fi
Eric Blakee633a5c2019-02-04 20:39:37 -06007031if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01007032 echo "CONFIG_X11=y" >> $config_host_mak
7033 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
7034 echo "X11_LIBS=$x11_libs" >> $config_host_mak
7035fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02007036if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01007037 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02007038 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08007039 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00007040 if test "$sdl_image" = "yes" ; then
7041 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
7042 fi
bellard49ecc3f2007-11-07 19:25:15 +00007043fi
7044if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007045 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00007046fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01007047if test "$iconv" = "yes" ; then
7048 echo "CONFIG_ICONV=y" >> $config_host_mak
7049 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7050 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7051fi
balrog4d3b6f62008-02-10 16:33:14 +00007052if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01007053 echo "CONFIG_CURSES=m" >> $config_host_mak
7054 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7055 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00007056fi
Riku Voipio099d6b02009-05-05 12:10:04 +03007057if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007058 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03007059fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01007060if test "$accept4" = "yes" ; then
7061 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7062fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05307063if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007064 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05307065fi
Riku Voipioc2882b92009-08-12 15:08:24 +03007066if test "$eventfd" = "yes" ; then
7067 echo "CONFIG_EVENTFD=y" >> $config_host_mak
7068fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02007069if test "$memfd" = "yes" ; then
7070 echo "CONFIG_MEMFD=y" >> $config_host_mak
7071fi
Cortland Tölva955727d2018-10-08 09:35:19 -07007072if test "$have_usbfs" = "yes" ; then
7073 echo "CONFIG_USBFS=y" >> $config_host_mak
7074fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007075if test "$fallocate" = "yes" ; then
7076 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7077fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01007078if test "$fallocate_punch_hole" = "yes" ; then
7079 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7080fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03007081if test "$fallocate_zero_range" = "yes" ; then
7082 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7083fi
Kevin Wolfed911432014-09-29 17:12:59 +02007084if test "$posix_fallocate" = "yes" ; then
7085 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7086fi
Peter Maydellc727f472011-01-06 11:05:10 +00007087if test "$sync_file_range" = "yes" ; then
7088 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7089fi
Peter Maydelldace20d2011-01-10 13:11:24 +00007090if test "$fiemap" = "yes" ; then
7091 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7092fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007093if test "$dup3" = "yes" ; then
7094 echo "CONFIG_DUP3=y" >> $config_host_mak
7095fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01007096if test "$ppoll" = "yes" ; then
7097 echo "CONFIG_PPOLL=y" >> $config_host_mak
7098fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007099if test "$prctl_pr_set_timerslack" = "yes" ; then
7100 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7101fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007102if test "$epoll" = "yes" ; then
7103 echo "CONFIG_EPOLL=y" >> $config_host_mak
7104fi
7105if test "$epoll_create1" = "yes" ; then
7106 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7107fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007108if test "$sendfile" = "yes" ; then
7109 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7110fi
Riku Voipio51834342014-06-22 11:25:42 +01007111if test "$timerfd" = "yes" ; then
7112 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7113fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007114if test "$setns" = "yes" ; then
7115 echo "CONFIG_SETNS=y" >> $config_host_mak
7116fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007117if test "$clock_adjtime" = "yes" ; then
7118 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7119fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007120if test "$syncfs" = "yes" ; then
7121 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7122fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007123if test "$kcov" = "yes" ; then
7124 echo "CONFIG_KCOV=y" >> $config_host_mak
7125fi
aurel323b3f24a2009-04-15 16:12:13 +00007126if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007127 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007128fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007129if test "$inotify1" = "yes" ; then
7130 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7131fi
Peter Maydell401bc052017-09-05 13:19:32 +01007132if test "$sem_timedwait" = "yes" ; then
7133 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7134fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007135if test "$strchrnul" = "yes" ; then
7136 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7137fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007138if test "$st_atim" = "yes" ; then
7139 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7140fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007141if test "$byteswap_h" = "yes" ; then
7142 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7143fi
7144if test "$bswap_h" = "yes" ; then
7145 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7146fi
Alexander Graf769ce762009-05-11 17:41:42 +02007147if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007148 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007149 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007150 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007151fi
aurel322e4d9fb2008-04-08 06:01:02 +00007152if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007153 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007154 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007155fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007156if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007157 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007158 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007159 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007160 if test "$gtk_gl" = "yes" ; then
7161 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7162 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007163fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007164if test "$gio" = "yes" ; then
7165 echo "CONFIG_GIO=y" >> $config_host_mak
7166 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7167 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007168 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007169fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007170echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007171if test "$gnutls" = "yes" ; then
7172 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7173fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007174if test "$gcrypt" = "yes" ; then
7175 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007176 if test "$gcrypt_hmac" = "yes" ; then
7177 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7178 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007179fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007180if test "$nettle" = "yes" ; then
7181 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007182 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007183fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007184if test "$qemu_private_xts" = "yes" ; then
7185 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7186fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007187if test "$tasn1" = "yes" ; then
7188 echo "CONFIG_TASN1=y" >> $config_host_mak
7189fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007190if test "$auth_pam" = "yes" ; then
7191 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7192fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007193if test "$have_ifaddrs_h" = "yes" ; then
7194 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7195fi
Eric Blake6b39b062016-10-11 10:46:23 -05007196if test "$have_broken_size_max" = "yes" ; then
7197 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7198fi
Jan Vesely277abf12016-04-29 13:15:23 -04007199
7200# Work around a system header bug with some kernel/XFS header
7201# versions where they both try to define 'struct fsxattr':
7202# xfs headers will not try to redefine structs from linux headers
7203# if this macro is set.
7204if test "$have_fsxattr" = "yes" ; then
7205 echo "HAVE_FSXATTR=y" >> $config_host_mak
7206fi
Fam Zheng1efad062018-06-01 17:26:43 +08007207if test "$have_copy_file_range" = "yes" ; then
7208 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7209fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007210if test "$vte" = "yes" ; then
7211 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007212 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007213 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007214fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007215if test "$virglrenderer" = "yes" ; then
7216 echo "CONFIG_VIRGL=y" >> $config_host_mak
7217 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7218 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7219fi
aliguorie37630c2009-04-22 15:19:10 +00007220if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007221 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007222 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007223fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007224if test "$linux_aio" = "yes" ; then
7225 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7226fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007227if test "$linux_io_uring" = "yes" ; then
7228 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7229 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7230 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7231fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007232if test "$attr" = "yes" ; then
7233 echo "CONFIG_ATTR=y" >> $config_host_mak
7234fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007235if test "$libattr" = "yes" ; then
7236 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7237fi
Meador Inge983eef52012-02-24 14:00:42 +05307238if test "$virtfs" = "yes" ; then
7239 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007240fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007241if test "$mpath" = "yes" ; then
7242 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007243 if test "$mpathpersist_new_api" = "yes"; then
7244 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7245 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007246fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007247if test "$vhost_scsi" = "yes" ; then
7248 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7249fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007250if test "$vhost_net" = "yes" ; then
7251 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7252fi
7253if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007254 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007255fi
Gonglei042cea22018-03-01 21:46:28 +08007256if test "$vhost_crypto" = "yes" ; then
7257 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7258fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007259if test "$vhost_vsock" = "yes" ; then
7260 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
Stefano Garzarella5fe97d82020-05-22 14:25:11 +02007261 if test "$vhost_user" = "yes" ; then
7262 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
7263 fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007264fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007265if test "$vhost_kernel" = "yes" ; then
7266 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7267fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007268if test "$vhost_user" = "yes" ; then
7269 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7270fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007271if test "$vhost_user_fs" = "yes" ; then
7272 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7273fi
ths77755342008-11-27 15:45:16 +00007274if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007275 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007276fi
aliguoribf9298b2008-12-05 20:05:26 +00007277if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007278 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007279fi
aliguoriceb42de2009-04-07 18:43:28 +00007280if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007281 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007282fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007283if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007284 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007285fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007286if test "$membarrier" = "yes" ; then
7287 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7288fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007289if test "$signalfd" = "yes" ; then
7290 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7291fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007292if test "$optreset" = "yes" ; then
7293 echo "HAVE_OPTRESET=y" >> $config_host_mak
7294fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007295if test "$tcg" = "yes"; then
7296 echo "CONFIG_TCG=y" >> $config_host_mak
7297 if test "$tcg_interpreter" = "yes" ; then
7298 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7299 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007300fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007301if test "$fdatasync" = "yes" ; then
7302 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7303fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007304if test "$madvise" = "yes" ; then
7305 echo "CONFIG_MADVISE=y" >> $config_host_mak
7306fi
7307if test "$posix_madvise" = "yes" ; then
7308 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7309fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007310if test "$posix_memalign" = "yes" ; then
7311 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7312fi
bellard97a847b2003-08-10 21:36:04 +00007313
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007314if test "$spice" = "yes" ; then
7315 echo "CONFIG_SPICE=y" >> $config_host_mak
7316fi
7317
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007318if test "$smartcard" = "yes" ; then
7319 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007320 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7321 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007322fi
7323
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007324if test "$libusb" = "yes" ; then
7325 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007326 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7327 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007328fi
7329
Hans de Goede69354a82011-07-19 11:04:10 +02007330if test "$usb_redir" = "yes" ; then
7331 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007332 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7333 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007334fi
7335
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007336if test "$opengl" = "yes" ; then
7337 echo "CONFIG_OPENGL=y" >> $config_host_mak
7338 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007339 if test "$opengl_dmabuf" = "yes" ; then
7340 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7341 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007342fi
7343
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007344if test "$gbm" = "yes" ; then
7345 echo "CONFIG_GBM=y" >> $config_host_mak
7346 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7347 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7348fi
7349
7350
Yang Zhong5a22ab72017-12-20 21:16:46 +08007351if test "$malloc_trim" = "yes" ; then
7352 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7353fi
7354
Liang Li99f2dbd2016-03-08 13:53:16 +08007355if test "$avx2_opt" = "yes" ; then
7356 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7357fi
7358
Robert Hoo6b8cd442020-02-29 20:34:34 +08007359if test "$avx512f_opt" = "yes" ; then
7360 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7361fi
7362
qiaonuohan607dacd2014-02-18 14:11:30 +08007363if test "$lzo" = "yes" ; then
7364 echo "CONFIG_LZO=y" >> $config_host_mak
7365fi
7366
7367if test "$snappy" = "yes" ; then
7368 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7369fi
7370
Peter Wu6b383c02015-01-06 18:48:14 +01007371if test "$bzip2" = "yes" ; then
7372 echo "CONFIG_BZIP2=y" >> $config_host_mak
7373 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7374fi
7375
Julio Faracco83bc1f92018-11-05 13:08:04 -02007376if test "$lzfse" = "yes" ; then
7377 echo "CONFIG_LZFSE=y" >> $config_host_mak
7378 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7379fi
7380
Juan Quintela3a678482019-12-17 21:15:24 +01007381if test "$zstd" = "yes" ; then
7382 echo "CONFIG_ZSTD=y" >> $config_host_mak
7383fi
7384
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007385if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007386 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007387 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7388 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007389fi
7390
Peter Lieven6542aa92014-02-03 10:26:13 +01007391if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007392 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7393 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007394fi
7395
Eduardo Otubof7945732012-08-14 18:44:05 -03007396if test "$seccomp" = "yes"; then
7397 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007398 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7399 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007400fi
7401
bellard83fb7ad2004-07-05 21:25:26 +00007402# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007403if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007404 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007405fi
7406
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007407if test "$localtime_r" = "yes" ; then
7408 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7409fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007410if test "$qom_cast_debug" = "yes" ; then
7411 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7412fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007413if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007414 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007415 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7416 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007417fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007418
Peter Maydell7c2acc72013-04-08 12:11:27 +01007419echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007420if test "$coroutine_pool" = "yes" ; then
7421 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7422else
7423 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7424fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307425
Peter Lieven7d992e42016-09-27 11:58:45 +02007426if test "$debug_stack_usage" = "yes" ; then
7427 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7428fi
7429
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007430if test "$crypto_afalg" = "yes" ; then
7431 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7432fi
7433
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307434if test "$open_by_handle_at" = "yes" ; then
7435 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7436fi
7437
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307438if test "$linux_magic_h" = "yes" ; then
7439 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7440fi
7441
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007442if test "$pragma_diagnostic_available" = "yes" ; then
7443 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007444fi
7445
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007446if test "$valgrind_h" = "yes" ; then
7447 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7448fi
7449
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007450if test "$have_asan_iface_fiber" = "yes" ; then
7451 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7452fi
7453
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007454if test "$has_environ" = "yes" ; then
7455 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7456fi
7457
Richard Henderson76a347e2012-12-28 14:17:02 -08007458if test "$cpuid_h" = "yes" ; then
7459 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7460fi
7461
Richard Hendersonf5401662013-02-16 12:46:59 -08007462if test "$int128" = "yes" ; then
7463 echo "CONFIG_INT128=y" >> $config_host_mak
7464fi
7465
Richard Henderson7ebee432016-06-29 21:10:59 -07007466if test "$atomic128" = "yes" ; then
7467 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7468fi
7469
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007470if test "$cmpxchg128" = "yes" ; then
7471 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7472fi
7473
Richard Hendersondf79b992016-09-02 12:23:57 -07007474if test "$atomic64" = "yes" ; then
7475 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7476fi
7477
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007478if test "$attralias" = "yes" ; then
7479 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7480fi
7481
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007482if test "$getauxval" = "yes" ; then
7483 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7484fi
7485
Bharata B Raoeb100392012-09-24 14:42:45 +05307486if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007487 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007488 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7489 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307490fi
7491
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007492if test "$glusterfs_xlator_opt" = "yes" ; then
7493 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7494fi
7495
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307496if test "$glusterfs_discard" = "yes" ; then
7497 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7498fi
7499
Niels de Vosdf3a4292017-05-28 12:01:14 +05307500if test "$glusterfs_fallocate" = "yes" ; then
7501 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7502fi
7503
Bharata B Rao7c815372013-12-21 14:51:25 +05307504if test "$glusterfs_zerofill" = "yes" ; then
7505 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7506fi
7507
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007508if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7509 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7510fi
7511
Niels de Vos0e3b8912019-03-05 16:46:34 +01007512if test "$glusterfs_iocb_has_stat" = "yes" ; then
7513 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7514fi
7515
Pino Toscanob10d49d2019-06-20 22:08:40 +02007516if test "$libssh" = "yes" ; then
7517 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7518 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7519 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007520fi
7521
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007522if test "$live_block_migration" = "yes" ; then
7523 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7524fi
7525
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007526if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007527 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007528fi
7529
Lluís Vilanova5b808272014-05-27 15:02:14 +02007530echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7531if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007532 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307533fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007534if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007535 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7536 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007537 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007538fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007539if have_backend "log"; then
7540 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007541fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007542if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007543 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7544fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007545if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007546 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7547 if test "$trace_backend_stap" = "yes" ; then
7548 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7549 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007550fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007551if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007552 if test "$linux" = "yes" ; then
7553 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007554 else
Stewart Smith21684af2014-01-24 12:39:10 +11007555 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007556 fi
7557fi
Paul Durrant0a852412016-08-04 14:44:14 +01007558if have_backend "syslog"; then
7559 if test "$posix_syslog" = "yes" ; then
7560 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7561 else
7562 feature_not_found "syslog(trace backend)" "syslog not available"
7563 fi
7564fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007565echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7566
Michael R. Hines2da776d2013-07-22 10:01:54 -04007567if test "$rdma" = "yes" ; then
7568 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007569 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007570fi
7571
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007572if test "$pvrdma" = "yes" ; then
7573 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7574fi
7575
Laurent Vivier575b22b2016-06-02 22:14:15 +02007576if test "$have_rtnetlink" = "yes" ; then
7577 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7578fi
7579
Klim Kireeved279a02018-01-12 12:01:19 +03007580if test "$libxml2" = "yes" ; then
7581 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7582 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7583 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7584fi
7585
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007586if test "$replication" = "yes" ; then
7587 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7588fi
7589
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007590if test "$have_af_vsock" = "yes" ; then
7591 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7592fi
7593
Christopher Covington4d043512016-12-28 15:04:33 -05007594if test "$have_sysmacros" = "yes" ; then
7595 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7596fi
7597
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007598if test "$have_static_assert" = "yes" ; then
7599 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7600fi
7601
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007602if test "$have_utmpx" = "yes" ; then
7603 echo "HAVE_UTMPX=y" >> $config_host_mak
7604fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007605if test "$have_getrandom" = "yes" ; then
7606 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7607fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007608if test "$ivshmem" = "yes" ; then
7609 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7610fi
Richard Hendersone219c492017-09-28 09:01:23 -07007611if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007612 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7613fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007614if test "$debug_mutex" = "yes" ; then
7615 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7616fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007617
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007618# Hold two types of flag:
7619# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7620# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007621# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007622# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007623if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007624 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007625 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7626elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7627 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7628 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007629fi
7630
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007631if test "$vxhs" = "yes" ; then
7632 echo "CONFIG_VXHS=y" >> $config_host_mak
7633 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7634fi
7635
Junyan He17824402018-07-18 15:47:59 +08007636if test "$libpmem" = "yes" ; then
7637 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7638fi
7639
Jeff Cody2f740132018-11-07 07:36:44 +01007640if test "$bochs" = "yes" ; then
7641 echo "CONFIG_BOCHS=y" >> $config_host_mak
7642fi
7643if test "$cloop" = "yes" ; then
7644 echo "CONFIG_CLOOP=y" >> $config_host_mak
7645fi
7646if test "$dmg" = "yes" ; then
7647 echo "CONFIG_DMG=y" >> $config_host_mak
7648fi
7649if test "$qcow1" = "yes" ; then
7650 echo "CONFIG_QCOW1=y" >> $config_host_mak
7651fi
7652if test "$vdi" = "yes" ; then
7653 echo "CONFIG_VDI=y" >> $config_host_mak
7654fi
7655if test "$vvfat" = "yes" ; then
7656 echo "CONFIG_VVFAT=y" >> $config_host_mak
7657fi
7658if test "$qed" = "yes" ; then
7659 echo "CONFIG_QED=y" >> $config_host_mak
7660fi
7661if test "$parallels" = "yes" ; then
7662 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7663fi
7664if test "$sheepdog" = "yes" ; then
7665 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7666fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007667if test "$fuzzing" = "yes" ; then
7668 if test "$have_fuzzer" = "yes"; then
7669 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7670 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7671 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7672 else
7673 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7674 exit 1
7675 fi
7676fi
Jeff Cody2f740132018-11-07 07:36:44 +01007677
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007678if test "$plugins" = "yes" ; then
7679 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7680 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007681 # Copy the export object list to the build dir
7682 if test "$ld_dynamic_list" = "yes" ; then
7683 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7684 ld_symbols=qemu-plugins-ld.symbols
7685 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7686 elif test "$ld_exported_symbols_list" = "yes" ; then
7687 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7688 ld64_symbols=qemu-plugins-ld64.symbols
7689 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7690 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7691 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7692 else
7693 error_exit \
7694 "If \$plugins=yes, either \$ld_dynamic_list or " \
7695 "\$ld_exported_symbols_list should have been set to 'yes'."
7696 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007697fi
7698
Alex Bennéef48e5902020-03-16 17:21:48 +00007699if test -n "$gdb_bin" ; then
7700 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7701fi
7702
Alexey Krasikov54e7aac2020-05-25 14:19:12 +03007703if test "$secret_keyring" = "yes" ; then
7704 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
7705fi
7706
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007707if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007708 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007709elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007710 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007711elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007712 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007713elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007714 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007715elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007716 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007717elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007718 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007719else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007720 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007721fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007722
Philippe Mathieu-Daudéfdbff6b2020-04-23 12:43:45 +02007723echo "HELPERS=$helpers" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007724echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007725echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007726echo "MAKE=$make" >> $config_host_mak
7727echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007728echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7729echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007730echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7731echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007732echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007733echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Peter Maydell516e8b72020-04-11 19:29:32 +01007734echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007735echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007736echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007737if $iasl -h > /dev/null 2>&1; then
7738 echo "IASL=$iasl" >> $config_host_mak
7739fi
Juan Quintela804edf22009-07-27 16:12:49 +02007740echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007741echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007742echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007743echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007744echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007745echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007746echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007747echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007748echo "OBJCOPY=$objcopy" >> $config_host_mak
7749echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007750echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007751echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007752echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007753echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007754echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007755echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007756echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007757echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007758echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007759if test "$sparse" = "yes" ; then
7760 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007761 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007762 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007763 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7764 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7765fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007766echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007767echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007768echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007769echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007770echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007771echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007772echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007773echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007774echo "DSOSUF=$DSOSUF" >> $config_host_mak
7775echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007776echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007777echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7778echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007779echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007780if test "$gcov" = "yes" ; then
7781 echo "CONFIG_GCOV=y" >> $config_host_mak
7782 echo "GCOV=$gcov_tool" >> $config_host_mak
7783fi
Juan Quintela804edf22009-07-27 16:12:49 +02007784
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007785if test "$libudev" != "no"; then
7786 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7787 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7788fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007789if test "$fuzzing" != "no"; then
7790 echo "CONFIG_FUZZ=y" >> $config_host_mak
7791 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7792 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7793fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007794
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007795if test "$edk2_blobs" = "yes" ; then
7796 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7797fi
7798
Marek Marczykowski-Góreckib767d252020-05-20 15:20:23 +02007799if test "$rng_none" = "yes"; then
7800 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
7801fi
7802
Peter Maydell6efd7512011-11-30 11:59:04 +00007803# use included Linux headers
7804if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007805 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007806 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007807 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007808 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007809 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007810 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007811 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007812 ;;
7813 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007814 linux_arch=s390
7815 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007816 aarch64)
7817 linux_arch=arm64
7818 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007819 mips64)
7820 linux_arch=mips
7821 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007822 *)
7823 # For most CPUs the kernel architecture name and QEMU CPU name match.
7824 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007825 ;;
7826 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007827 # For non-KVM architectures we will not have asm headers
7828 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7829 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7830 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007831fi
7832
bellard1d14ffa2005-10-30 18:58:22 +00007833for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007834target_dir="$target"
Juan Quintela25be210f2009-10-07 02:41:00 +02007835config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007836target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007837target_aligned_only="no"
7838case "$target_name" in
7839 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7840 target_aligned_only="yes"
7841 ;;
7842esac
bellard97a847b2003-08-10 21:36:04 +00007843target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007844case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007845 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007846 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007847 ;;
7848esac
bellard97a847b2003-08-10 21:36:04 +00007849target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007850target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007851target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007852target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007853case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007854 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007855 target_softmmu="yes"
7856 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007857 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007858 target_user_only="yes"
7859 target_linux_user="yes"
7860 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007861 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007862 target_user_only="yes"
7863 target_bsd_user="yes"
7864 ;;
pbrook9e407a82007-05-26 16:38:53 +00007865 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007866 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007867 exit 1
7868 ;;
7869esac
ths831b7822007-01-18 20:06:33 +00007870
bellard97a847b2003-08-10 21:36:04 +00007871mkdir -p $target_dir
Juan Quintela25be210f2009-10-07 02:41:00 +02007872echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007873
pbrooke5fe0c52006-06-11 13:32:59 +00007874bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007875mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007876interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007877gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007878
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007879TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007880TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007881TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007882
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007883case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007884 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007885 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307886 gdb_xml_files="i386-32bit.xml"
Laurent Vivier28988112020-03-10 11:33:56 +01007887 TARGET_SYSTBL_ABI=i386
aurel322408a522008-04-20 20:19:44 +00007888 ;;
7889 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007890 TARGET_BASE_ARCH=i386
Laurent Vivier8d62f352020-03-10 11:33:57 +01007891 TARGET_SYSTBL_ABI=common,64
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007892 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307893 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007894 ;;
7895 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007896 mttcg="yes"
Laurent Vivier6116aea2020-03-10 11:33:44 +01007897 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007898 ;;
7899 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007900 TARGET_ARCH=arm
Laurent Vivier5bcb4982020-03-10 11:33:50 +01007901 TARGET_SYSTBL_ABI=common,oabi
aurel322408a522008-04-20 20:19:44 +00007902 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007903 mttcg="yes"
Peter Maydellc888f7e2020-05-07 14:47:55 +01007904 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
aurel322408a522008-04-20 20:19:44 +00007905 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007906 aarch64|aarch64_be)
7907 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007908 TARGET_BASE_ARCH=arm
7909 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007910 mttcg="yes"
Peter Maydellc888f7e2020-05-07 14:47:55 +01007911 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"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007912 ;;
aurel322408a522008-04-20 20:19:44 +00007913 cris)
aurel322408a522008-04-20 20:19:44 +00007914 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007915 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007916 mttcg="yes"
Laurent Vivier9566f4c2020-03-10 11:33:45 +01007917 TARGET_SYSTBL_ABI=common,32
Richard Henderson61766fe2016-12-15 11:26:14 -08007918 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007919 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007920 ;;
aurel322408a522008-04-20 20:19:44 +00007921 m68k)
aurel322408a522008-04-20 20:19:44 +00007922 bflt="yes"
KONRAD Frederica976ed32020-04-30 20:01:22 +01007923 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
Laurent Vivier5b85cae2020-03-10 11:33:46 +01007924 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007925 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007926 microblaze|microblazeel)
7927 TARGET_ARCH=microblaze
Laurent Vivierddf0c4c2020-03-10 11:33:49 +01007928 TARGET_SYSTBL_ABI=common
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007929 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007930 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007931 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007932 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007933 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007934 TARGET_ARCH=mips
Juan Quintela25be210f2009-10-07 02:41:00 +02007935 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
Laurent Vivierc59716f2020-03-10 11:33:58 +01007936 TARGET_SYSTBL_ABI=o32
aurel322408a522008-04-20 20:19:44 +00007937 ;;
7938 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007939 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007940 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007941 TARGET_BASE_ARCH=mips
Juan Quintela25be210f2009-10-07 02:41:00 +02007942 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007943 echo "TARGET_ABI32=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007944 TARGET_SYSTBL_ABI=n32
aurel322408a522008-04-20 20:19:44 +00007945 ;;
7946 mips64|mips64el)
Alex Bennéea092a952020-03-23 16:15:09 +00007947 mttcg="no"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007948 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007949 TARGET_BASE_ARCH=mips
Juan Quintela25be210f2009-10-07 02:41:00 +02007950 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007951 TARGET_SYSTBL_ABI=n64
aurel322408a522008-04-20 20:19:44 +00007952 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007953 moxie)
7954 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007955 nios2)
7956 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007957 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007958 TARGET_ARCH=openrisc
7959 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007960 ;;
aurel322408a522008-04-20 20:19:44 +00007961 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007962 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Laurent Vivier76a691f2020-03-10 11:33:51 +01007963 TARGET_SYSTBL_ABI=common,nospu,32
aurel322408a522008-04-20 20:19:44 +00007964 ;;
aurel322408a522008-04-20 20:19:44 +00007965 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007966 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007967 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007968 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307969 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007970 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007971 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007972 ppc64le)
7973 TARGET_ARCH=ppc64
7974 TARGET_BASE_ARCH=ppc
7975 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007976 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307977 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007978 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Doug Kwan9c351262014-05-29 09:12:21 -05007979 ;;
aurel322408a522008-04-20 20:19:44 +00007980 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007981 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007982 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007983 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007984 TARGET_SYSTBL_ABI=common,nospu,32
Juan Quintela25be210f2009-10-07 02:41:00 +02007985 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007986 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007987 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007988 riscv32)
7989 TARGET_BASE_ARCH=riscv
7990 TARGET_ABI_DIR=riscv
7991 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007992 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
Michael Clark25fa1942018-03-03 01:32:59 +13007993 ;;
7994 riscv64)
7995 TARGET_BASE_ARCH=riscv
7996 TARGET_ABI_DIR=riscv
7997 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007998 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
Michael Clark25fa1942018-03-03 01:32:59 +13007999 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08008000 rx)
8001 TARGET_ARCH=rx
8002 bflt="yes"
8003 target_compiler=$cross_cc_rx
8004 gdb_xml_files="rx-core.xml"
8005 ;;
aurel322408a522008-04-20 20:19:44 +00008006 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02008007 TARGET_ARCH=sh4
Laurent Vivierd0c832f2020-03-10 11:33:48 +01008008 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00008009 bflt="yes"
8010 ;;
8011 sparc)
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01008012 TARGET_SYSTBL_ABI=common,32
aurel322408a522008-04-20 20:19:44 +00008013 ;;
8014 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02008015 TARGET_BASE_ARCH=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01008016 TARGET_SYSTBL_ABI=common,64
aurel322408a522008-04-20 20:19:44 +00008017 ;;
8018 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02008019 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02008020 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02008021 TARGET_ABI_DIR=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01008022 TARGET_SYSTBL_ABI=common,32
Juan Quintela25be210f2009-10-07 02:41:00 +02008023 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00008024 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008025 s390x)
Laurent Vivier318f3712020-03-10 11:33:53 +01008026 TARGET_SYSTBL_ABI=common,64
David Hildenbrand63685bc2018-01-29 13:56:20 +01008027 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01008028 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
Alexander Graf24e804ec2009-12-05 12:44:22 +01008029 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08008030 tilegx)
8031 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07008032 tricore)
8033 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08008034 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08008035 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008036 xtensa|xtensaeb)
8037 TARGET_ARCH=xtensa
Laurent Viviera4a93592020-03-10 11:33:47 +01008038 TARGET_SYSTBL_ABI=common
Max Filippov02e33e92018-10-19 18:40:20 -07008039 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08008040 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04008041 ;;
aurel322408a522008-04-20 20:19:44 +00008042 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01008043 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00008044 ;;
8045esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02008046# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
8047if [ "$TARGET_BASE_ARCH" = "" ]; then
8048 TARGET_BASE_ARCH=$TARGET_ARCH
8049fi
8050
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02008051symlink "$source_path/Makefile.target" "$target_dir/Makefile"
8052
Daniel P. Berrange99afc912012-08-20 15:31:38 +01008053upper() {
8054 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
8055}
8056
Stefan Weil89138852016-05-16 15:10:20 +02008057target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be210f2009-10-07 02:41:00 +02008058echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01008059echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be210f2009-10-07 02:41:00 +02008060echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02008061if [ "$TARGET_ABI_DIR" = "" ]; then
8062 TARGET_ABI_DIR=$TARGET_ARCH
8063fi
Juan Quintela25be210f2009-10-07 02:41:00 +02008064echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07008065if [ "$HOST_VARIANT_DIR" != "" ]; then
8066 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8067fi
Laurent Vivier4d6a8352020-03-10 11:33:43 +01008068if [ "$TARGET_SYSTBL_ABI" != "" ]; then
8069 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
8070fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008071
8072if supported_xen_target $target; then
8073 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08008074 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008075 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00008076 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02008077 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08008078else
8079 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008080fi
8081if supported_kvm_target $target; then
8082 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08008083 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
8084else
8085 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008086fi
8087if supported_hax_target $target; then
8088 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01008089fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05008090if supported_hvf_target $target; then
8091 echo "CONFIG_HVF=y" >> $config_target_mak
8092fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08008093if supported_whpx_target $target; then
8094 echo "CONFIG_WHPX=y" >> $config_target_mak
8095fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00008096if test "$target_aligned_only" = "yes" ; then
8097 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8098fi
bellardde83cd02003-06-15 20:25:43 +00008099if test "$target_bigendian" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008100 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00008101fi
8102if test "$target_softmmu" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008103 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00008104 if test "$mttcg" = "yes" ; then
8105 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8106 fi
bellardde83cd02003-06-15 20:25:43 +00008107fi
bellard997344f2003-10-27 21:10:39 +00008108if test "$target_user_only" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008109 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01008110 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00008111fi
ths831b7822007-01-18 20:06:33 +00008112if test "$target_linux_user" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008113 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00008114fi
pbrook56aebc82008-10-11 17:55:29 +00008115list=""
8116if test ! -z "$gdb_xml_files" ; then
8117 for x in $gdb_xml_files; do
8118 list="$list $source_path/gdb-xml/$x"
8119 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02008120 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00008121fi
bellardde83cd02003-06-15 20:25:43 +00008122
Eric Blakee633a5c2019-02-04 20:39:37 -06008123if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008124 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008125fi
blueswir184778502008-10-26 20:33:16 +00008126if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008127 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008128fi
bellard5b0753e2005-03-01 21:37:28 +00008129
Alex Bennée716a5072018-04-10 12:19:40 +01008130
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008131# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008132
Juan Quintela4afddb52009-08-03 14:46:45 +02008133cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008134ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008135
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008136disas_config() {
8137 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8138 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8139}
8140
Juan Quintela64656022009-08-03 14:46:53 +02008141for i in $ARCH $TARGET_BASE_ARCH ; do
8142 case "$i" in
8143 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008144 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008145 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008146 aarch64)
8147 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008148 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008149 fi
8150 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008151 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008152 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008153 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008154 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008155 fi
Juan Quintela64656022009-08-03 14:46:53 +02008156 ;;
8157 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008158 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008159 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008160 hppa)
8161 disas_config "HPPA"
8162 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008163 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008164 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008165 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008166 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008167 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008168 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008169 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008170 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008171 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008172 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008173 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008174 ;;
8175 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008176 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008177 if test -n "${cxx}"; then
8178 disas_config "NANOMIPS"
8179 fi
Juan Quintela64656022009-08-03 14:46:53 +02008180 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008181 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008182 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008183 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008184 nios2)
8185 disas_config "NIOS2"
8186 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008187 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008188 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008189 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008190 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008191 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008192 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008193 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008194 disas_config "RISCV"
8195 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08008196 rx)
8197 disas_config "RX"
8198 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008199 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008200 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008201 ;;
8202 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008203 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008204 ;;
8205 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008206 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008207 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008208 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008209 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008210 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008211 esac
8212done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008213if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008214 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008215fi
Juan Quintela64656022009-08-03 14:46:53 +02008216
Juan Quintela6ee71262009-08-03 14:46:47 +02008217case "$ARCH" in
8218alpha)
8219 # Ensure there's only a single GP
8220 cflags="-msmall-data $cflags"
8221;;
8222esac
8223
Juan Quintelad02c1db2009-08-03 14:46:50 +02008224if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008225 if test "$target_linux_user" = "yes" ; then
8226 cflags="-p $cflags"
8227 ldflags="-p $ldflags"
8228 fi
8229 if test "$target_softmmu" = "yes" ; then
8230 ldflags="-p $ldflags"
Juan Quintela25be210f2009-10-07 02:41:00 +02008231 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008232 fi
8233fi
8234
Christian Borntraegere9a35912017-08-23 12:16:23 +02008235# Newer kernels on s390 check for an S390_PGSTE program header and
8236# enable the pgste page table extensions in that case. This makes
8237# the vm.allocate_pgste sysctl unnecessary. We enable this program
8238# header if
8239# - we build on s390x
8240# - we build the system emulation for s390x (qemu-system-s390x)
8241# - KVM is enabled
8242# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008243if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8244 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008245 if ld_has --s390-pgste ; then
8246 ldflags="-Wl,--s390-pgste $ldflags"
8247 fi
8248fi
8249
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008250echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be210f2009-10-07 02:41:00 +02008251echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008252
bellard97a847b2003-08-10 21:36:04 +00008253done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008254
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008255echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8256echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8257
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008258if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008259 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008260fi
Richard Hendersone219c492017-09-28 09:01:23 -07008261if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008262 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008263fi
8264if test -n "$LIBCAPSTONE"; then
8265 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8266fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008267
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008268if test "$numa" = "yes"; then
8269 echo "CONFIG_NUMA=y" >> $config_host_mak
8270fi
8271
John Snowfd0e6052015-03-25 18:57:39 -04008272if test "$ccache_cpp2" = "yes"; then
8273 echo "export CCACHE_CPP2=y" >> $config_host_mak
8274fi
8275
Peter Maydelle29e5c62018-11-02 11:52:38 +00008276# If we're using a separate build tree, set it up now.
8277# DIRS are directories which we simply mkdir in the build tree;
8278# LINKS are things to symlink back into the source tree
8279# (these can be both files and directories).
8280# Caution: do not add files or directories here using wildcards. This
8281# will result in problems later if a new file matching the wildcard is
8282# added to the source tree -- nothing will cause configure to be rerun
8283# so the build tree will be missing the link back to the new file, and
8284# tests might fail. Prefer to keep the relevant files in their own
8285# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008286DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8287DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008288DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008289DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008290DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008291LINKS="Makefile"
8292LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8293LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008294LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008295LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008296LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8297LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8298LINKS="$LINKS pc-bios/qemu-icon.bmp"
8299LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008300LINKS="$LINKS tests/acceptance tests/data"
8301LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008302LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008303for bios_file in \
8304 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008305 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008306 $source_path/pc-bios/*.rom \
8307 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008308 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008309 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008310 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008311 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008312 $source_path/pc-bios/palcode-*
8313do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008314 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008315done
8316mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008317for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008318 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008319 symlink "$source_path/$f" "$f"
8320 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008321done
Paul Brook1ad21342009-05-19 16:17:58 +01008322
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008323(for i in $cross_cc_vars; do
8324 export $i
8325done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008326export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008327$source_path/tests/tcg/configure.sh)
8328
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008329# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008330for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008331 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008332 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008333 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008334 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008335 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008336 echo "CC=$cc" >> $config_mak
8337 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008338 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008339 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008340 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008341 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008342 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008343done
8344
Max Reitz76c75602014-05-24 23:24:56 +02008345# set up qemu-iotests in this build directory
8346iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008347
8348echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8349echo >> "$iotests_common_env"
8350echo "export PYTHON='$python'" >> "$iotests_common_env"
8351
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008352# Save the configure command line for later reuse.
8353cat <<EOD >config.status
8354#!/bin/sh
8355# Generated by configure.
8356# Run this file to recreate the current configuration.
8357# Compiler output produced by configure, useful for debugging
8358# configure, is in config.log if it exists.
8359EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008360
8361preserve_env() {
8362 envname=$1
8363
8364 eval envval=\$$envname
8365
8366 if test -n "$envval"
8367 then
8368 echo "$envname='$envval'" >> config.status
8369 echo "export $envname" >> config.status
8370 else
8371 echo "unset $envname" >> config.status
8372 fi
8373}
8374
8375# Preserve various env variables that influence what
8376# features/build target configure will detect
8377preserve_env AR
8378preserve_env AS
8379preserve_env CC
8380preserve_env CPP
8381preserve_env CXX
8382preserve_env INSTALL
8383preserve_env LD
8384preserve_env LD_LIBRARY_PATH
8385preserve_env LIBTOOL
8386preserve_env MAKE
8387preserve_env NM
8388preserve_env OBJCOPY
8389preserve_env PATH
8390preserve_env PKG_CONFIG
8391preserve_env PKG_CONFIG_LIBDIR
8392preserve_env PKG_CONFIG_PATH
8393preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008394preserve_env SDL2_CONFIG
8395preserve_env SMBD
8396preserve_env STRIP
8397preserve_env WINDRES
8398
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008399printf "exec" >>config.status
8400printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008401echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008402chmod +x config.status
8403
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008404rm -r "$TMPDIR1"