blob: dbc16b5656d91190c683ccb4266a88b11a1e196b [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"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100512
Peter Maydell898be3e2017-03-21 14:31:57 +0000513supported_cpu="no"
514supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100515bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800516malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000517
aliguoriac0df512008-12-29 17:14:15 +0000518# parse CC options first
519for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200520 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000521 case "$opt" in
522 --cross-prefix=*) cross_prefix="$optarg"
523 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100524 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000525 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400526 --cxx=*) CXX="$optarg"
527 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200528 --cpu=*) cpu="$optarg"
529 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100530 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100531 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200532 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100533 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100534 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100535 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100536 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200537 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100538 --enable-debug-info) debug_info="yes"
539 ;;
540 --disable-debug-info) debug_info="no"
541 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100542 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
543 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100544 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
545 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200546 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100547 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100548 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200549 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100550 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200551 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100552 ;;
aliguoriac0df512008-12-29 17:14:15 +0000553 esac
554done
aliguoriac0df512008-12-29 17:14:15 +0000555# OS specific
556# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100557# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000558
Peter Maydelle49d0212012-12-07 15:39:13 +0000559# Preferred compiler:
560# ${CC} (if set)
561# ${cross_prefix}gcc (if cross-prefix specified)
562# system compiler
563if test -z "${CC}${cross_prefix}"; then
564 cc="$host_cc"
565else
566 cc="${CC-${cross_prefix}gcc}"
567fi
568
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400569if test -z "${CXX}${cross_prefix}"; then
570 cxx="c++"
571else
572 cxx="${CXX-${cross_prefix}g++}"
573fi
574
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500575ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700576as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700577ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000578cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500579objcopy="${OBJCOPY-${cross_prefix}objcopy}"
580ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800581ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200582nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500583strip="${STRIP-${cross_prefix}strip}"
584windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300585pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
586query_pkg_config() {
587 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
588}
589pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000590sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000591
Peter Maydell45d285a2013-10-21 21:03:06 +0100592# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
593ARFLAGS="${ARFLAGS-rv}"
594
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200595# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100596# We use -fwrapv to tell the compiler that we require a C dialect where
597# left shift of signed integers is well defined and has the expected
598# 2s-complement style results. (Both clang and gcc agree that it
599# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100600QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400601QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100602QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200603QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200604QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200605QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100606if test "$debug_info" = "yes"; then
607 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100608fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200609
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300610# running configure in the source tree?
611# we know that's the case if configure is there.
612if test -f "./configure"; then
613 pwd_is_source_path="y"
614else
615 pwd_is_source_path="n"
616fi
617
aliguoriac0df512008-12-29 17:14:15 +0000618check_define() {
619cat > $TMPC <<EOF
620#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000621#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000622#endif
623int main(void) { return 0; }
624EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200625 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000626}
627
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200628check_include() {
629cat > $TMPC <<EOF
630#include <$1>
631int main(void) { return 0; }
632EOF
633 compile_object
634}
635
John Snow93b25862015-03-25 18:57:37 -0400636write_c_skeleton() {
637 cat > $TMPC <<EOF
638int main(void) { return 0; }
639EOF
640}
641
Alexander Bulekovadc28022020-02-19 23:11:14 -0500642write_c_fuzzer_skeleton() {
643 cat > $TMPC <<EOF
644#include <stdint.h>
645#include <sys/types.h>
646int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
647int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
648EOF
649}
650
Peter Maydellbbea4052012-08-14 15:35:34 +0100651if check_define __linux__ ; then
652 targetos="Linux"
653elif check_define _WIN32 ; then
654 targetos='MINGW32'
655elif check_define __OpenBSD__ ; then
656 targetos='OpenBSD'
657elif check_define __sun__ ; then
658 targetos='SunOS'
659elif check_define __HAIKU__ ; then
660 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100661elif check_define __FreeBSD__ ; then
662 targetos='FreeBSD'
663elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
664 targetos='GNU/kFreeBSD'
665elif check_define __DragonFly__ ; then
666 targetos='DragonFly'
667elif check_define __NetBSD__; then
668 targetos='NetBSD'
669elif check_define __APPLE__; then
670 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100671else
Peter Maydell951fedf2017-07-13 16:15:32 +0100672 # This is a fatal error, but don't report it yet, because we
673 # might be going to just print the --help text, or it might
674 # be the result of a missing compiler.
675 targetos='bogus'
676 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100677fi
678
679# Some host OSes need non-standard checks for which CPU to use.
680# Note that these checks are broken for cross-compilation: if you're
681# cross-compiling to one of these OSes then you'll need to specify
682# the correct CPU with the --cpu option.
683case $targetos in
684Darwin)
685 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
686 # run 64-bit userspace code.
687 # If the user didn't specify a CPU explicitly and the kernel says this is
688 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
689 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
690 cpu="x86_64"
691 fi
692 ;;
693SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200694 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100695 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
696 cpu="x86_64"
697 fi
698esac
699
Juan Quintela2ff6b912009-08-03 14:45:55 +0200700if test ! -z "$cpu" ; then
701 # command line argument
702 :
703elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000704 cpu="i386"
705elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700706 if check_define __ILP32__ ; then
707 cpu="x32"
708 else
709 cpu="x86_64"
710 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000711elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000712 if check_define __arch64__ ; then
713 cpu="sparc64"
714 else
715 cpu="sparc"
716 fi
malcfdf7ed92009-01-14 18:39:52 +0000717elif check_define _ARCH_PPC ; then
718 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700719 if check_define _LITTLE_ENDIAN ; then
720 cpu="ppc64le"
721 else
722 cpu="ppc64"
723 fi
malcfdf7ed92009-01-14 18:39:52 +0000724 else
725 cpu="ppc"
726 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200727elif check_define __mips__ ; then
728 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200729elif check_define __s390__ ; then
730 if check_define __s390x__ ; then
731 cpu="s390x"
732 else
733 cpu="s390"
734 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000735elif check_define __riscv ; then
736 if check_define _LP64 ; then
737 cpu="riscv64"
738 else
739 cpu="riscv32"
740 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100741elif check_define __arm__ ; then
742 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100743elif check_define __aarch64__ ; then
744 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000745else
Stefan Weil89138852016-05-16 15:10:20 +0200746 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000747fi
748
Peter Maydell359bc952011-12-24 13:07:25 +0000749ARCH=
750# Normalise host CPU name and set ARCH.
751# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000752case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200753 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000754 supported_cpu="yes"
755 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700756 ppc64le)
757 ARCH="ppc64"
758 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700759 ;;
bellard7d132992003-03-06 23:23:54 +0000760 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000761 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000762 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000763 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000764 x86_64|amd64)
765 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000766 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000767 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100768 armv*b|armv*l|arm)
769 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000770 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000771 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100772 aarch64)
773 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000774 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100775 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200776 mips*)
777 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000778 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200779 ;;
blueswir131422552007-04-16 18:27:06 +0000780 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000781 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100782 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000783 ;;
bellard7d132992003-03-06 23:23:54 +0000784 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000785 # This will result in either an error or falling back to TCI later
786 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000787 ;;
788esac
Peter Maydell359bc952011-12-24 13:07:25 +0000789if test -z "$ARCH"; then
790 ARCH="$cpu"
791fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200792
bellard7d132992003-03-06 23:23:54 +0000793# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200794
Stacey Sonadfc3e92014-06-08 09:57:22 -0700795# host *BSD for user mode
796HOST_VARIANT_DIR=""
797
bellard7d132992003-03-06 23:23:54 +0000798case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000799MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200800 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100801 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100802 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200803 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200804 if check_include dsound.h; then
805 audio_drv_list="dsound"
806 else
807 audio_drv_list=""
808 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000809 supported_os="yes"
Alex Bennée469a7882020-04-14 21:06:22 +0100810 pie="no"
bellard67b915a2004-03-31 23:37:16 +0000811;;
ths5c40d2b2007-06-23 16:03:36 +0000812GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100813 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100814 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200815 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000816;;
bellard7d3505c2004-05-12 19:32:15 +0000817FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200818 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100819 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100820 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200821 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100822 # needed for kinfo_getvmmap(3) in libutil.h
823 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500824 # needed for kinfo_getproc
825 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100826 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700827 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000828 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000829;;
blueswir1c5e97232009-03-07 20:06:23 +0000830DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200831 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100832 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100833 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200834 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700835 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000836;;
bellard7d3505c2004-05-12 19:32:15 +0000837NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200838 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100839 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100840 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100841 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200842 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200843 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700844 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200845 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000846;;
847OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200848 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100849 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100850 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200851 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700852 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500853 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000854;;
bellard83fb7ad2004-07-05 21:25:26 +0000855Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200856 bsd="yes"
857 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100858 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500859 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800860 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200861 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200862 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100863 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200864 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200865 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100866 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200867 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100868 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200869 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100870 # Disable attempts to use ObjectiveC features in os/object.h since they
871 # won't work when we're compiling with gcc as a C compiler.
872 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700873 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000874 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000875;;
bellardec530c82006-04-25 22:36:06 +0000876SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200877 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100878 make="${MAKE-gmake}"
879 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400880 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200881 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100882 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200883 fi
884 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000885# needed for CMSG_ macros in sys/socket.h
886 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
887# needed for TIOCWIN* defines in termios.h
888 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200889 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200890 solarisnetlibs="-lsocket -lnsl -lresolv"
891 LIBS="$solarisnetlibs $LIBS"
892 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000893;;
Andreas Färber179cf402010-09-20 00:50:43 +0200894Haiku)
895 haiku="yes"
896 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
897 LIBS="-lposix_error_mapper -lnetwork $LIBS"
898;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000899Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100900 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200901 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200902 linux="yes"
903 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200904 kvm="yes"
Eduardo Habkost67cf3f52020-03-11 19:23:41 -0400905 QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000906 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200907 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000908;;
bellard7d132992003-03-06 23:23:54 +0000909esac
910
bellard7d3505c2004-05-12 19:32:15 +0000911if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000912 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200913 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000914 fi
bellard7d3505c2004-05-12 19:32:15 +0000915fi
916
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100917: ${make=${MAKE-make}}
918: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000919# We prefer python 3.x. A bare 'python' is traditionally
920# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300921# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000922python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300923for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000924do
925 if has "$binary"
926 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200927 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000928 break
929 fi
930done
Markus Armbruster903458c2020-02-14 18:18:41 +0100931
932sphinx_build=
933for binary in sphinx-build-3 sphinx-build
934do
935 if has "$binary"
936 then
937 sphinx_build=$(command -v "$binary")
938 break
939 fi
940done
941
Alex Bennée39d87c82020-03-03 15:06:20 +0000942# Check for ancillary tools used in testing
943genisoimage=
Alex Bennée3df437c2020-05-19 09:22:48 -0400944for binary in genisoimage mkisofs
Alex Bennée39d87c82020-03-03 15:06:20 +0000945do
946 if has $binary
947 then
948 genisoimage=$(command -v "$binary")
949 break
950 fi
951done
952
Brade2d88302011-09-02 16:53:28 -0400953: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100954
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100955# Default objcc to clang if available, otherwise use CC
956if has clang; then
957 objcc=clang
958else
959 objcc="$cc"
960fi
961
Juan Quintela3457a3f2009-08-03 14:46:07 +0200962if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200963 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800964 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100965 # MinGW needs -mthreads for TLS and macro _MT.
966 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100967 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400968 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100969 if compile_prog "" "-liberty" ; then
970 LIBS="-liberty $LIBS"
971 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200972 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200973 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300974 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300975 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200976 bindir="\${prefix}"
977 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200978 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200979 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300980 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200981fi
982
Anthony Liguori487fefd2009-06-11 13:28:25 -0500983werror=""
bellard85aa5182007-11-11 20:17:03 +0000984
bellard7d132992003-03-06 23:23:54 +0000985for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200986 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000987 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000988 --help|-h) show_help=yes
989 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400990 --version|-V) exec cat $source_path/VERSION
991 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000992 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000993 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000994 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000995 ;;
aliguoriac0df512008-12-29 17:14:15 +0000996 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000997 ;;
aliguoriac0df512008-12-29 17:14:15 +0000998 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000999 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001000 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +00001001 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04001002 --cxx=*)
1003 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +02001004 --iasl=*) iasl="$optarg"
1005 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +01001006 --objcc=*) objcc="$optarg"
1007 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001008 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +00001009 ;;
pbrook6a882642006-04-17 13:57:12 +00001010 --install=*) install="$optarg"
1011 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +00001012 --python=*) python="$optarg"
1013 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001014 --sphinx-build=*) sphinx_build="$optarg"
1015 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001016 --gcov=*) gcov_tool="$optarg"
1017 ;;
Brade2d88302011-09-02 16:53:28 -04001018 --smbd=*) smbd="$optarg"
1019 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001020 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001021 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001022 --extra-cxxflags=*)
1023 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001024 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001025 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001026 --enable-debug-info)
1027 ;;
1028 --disable-debug-info)
1029 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001030 --cross-cc-*)
1031 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001032 --enable-modules)
1033 modules="yes"
1034 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001035 --disable-modules)
1036 modules="no"
1037 ;;
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01001038 --disable-module-upgrades) module_upgrades="no"
1039 ;;
1040 --enable-module-upgrades) module_upgrades="yes"
1041 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001042 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001043 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001044 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001045 if test "$target_list_exclude"; then
1046 error_exit "Can't mix --target-list with --target-list-exclude"
1047 fi
1048 ;;
1049 --target-list-exclude=*) target_list_exclude="$optarg"
1050 if test "$target_list"; then
1051 error_exit "Can't mix --target-list-exclude with --target-list"
1052 fi
bellardde83cd02003-06-15 20:25:43 +00001053 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001054 --enable-trace-backends=*) trace_backends="$optarg"
1055 ;;
1056 # XXX: backwards compatibility
1057 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001058 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001059 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001060 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001061 --with-default-devices) default_devices="yes"
1062 ;;
1063 --without-default-devices) default_devices="no"
1064 ;;
bellard7d132992003-03-06 23:23:54 +00001065 --enable-gprof) gprof="yes"
1066 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001067 --enable-gcov) gcov="yes"
1068 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001069 --static)
1070 static="yes"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001071 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001072 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001073 --mandir=*) mandir="$optarg"
1074 ;;
1075 --bindir=*) bindir="$optarg"
1076 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001077 --libdir=*) libdir="$optarg"
1078 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001079 --libexecdir=*) libexecdir="$optarg"
1080 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001081 --includedir=*) includedir="$optarg"
1082 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001083 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001084 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001085 --with-confsuffix=*) confsuffix="$optarg"
1086 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001087 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001088 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001089 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001090 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001091 --localstatedir=*) local_statedir="$optarg"
1092 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001093 --firmwarepath=*) firmwarepath="$optarg"
1094 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001095 --host=*|--build=*|\
1096 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001097 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001098 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1099 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1100 # These switches are silently ignored, for compatibility with
1101 # autoconf-generated configure scripts. This allows QEMU's
1102 # configure to be used by RPM and similar macros that set
1103 # lots of directory switches by default.
1104 ;;
bellard97a847b2003-08-10 21:36:04 +00001105 --disable-sdl) sdl="no"
1106 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001107 --enable-sdl) sdl="yes"
1108 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001109 --disable-sdl-image) sdl_image="no"
1110 ;;
1111 --enable-sdl-image) sdl_image="yes"
1112 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001113 --disable-qom-cast-debug) qom_cast_debug="no"
1114 ;;
1115 --enable-qom-cast-debug) qom_cast_debug="yes"
1116 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301117 --disable-virtfs) virtfs="no"
1118 ;;
1119 --enable-virtfs) virtfs="yes"
1120 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001121 --disable-mpath) mpath="no"
1122 ;;
1123 --enable-mpath) mpath="yes"
1124 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001125 --disable-vnc) vnc="no"
1126 ;;
1127 --enable-vnc) vnc="yes"
1128 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001129 --oss-lib=*) oss_lib="$optarg"
1130 ;;
malc0c58ac12008-06-25 21:04:05 +00001131 --audio-drv-list=*) audio_drv_list="$optarg"
1132 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001133 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001134 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001135 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001136 ;;
aurel32f8393942009-04-13 18:45:38 +00001137 --enable-debug-tcg) debug_tcg="yes"
1138 ;;
1139 --disable-debug-tcg) debug_tcg="no"
1140 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001141 --enable-debug)
1142 # Enable debugging options that aren't excessively noisy
1143 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001144 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001145 debug="yes"
1146 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001147 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001148 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001149 --enable-sanitizers) sanitizers="yes"
1150 ;;
1151 --disable-sanitizers) sanitizers="no"
1152 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001153 --enable-sparse) sparse="yes"
1154 ;;
1155 --disable-sparse) sparse="no"
1156 ;;
aliguori1625af82009-04-05 17:41:02 +00001157 --disable-strip) strip_opt="no"
1158 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001159 --disable-vnc-sasl) vnc_sasl="no"
1160 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001161 --enable-vnc-sasl) vnc_sasl="yes"
1162 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001163 --disable-vnc-jpeg) vnc_jpeg="no"
1164 ;;
1165 --enable-vnc-jpeg) vnc_jpeg="yes"
1166 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001167 --disable-vnc-png) vnc_png="no"
1168 ;;
1169 --enable-vnc-png) vnc_png="yes"
1170 ;;
bellard443f1372004-06-04 11:13:20 +00001171 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001172 ;;
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02001173 --enable-slirp=git) slirp="git"
1174 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001175 --enable-slirp=system) slirp="system"
1176 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001177 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001178 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001179 --enable-vde) vde="yes"
1180 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001181 --disable-netmap) netmap="no"
1182 ;;
1183 --enable-netmap) netmap="yes"
1184 ;;
aliguorie37630c2009-04-22 15:19:10 +00001185 --disable-xen) xen="no"
1186 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001187 --enable-xen) xen="yes"
1188 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001189 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1190 ;;
1191 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1192 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001193 --disable-brlapi) brlapi="no"
1194 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001195 --enable-brlapi) brlapi="yes"
1196 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001197 --disable-kvm) kvm="no"
1198 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001199 --enable-kvm) kvm="yes"
1200 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001201 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001202 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001203 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001204 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001205 --disable-hvf) hvf="no"
1206 ;;
1207 --enable-hvf) hvf="yes"
1208 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001209 --disable-whpx) whpx="no"
1210 ;;
1211 --enable-whpx) whpx="yes"
1212 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001213 --disable-tcg-interpreter) tcg_interpreter="no"
1214 ;;
1215 --enable-tcg-interpreter) tcg_interpreter="yes"
1216 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001217 --disable-cap-ng) cap_ng="no"
1218 ;;
1219 --enable-cap-ng) cap_ng="yes"
1220 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001221 --disable-tcg) tcg="no"
1222 ;;
1223 --enable-tcg) tcg="yes"
1224 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001225 --disable-malloc-trim) malloc_trim="no"
1226 ;;
1227 --enable-malloc-trim) malloc_trim="yes"
1228 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001229 --disable-spice) spice="no"
1230 ;;
1231 --enable-spice) spice="yes"
1232 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001233 --disable-libiscsi) libiscsi="no"
1234 ;;
1235 --enable-libiscsi) libiscsi="yes"
1236 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001237 --disable-libnfs) libnfs="no"
1238 ;;
1239 --enable-libnfs) libnfs="yes"
1240 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001241 --enable-profiler) profiler="yes"
1242 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001243 --disable-cocoa) cocoa="no"
1244 ;;
malcc2de5c92008-06-28 19:13:06 +00001245 --enable-cocoa)
1246 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001247 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001248 ;;
pbrookcad25d62006-03-19 16:31:11 +00001249 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001250 ;;
pbrookcad25d62006-03-19 16:31:11 +00001251 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001252 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001253 --disable-user)
1254 linux_user="no" ;
1255 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001256 ;;
1257 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001258 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001259 ;;
ths831b7822007-01-18 20:06:33 +00001260 --enable-linux-user) linux_user="yes"
1261 ;;
blueswir184778502008-10-26 20:33:16 +00001262 --disable-bsd-user) bsd_user="no"
1263 ;;
1264 --enable-bsd-user) bsd_user="yes"
1265 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001266 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001267 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001268 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001269 ;;
bellard85aa5182007-11-11 20:17:03 +00001270 --enable-werror) werror="yes"
1271 ;;
1272 --disable-werror) werror="no"
1273 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001274 --enable-stack-protector) stack_protector="yes"
1275 ;;
1276 --disable-stack-protector) stack_protector="no"
1277 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001278 --disable-curses) curses="no"
1279 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001280 --enable-curses) curses="yes"
1281 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001282 --disable-iconv) iconv="no"
1283 ;;
1284 --enable-iconv) iconv="yes"
1285 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001286 --disable-curl) curl="no"
1287 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001288 --enable-curl) curl="yes"
1289 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001290 --disable-fdt) fdt="no"
1291 ;;
1292 --enable-fdt) fdt="yes"
1293 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001294 --disable-linux-aio) linux_aio="no"
1295 ;;
1296 --enable-linux-aio) linux_aio="yes"
1297 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001298 --disable-linux-io-uring) linux_io_uring="no"
1299 ;;
1300 --enable-linux-io-uring) linux_io_uring="yes"
1301 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001302 --disable-attr) attr="no"
1303 ;;
1304 --enable-attr) attr="yes"
1305 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001306 --disable-membarrier) membarrier="no"
1307 ;;
1308 --enable-membarrier) membarrier="yes"
1309 ;;
ths77755342008-11-27 15:45:16 +00001310 --disable-blobs) blobs="no"
1311 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001312 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001313 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001314 --with-coroutine=*) coroutine="$optarg"
1315 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001316 --disable-coroutine-pool) coroutine_pool="no"
1317 ;;
1318 --enable-coroutine-pool) coroutine_pool="yes"
1319 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001320 --enable-debug-stack-usage) debug_stack_usage="yes"
1321 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001322 --enable-crypto-afalg) crypto_afalg="yes"
1323 ;;
1324 --disable-crypto-afalg) crypto_afalg="no"
1325 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001326 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001327 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001328 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001329 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001330 --disable-vhost-net) vhost_net="no"
1331 ;;
1332 --enable-vhost-net) vhost_net="yes"
1333 ;;
Gonglei042cea22018-03-01 21:46:28 +08001334 --disable-vhost-crypto) vhost_crypto="no"
1335 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001336 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001337 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001338 --disable-vhost-scsi) vhost_scsi="no"
1339 ;;
1340 --enable-vhost-scsi) vhost_scsi="yes"
1341 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001342 --disable-vhost-vsock) vhost_vsock="no"
1343 ;;
1344 --enable-vhost-vsock) vhost_vsock="yes"
1345 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001346 --disable-vhost-user-fs) vhost_user_fs="no"
1347 ;;
1348 --enable-vhost-user-fs) vhost_user_fs="yes"
1349 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001350 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001351 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001352 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001353 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001354 --disable-rbd) rbd="no"
1355 ;;
1356 --enable-rbd) rbd="yes"
1357 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001358 --disable-xfsctl) xfs="no"
1359 ;;
1360 --enable-xfsctl) xfs="yes"
1361 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001362 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001363 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001364 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001365 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001366 --disable-libusb) libusb="no"
1367 ;;
1368 --enable-libusb) libusb="yes"
1369 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001370 --disable-usb-redir) usb_redir="no"
1371 ;;
1372 --enable-usb-redir) usb_redir="yes"
1373 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001374 --disable-zlib-test) zlib="no"
1375 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001376 --disable-lzo) lzo="no"
1377 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001378 --enable-lzo) lzo="yes"
1379 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001380 --disable-snappy) snappy="no"
1381 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001382 --enable-snappy) snappy="yes"
1383 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001384 --disable-bzip2) bzip2="no"
1385 ;;
1386 --enable-bzip2) bzip2="yes"
1387 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001388 --enable-lzfse) lzfse="yes"
1389 ;;
1390 --disable-lzfse) lzfse="no"
1391 ;;
Juan Quintela3a678482019-12-17 21:15:24 +01001392 --disable-zstd) zstd="no"
1393 ;;
1394 --enable-zstd) zstd="yes"
1395 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001396 --enable-guest-agent) guest_agent="yes"
1397 ;;
1398 --disable-guest-agent) guest_agent="no"
1399 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001400 --enable-guest-agent-msi) guest_agent_msi="yes"
1401 ;;
1402 --disable-guest-agent-msi) guest_agent_msi="no"
1403 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001404 --with-vss-sdk) vss_win32_sdk=""
1405 ;;
1406 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1407 ;;
1408 --without-vss-sdk) vss_win32_sdk="no"
1409 ;;
1410 --with-win-sdk) win_sdk=""
1411 ;;
1412 --with-win-sdk=*) win_sdk="$optarg"
1413 ;;
1414 --without-win-sdk) win_sdk="no"
1415 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001416 --enable-tools) want_tools="yes"
1417 ;;
1418 --disable-tools) want_tools="no"
1419 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001420 --enable-seccomp) seccomp="yes"
1421 ;;
1422 --disable-seccomp) seccomp="no"
1423 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301424 --disable-glusterfs) glusterfs="no"
1425 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001426 --disable-avx2) avx2_opt="no"
1427 ;;
1428 --enable-avx2) avx2_opt="yes"
1429 ;;
Robert Hoo6b8cd442020-02-29 20:34:34 +08001430 --disable-avx512f) avx512f_opt="no"
1431 ;;
1432 --enable-avx512f) avx512f_opt="yes"
1433 ;;
1434
Bharata B Raoeb100392012-09-24 14:42:45 +05301435 --enable-glusterfs) glusterfs="yes"
1436 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001437 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1438 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001439 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001440 --enable-vhdx|--disable-vhdx)
1441 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1442 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001443 --enable-uuid|--disable-uuid)
1444 echo "$0: $opt is obsolete, UUID support is always built" >&2
1445 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001446 --disable-gtk) gtk="no"
1447 ;;
1448 --enable-gtk) gtk="yes"
1449 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001450 --tls-priority=*) tls_priority="$optarg"
1451 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001452 --disable-gnutls) gnutls="no"
1453 ;;
1454 --enable-gnutls) gnutls="yes"
1455 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001456 --disable-nettle) nettle="no"
1457 ;;
1458 --enable-nettle) nettle="yes"
1459 ;;
1460 --disable-gcrypt) gcrypt="no"
1461 ;;
1462 --enable-gcrypt) gcrypt="yes"
1463 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001464 --disable-auth-pam) auth_pam="no"
1465 ;;
1466 --enable-auth-pam) auth_pam="yes"
1467 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001468 --enable-rdma) rdma="yes"
1469 ;;
1470 --disable-rdma) rdma="no"
1471 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001472 --enable-pvrdma) pvrdma="yes"
1473 ;;
1474 --disable-pvrdma) pvrdma="no"
1475 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001476 --disable-vte) vte="no"
1477 ;;
1478 --enable-vte) vte="yes"
1479 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001480 --disable-virglrenderer) virglrenderer="no"
1481 ;;
1482 --enable-virglrenderer) virglrenderer="yes"
1483 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001484 --disable-tpm) tpm="no"
1485 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001486 --enable-tpm) tpm="yes"
1487 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001488 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001489 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001490 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001491 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001492 --disable-live-block-migration) live_block_migration="no"
1493 ;;
1494 --enable-live-block-migration) live_block_migration="yes"
1495 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001496 --disable-numa) numa="no"
1497 ;;
1498 --enable-numa) numa="yes"
1499 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001500 --disable-libxml2) libxml2="no"
1501 ;;
1502 --enable-libxml2) libxml2="yes"
1503 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001504 --disable-tcmalloc) tcmalloc="no"
1505 ;;
1506 --enable-tcmalloc) tcmalloc="yes"
1507 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001508 --disable-jemalloc) jemalloc="no"
1509 ;;
1510 --enable-jemalloc) jemalloc="yes"
1511 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001512 --disable-replication) replication="no"
1513 ;;
1514 --enable-replication) replication="yes"
1515 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001516 --disable-vxhs) vxhs="no"
1517 ;;
1518 --enable-vxhs) vxhs="yes"
1519 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001520 --disable-bochs) bochs="no"
1521 ;;
1522 --enable-bochs) bochs="yes"
1523 ;;
1524 --disable-cloop) cloop="no"
1525 ;;
1526 --enable-cloop) cloop="yes"
1527 ;;
1528 --disable-dmg) dmg="no"
1529 ;;
1530 --enable-dmg) dmg="yes"
1531 ;;
1532 --disable-qcow1) qcow1="no"
1533 ;;
1534 --enable-qcow1) qcow1="yes"
1535 ;;
1536 --disable-vdi) vdi="no"
1537 ;;
1538 --enable-vdi) vdi="yes"
1539 ;;
1540 --disable-vvfat) vvfat="no"
1541 ;;
1542 --enable-vvfat) vvfat="yes"
1543 ;;
1544 --disable-qed) qed="no"
1545 ;;
1546 --enable-qed) qed="yes"
1547 ;;
1548 --disable-parallels) parallels="no"
1549 ;;
1550 --enable-parallels) parallels="yes"
1551 ;;
1552 --disable-sheepdog) sheepdog="no"
1553 ;;
1554 --enable-sheepdog) sheepdog="yes"
1555 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001556 --disable-vhost-user) vhost_user="no"
1557 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001558 --enable-vhost-user) vhost_user="yes"
1559 ;;
1560 --disable-vhost-kernel) vhost_kernel="no"
1561 ;;
1562 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001563 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001564 --disable-capstone) capstone="no"
1565 ;;
1566 --enable-capstone) capstone="yes"
1567 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001568 --enable-capstone=git) capstone="git"
1569 ;;
1570 --enable-capstone=system) capstone="system"
1571 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001572 --with-git=*) git="$optarg"
1573 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001574 --enable-git-update) git_update=yes
1575 ;;
1576 --disable-git-update) git_update=no
1577 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001578 --enable-debug-mutex) debug_mutex=yes
1579 ;;
1580 --disable-debug-mutex) debug_mutex=no
1581 ;;
Junyan He17824402018-07-18 15:47:59 +08001582 --enable-libpmem) libpmem=yes
1583 ;;
1584 --disable-libpmem) libpmem=no
1585 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001586 --enable-xkbcommon) xkbcommon=yes
1587 ;;
1588 --disable-xkbcommon) xkbcommon=no
1589 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001590 --enable-plugins) plugins="yes"
1591 ;;
1592 --disable-plugins) plugins="no"
1593 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001594 --enable-containers) use_containers="yes"
1595 ;;
1596 --disable-containers) use_containers="no"
1597 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001598 --enable-fuzzing) fuzzing=yes
1599 ;;
1600 --disable-fuzzing) fuzzing=no
1601 ;;
Alex Bennéef48e5902020-03-16 17:21:48 +00001602 --gdb=*) gdb_bin="$optarg"
1603 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001604 *)
1605 echo "ERROR: unknown option $opt"
1606 echo "Try '$0 --help' for more information"
1607 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001608 ;;
bellard7d132992003-03-06 23:23:54 +00001609 esac
1610done
1611
bellard40293e52008-01-31 11:32:10 +00001612case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001613 ppc)
1614 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001615 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001616 ;;
1617 ppc64)
1618 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001619 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001620 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001621 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001622 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001623 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001624 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001625 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001626 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001627 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001628 ;;
ths76d83bd2007-11-18 21:22:10 +00001629 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001630 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001631 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001632 ;;
1633 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001634 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001635 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001636 ;;
bellard40293e52008-01-31 11:32:10 +00001637 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001638 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001639 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001640 ;;
1641 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001642 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1643 # If we truly care, we should simply detect this case at
1644 # runtime and generate the fallback to serial emulation.
1645 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001646 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001647 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001648 x32)
1649 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001650 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001651 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001652 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001653esac
1654
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001655eval "cross_cc_${cpu}=\$host_cc"
1656cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001657QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001658
Peter Maydellaffc88c2016-06-13 11:32:24 +01001659# For user-mode emulation the host arch has to be one we explicitly
1660# support, even if we're using TCI.
1661if [ "$ARCH" = "unknown" ]; then
1662 bsd_user="no"
1663 linux_user="no"
1664fi
1665
Philippe Mathieu-Daudé1cf295b2020-05-22 19:24:59 +02001666if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1667 tcg="no"
1668fi
1669
Peter Maydell60e0df22011-05-03 14:50:13 +01001670default_target_list=""
1671
Peter Maydell6e92f822013-05-20 16:16:15 +01001672mak_wilds=""
1673
1674if [ "$softmmu" = "yes" ]; then
1675 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001676fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001677if [ "$linux_user" = "yes" ]; then
1678 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001679fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001680if [ "$bsd_user" = "yes" ]; then
1681 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001682fi
1683
Alex Bennée447e1332019-03-19 11:59:12 +00001684if test -z "$target_list_exclude"; then
1685 for config in $mak_wilds; do
1686 default_target_list="${default_target_list} $(basename "$config" .mak)"
1687 done
1688else
1689 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1690 for config in $mak_wilds; do
1691 target="$(basename "$config" .mak)"
1692 exclude="no"
1693 for excl in $exclude_list; do
1694 if test "$excl" = "$target"; then
1695 exclude="yes"
1696 break;
1697 fi
1698 done
1699 if test "$exclude" = "no"; then
1700 default_target_list="${default_target_list} $target"
1701 fi
1702 done
1703fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001704
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001705# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001706trace_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 +01001707
pbrookaf5db582006-04-08 14:26:41 +00001708if test x"$show_help" = x"yes" ; then
1709cat << EOF
1710
1711Usage: configure [options]
1712Options: [defaults in brackets after descriptions]
1713
Stefan Weil08fb77e2013-12-18 22:09:39 +01001714Standard options:
1715 --help print this message
1716 --prefix=PREFIX install in PREFIX [$prefix]
1717 --interp-prefix=PREFIX where to find shared libraries, etc.
1718 use %M for cpu name [$interp_prefix]
1719 --target-list=LIST set target list (default: build everything)
1720$(echo Available targets: $default_target_list | \
1721 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001722 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001723
1724Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001725 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1726 --cc=CC use C compiler CC [$cc]
1727 --iasl=IASL use ACPI compiler IASL [$iasl]
1728 --host-cc=CC use C compiler CC [$host_cc] for code run at
1729 build time
1730 --cxx=CXX use C++ compiler CXX [$cxx]
1731 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1732 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001733 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001734 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001735 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001736 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001737 --make=MAKE use specified make [$make]
1738 --install=INSTALL use specified install [$install]
1739 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001740 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001741 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001742 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001743 --static enable static build [$static]
1744 --mandir=PATH install man pages in PATH
1745 --datadir=PATH install firmware in PATH$confsuffix
1746 --docdir=PATH install documentation in PATH$confsuffix
1747 --bindir=PATH install binaries in PATH
1748 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001749 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001750 --sysconfdir=PATH install config in PATH$confsuffix
1751 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001752 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001753 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001754 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001755 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001756 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001757 --disable-strip disable stripping binaries
1758 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001759 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001760 --audio-drv-list=LIST set audio drivers list:
1761 Available drivers: $audio_possible_drivers
1762 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1763 --block-drv-rw-whitelist=L
1764 set block driver read-write whitelist
1765 (affects only QEMU, not qemu-img)
1766 --block-drv-ro-whitelist=L
1767 set block driver read-only whitelist
1768 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001769 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001770 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001771 --with-trace-file=NAME Full PATH,NAME of file to store traces
1772 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001773 --disable-slirp disable SLIRP userspace network connectivity
1774 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001775 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001776 --oss-lib path to OSS library
1777 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001778 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001779 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001780 --enable-gcov enable test coverage analysis with gcov
1781 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001782 --disable-blobs disable installing provided firmware blobs
1783 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1784 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001785 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001786 --enable-gprof QEMU profiling with gprof
1787 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001788 --enable-debug-stack-usage
1789 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001790 --enable-plugins
1791 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001792 --disable-containers don't use containers for cross-building
Alex Bennéef48e5902020-03-16 17:21:48 +00001793 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001794
1795Optional features, enabled with --enable-FEATURE and
1796disabled with --disable-FEATURE, default is enabled if available:
1797
1798 system all system emulation targets
1799 user supported user emulation targets
1800 linux-user all linux usermode emulation targets
1801 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001802 docs build documentation
1803 guest-agent build the QEMU Guest Agent
1804 guest-agent-msi build guest agent Windows MSI installation package
1805 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001806 modules modules support (non-Windows)
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01001807 module-upgrades try to load modules from alternate paths for upgrades
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001808 debug-tcg TCG debugging (default is disabled)
1809 debug-info debugging information
1810 sparse sparse checker
1811
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001812 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001813 nettle nettle cryptography support
1814 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001815 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001816 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001817 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001818 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001819 vte vte support for the gtk UI
1820 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001821 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001822 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001823 vnc-sasl SASL encryption for VNC server
1824 vnc-jpeg JPEG lossy compression for VNC server
1825 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001826 cocoa Cocoa UI (Mac OS X only)
1827 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001828 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001829 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001830 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001831 brlapi BrlAPI (Braile)
1832 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001833 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001834 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001835 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001836 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001837 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001838 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001839 rdma Enable RDMA-based migration
1840 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001841 vde support for vde network
1842 netmap support for netmap network
1843 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001844 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001845 cap-ng libcap-ng support
1846 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001847 vhost-net vhost-net kernel acceleration support
1848 vhost-vsock virtio sockets device support
1849 vhost-scsi vhost-scsi kernel target support
1850 vhost-crypto vhost-user-crypto backend support
1851 vhost-kernel vhost kernel backend support
1852 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001853 spice spice
1854 rbd rados block device (rbd)
1855 libiscsi iscsi support
1856 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001857 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001858 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001859 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001860 usb-redir usb network redirection support
1861 lzo support of lzo compression library
1862 snappy support of snappy compression library
1863 bzip2 support of bzip2 compression library
1864 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001865 lzfse support of lzfse compression library
1866 (for reading lzfse-compressed dmg images)
Juan Quintela3a678482019-12-17 21:15:24 +01001867 zstd support for zstd compression library
Denis Plotnikovd298ac12020-05-07 11:25:20 +03001868 (for migration compression and qcow2 cluster compression)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001869 seccomp seccomp support
1870 coroutine-pool coroutine freelist (better performance)
1871 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001872 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001873 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001874 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001875 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001876 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001877 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001878 avx2 AVX2 optimization support
Robert Hoo6b8cd442020-02-29 20:34:34 +08001879 avx512f AVX512F optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001880 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001881 opengl opengl support
1882 virglrenderer virgl rendering support
1883 xfsctl xfsctl support
1884 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001885 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001886 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001887 bochs bochs image format support
1888 cloop cloop image format support
1889 dmg dmg image format support
1890 qcow1 qcow v1 image format support
1891 vdi vdi image format support
1892 vvfat vvfat image format support
1893 qed qed image format support
1894 parallels parallels image format support
1895 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001896 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001897 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001898 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001899 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001900 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001901
1902NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001903EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001904exit 0
pbrookaf5db582006-04-08 14:26:41 +00001905fi
1906
Thomas Huth9c790242019-03-11 11:20:34 +01001907# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001908rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001909
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001910# Remove syscall_nr.h to be sure they will be regenerated in the build
1911# directory, not in the source directory
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01001912for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
Laurent Vivier686a0fe2020-03-10 11:33:59 +01001913 i386 x86_64 mips mips64 ; do
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001914 # remove the file if it has been generated in the source directory
1915 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1916 # remove the dependency files
Laurent Vivier91e59982020-03-25 08:57:57 +01001917 for target in ${arch}*-linux-user ; do
1918 test -d "${target}" && find "${target}" -type f -name "*.d" \
1919 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1920 -print | while read file ; do rm "${file}" "${file%.d}.o" ; done
1921 done
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001922done
1923
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001924if test -z "$python"
1925then
1926 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001927fi
1928
1929# Note that if the Python conditional here evaluates True we will exit
1930# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001931if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1932 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001933 "Use --python=/path/to/python to specify a supported Python."
1934fi
1935
Cleber Rosa755ee702018-11-09 10:07:07 -05001936# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001937python_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 -05001938
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001939# Suppress writing compiled files
1940python="$python -B"
1941
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001942# Check that the C compiler works. Doing this here before testing
1943# the host CPU ensures that we had a valid CC to autodetect the
1944# $cpu var (and we should bail right here if that's not the case).
1945# It also allows the help message to be printed without a CC.
1946write_c_skeleton;
1947if compile_object ; then
1948 : C compiler works ok
1949else
1950 error_exit "\"$cc\" either does not exist or does not work"
1951fi
1952if ! compile_prog ; then
1953 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1954fi
1955
Peter Maydell359bc952011-12-24 13:07:25 +00001956# Now we have handled --enable-tcg-interpreter and know we're not just
1957# printing the help message, bail out if the host CPU isn't supported.
1958if test "$ARCH" = "unknown"; then
1959 if test "$tcg_interpreter" = "yes" ; then
1960 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001961 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001962 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001963 fi
1964fi
1965
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001966# Consult white-list to determine whether to enable werror
1967# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001968if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001969 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001970 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001971 werror="yes"
1972 else
1973 werror="no"
1974 fi
1975fi
1976
Peter Maydellfb59dab2017-03-28 14:01:52 +01001977if test "$bogus_os" = "yes"; then
1978 # Now that we know that we're not printing the help and that
1979 # the compiler works (so the results of the check_defines we used
1980 # to identify the OS are reliable), if we didn't recognize the
1981 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001982 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001983fi
1984
Thomas Huthefc6c072018-12-03 10:12:32 +01001985# Check whether the compiler matches our minimum requirements:
1986cat > $TMPC << EOF
1987#if defined(__clang_major__) && defined(__clang_minor__)
1988# ifdef __apple_build_version__
1989# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1990# error You need at least XCode Clang v5.1 to compile QEMU
1991# endif
1992# else
1993# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1994# error You need at least Clang v3.4 to compile QEMU
1995# endif
1996# endif
1997#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1998# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1999# error You need at least GCC v4.8 to compile QEMU
2000# endif
2001#else
2002# error You either need GCC or Clang to compiler QEMU
2003#endif
2004int main (void) { return 0; }
2005EOF
2006if ! compile_prog "" "" ; then
2007 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2008fi
2009
Paolo Bonzini8d050952010-12-23 11:43:52 +01002010gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
2011gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00002012gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04002013gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02002014gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02002015gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01002016# Note that we do not add -Werror to gcc_flags here, because that would
2017# enable it for all configure tests. If a configure test failed due
2018# to -Werror this would just silently disable some features,
2019# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04002020
2021cc_has_warning_flag() {
2022 write_c_skeleton;
2023
Peter Maydella1d29d62012-10-27 22:19:07 +01002024 # Use the positive sense of the flag when testing for -Wno-wombat
2025 # support (gcc will happily accept the -Wno- form of unknown
2026 # warning options).
John Snow93b25862015-03-25 18:57:37 -04002027 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2028 compile_prog "-Werror $optflag" ""
2029}
2030
2031for flag in $gcc_flags; do
2032 if cc_has_warning_flag $flag ; then
2033 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01002034 fi
2035done
2036
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002037if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02002038 cat > $TMPC << EOF
2039int main(int argc, char *argv[])
2040{
2041 char arr[64], *p = arr, *c = argv[0];
2042 while (*c) {
2043 *p++ = *c++;
2044 }
2045 return 0;
2046}
2047EOF
Steven Noonan63678e12014-03-28 17:19:02 +01002048 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002049 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01002050 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01002051 # We need to check both a compile and a link, since some compiler
2052 # setups fail only on a .c->.o compile and some only at link time
2053 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2054 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01002055 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002056 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002057 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01002058 break
2059 fi
2060 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002061 if test "$stack_protector" = yes; then
2062 if test $sp_on = 0; then
2063 error_exit "Stack protector not supported"
2064 fi
2065 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01002066fi
2067
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02002068# Disable -Wmissing-braces on older compilers that warn even for
2069# the "universal" C zero initializer {0}.
2070cat > $TMPC << EOF
2071struct {
2072 int a[2];
2073} x = {0};
2074EOF
2075if compile_object "-Werror" "" ; then
2076 :
2077else
2078 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2079fi
2080
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002081# Our module code doesn't support Windows
2082if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2083 error_exit "Modules are not available for Windows"
2084fi
2085
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01002086# module_upgrades is only reasonable if modules are enabled
2087if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2088 error_exit "Can't enable module-upgrades as Modules are not enabled"
2089fi
2090
Thomas Huthd376e9d2018-12-03 11:41:38 +01002091# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002092if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002093 if test "$modules" = "yes" ; then
2094 error_exit "static and modules are mutually incompatible"
2095 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002096fi
2097
Emilio G. Cota768b7852015-04-29 13:09:02 +02002098# Unconditional check for compiler __thread support
2099 cat > $TMPC << EOF
2100static __thread int tls_var;
2101int main(void) { return tls_var; }
2102EOF
2103
2104if ! compile_prog "-Werror" "" ; then
2105 error_exit "Your compiler does not support the __thread specifier for " \
2106 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2107fi
2108
Richard Hendersonb2634122019-12-17 13:54:56 -10002109cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002110
2111#ifdef __linux__
2112# define THREAD __thread
2113#else
2114# define THREAD
2115#endif
Avi Kivity21d4a792011-11-23 11:24:25 +02002116static THREAD int tls_var;
Avi Kivity21d4a792011-11-23 11:24:25 +02002117int main(void) { return tls_var; }
Avi Kivity40d64442011-11-15 20:12:17 +02002118EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002119
Richard Hendersonb2634122019-12-17 13:54:56 -10002120# Check we support --no-pie first; we will need this for building ROMs.
2121if compile_prog "-Werror -fno-pie" "-no-pie"; then
2122 CFLAGS_NOPIE="-fno-pie"
2123 LDFLAGS_NOPIE="-no-pie"
2124fi
2125
Richard Henderson12781462019-12-17 15:30:14 -10002126if test "$static" = "yes"; then
Richard Hendersoneca7a8e2020-04-03 20:11:50 +01002127 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
Richard Henderson12781462019-12-17 15:30:14 -10002128 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2129 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2130 pie="yes"
2131 elif test "$pie" = "yes"; then
2132 error_exit "-static-pie not available due to missing toolchain support"
2133 else
2134 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2135 pie="no"
2136 fi
2137elif test "$pie" = "no"; then
Richard Henderson2c674102019-12-17 15:15:01 -10002138 QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS"
2139 QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS"
Richard Hendersoneca7a8e2020-04-03 20:11:50 +01002140elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
Richard Henderson2c674102019-12-17 15:15:01 -10002141 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2142 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
2143 pie="yes"
2144elif test "$pie" = "yes"; then
2145 error_exit "PIE not available due to missing toolchain support"
2146else
2147 echo "Disabling PIE due to missing toolchain support"
2148 pie="no"
Avi Kivity40d64442011-11-15 20:12:17 +02002149fi
2150
Richard Hendersone6cbd752019-12-17 14:00:39 -10002151# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2152# The combination is known as "full relro", because .got.plt is read-only too.
2153if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2154 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2155fi
2156
Paolo Bonzini09dada42013-04-17 16:26:47 +02002157##########################################
2158# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2159# use i686 as default anyway, but for those that don't, an explicit
2160# specification is necessary
2161
2162if test "$cpu" = "i386"; then
2163 cat > $TMPC << EOF
2164static int sfaa(int *ptr)
2165{
2166 return __sync_fetch_and_and(ptr, 0);
2167}
2168
2169int main(void)
2170{
2171 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002172 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002173 sfaa(&val);
2174 return val;
2175}
2176EOF
2177 if ! compile_prog "" "" ; then
2178 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2179 fi
2180fi
2181
2182#########################################
bellardec530c82006-04-25 22:36:06 +00002183# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002184
bellardec530c82006-04-25 22:36:06 +00002185if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002186 if has $install; then
2187 :
2188 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002189 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2190 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2191 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002192 fi
Stefan Weil89138852016-05-16 15:10:20 +02002193 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002194 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2195 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2196 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002197 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002198 if has ar; then
2199 :
2200 else
bellardec530c82006-04-25 22:36:06 +00002201 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002202 error_exit "No path includes ar" \
2203 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002204 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002205 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002206 fi
ths5fafdf22007-09-16 21:08:06 +00002207fi
bellardec530c82006-04-25 22:36:06 +00002208
Stefan Weilafb63eb2012-09-26 22:04:38 +02002209if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002210 for target in $default_target_list; do
2211 supported_target $target 2>/dev/null && \
2212 target_list="$target_list $target"
2213 done
2214 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002215else
Stefan Weil89138852016-05-16 15:10:20 +02002216 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002217 for target in $target_list; do
2218 # Check that we recognised the target name; this allows a more
2219 # friendly error message than if we let it fall through.
2220 case " $default_target_list " in
2221 *" $target "*)
2222 ;;
2223 *)
2224 error_exit "Unknown target name '$target'"
2225 ;;
2226 esac
2227 supported_target $target || exit 1
2228 done
bellard5327cf42005-01-10 23:18:50 +00002229fi
Peter Maydell25b48332013-05-20 16:16:16 +01002230
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002231# see if system emulation was really requested
2232case " $target_list " in
2233 *"-softmmu "*) softmmu=yes
2234 ;;
2235 *) softmmu=no
2236 ;;
2237esac
bellard5327cf42005-01-10 23:18:50 +00002238
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002239for target in $target_list; do
2240 case "$target" in
2241 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2242 edk2_blobs="yes"
2243 ;;
2244 esac
2245done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002246# The EDK2 binaries are compressed with bzip2
2247if test "$edk2_blobs" = "yes" && ! has bzip2; then
2248 error_exit "The bzip2 program is required for building QEMU"
2249fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002250
Juan Quintela249247c2009-08-12 18:20:25 +02002251feature_not_found() {
2252 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002253 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002254
Peter Maydell76ad07a2013-04-08 12:11:26 +01002255 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002256 "configure was not able to find it." \
2257 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002258}
2259
bellard7d132992003-03-06 23:23:54 +00002260# ---
2261# big/little endian test
2262cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002263short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2264short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2265extern int foo(short *, short *);
2266int main(int argc, char *argv[]) {
2267 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002268}
2269EOF
2270
Mike Frysinger61cc9192013-06-30 23:30:18 -04002271if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002272 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002273 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002274 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002275 bigendian="no"
2276 else
2277 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002278 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002279else
2280 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002281fi
2282
Juan Quintelab0a47e72009-08-12 18:29:49 +02002283##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002284# system tools
2285if test -z "$want_tools"; then
2286 if test "$softmmu" = "no"; then
2287 want_tools=no
2288 else
2289 want_tools=yes
2290 fi
2291fi
2292
2293##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002294# cocoa implies not SDL or GTK
2295# (the cocoa UI code currently assumes it is always the active UI
2296# and doesn't interact well with other UI frontend code)
2297if test "$cocoa" = "yes"; then
2298 if test "$sdl" = "yes"; then
2299 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2300 fi
2301 if test "$gtk" = "yes"; then
2302 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2303 fi
2304 gtk=no
2305 sdl=no
2306fi
2307
Eric Blake6b39b062016-10-11 10:46:23 -05002308# Some versions of Mac OS X incorrectly define SIZE_MAX
2309cat > $TMPC << EOF
2310#include <stdint.h>
2311#include <stdio.h>
2312int main(int argc, char *argv[]) {
2313 return printf("%zu", SIZE_MAX);
2314}
2315EOF
2316have_broken_size_max=no
2317if ! compile_object -Werror ; then
2318 have_broken_size_max=yes
2319fi
2320
Peter Maydella30878e2015-08-14 16:10:52 +01002321##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002322# L2TPV3 probe
2323
2324cat > $TMPC <<EOF
2325#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002326#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002327int main(void) { return sizeof(struct mmsghdr); }
2328EOF
2329if compile_prog "" "" ; then
2330 l2tpv3=yes
2331else
2332 l2tpv3=no
2333fi
2334
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002335#########################################
2336# vhost interdependencies and host support
2337
2338# vhost backends
2339test "$vhost_user" = "" && vhost_user=yes
2340if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2341 error_exit "vhost-user isn't available on win32"
2342fi
2343test "$vhost_kernel" = "" && vhost_kernel=$linux
2344if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2345 error_exit "vhost-kernel is only available on Linux"
2346fi
2347
2348# vhost-kernel devices
2349test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2350if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2351 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2352fi
2353test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2354if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2355 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2356fi
2357
2358# vhost-user backends
2359test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2360if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2361 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2362fi
2363test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2364if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2365 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2366fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002367test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2368if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2369 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2370fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002371
2372# OR the vhost-kernel and vhost-user values for simplicity
2373if test "$vhost_net" = ""; then
2374 test "$vhost_net_user" = "yes" && vhost_net=yes
2375 test "$vhost_kernel" = "yes" && vhost_net=yes
2376fi
2377
Gonglei015a33b2014-07-01 20:58:08 +08002378##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002379# MinGW / Mingw-w64 localtime_r/gmtime_r check
2380
2381if test "$mingw32" = "yes"; then
2382 # Some versions of MinGW / Mingw-w64 lack localtime_r
2383 # and gmtime_r entirely.
2384 #
2385 # Some versions of Mingw-w64 define a macro for
2386 # localtime_r/gmtime_r.
2387 #
2388 # Some versions of Mingw-w64 will define functions
2389 # for localtime_r/gmtime_r, but only if you have
2390 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2391 # though, unistd.h and pthread.h both define
2392 # that for you.
2393 #
2394 # So this #undef localtime_r and #include <unistd.h>
2395 # are not in fact redundant.
2396cat > $TMPC << EOF
2397#include <unistd.h>
2398#include <time.h>
2399#undef localtime_r
2400int main(void) { localtime_r(NULL, NULL); return 0; }
2401EOF
2402 if compile_prog "" "" ; then
2403 localtime_r="yes"
2404 else
2405 localtime_r="no"
2406 fi
2407fi
2408
2409##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002410# pkg-config probe
2411
2412if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002413 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002414fi
2415
2416##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002417# NPTL probe
2418
Peter Maydell24cb36a2013-07-16 18:45:00 +01002419if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002420 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002421#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002422#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002423int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002424#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2425#error bork
2426#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002427 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002428}
2429EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002430 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002431 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002432 fi
pbrookbd0c5662008-05-29 14:34:11 +00002433fi
2434
balrogac629222008-10-11 09:56:04 +00002435##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002436# lzo check
2437
2438if test "$lzo" != "no" ; then
2439 cat > $TMPC << EOF
2440#include <lzo/lzo1x.h>
2441int main(void) { lzo_version(); return 0; }
2442EOF
2443 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002444 libs_softmmu="$libs_softmmu -llzo2"
2445 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002446 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002447 if test "$lzo" = "yes"; then
2448 feature_not_found "liblzo2" "Install liblzo2 devel"
2449 fi
2450 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002451 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002452fi
2453
2454##########################################
2455# snappy check
2456
2457if test "$snappy" != "no" ; then
2458 cat > $TMPC << EOF
2459#include <snappy-c.h>
2460int main(void) { snappy_max_compressed_length(4096); return 0; }
2461EOF
2462 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002463 libs_softmmu="$libs_softmmu -lsnappy"
2464 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002465 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002466 if test "$snappy" = "yes"; then
2467 feature_not_found "libsnappy" "Install libsnappy devel"
2468 fi
2469 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002470 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002471fi
2472
2473##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002474# bzip2 check
2475
2476if test "$bzip2" != "no" ; then
2477 cat > $TMPC << EOF
2478#include <bzlib.h>
2479int main(void) { BZ2_bzlibVersion(); return 0; }
2480EOF
2481 if compile_prog "" "-lbz2" ; then
2482 bzip2="yes"
2483 else
2484 if test "$bzip2" = "yes"; then
2485 feature_not_found "libbzip2" "Install libbzip2 devel"
2486 fi
2487 bzip2="no"
2488 fi
2489fi
2490
2491##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002492# lzfse check
2493
2494if test "$lzfse" != "no" ; then
2495 cat > $TMPC << EOF
2496#include <lzfse.h>
2497int main(void) { lzfse_decode_scratch_size(); return 0; }
2498EOF
2499 if compile_prog "" "-llzfse" ; then
2500 lzfse="yes"
2501 else
2502 if test "$lzfse" = "yes"; then
2503 feature_not_found "lzfse" "Install lzfse devel"
2504 fi
2505 lzfse="no"
2506 fi
2507fi
2508
2509##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002510# zstd check
2511
2512if test "$zstd" != "no" ; then
Juan Quintela297254c2020-03-10 12:14:31 +01002513 libzstd_minver="1.4.0"
2514 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
Juan Quintela3a678482019-12-17 21:15:24 +01002515 zstd_cflags="$($pkg_config --cflags libzstd)"
2516 zstd_libs="$($pkg_config --libs libzstd)"
2517 LIBS="$zstd_libs $LIBS"
2518 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2519 zstd="yes"
2520 else
2521 if test "$zstd" = "yes" ; then
2522 feature_not_found "libzstd" "Install libzstd devel"
2523 fi
2524 zstd="no"
2525 fi
2526fi
2527
2528##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002529# libseccomp check
2530
2531if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002532 libseccomp_minver="2.3.0"
2533 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002534 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2535 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002536 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002537 else
Andrew Jones693e5912015-09-30 11:59:18 -04002538 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002539 feature_not_found "libseccomp" \
2540 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002541 fi
2542 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002543 fi
2544fi
2545##########################################
aliguorie37630c2009-04-22 15:19:10 +00002546# xen probe
2547
Juan Quintelafc321b42009-08-12 18:29:55 +02002548if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002549 # Check whether Xen library path is specified via --extra-ldflags to avoid
2550 # overriding this setting with pkg-config output. If not, try pkg-config
2551 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002552
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002553 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2554 $pkg_config --exists xencontrol ; then
2555 xen_ctrl_version="$(printf '%d%02d%02d' \
2556 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2557 xen=yes
2558 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2559 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002560 if $pkg_config --exists xentoolcore; then
2561 xen_pc="$xen_pc xentoolcore"
2562 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002563 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2564 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002565 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002566
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002567 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002568 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002569
2570 # First we test whether Xen headers and libraries are available.
2571 # If no, we are done and there is no Xen support.
2572 # If yes, more tests are run to detect the Xen version.
2573
2574 # Xen (any)
2575 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002576#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002577int main(void) {
2578 return 0;
2579}
2580EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002581 if ! compile_prog "" "$xen_libs" ; then
2582 # Xen not found
2583 if test "$xen" = "yes" ; then
2584 feature_not_found "xen" "Install xen devel"
2585 fi
2586 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002587
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002588 # Xen unstable
2589 elif
2590 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002591#undef XC_WANT_COMPAT_DEVICEMODEL_API
2592#define __XEN_TOOLS__
2593#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002594#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002595int main(void) {
2596 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002597 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002598
2599 xd = xendevicemodel_open(0, 0);
2600 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2601
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002602 xfmem = xenforeignmemory_open(0, 0);
2603 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2604
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002605 return 0;
2606}
2607EOF
2608 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2609 then
2610 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2611 xen_ctrl_version=41100
2612 xen=yes
2613 elif
2614 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002615#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2616#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002617#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002618int main(void) {
2619 xenforeignmemory_handle *xfmem;
2620
2621 xfmem = xenforeignmemory_open(0, 0);
2622 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002623 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002624
2625 return 0;
2626}
2627EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002628 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002629 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002630 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002631 xen_ctrl_version=41000
2632 xen=yes
2633 elif
2634 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002635#undef XC_WANT_COMPAT_DEVICEMODEL_API
2636#define __XEN_TOOLS__
2637#include <xendevicemodel.h>
2638int main(void) {
2639 xendevicemodel_handle *xd;
2640
2641 xd = xendevicemodel_open(0, 0);
2642 xendevicemodel_close(xd);
2643
2644 return 0;
2645}
2646EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002647 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2648 then
2649 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2650 xen_ctrl_version=40900
2651 xen=yes
2652 elif
2653 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002654/*
2655 * If we have stable libs the we don't want the libxc compat
2656 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002657 *
2658 * Also, check if xengnttab_grant_copy_segment_t is defined and
2659 * grant copy operation is implemented.
2660 */
2661#undef XC_WANT_COMPAT_EVTCHN_API
2662#undef XC_WANT_COMPAT_GNTTAB_API
2663#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2664#include <xenctrl.h>
2665#include <xenstore.h>
2666#include <xenevtchn.h>
2667#include <xengnttab.h>
2668#include <xenforeignmemory.h>
2669#include <stdint.h>
2670#include <xen/hvm/hvm_info_table.h>
2671#if !defined(HVM_MAX_VCPUS)
2672# error HVM_MAX_VCPUS not defined
2673#endif
2674int main(void) {
2675 xc_interface *xc = NULL;
2676 xenforeignmemory_handle *xfmem;
2677 xenevtchn_handle *xe;
2678 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002679 xengnttab_grant_copy_segment_t* seg = NULL;
2680
2681 xs_daemon_open();
2682
2683 xc = xc_interface_open(0, 0, 0);
2684 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2685 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2686 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2687 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002688
2689 xfmem = xenforeignmemory_open(0, 0);
2690 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2691
2692 xe = xenevtchn_open(0, 0);
2693 xenevtchn_fd(xe);
2694
2695 xg = xengnttab_open(0, 0);
2696 xengnttab_grant_copy(xg, 0, seg);
2697
2698 return 0;
2699}
2700EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002701 compile_prog "" "$xen_libs $xen_stable_libs"
2702 then
2703 xen_ctrl_version=40800
2704 xen=yes
2705 elif
2706 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002707/*
2708 * If we have stable libs the we don't want the libxc compat
2709 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002710 */
2711#undef XC_WANT_COMPAT_EVTCHN_API
2712#undef XC_WANT_COMPAT_GNTTAB_API
2713#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2714#include <xenctrl.h>
2715#include <xenstore.h>
2716#include <xenevtchn.h>
2717#include <xengnttab.h>
2718#include <xenforeignmemory.h>
2719#include <stdint.h>
2720#include <xen/hvm/hvm_info_table.h>
2721#if !defined(HVM_MAX_VCPUS)
2722# error HVM_MAX_VCPUS not defined
2723#endif
2724int main(void) {
2725 xc_interface *xc = NULL;
2726 xenforeignmemory_handle *xfmem;
2727 xenevtchn_handle *xe;
2728 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002729
2730 xs_daemon_open();
2731
2732 xc = xc_interface_open(0, 0, 0);
2733 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2734 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2735 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2736 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002737
2738 xfmem = xenforeignmemory_open(0, 0);
2739 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2740
2741 xe = xenevtchn_open(0, 0);
2742 xenevtchn_fd(xe);
2743
2744 xg = xengnttab_open(0, 0);
2745 xengnttab_map_grant_ref(xg, 0, 0, 0);
2746
2747 return 0;
2748}
2749EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002750 compile_prog "" "$xen_libs $xen_stable_libs"
2751 then
2752 xen_ctrl_version=40701
2753 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002754
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002755 # Xen 4.6
2756 elif
2757 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002758#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002759#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002760#include <stdint.h>
2761#include <xen/hvm/hvm_info_table.h>
2762#if !defined(HVM_MAX_VCPUS)
2763# error HVM_MAX_VCPUS not defined
2764#endif
2765int main(void) {
2766 xc_interface *xc;
2767 xs_daemon_open();
2768 xc = xc_interface_open(0, 0, 0);
2769 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2770 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002771 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002772 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002773 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002774 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002775 return 0;
2776}
2777EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002778 compile_prog "" "$xen_libs"
2779 then
2780 xen_ctrl_version=40600
2781 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002782
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002783 # Xen 4.5
2784 elif
2785 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002786#include <xenctrl.h>
2787#include <xenstore.h>
2788#include <stdint.h>
2789#include <xen/hvm/hvm_info_table.h>
2790#if !defined(HVM_MAX_VCPUS)
2791# error HVM_MAX_VCPUS not defined
2792#endif
2793int main(void) {
2794 xc_interface *xc;
2795 xs_daemon_open();
2796 xc = xc_interface_open(0, 0, 0);
2797 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2798 xc_gnttab_open(NULL, 0);
2799 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2800 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002801 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2802 return 0;
2803}
2804EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002805 compile_prog "" "$xen_libs"
2806 then
2807 xen_ctrl_version=40500
2808 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002809
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002810 elif
2811 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002812#include <xenctrl.h>
2813#include <xenstore.h>
2814#include <stdint.h>
2815#include <xen/hvm/hvm_info_table.h>
2816#if !defined(HVM_MAX_VCPUS)
2817# error HVM_MAX_VCPUS not defined
2818#endif
2819int main(void) {
2820 xc_interface *xc;
2821 xs_daemon_open();
2822 xc = xc_interface_open(0, 0, 0);
2823 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2824 xc_gnttab_open(NULL, 0);
2825 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2826 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002827 return 0;
2828}
2829EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002830 compile_prog "" "$xen_libs"
2831 then
2832 xen_ctrl_version=40200
2833 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002834
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002835 else
2836 if test "$xen" = "yes" ; then
2837 feature_not_found "xen (unsupported version)" \
2838 "Install a supported xen (xen 4.2 or newer)"
2839 fi
2840 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002841 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002842
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002843 if test "$xen" = yes; then
2844 if test $xen_ctrl_version -ge 40701 ; then
2845 libs_softmmu="$xen_stable_libs $libs_softmmu"
2846 fi
2847 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002848 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002849 fi
aliguorie37630c2009-04-22 15:19:10 +00002850fi
2851
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002852if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002853 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002854 xen_pci_passthrough=yes
2855 else
2856 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002857 error_exit "User requested feature Xen PCI Passthrough" \
2858 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002859 fi
2860 xen_pci_passthrough=no
2861 fi
2862fi
2863
aliguorie37630c2009-04-22 15:19:10 +00002864##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002865# Windows Hypervisor Platform accelerator (WHPX) check
2866if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002867 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002868 whpx="yes"
2869 else
2870 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002871 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002872 fi
2873 whpx="no"
2874 fi
2875fi
2876
2877##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002878# Sparse probe
2879if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002880 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002881 sparse=yes
2882 else
2883 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002884 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002885 fi
2886 sparse=no
2887 fi
2888fi
2889
2890##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002891# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002892if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002893 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002894 x11_cflags=$($pkg_config --cflags x11)
2895 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002896fi
2897
2898##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002899# GTK probe
2900
2901if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002902 gtkpackage="gtk+-3.0"
2903 gtkx11package="gtk+-x11-3.0"
Volker Rümelin7b23d122020-05-16 09:20:14 +02002904 gtkversion="3.22.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002905 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002906 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2907 gtk_libs=$($pkg_config --libs $gtkpackage)
2908 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002909 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002910 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002911 gtk_cflags="$gtk_cflags $x11_cflags"
2912 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002913 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002914 gtk="yes"
2915 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002916 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002917 else
2918 gtk="no"
2919 fi
2920fi
2921
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002922
2923##########################################
2924# GNUTLS probe
2925
2926if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002927 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002928 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002929 gnutls_cflags=$($pkg_config --cflags gnutls)
2930 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002931 # Packaging for the static libraries is not always correct.
2932 # At least ubuntu 18.04 ships only shared libraries.
2933 write_c_skeleton
2934 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002935 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002936 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2937 pass="yes"
2938 fi
2939 fi
2940 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002941 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002942 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002943 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002944 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002945fi
2946
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002947
2948# If user didn't give a --disable/enable-gcrypt flag,
2949# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002950# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002951if test -z "$gcrypt"
2952then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002953 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002954 then
2955 gcrypt="no"
2956 fi
2957fi
2958
2959# If user didn't give a --disable/enable-nettle flag,
2960# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002961# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002962if test -z "$nettle"
2963then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002964 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002965 then
2966 nettle="no"
2967 fi
2968fi
2969
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002970has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002971 if ! has "libgcrypt-config"
2972 then
2973 return 1
2974 fi
2975
2976 if test -n "$cross_prefix"
2977 then
Stefan Weil89138852016-05-16 15:10:20 +02002978 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002979 if test "$host-" != $cross_prefix
2980 then
2981 return 1
2982 fi
2983 fi
2984
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002985 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2986 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2987
2988 if test $maj != 1 || test $min -lt 5
2989 then
2990 return 1
2991 fi
2992
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002993 return 0
2994}
2995
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002996
2997if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002998 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002999 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003000 nettle_cflags=$($pkg_config --cflags nettle)
3001 nettle_libs=$($pkg_config --libs nettle)
3002 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003003 # Link test to make sure the given libraries work (e.g for static).
3004 write_c_skeleton
3005 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003006 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003007 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3008 if test -z "$gcrypt"; then
3009 gcrypt="no"
3010 fi
3011 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003012 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003013 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01003014 if test "$pass" = "yes"
3015 then
3016 cat > $TMPC << EOF
3017#include <nettle/xts.h>
3018int main(void) {
3019 return 0;
3020}
3021EOF
3022 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3023 nettle_xts=yes
3024 qemu_private_xts=no
3025 fi
3026 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003027 if test "$pass" = "no" && test "$nettle" = "yes"; then
3028 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003029 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003030 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003031 fi
3032fi
3033
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003034if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003035 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003036 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003037 gcrypt_cflags=$(libgcrypt-config --cflags)
3038 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003039 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003040 # as it "spreads unnecessary dependencies" which in
3041 # turn breaks static builds...
3042 if test "$static" = "yes"
3043 then
3044 gcrypt_libs="$gcrypt_libs -lgpg-error"
3045 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003046
Richard Hendersona73e82e2019-05-09 18:24:35 -07003047 # Link test to make sure the given libraries work (e.g for static).
3048 write_c_skeleton
3049 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003050 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003051 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3052 pass="yes"
3053 fi
3054 fi
3055 if test "$pass" = "yes"; then
3056 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003057 cat > $TMPC << EOF
3058#include <gcrypt.h>
3059int main(void) {
3060 gcry_mac_hd_t handle;
3061 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3062 GCRY_MAC_FLAG_SECURE, NULL);
3063 return 0;
3064}
3065EOF
3066 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3067 gcrypt_hmac=yes
3068 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003069 cat > $TMPC << EOF
3070#include <gcrypt.h>
3071int main(void) {
3072 gcry_cipher_hd_t handle;
3073 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3074 return 0;
3075}
3076EOF
3077 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3078 gcrypt_xts=yes
3079 qemu_private_xts=no
3080 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003081 elif test "$gcrypt" = "yes"; then
3082 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003083 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003084 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003085 fi
3086fi
3087
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003088
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003089if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3090then
3091 error_exit "Only one of gcrypt & nettle can be enabled"
3092fi
3093
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003094##########################################
3095# libtasn1 - only for the TLS creds/session test suite
3096
3097tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003098tasn1_cflags=""
3099tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003100if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003101 tasn1_cflags=$($pkg_config --cflags libtasn1)
3102 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003103else
3104 tasn1=no
3105fi
3106
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003107
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003108##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003109# PAM probe
3110
3111if test "$auth_pam" != "no"; then
3112 cat > $TMPC <<EOF
3113#include <security/pam_appl.h>
3114#include <stdio.h>
3115int main(void) {
3116 const char *service_name = "qemu";
3117 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003118 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003119 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003120 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003121 return 0;
3122}
3123EOF
3124 if compile_prog "" "-lpam" ; then
3125 auth_pam=yes
3126 else
3127 if test "$auth_pam" = "yes"; then
3128 feature_not_found "PAM" "Install PAM development package"
3129 else
3130 auth_pam=no
3131 fi
3132 fi
3133fi
3134
3135##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003136# getifaddrs (for tests/test-io-channel-socket )
3137
3138have_ifaddrs_h=yes
3139if ! check_include "ifaddrs.h" ; then
3140 have_ifaddrs_h=no
3141fi
3142
3143##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003144# VTE probe
3145
3146if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003147 vteminversion="0.32.0"
3148 if $pkg_config --exists "vte-2.91"; then
3149 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003150 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003151 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003152 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003153 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003154 vte_cflags=$($pkg_config --cflags $vtepackage)
3155 vte_libs=$($pkg_config --libs $vtepackage)
3156 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003157 vte="yes"
3158 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003159 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003160 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003161 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003162 fi
3163fi
3164
3165##########################################
bellard11d9f692004-04-02 20:55:59 +00003166# SDL probe
3167
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003168# Look for sdl configuration program (pkg-config or sdl2-config). Try
3169# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003170
Peter Xuc6093a02018-04-10 13:40:34 +08003171sdl_probe ()
3172{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003173 if $pkg_config sdl2 --exists; then
3174 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003175 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003176 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003177 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003178 sdlversion=$($sdlconfig --version)
3179 else
3180 if test "$sdl" = "yes" ; then
3181 feature_not_found "sdl" "Install SDL2-devel"
3182 fi
3183 sdl=no
3184 # no need to do the rest
3185 return
3186 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003187 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003188 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3189 fi
3190
Juan Quintelaac119f92009-07-27 16:13:15 +02003191 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003192#include <SDL.h>
3193#undef main /* We don't want SDL to override our main() */
3194int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3195EOF
Stefan Weil89138852016-05-16 15:10:20 +02003196 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003197 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003198 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003199 if $pkg_config sdl2 --exists; then
3200 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003201 else
3202 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3203 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003204 else
Stefan Weil89138852016-05-16 15:10:20 +02003205 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003206 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003207 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003208 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003209
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003210 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003211 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003212 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003213 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3214 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003215 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003216 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003217 :
3218 else
3219 sdl=no
3220 fi
3221 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003222 else # sdl not found
3223 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003224 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003225 fi
3226 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003227 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003228}
3229
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003230sdl_image_probe ()
3231{
3232 if test "$sdl_image" != "no" ; then
3233 if $pkg_config SDL2_image --exists; then
3234 if test "$static" = "yes"; then
3235 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3236 else
3237 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3238 fi
3239 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3240 sdl_image=yes
3241
3242 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3243 sdl_libs="$sdl_libs $sdl_image_libs"
3244 else
3245 if test "$sdl_image" = "yes" ; then
3246 feature_not_found "sdl_image" "Install SDL Image devel"
3247 else
3248 sdl_image=no
3249 fi
3250 fi
3251 fi
3252}
3253
Peter Xuc6093a02018-04-10 13:40:34 +08003254if test "$sdl" != "no" ; then
3255 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003256fi
bellard11d9f692004-04-02 20:55:59 +00003257
aliguori5368a422009-03-03 17:37:21 +00003258if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003259 sdl_image_probe
3260else
3261 if test "$sdl_image" = "yes"; then
3262 echo "warning: SDL Image requested, but SDL is not available, disabling"
3263 fi
3264 sdl_image=no
3265fi
3266
3267if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003268 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003269#include <SDL.h>
3270#if defined(SDL_VIDEO_DRIVER_X11)
3271#include <X11/XKBlib.h>
3272#else
3273#error No x11 support
3274#endif
3275int main(void) { return 0; }
3276EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003277 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003278 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003279 sdl_cflags="$sdl_cflags $x11_cflags"
3280 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003281 fi
aliguori5368a422009-03-03 17:37:21 +00003282fi
3283
ths8f28f3f2007-01-05 21:25:54 +00003284##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003285# RDMA needs OpenFabrics libraries
3286if test "$rdma" != "no" ; then
3287 cat > $TMPC <<EOF
3288#include <rdma/rdma_cma.h>
3289int main(void) { return 0; }
3290EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003291 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003292 if compile_prog "" "$rdma_libs" ; then
3293 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003294 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003295 else
3296 if test "$rdma" = "yes" ; then
3297 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003298 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003299 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003300 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003301 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3302 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3303 fi
3304 rdma="no"
3305 fi
3306fi
3307
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003308##########################################
3309# PVRDMA detection
3310
3311cat > $TMPC <<EOF &&
3312#include <sys/mman.h>
3313
3314int
3315main(void)
3316{
3317 char buf = 0;
3318 void *addr = &buf;
3319 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3320
3321 return 0;
3322}
3323EOF
3324
3325if test "$rdma" = "yes" ; then
3326 case "$pvrdma" in
3327 "")
3328 if compile_prog "" ""; then
3329 pvrdma="yes"
3330 else
3331 pvrdma="no"
3332 fi
3333 ;;
3334 "yes")
3335 if ! compile_prog "" ""; then
3336 error_exit "PVRDMA is not supported since mremap is not implemented"
3337 fi
3338 pvrdma="yes"
3339 ;;
3340 "no")
3341 pvrdma="no"
3342 ;;
3343 esac
3344else
3345 if test "$pvrdma" = "yes" ; then
3346 error_exit "PVRDMA requires rdma suppport"
3347 fi
3348 pvrdma="no"
3349fi
ths8d5d2d42007-08-25 01:37:51 +00003350
Yuval Shaiaee108582019-08-18 16:21:06 +03003351# Let's see if enhanced reg_mr is supported
3352if test "$pvrdma" = "yes" ; then
3353
3354cat > $TMPC <<EOF &&
3355#include <infiniband/verbs.h>
3356
3357int
3358main(void)
3359{
3360 struct ibv_mr *mr;
3361 struct ibv_pd *pd = NULL;
3362 size_t length = 10;
3363 uint64_t iova = 0;
3364 int access = 0;
3365 void *addr = NULL;
3366
3367 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3368
3369 ibv_dereg_mr(mr);
3370
3371 return 0;
3372}
3373EOF
3374 if ! compile_prog "" "-libverbs"; then
3375 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3376 fi
3377fi
3378
ths8d5d2d42007-08-25 01:37:51 +00003379##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003380# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003381if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003382 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003383#include <sasl/sasl.h>
3384#include <stdio.h>
3385int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3386EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003387 # Assuming Cyrus-SASL installed in /usr prefix
Philippe Mathieu-Daudébd702ff2020-03-09 13:24:53 +01003388 # QEMU defines struct iovec in "qemu/osdep.h",
3389 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3390 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
Juan Quintelaea784e32009-08-12 18:20:29 +02003391 vnc_sasl_libs="-lsasl2"
3392 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3393 vnc_sasl=yes
3394 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003395 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003396 else
3397 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003398 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003399 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003400 vnc_sasl=no
3401 fi
aliguori2f9606b2009-03-06 20:27:28 +00003402fi
3403
3404##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003405# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003406if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003407cat > $TMPC <<EOF
3408#include <stdio.h>
3409#include <jpeglib.h>
3410int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3411EOF
3412 vnc_jpeg_cflags=""
3413 vnc_jpeg_libs="-ljpeg"
3414 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3415 vnc_jpeg=yes
3416 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003417 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003418 else
3419 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003420 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003421 fi
3422 vnc_jpeg=no
3423 fi
3424fi
3425
3426##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003427# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003428if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003429cat > $TMPC <<EOF
3430//#include <stdio.h>
3431#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003432#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003433int main(void) {
3434 png_structp png_ptr;
3435 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003436 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003437}
3438EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003439 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003440 vnc_png_cflags=$($pkg_config libpng --cflags)
3441 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003442 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003443 vnc_png_cflags=""
3444 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003445 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003446 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3447 vnc_png=yes
3448 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003449 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003450 else
3451 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003452 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003453 fi
3454 vnc_png=no
3455 fi
3456fi
3457
3458##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003459# xkbcommon probe
3460if test "$xkbcommon" != "no" ; then
3461 if $pkg_config xkbcommon --exists; then
3462 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3463 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3464 xkbcommon=yes
3465 else
3466 if test "$xkbcommon" = "yes" ; then
3467 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3468 fi
3469 xkbcommon=no
3470 fi
3471fi
3472
aliguori76655d62009-03-06 20:27:37 +00003473
3474##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003475# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003476if test "$xfs" != "no" ; then
3477 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003478#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003479#include <xfs/xfs.h>
3480int main(void)
3481{
3482 xfsctl(NULL, 0, 0, NULL);
3483 return 0;
3484}
3485EOF
3486 if compile_prog "" "" ; then
3487 xfs="yes"
3488 else
3489 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003490 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003491 fi
3492 xfs=no
3493 fi
3494fi
3495
3496##########################################
ths8a16d272008-07-19 09:56:24 +00003497# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003498if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003499 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003500 cat > $TMPC << EOF
3501#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003502int main(void)
3503{
3504 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003505 char s[] = "";
3506 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003507 return 0;
3508}
ths8a16d272008-07-19 09:56:24 +00003509EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003510 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003511 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003512 else
3513 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003514 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003515 fi
3516 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003517 fi
ths8a16d272008-07-19 09:56:24 +00003518fi
3519
3520##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003521# netmap support probe
3522# Apart from looking for netmap headers, we make sure that the host API version
3523# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3524# a minor/major version number. Minor new features will be marked with values up
3525# to 15, and if something happens that requires a change to the backend we will
3526# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003527if test "$netmap" != "no" ; then
3528 cat > $TMPC << EOF
3529#include <inttypes.h>
3530#include <net/if.h>
3531#include <net/netmap.h>
3532#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003533#if (NETMAP_API < 11) || (NETMAP_API > 15)
3534#error
3535#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003536int main(void) { return 0; }
3537EOF
3538 if compile_prog "" "" ; then
3539 netmap=yes
3540 else
3541 if test "$netmap" = "yes" ; then
3542 feature_not_found "netmap"
3543 fi
3544 netmap=no
3545 fi
3546fi
3547
3548##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003549# libcap-ng library probe
3550if test "$cap_ng" != "no" ; then
3551 cap_libs="-lcap-ng"
3552 cat > $TMPC << EOF
3553#include <cap-ng.h>
3554int main(void)
3555{
3556 capng_capability_to_name(CAPNG_EFFECTIVE);
3557 return 0;
3558}
3559EOF
3560 if compile_prog "" "$cap_libs" ; then
3561 cap_ng=yes
3562 libs_tools="$cap_libs $libs_tools"
3563 else
3564 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003565 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003566 fi
3567 cap_ng=no
3568 fi
3569fi
3570
3571##########################################
malcc2de5c92008-06-28 19:13:06 +00003572# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003573
Stefan Weil89138852016-05-16 15:10:20 +02003574audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003575for drv in $audio_drv_list; do
3576 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003577 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003578 if $pkg_config alsa --exists; then
3579 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003580 if test "$drv" = "try-alsa"; then
3581 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3582 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003583 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003584 if test "$drv" = "try-alsa"; then
3585 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3586 else
3587 error_exit "$drv check failed" \
3588 "Make sure to have the $drv libs and headers installed."
3589 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003590 fi
malcc2de5c92008-06-28 19:13:06 +00003591 ;;
3592
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003593 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003594 if $pkg_config libpulse --exists; then
3595 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003596 if test "$drv" = "try-pa"; then
3597 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3598 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003599 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003600 if test "$drv" = "try-pa"; then
3601 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3602 else
3603 error_exit "$drv check failed" \
3604 "Make sure to have the $drv libs and headers installed."
3605 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003606 fi
malcb8e59f12008-07-02 21:03:08 +00003607 ;;
3608
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003609 sdl)
3610 if test "$sdl" = "no"; then
3611 error_exit "sdl not found or disabled, can not use sdl audio driver"
3612 fi
3613 ;;
3614
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003615 try-sdl)
3616 if test "$sdl" = "no"; then
3617 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3618 else
3619 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3620 fi
3621 ;;
3622
Juan Quintela997e6902009-08-03 14:46:29 +02003623 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003624 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003625 ;;
3626
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003627 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003628 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003629 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003630 ;;
3631
3632 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003633 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003634 ;;
3635
Geoffrey McRae2e445702020-04-29 15:53:58 +10003636 jack | try-jack)
3637 if $pkg_config jack --exists; then
3638 jack_libs=$($pkg_config jack --libs)
3639 if test "$drv" = "try-jack"; then
3640 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3641 fi
3642 else
3643 if test "$drv" = "try-jack"; then
3644 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3645 else
3646 error_exit "$drv check failed" \
3647 "Make sure to have the $drv libs and headers installed."
3648 fi
3649 fi
3650 ;;
3651
malce4c63a62008-07-19 16:15:16 +00003652 *)
malc1c9b2a52008-07-19 16:57:30 +00003653 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003654 error_exit "Unknown driver '$drv' selected" \
3655 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003656 }
3657 ;;
malcc2de5c92008-06-28 19:13:06 +00003658 esac
3659done
ths8f28f3f2007-01-05 21:25:54 +00003660
balrog4d3b6f62008-02-10 16:33:14 +00003661##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003662# BrlAPI probe
3663
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003664if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003665 brlapi_libs="-lbrlapi"
3666 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003667#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003668#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003669int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3670EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003671 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003672 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003673 else
3674 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003675 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003676 fi
3677 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003678 fi
3679fi
aurel322e4d9fb2008-04-08 06:01:02 +00003680
3681##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003682# iconv probe
3683if test "$iconv" != "no" ; then
3684 cat > $TMPC << EOF
3685#include <iconv.h>
3686int main(void) {
3687 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3688 return conv != (iconv_t) -1;
3689}
3690EOF
3691 iconv_prefix_list="/usr/local:/usr"
3692 iconv_lib_list=":-liconv"
3693 IFS=:
3694 for iconv_prefix in $iconv_prefix_list; do
3695 IFS=:
3696 iconv_cflags="-I$iconv_prefix/include"
3697 iconv_ldflags="-L$iconv_prefix/lib"
3698 for iconv_link in $iconv_lib_list; do
3699 unset IFS
3700 iconv_lib="$iconv_ldflags $iconv_link"
3701 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3702 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3703 iconv_found=yes
3704 break
3705 fi
3706 done
3707 if test "$iconv_found" = yes ; then
3708 break
3709 fi
3710 done
3711 if test "$iconv_found" = "yes" ; then
3712 iconv=yes
3713 else
3714 if test "$iconv" = "yes" ; then
3715 feature_not_found "iconv" "Install iconv devel"
3716 fi
3717 iconv=no
3718 fi
3719fi
3720
3721##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003722# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003723if test "$iconv" = "no" ; then
3724 # curses will need iconv
3725 curses=no
3726fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003727if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003728 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003729 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3730 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003731 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003732 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003733 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003734 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003735 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003736 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003737#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003738#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003739#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003740#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003741int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003742 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003743 wchar_t wch = L'w';
3744 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003745 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003746 addwstr(L"wide chars\n");
3747 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003748 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003749 codeset = nl_langinfo(CODESET);
3750 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003751}
balrog4d3b6f62008-02-10 16:33:14 +00003752EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003753 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003754 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003755 # Make sure we get the wide character prototypes
3756 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003757 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003758 for curses_lib in $curses_lib_list; do
3759 unset IFS
3760 if compile_prog "$curses_inc" "$curses_lib" ; then
3761 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003762 break
3763 fi
3764 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003765 if test "$curses_found" = yes ; then
3766 break
3767 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003768 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003769 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003770 if test "$curses_found" = "yes" ; then
3771 curses=yes
3772 else
3773 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003774 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003775 fi
3776 curses=no
3777 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003778fi
balrog4d3b6f62008-02-10 16:33:14 +00003779
blueswir1414f0da2008-08-15 18:20:52 +00003780##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003781# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003782if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003783 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003784 curlconfig="$pkg_config libcurl"
3785 else
3786 curlconfig=curl-config
3787 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003788 cat > $TMPC << EOF
3789#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003790int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003791EOF
Stefan Weil89138852016-05-16 15:10:20 +02003792 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3793 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003794 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003795 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003796 else
3797 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003798 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003799 fi
3800 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003801 fi
3802fi # test "$curl"
3803
3804##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003805# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003806
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003807glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003808glib_modules=gthread-2.0
3809if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003810 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003811fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003812if test "$plugins" = yes; then
3813 glib_modules="$glib_modules gmodule-2.0"
3814fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003815
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003816# This workaround is required due to a bug in pkg-config file for glib as it
3817# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3818
Eric Blakee633a5c2019-02-04 20:39:37 -06003819if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003820 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3821fi
3822
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003823for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003824 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003825 glib_cflags=$($pkg_config --cflags $i)
3826 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003827 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003828 LIBS="$glib_libs $LIBS"
3829 libs_qga="$glib_libs $libs_qga"
3830 else
3831 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3832 fi
3833done
3834
Marc-André Lureauf876b762019-02-21 12:07:00 +01003835if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3836 gio=yes
3837 gio_cflags=$($pkg_config --cflags gio-2.0)
3838 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003839 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003840 if [ ! -x "$gdbus_codegen" ]; then
3841 gdbus_codegen=
3842 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003843else
3844 gio=no
3845fi
3846
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003847if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3848 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3849 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3850fi
3851
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003852# Sanity check that the current size_t matches the
3853# size that glib thinks it should be. This catches
3854# problems on multi-arch where people try to build
3855# 32-bit QEMU while pointing at 64-bit glib headers
3856cat > $TMPC <<EOF
3857#include <glib.h>
3858#include <unistd.h>
3859
3860#define QEMU_BUILD_BUG_ON(x) \
3861 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3862
3863int main(void) {
3864 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3865 return 0;
3866}
3867EOF
3868
Stefan Weil5919e032016-04-28 23:33:41 +02003869if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003870 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3871 "You probably need to set PKG_CONFIG_LIBDIR"\
3872 "to point to the right pkg-config files for your"\
3873 "build target"
3874fi
3875
John Snowbbbf2e02015-03-25 18:57:38 -04003876# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3877cat > $TMPC << EOF
3878#include <glib.h>
3879int main(void) { return 0; }
3880EOF
3881if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3882 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3883 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3884 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3885 fi
3886fi
3887
Eric Blake9bda6002020-03-17 12:55:34 -05003888# Silence clang warnings triggered by glib < 2.57.2
3889cat > $TMPC << EOF
3890#include <glib.h>
3891typedef struct Foo {
3892 int i;
3893} Foo;
3894static void foo_free(Foo *f)
3895{
3896 g_free(f);
3897}
3898G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3899int main(void) { return 0; }
3900EOF
3901if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3902 if cc_has_warning_flag "-Wno-unused-function"; then
3903 glib_cflags="$glib_cflags -Wno-unused-function"
3904 CFLAGS="$CFLAGS -Wno-unused-function"
3905 fi
3906fi
3907
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003908#########################################
3909# zlib check
3910
3911if test "$zlib" != "no" ; then
3912 if $pkg_config --exists zlib; then
3913 zlib_cflags=$($pkg_config --cflags zlib)
3914 zlib_libs=$($pkg_config --libs zlib)
3915 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3916 LIBS="$zlib_libs $LIBS"
3917 else
3918 cat > $TMPC << EOF
3919#include <zlib.h>
3920int main(void) { zlibVersion(); return 0; }
3921EOF
3922 if compile_prog "" "-lz" ; then
3923 LIBS="$LIBS -lz"
3924 else
3925 error_exit "zlib check failed" \
3926 "Make sure to have the zlib libs and headers installed."
3927 fi
3928 fi
3929fi
3930
Fam Zhenge26110c2014-02-10 14:48:57 +08003931##########################################
3932# SHA command probe for modules
3933if test "$modules" = yes; then
3934 shacmd_probe="sha1sum sha1 shasum"
3935 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003936 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003937 shacmd="$c"
3938 break
3939 fi
3940 done
3941 if test "$shacmd" = ""; then
3942 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3943 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003944fi
3945
3946##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003947# pixman support probe
3948
Eric Blakee633a5c2019-02-04 20:39:37 -06003949if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003950 pixman_cflags=
3951 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003952elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003953 pixman_cflags=$($pkg_config --cflags pixman-1)
3954 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003955else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003956 error_exit "pixman >= 0.21.8 not present." \
3957 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003958fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003959
3960##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003961# libmpathpersist probe
3962
3963if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003964 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003965 cat > $TMPC <<EOF
3966#include <libudev.h>
3967#include <mpath_persist.h>
3968unsigned mpath_mx_alloc_len = 1024;
3969int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003970static struct config *multipath_conf;
3971extern struct udev *udev;
3972extern struct config *get_multipath_config(void);
3973extern void put_multipath_config(struct config *conf);
3974struct udev *udev;
3975struct config *get_multipath_config(void) { return multipath_conf; }
3976void put_multipath_config(struct config *conf) { }
3977
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003978int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003979 udev = udev_new();
3980 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003981 return 0;
3982}
3983EOF
3984 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3985 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003986 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003987 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003988 # probe for the old API
3989 cat > $TMPC <<EOF
3990#include <libudev.h>
3991#include <mpath_persist.h>
3992unsigned mpath_mx_alloc_len = 1024;
3993int logsink;
3994int main(void) {
3995 struct udev *udev = udev_new();
3996 mpath_lib_init(udev);
3997 return 0;
3998}
3999EOF
4000 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4001 mpathpersist=yes
4002 mpathpersist_new_api=no
4003 else
4004 mpathpersist=no
4005 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02004006 fi
4007else
4008 mpathpersist=no
4009fi
4010
4011##########################################
aliguorie5d355d2009-04-24 18:03:15 +00004012# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04004013PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00004014
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02004015pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00004016cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00004017#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01004018static void *f(void *p) { return NULL; }
4019int main(void) {
4020 pthread_t thread;
4021 pthread_create(&thread, 0, f, 0);
4022 return 0;
4023}
blueswir1414f0da2008-08-15 18:20:52 +00004024EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02004025if compile_prog "" "" ; then
4026 pthread=yes
4027else
4028 for pthread_lib in $PTHREADLIBS_LIST; do
4029 if compile_prog "" "$pthread_lib" ; then
4030 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04004031 found=no
4032 for lib_entry in $LIBS; do
4033 if test "$lib_entry" = "$pthread_lib"; then
4034 found=yes
4035 break
4036 fi
4037 done
4038 if test "$found" = "no"; then
4039 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01004040 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04004041 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01004042 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02004043 break
4044 fi
4045 done
4046fi
blueswir1414f0da2008-08-15 18:20:52 +00004047
Eric Blakee633a5c2019-02-04 20:39:37 -06004048if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004049 error_exit "pthread check failed" \
4050 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00004051fi
4052
Roman Bolshakov479a5742018-12-17 23:26:01 +03004053# check for pthread_setname_np with thread id
4054pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004055cat > $TMPC << EOF
4056#include <pthread.h>
4057
4058static void *f(void *p) { return NULL; }
4059int main(void)
4060{
4061 pthread_t thread;
4062 pthread_create(&thread, 0, f, 0);
4063 pthread_setname_np(thread, "QEMU");
4064 return 0;
4065}
4066EOF
4067if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03004068 pthread_setname_np_w_tid=yes
4069fi
4070
4071# check for pthread_setname_np without thread id
4072pthread_setname_np_wo_tid=no
4073cat > $TMPC << EOF
4074#include <pthread.h>
4075
4076static void *f(void *p) { pthread_setname_np("QEMU"); }
4077int main(void)
4078{
4079 pthread_t thread;
4080 pthread_create(&thread, 0, f, 0);
4081 return 0;
4082}
4083EOF
4084if compile_prog "" "$pthread_lib" ; then
4085 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004086fi
4087
aliguoribf9298b2008-12-05 20:05:26 +00004088##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004089# rbd probe
4090if test "$rbd" != "no" ; then
4091 cat > $TMPC <<EOF
4092#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004093#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004094int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004095 rados_t cluster;
4096 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004097 return 0;
4098}
4099EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004100 rbd_libs="-lrbd -lrados"
4101 if compile_prog "" "$rbd_libs" ; then
4102 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004103 else
4104 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004105 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004106 fi
4107 rbd=no
4108 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004109fi
4110
4111##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004112# libssh probe
4113if test "$libssh" != "no" ; then
4114 if $pkg_config --exists libssh; then
4115 libssh_cflags=$($pkg_config libssh --cflags)
4116 libssh_libs=$($pkg_config libssh --libs)
4117 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004118 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004119 if test "$libssh" = "yes" ; then
4120 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004121 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004122 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004123 fi
4124fi
4125
4126##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004127# Check for libssh 0.8
4128# This is done like this instead of using the LIBSSH_VERSION_* and
4129# SSH_VERSION_* macros because some distributions in the past shipped
4130# snapshots of the future 0.8 from Git, and those snapshots did not
4131# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004132
Pino Toscanob10d49d2019-06-20 22:08:40 +02004133if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004134 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004135#include <libssh/libssh.h>
4136int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004137EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004138 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4139 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004140 fi
4141fi
4142
4143##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004144# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004145
4146if test "$linux_aio" != "no" ; then
4147 cat > $TMPC <<EOF
4148#include <libaio.h>
4149#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004150#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004151int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4152EOF
4153 if compile_prog "" "-laio" ; then
4154 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004155 else
4156 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004157 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004158 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004159 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004160 fi
4161fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004162##########################################
4163# linux-io-uring probe
4164
4165if test "$linux_io_uring" != "no" ; then
4166 if $pkg_config liburing; then
4167 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4168 linux_io_uring_libs=$($pkg_config --libs liburing)
4169 linux_io_uring=yes
Stefan Hajnoczi73fd2822020-03-05 17:08:04 +00004170
4171 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4172 # seen by programs linking the archive. It's not ideal, but just add the
4173 # library dependency globally.
4174 LIBS="$linux_io_uring_libs $LIBS"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004175 else
4176 if test "$linux_io_uring" = "yes" ; then
4177 feature_not_found "linux io_uring" "Install liburing devel"
4178 fi
4179 linux_io_uring=no
4180 fi
4181fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004182
4183##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004184# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004185
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004186if test "$tpm" = ""; then
4187 if test "$mingw32" = "yes"; then
4188 tpm=no
4189 else
4190 tpm=yes
4191 fi
4192elif test "$tpm" = "yes"; then
4193 if test "$mingw32" = "yes" ; then
4194 error_exit "TPM emulation only available on POSIX systems"
4195 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004196fi
4197
4198##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004199# attr probe
4200
4201if test "$attr" != "no" ; then
4202 cat > $TMPC <<EOF
4203#include <stdio.h>
4204#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004205#ifdef CONFIG_LIBATTR
4206#include <attr/xattr.h>
4207#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004208#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004209#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004210int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4211EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004212 if compile_prog "" "" ; then
4213 attr=yes
4214 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004215 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004216 attr=yes
4217 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004218 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004219 else
4220 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004221 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004222 fi
4223 attr=no
4224 fi
4225fi
4226
4227##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004228# iovec probe
4229cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004230#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004231#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004232#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004233int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004234EOF
4235iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004236if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004237 iovec=yes
4238fi
4239
aurel32f652e6a2008-12-16 10:43:48 +00004240##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004241# preadv probe
4242cat > $TMPC <<EOF
4243#include <sys/types.h>
4244#include <sys/uio.h>
4245#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004246int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004247EOF
4248preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004249if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004250 preadv=yes
4251fi
4252
4253##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004254# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004255# fdt support is mandatory for at least some target architectures,
4256# so insist on it if we're building those system emulators.
4257fdt_required=no
4258for target in $target_list; do
4259 case $target in
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08004260 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004261 fdt_required=yes
4262 ;;
4263 esac
4264done
4265
4266if test "$fdt_required" = "yes"; then
4267 if test "$fdt" = "no"; then
4268 error_exit "fdt disabled but some requested targets require it." \
4269 "You can turn off fdt only if you also disable all the system emulation" \
4270 "targets which need it (by specifying a cut down --target-list)."
4271 fi
4272 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004273elif test "$fdt" != "yes" ; then
4274 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004275fi
4276
Laurent Vivierd5999382019-06-21 15:05:44 +02004277# fdt is only required when building softmmu targets
4278if test -z "$fdt" -a "$softmmu" != "yes" ; then
4279 fdt="no"
4280fi
4281
Juan Quintela2df87df2009-08-12 18:29:54 +02004282if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004283 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004284 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004285 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004286 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004287#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004288#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004289int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004290EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004291 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004292 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004293 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004294 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004295 # have GIT checkout, so activate dtc submodule
4296 if test -e "${source_path}/.git" ; then
4297 git_submodules="${git_submodules} dtc"
4298 fi
4299 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004300 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004301 mkdir -p dtc
4302 if [ "$pwd_is_source_path" != "y" ] ; then
4303 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4304 symlink "$source_path/dtc/scripts" "dtc/scripts"
4305 fi
4306 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004307 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4308 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004309 elif test "$fdt" = "yes" ; then
4310 # Not a git build & no libfdt found, prompt for system install
4311 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4312 "Please install the DTC (libfdt) devel package"
4313 else
4314 # don't have and don't want
4315 fdt_libs=
4316 fdt=no
4317 fi
aurel32f652e6a2008-12-16 10:43:48 +00004318 fi
4319fi
4320
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004321libs_softmmu="$libs_softmmu $fdt_libs"
4322
Michael Walle20ff0752011-03-07 23:32:39 +01004323##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004324# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004325
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004326gbm="no"
4327if $pkg_config gbm; then
4328 gbm_cflags="$($pkg_config --cflags gbm)"
4329 gbm_libs="$($pkg_config --libs gbm)"
4330 gbm="yes"
4331fi
4332
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004333if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004334 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004335 if $pkg_config $opengl_pkgs; then
4336 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4337 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004338 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004339 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4340 gtk_gl="yes"
4341 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004342 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004343 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004344 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004345 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004346 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004347 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004348 opengl_libs=""
4349 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004350 fi
4351fi
4352
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004353if test "$opengl" = "yes"; then
4354 cat > $TMPC << EOF
4355#include <epoxy/egl.h>
4356#ifndef EGL_MESA_image_dma_buf_export
4357# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4358#endif
4359int main(void) { return 0; }
4360EOF
4361 if compile_prog "" "" ; then
4362 opengl_dmabuf=yes
4363 fi
4364fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004365
Eric Blakee633a5c2019-02-04 20:39:37 -06004366if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004367 for target in $target_list; do
4368 case $target in
4369 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4370 need_x11=yes
4371 ;;
4372 esac
4373 done
4374fi
4375
Klim Kireeved279a02018-01-12 12:01:19 +03004376##########################################
4377# libxml2 probe
4378if test "$libxml2" != "no" ; then
4379 if $pkg_config --exists libxml-2.0; then
4380 libxml2="yes"
4381 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4382 libxml2_libs=$($pkg_config --libs libxml-2.0)
4383 else
4384 if test "$libxml2" = "yes"; then
4385 feature_not_found "libxml2" "Install libxml2 devel"
4386 fi
4387 libxml2="no"
4388 fi
4389fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004390
Bharata B Raoeb100392012-09-24 14:42:45 +05304391##########################################
4392# glusterfs probe
4393if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004394 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304395 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004396 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4397 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004398 if $pkg_config --atleast-version=4 glusterfs-api; then
4399 glusterfs_xlator_opt="yes"
4400 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004401 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304402 glusterfs_discard="yes"
4403 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304404 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304405 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304406 glusterfs_zerofill="yes"
4407 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004408 cat > $TMPC << EOF
4409#include <glusterfs/api/glfs.h>
4410
4411int
4412main(void)
4413{
4414 /* new glfs_ftruncate() passes two additional args */
4415 return glfs_ftruncate(NULL, 0, NULL, NULL);
4416}
4417EOF
4418 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4419 glusterfs_ftruncate_has_stat="yes"
4420 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004421 cat > $TMPC << EOF
4422#include <glusterfs/api/glfs.h>
4423
4424/* new glfs_io_cbk() passes two additional glfs_stat structs */
4425static void
4426glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4427{}
4428
4429int
4430main(void)
4431{
4432 glfs_io_cbk iocb = &glusterfs_iocb;
4433 iocb(NULL, 0 , NULL, NULL, NULL);
4434 return 0;
4435}
4436EOF
4437 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4438 glusterfs_iocb_has_stat="yes"
4439 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304440 else
4441 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004442 feature_not_found "GlusterFS backend support" \
4443 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304444 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304445 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304446 fi
4447fi
4448
aurel3239386ac2009-04-15 19:48:17 +00004449# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004450# emulator. This is done because older glibc versions don't
4451# have syscall stubs for these implemented. In that case we
4452# don't provide them even if kernel supports them.
4453#
4454inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004455cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004456#include <sys/inotify.h>
4457
4458int
4459main(void)
4460{
4461 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004462 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004463}
4464EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004465if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004466 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004467fi
4468
Riku Voipioc05c7a72010-03-26 15:25:11 +00004469inotify1=no
4470cat > $TMPC << EOF
4471#include <sys/inotify.h>
4472
4473int
4474main(void)
4475{
4476 /* try to start inotify */
4477 return inotify_init1(0);
4478}
4479EOF
4480if compile_prog "" "" ; then
4481 inotify1=yes
4482fi
4483
Riku Voipio099d6b02009-05-05 12:10:04 +03004484# check if pipe2 is there
4485pipe2=no
4486cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004487#include <unistd.h>
4488#include <fcntl.h>
4489
4490int main(void)
4491{
4492 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004493 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004494}
4495EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004496if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004497 pipe2=yes
4498fi
4499
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004500# check if accept4 is there
4501accept4=no
4502cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004503#include <sys/socket.h>
4504#include <stddef.h>
4505
4506int main(void)
4507{
4508 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4509 return 0;
4510}
4511EOF
4512if compile_prog "" "" ; then
4513 accept4=yes
4514fi
4515
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304516# check if tee/splice is there. vmsplice was added same time.
4517splice=no
4518cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304519#include <unistd.h>
4520#include <fcntl.h>
4521#include <limits.h>
4522
4523int main(void)
4524{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004525 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304526 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4527 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4528 return 0;
4529}
4530EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004531if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304532 splice=yes
4533fi
4534
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004535##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004536# libnuma probe
4537
4538if test "$numa" != "no" ; then
4539 cat > $TMPC << EOF
4540#include <numa.h>
4541int main(void) { return numa_available(); }
4542EOF
4543
4544 if compile_prog "" "-lnuma" ; then
4545 numa=yes
4546 libs_softmmu="-lnuma $libs_softmmu"
4547 else
4548 if test "$numa" = "yes" ; then
4549 feature_not_found "numa" "install numactl devel"
4550 fi
4551 numa=no
4552 fi
4553fi
4554
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004555if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4556 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4557 exit 1
4558fi
4559
Yang Zhong5a22ab72017-12-20 21:16:46 +08004560# Even if malloc_trim() is available, these non-libc memory allocators
4561# do not support it.
4562if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4563 if test "$malloc_trim" = "yes" ; then
4564 echo "Disabling malloc_trim with non-libc memory allocator"
4565 fi
4566 malloc_trim="no"
4567fi
4568
4569#######################################
4570# malloc_trim
4571
4572if test "$malloc_trim" != "no" ; then
4573 cat > $TMPC << EOF
4574#include <malloc.h>
4575int main(void) { malloc_trim(0); return 0; }
4576EOF
4577 if compile_prog "" "" ; then
4578 malloc_trim="yes"
4579 else
4580 malloc_trim="no"
4581 fi
4582fi
4583
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004584##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004585# tcmalloc probe
4586
4587if test "$tcmalloc" = "yes" ; then
4588 cat > $TMPC << EOF
4589#include <stdlib.h>
Leonid Blochf2dfe542020-05-25 01:12:04 +03004590int main(void) {
4591 void *tmp = malloc(1);
4592 if (tmp != NULL) {
4593 return 0;
4594 }
4595 return 1;
4596}
Fam Zheng2847b462015-03-26 11:03:12 +08004597EOF
4598
4599 if compile_prog "" "-ltcmalloc" ; then
4600 LIBS="-ltcmalloc $LIBS"
4601 else
4602 feature_not_found "tcmalloc" "install gperftools devel"
4603 fi
4604fi
4605
4606##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004607# jemalloc probe
4608
4609if test "$jemalloc" = "yes" ; then
4610 cat > $TMPC << EOF
4611#include <stdlib.h>
Leonid Blochf2dfe542020-05-25 01:12:04 +03004612int main(void) {
4613 void *tmp = malloc(1);
4614 if (tmp != NULL) {
4615 return 0;
4616 }
4617 return 1;
4618}
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004619EOF
4620
4621 if compile_prog "" "-ljemalloc" ; then
4622 LIBS="-ljemalloc $LIBS"
4623 else
4624 feature_not_found "jemalloc" "install jemalloc devel"
4625 fi
4626fi
4627
4628##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004629# signalfd probe
4630signalfd="no"
4631cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004632#include <unistd.h>
4633#include <sys/syscall.h>
4634#include <signal.h>
4635int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4636EOF
4637
4638if compile_prog "" "" ; then
4639 signalfd=yes
4640fi
4641
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004642# check if optreset global is declared by <getopt.h>
4643optreset="no"
4644cat > $TMPC << EOF
4645#include <getopt.h>
4646int main(void) { return optreset; }
4647EOF
4648
4649if compile_prog "" "" ; then
4650 optreset=yes
4651fi
4652
Riku Voipioc2882b92009-08-12 15:08:24 +03004653# check if eventfd is supported
4654eventfd=no
4655cat > $TMPC << EOF
4656#include <sys/eventfd.h>
4657
4658int main(void)
4659{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004660 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004661}
4662EOF
4663if compile_prog "" "" ; then
4664 eventfd=yes
4665fi
4666
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004667# check if memfd is supported
4668memfd=no
4669cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004670#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004671
4672int main(void)
4673{
4674 return memfd_create("foo", MFD_ALLOW_SEALING);
4675}
4676EOF
4677if compile_prog "" "" ; then
4678 memfd=yes
4679fi
4680
Cortland Tölva955727d2018-10-08 09:35:19 -07004681# check for usbfs
4682have_usbfs=no
4683if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004684 cat > $TMPC << EOF
4685#include <linux/usbdevice_fs.h>
4686
4687#ifndef USBDEVFS_GET_CAPABILITIES
4688#error "USBDEVFS_GET_CAPABILITIES undefined"
4689#endif
4690
4691#ifndef USBDEVFS_DISCONNECT_CLAIM
4692#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4693#endif
4694
4695int main(void)
4696{
4697 return 0;
4698}
4699EOF
4700 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004701 have_usbfs=yes
4702 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004703fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004704
Ulrich Hechtd0927932009-09-17 20:22:14 +03004705# check for fallocate
4706fallocate=no
4707cat > $TMPC << EOF
4708#include <fcntl.h>
4709
4710int main(void)
4711{
4712 fallocate(0, 0, 0, 0);
4713 return 0;
4714}
4715EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004716if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004717 fallocate=yes
4718fi
4719
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004720# check for fallocate hole punching
4721fallocate_punch_hole=no
4722cat > $TMPC << EOF
4723#include <fcntl.h>
4724#include <linux/falloc.h>
4725
4726int main(void)
4727{
4728 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4729 return 0;
4730}
4731EOF
4732if compile_prog "" "" ; then
4733 fallocate_punch_hole=yes
4734fi
4735
Denis V. Lunevb953f072015-01-30 11:42:14 +03004736# check that fallocate supports range zeroing inside the file
4737fallocate_zero_range=no
4738cat > $TMPC << EOF
4739#include <fcntl.h>
4740#include <linux/falloc.h>
4741
4742int main(void)
4743{
4744 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4745 return 0;
4746}
4747EOF
4748if compile_prog "" "" ; then
4749 fallocate_zero_range=yes
4750fi
4751
Kevin Wolfed911432014-09-29 17:12:59 +02004752# check for posix_fallocate
4753posix_fallocate=no
4754cat > $TMPC << EOF
4755#include <fcntl.h>
4756
4757int main(void)
4758{
4759 posix_fallocate(0, 0, 0);
4760 return 0;
4761}
4762EOF
4763if compile_prog "" "" ; then
4764 posix_fallocate=yes
4765fi
4766
Peter Maydellc727f472011-01-06 11:05:10 +00004767# check for sync_file_range
4768sync_file_range=no
4769cat > $TMPC << EOF
4770#include <fcntl.h>
4771
4772int main(void)
4773{
4774 sync_file_range(0, 0, 0, 0);
4775 return 0;
4776}
4777EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004778if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004779 sync_file_range=yes
4780fi
4781
Peter Maydelldace20d2011-01-10 13:11:24 +00004782# check for linux/fiemap.h and FS_IOC_FIEMAP
4783fiemap=no
4784cat > $TMPC << EOF
4785#include <sys/ioctl.h>
4786#include <linux/fs.h>
4787#include <linux/fiemap.h>
4788
4789int main(void)
4790{
4791 ioctl(0, FS_IOC_FIEMAP, 0);
4792 return 0;
4793}
4794EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004795if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004796 fiemap=yes
4797fi
4798
Ulrich Hechtd0927932009-09-17 20:22:14 +03004799# check for dup3
4800dup3=no
4801cat > $TMPC << EOF
4802#include <unistd.h>
4803
4804int main(void)
4805{
4806 dup3(0, 0, 0);
4807 return 0;
4808}
4809EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004810if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004811 dup3=yes
4812fi
4813
Alex Bligh4e0c6522013-08-21 16:02:43 +01004814# check for ppoll support
4815ppoll=no
4816cat > $TMPC << EOF
4817#include <poll.h>
4818
4819int main(void)
4820{
4821 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4822 ppoll(&pfd, 1, 0, 0);
4823 return 0;
4824}
4825EOF
4826if compile_prog "" "" ; then
4827 ppoll=yes
4828fi
4829
Alex Blighcd758dd2013-08-21 16:02:44 +01004830# check for prctl(PR_SET_TIMERSLACK , ... ) support
4831prctl_pr_set_timerslack=no
4832cat > $TMPC << EOF
4833#include <sys/prctl.h>
4834
4835int main(void)
4836{
4837 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4838 return 0;
4839}
4840EOF
4841if compile_prog "" "" ; then
4842 prctl_pr_set_timerslack=yes
4843fi
4844
Peter Maydell3b6edd12011-02-15 18:35:05 +00004845# check for epoll support
4846epoll=no
4847cat > $TMPC << EOF
4848#include <sys/epoll.h>
4849
4850int main(void)
4851{
4852 epoll_create(0);
4853 return 0;
4854}
4855EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004856if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004857 epoll=yes
4858fi
4859
Peter Maydell227f0212016-06-06 19:58:11 +01004860# epoll_create1 is a later addition
4861# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004862epoll_create1=no
4863cat > $TMPC << EOF
4864#include <sys/epoll.h>
4865
4866int main(void)
4867{
Peter Maydell19e83f62011-04-26 16:56:40 +01004868 /* Note that we use epoll_create1 as a value, not as
4869 * a function being called. This is necessary so that on
4870 * old SPARC glibc versions where the function was present in
4871 * the library but not declared in the header file we will
4872 * fail the configure check. (Otherwise we will get a compiler
4873 * warning but not an error, and will proceed to fail the
4874 * qemu compile where we compile with -Werror.)
4875 */
Blue Swirlc075a722012-08-09 20:21:25 +00004876 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004877}
4878EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004879if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004880 epoll_create1=yes
4881fi
4882
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004883# check for sendfile support
4884sendfile=no
4885cat > $TMPC << EOF
4886#include <sys/sendfile.h>
4887
4888int main(void)
4889{
4890 return sendfile(0, 0, 0, 0);
4891}
4892EOF
4893if compile_prog "" "" ; then
4894 sendfile=yes
4895fi
4896
Riku Voipio51834342014-06-22 11:25:42 +01004897# check for timerfd support (glibc 2.8 and newer)
4898timerfd=no
4899cat > $TMPC << EOF
4900#include <sys/timerfd.h>
4901
4902int main(void)
4903{
4904 return(timerfd_create(CLOCK_REALTIME, 0));
4905}
4906EOF
4907if compile_prog "" "" ; then
4908 timerfd=yes
4909fi
4910
Riku Voipio9af5c902014-08-12 15:58:57 +03004911# check for setns and unshare support
4912setns=no
4913cat > $TMPC << EOF
4914#include <sched.h>
4915
4916int main(void)
4917{
4918 int ret;
4919 ret = setns(0, 0);
4920 ret = unshare(0);
4921 return ret;
4922}
4923EOF
4924if compile_prog "" "" ; then
4925 setns=yes
4926fi
4927
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004928# clock_adjtime probe
4929clock_adjtime=no
4930cat > $TMPC <<EOF
4931#include <time.h>
4932
4933int main(void)
4934{
4935 return clock_adjtime(0, 0);
4936}
4937EOF
4938clock_adjtime=no
4939if compile_prog "" "" ; then
4940 clock_adjtime=yes
4941fi
4942
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004943# syncfs probe
4944syncfs=no
4945cat > $TMPC <<EOF
4946#include <unistd.h>
4947
4948int main(void)
4949{
4950 return syncfs(0);
4951}
4952EOF
4953syncfs=no
4954if compile_prog "" "" ; then
4955 syncfs=yes
4956fi
4957
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004958# check for kcov support (kernel must be 4.4+, compiled with certain options)
4959kcov=no
4960if check_include sys/kcov.h ; then
4961 kcov=yes
4962fi
4963
Peter Maydell516e8b72020-04-11 19:29:32 +01004964# If we're making warnings fatal, apply this to Sphinx runs as well
4965sphinx_werror=""
4966if test "$werror" = "yes"; then
4967 sphinx_werror="-W"
4968fi
4969
Peter Maydell5f71eac2019-03-07 14:26:46 +00004970# Check we have a new enough version of sphinx-build
4971has_sphinx_build() {
4972 # This is a bit awkward but works: create a trivial document and
4973 # try to run it with our configuration file (which enforces a
4974 # version requirement). This will fail if either
4975 # sphinx-build doesn't exist at all or if it is too old.
4976 mkdir -p "$TMPDIR1/sphinx"
4977 touch "$TMPDIR1/sphinx/index.rst"
Alex Bennée988ae6c2020-04-14 21:06:21 +01004978 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
4979 -b html "$TMPDIR1/sphinx" \
4980 "$TMPDIR1/sphinx/out" >> config.log 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004981}
4982
pbrookcc8ae6d2006-04-23 17:57:59 +00004983# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004984if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004985 if has_sphinx_build; then
4986 sphinx_ok=yes
4987 else
4988 sphinx_ok=no
4989 fi
4990 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004991 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004992 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004993 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004994 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4995 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4996 fi
4997 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004998 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004999 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02005000 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00005001fi
5002
Stefan Weilf514f412009-10-11 12:44:07 +02005003# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005004byteswap_h=no
5005cat > $TMPC << EOF
5006#include <byteswap.h>
5007int main(void) { return bswap_32(0); }
5008EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02005009if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005010 byteswap_h=yes
5011fi
5012
Stefan Weil75f13592013-01-05 12:17:38 +01005013# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005014bswap_h=no
5015cat > $TMPC << EOF
5016#include <sys/endian.h>
5017#include <sys/types.h>
5018#include <machine/bswap.h>
5019int main(void) { return bswap32(0); }
5020EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02005021if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005022 bswap_h=yes
5023fi
5024
aliguorida93a1f2008-12-12 20:02:52 +00005025##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02005026# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005027if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02005028 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01005029 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005030 libiscsi_cflags=$($pkg_config --cflags libiscsi)
5031 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005032 else
5033 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02005034 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005035 fi
5036 libiscsi="no"
5037 fi
5038fi
5039
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005040##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00005041# Do we need libm
5042cat > $TMPC << EOF
5043#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10005044int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00005045EOF
5046if compile_prog "" "" ; then
5047 :
5048elif compile_prog "" "-lm" ; then
5049 LIBS="-lm $LIBS"
5050 libs_qga="-lm $libs_qga"
5051else
Peter Maydell76ad07a2013-04-08 12:11:26 +01005052 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00005053fi
5054
5055##########################################
aliguorida93a1f2008-12-12 20:02:52 +00005056# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00005057# uClibc provides 2 versions of clock_gettime(), one with realtime
5058# support and one without. This means that the clock_gettime() don't
5059# need -lrt. We still need it for timer_create() so we check for this
5060# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00005061cat > $TMPC <<EOF
5062#include <signal.h>
5063#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00005064int main(void) {
5065 timer_create(CLOCK_REALTIME, NULL, NULL);
5066 return clock_gettime(CLOCK_REALTIME, NULL);
5067}
aliguorida93a1f2008-12-12 20:02:52 +00005068EOF
5069
Juan Quintela52166aa2009-08-03 14:46:03 +02005070if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02005071 :
Natanael Copa8bacde82012-09-12 09:06:51 +00005072# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07005073elif compile_prog "" "$pthread_lib -lrt" ; then
5074 LIBS="$LIBS -lrt"
5075 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00005076fi
5077
Thomas Huthd99e97e2019-01-17 18:14:08 +01005078# Check whether we need to link libutil for openpty()
5079cat > $TMPC << EOF
5080extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5081int main(void) { return openpty(0, 0, 0, 0, 0); }
5082EOF
5083
5084if ! compile_prog "" "" ; then
5085 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02005086 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01005087 libs_tools="-lutil $libs_tools"
5088 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005089fi
5090
Blue Swirlde5071c2009-09-12 09:58:46 +00005091##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005092# spice probe
5093if test "$spice" != "no" ; then
5094 cat > $TMPC << EOF
5095#include <spice.h>
5096int main(void) { spice_server_new(); return 0; }
5097EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005098 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5099 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005100 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005101 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005102 compile_prog "$spice_cflags" "$spice_libs" ; then
5103 spice="yes"
5104 libs_softmmu="$libs_softmmu $spice_libs"
5105 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005106 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5107 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005108 else
5109 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005110 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005111 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005112 fi
5113 spice="no"
5114 fi
5115fi
5116
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005117# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005118if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005119 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005120 libcacard_cflags=$($pkg_config --cflags libcacard)
5121 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005122 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005123 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005124 if test "$smartcard" = "yes"; then
5125 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005126 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005127 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005128 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005129fi
5130
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005131# check for libusb
5132if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005133 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005134 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005135 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5136 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005137 else
5138 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005139 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005140 fi
5141 libusb="no"
5142 fi
5143fi
5144
Hans de Goede69354a82011-07-19 11:04:10 +02005145# check for usbredirparser for usb network redirection support
5146if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005147 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005148 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005149 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5150 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005151 else
5152 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005153 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005154 fi
5155 usb_redir="no"
5156 fi
5157fi
5158
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005159##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005160# check if we have VSS SDK headers for win
5161
Eric Blakee633a5c2019-02-04 20:39:37 -06005162if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5163 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005164 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005165 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005166 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5167 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005168 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005169 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5170 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005171 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005172 esac
5173 cat > $TMPC << EOF
5174#define __MIDL_user_allocate_free_DEFINED__
5175#include <inc/win2003/vss.h>
5176int main(void) { return VSS_CTX_BACKUP; }
5177EOF
5178 if compile_prog "$vss_win32_include" "" ; then
5179 guest_agent_with_vss="yes"
5180 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005181 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005182 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005183 else
5184 if test "$vss_win32_sdk" != "" ; then
5185 echo "ERROR: Please download and install Microsoft VSS SDK:"
5186 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5187 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5188 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5189 echo "ERROR: The headers are extracted in the directory \`inc'."
5190 feature_not_found "VSS support"
5191 fi
5192 guest_agent_with_vss="no"
5193 fi
5194fi
5195
5196##########################################
5197# lookup Windows platform SDK (if not specified)
5198# The SDK is needed only to build .tlb (type library) file of guest agent
5199# VSS provider from the source. It is usually unnecessary because the
5200# pre-compiled .tlb file is included.
5201
Eric Blakee633a5c2019-02-04 20:39:37 -06005202if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5203 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005204 if test -z "$win_sdk"; then
5205 programfiles="$PROGRAMFILES"
5206 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5207 if test -n "$programfiles"; then
5208 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5209 else
5210 feature_not_found "Windows SDK"
5211 fi
5212 elif test "$win_sdk" = "no"; then
5213 win_sdk=""
5214 fi
5215fi
5216
5217##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005218# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005219if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005220 cat > $TMPC << EOF
5221#include <windows.h>
5222#include <ntddscsi.h>
5223int main(void) {
5224#if !defined(IOCTL_SCSI_GET_ADDRESS)
5225#error Missing required ioctl definitions
5226#endif
5227 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5228 return addr.Lun;
5229}
5230EOF
5231 if compile_prog "" "" ; then
5232 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005233 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005234 fi
5235fi
5236
5237##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005238# virgl renderer probe
5239
5240if test "$virglrenderer" != "no" ; then
5241 cat > $TMPC << EOF
5242#include <virglrenderer.h>
5243int main(void) { virgl_renderer_poll(); return 0; }
5244EOF
5245 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5246 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005247 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005248 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5249 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5250 virglrenderer="yes"
5251 else
5252 if test "$virglrenderer" = "yes" ; then
5253 feature_not_found "virglrenderer"
5254 fi
5255 virglrenderer="no"
5256 fi
5257fi
5258
5259##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005260# capstone
5261
Richard Hendersone219c492017-09-28 09:01:23 -07005262case "$capstone" in
5263 "" | yes)
5264 if $pkg_config capstone; then
5265 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005266 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005267 capstone=git
5268 elif test -e "${source_path}/capstone/Makefile" ; then
5269 capstone=internal
5270 elif test -z "$capstone" ; then
5271 capstone=no
5272 else
5273 feature_not_found "capstone" "Install capstone devel or git submodule"
5274 fi
5275 ;;
5276
5277 system)
5278 if ! $pkg_config capstone; then
5279 feature_not_found "capstone" "Install capstone devel"
5280 fi
5281 ;;
5282esac
5283
5284case "$capstone" in
5285 git | internal)
5286 if test "$capstone" = git; then
5287 git_submodules="${git_submodules} capstone"
5288 fi
5289 mkdir -p capstone
5290 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5291 if test "$mingw32" = "yes"; then
5292 LIBCAPSTONE=capstone.lib
5293 else
5294 LIBCAPSTONE=libcapstone.a
5295 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005296 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005297 ;;
5298
5299 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005300 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005301 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005302 ;;
5303
5304 no)
5305 ;;
5306 *)
5307 error_exit "Unknown state for capstone: $capstone"
5308 ;;
5309esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005310
5311##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005312# check if we have fdatasync
5313
5314fdatasync=no
5315cat > $TMPC << EOF
5316#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005317int main(void) {
5318#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5319return fdatasync(0);
5320#else
Stefan Weile172fe12012-04-06 21:33:20 +02005321#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005322#endif
5323}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005324EOF
5325if compile_prog "" "" ; then
5326 fdatasync=yes
5327fi
5328
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005329##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005330# check if we have madvise
5331
5332madvise=no
5333cat > $TMPC << EOF
5334#include <sys/types.h>
5335#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005336#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005337int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5338EOF
5339if compile_prog "" "" ; then
5340 madvise=yes
5341fi
5342
5343##########################################
5344# check if we have posix_madvise
5345
5346posix_madvise=no
5347cat > $TMPC << EOF
5348#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005349#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005350int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5351EOF
5352if compile_prog "" "" ; then
5353 posix_madvise=yes
5354fi
5355
5356##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005357# check if we have posix_memalign()
5358
5359posix_memalign=no
5360cat > $TMPC << EOF
5361#include <stdlib.h>
5362int main(void) {
5363 void *p;
5364 return posix_memalign(&p, 8, 8);
5365}
5366EOF
5367if compile_prog "" "" ; then
5368 posix_memalign=yes
5369fi
5370
5371##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005372# check if we have posix_syslog
5373
5374posix_syslog=no
5375cat > $TMPC << EOF
5376#include <syslog.h>
5377int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5378EOF
5379if compile_prog "" "" ; then
5380 posix_syslog=yes
5381fi
5382
5383##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005384# check if we have sem_timedwait
5385
5386sem_timedwait=no
5387cat > $TMPC << EOF
5388#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005389int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005390EOF
5391if compile_prog "" "" ; then
5392 sem_timedwait=yes
5393fi
5394
5395##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005396# check if we have strchrnul
5397
5398strchrnul=no
5399cat > $TMPC << EOF
5400#include <string.h>
5401int main(void);
5402// Use a haystack that the compiler shouldn't be able to constant fold
5403char *haystack = (char*)&main;
5404int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5405EOF
5406if compile_prog "" "" ; then
5407 strchrnul=yes
5408fi
5409
Jiufei Xue8a792b02019-04-17 03:08:56 +08005410#########################################
5411# check if we have st_atim
5412
5413st_atim=no
5414cat > $TMPC << EOF
5415#include <sys/stat.h>
5416#include <stddef.h>
5417int main(void) { return offsetof(struct stat, st_atim); }
5418EOF
5419if compile_prog "" "" ; then
5420 st_atim=yes
5421fi
5422
Keno Fischer5c99fa32018-06-29 12:32:10 +02005423##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005424# check if trace backend exists
5425
Lluís Vilanova5b808272014-05-27 15:02:14 +02005426$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005427if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005428 error_exit "invalid trace backends" \
5429 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005430fi
5431
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005432##########################################
5433# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005434if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005435 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005436#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005437int main(void) { return 0; }
5438EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005439 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005440 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005441 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005442 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005443 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005444 fi
5445 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005446 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005447 else
5448 urcu_bp_libs="-lurcu-bp"
5449 fi
5450
5451 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5452 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005453 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005454 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005455 fi
5456fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005457
5458##########################################
5459# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005460if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005461 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005462 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005463 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005464 trace_backend_stap="no"
5465 if has 'stap' ; then
5466 trace_backend_stap="yes"
5467 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005468fi
5469
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005470##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005471# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305472
Peter Maydell7c2acc72013-04-08 12:11:27 +01005473# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005474# is sigcontext. On Windows the only valid backend is the Windows
5475# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005476
5477ucontext_works=no
5478if test "$darwin" != "yes"; then
5479 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305480#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005481#ifdef __stub_makecontext
5482#error Ignoring glibc stub makecontext which will always fail
5483#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005484int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305485EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005486 if compile_prog "" "" ; then
5487 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305488 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005489fi
5490
5491if test "$coroutine" = ""; then
5492 if test "$mingw32" = "yes"; then
5493 coroutine=win32
5494 elif test "$ucontext_works" = "yes"; then
5495 coroutine=ucontext
5496 else
5497 coroutine=sigaltstack
5498 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005499else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005500 case $coroutine in
5501 windows)
5502 if test "$mingw32" != "yes"; then
5503 error_exit "'windows' coroutine backend only valid for Windows"
5504 fi
5505 # Unfortunately the user visible backend name doesn't match the
5506 # coroutine-*.c filename for this case, so we have to adjust it here.
5507 coroutine=win32
5508 ;;
5509 ucontext)
5510 if test "$ucontext_works" != "yes"; then
5511 feature_not_found "ucontext"
5512 fi
5513 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005514 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005515 if test "$mingw32" = "yes"; then
5516 error_exit "only the 'windows' coroutine backend is valid for Windows"
5517 fi
5518 ;;
5519 *)
5520 error_exit "unknown coroutine backend $coroutine"
5521 ;;
5522 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305523fi
5524
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005525if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005526 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005527fi
5528
Peter Lieven7d992e42016-09-27 11:58:45 +02005529if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005530 if test "$coroutine_pool" = "yes"; then
5531 echo "WARN: disabling coroutine pool for stack usage debugging"
5532 coroutine_pool=no
5533 fi
5534fi
5535
5536
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305537##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305538# check if we have open_by_handle_at
5539
Stefan Weil4e1797f2012-06-18 22:11:06 +02005540open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305541cat > $TMPC << EOF
5542#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005543#if !defined(AT_EMPTY_PATH)
5544# error missing definition
5545#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005546int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005547#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305548EOF
5549if compile_prog "" "" ; then
5550 open_by_handle_at=yes
5551fi
5552
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305553########################################
5554# check if we have linux/magic.h
5555
5556linux_magic_h=no
5557cat > $TMPC << EOF
5558#include <linux/magic.h>
5559int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005560 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305561}
5562EOF
5563if compile_prog "" "" ; then
5564 linux_magic_h=yes
5565fi
5566
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005567########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005568# check whether we can disable warning option with a pragma (this is needed
5569# to silence warnings in the headers of some versions of external libraries).
5570# This test has to be compiled with -Werror as otherwise an unknown pragma is
5571# only a warning.
5572#
5573# If we can't selectively disable warning in the code, disable -Werror so that
5574# the build doesn't fail anyway.
5575
Peter Maydell06d71fa2012-07-30 16:13:07 +01005576pragma_disable_unused_but_set=no
5577cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005578#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005579#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005580#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005581
Peter Maydell06d71fa2012-07-30 16:13:07 +01005582int main(void) {
5583 return 0;
5584}
5585EOF
5586if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005587 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005588else
5589 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005590fi
5591
5592########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005593# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005594
5595valgrind_h=no
5596cat > $TMPC << EOF
5597#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005598int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005599 return 0;
5600}
5601EOF
5602if compile_prog "" "" ; then
5603 valgrind_h=yes
5604fi
5605
5606########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005607# check if environ is declared
5608
5609has_environ=no
5610cat > $TMPC << EOF
5611#include <unistd.h>
5612int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005613 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005614 return 0;
5615}
5616EOF
5617if compile_prog "" "" ; then
5618 has_environ=yes
5619fi
5620
Richard Henderson76a347e2012-12-28 14:17:02 -08005621########################################
5622# check if cpuid.h is usable.
5623
Richard Henderson76a347e2012-12-28 14:17:02 -08005624cat > $TMPC << EOF
5625#include <cpuid.h>
5626int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005627 unsigned a, b, c, d;
5628 int max = __get_cpuid_max(0, 0);
5629
5630 if (max >= 1) {
5631 __cpuid(1, a, b, c, d);
5632 }
5633
5634 if (max >= 7) {
5635 __cpuid_count(7, 0, a, b, c, d);
5636 }
5637
5638 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005639}
5640EOF
5641if compile_prog "" "" ; then
5642 cpuid_h=yes
5643fi
5644
Richard Henderson5dd89902017-07-18 18:40:18 -10005645##########################################
5646# avx2 optimization requirement check
5647#
5648# There is no point enabling this if cpuid.h is not usable,
5649# since we won't be able to select the new routines.
5650
Eric Blakee633a5c2019-02-04 20:39:37 -06005651if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005652 cat > $TMPC << EOF
5653#pragma GCC push_options
5654#pragma GCC target("avx2")
5655#include <cpuid.h>
5656#include <immintrin.h>
5657static int bar(void *a) {
5658 __m256i x = *(__m256i *)a;
5659 return _mm256_testz_si256(x, x);
5660}
5661int main(int argc, char *argv[]) { return bar(argv[0]); }
5662EOF
5663 if compile_object "" ; then
5664 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005665 else
5666 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005667 fi
5668fi
5669
Robert Hoo6b8cd442020-02-29 20:34:34 +08005670##########################################
5671# avx512f optimization requirement check
5672#
5673# There is no point enabling this if cpuid.h is not usable,
5674# since we won't be able to select the new routines.
5675# by default, it is turned off.
5676# if user explicitly want to enable it, check environment
5677
5678if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5679 cat > $TMPC << EOF
5680#pragma GCC push_options
5681#pragma GCC target("avx512f")
5682#include <cpuid.h>
5683#include <immintrin.h>
5684static int bar(void *a) {
5685 __m512i x = *(__m512i *)a;
5686 return _mm512_test_epi64_mask(x, x);
5687}
5688int main(int argc, char *argv[])
5689{
5690 return bar(argv[0]);
5691}
5692EOF
5693 if ! compile_object "" ; then
5694 avx512f_opt="no"
5695 fi
5696else
5697 avx512f_opt="no"
5698fi
5699
Richard Hendersonf5401662013-02-16 12:46:59 -08005700########################################
5701# check if __[u]int128_t is usable.
5702
5703int128=no
5704cat > $TMPC << EOF
5705__int128_t a;
5706__uint128_t b;
5707int main (void) {
5708 a = a + b;
5709 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005710 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005711 return 0;
5712}
5713EOF
5714if compile_prog "" "" ; then
5715 int128=yes
5716fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005717
Richard Henderson7ebee432016-06-29 21:10:59 -07005718#########################################
5719# See if 128-bit atomic operations are supported.
5720
5721atomic128=no
5722if test "$int128" = "yes"; then
5723 cat > $TMPC << EOF
5724int main(void)
5725{
5726 unsigned __int128 x = 0, y = 0;
5727 y = __atomic_load_16(&x, 0);
5728 __atomic_store_16(&x, y, 0);
5729 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5730 return 0;
5731}
5732EOF
5733 if compile_prog "" "" ; then
5734 atomic128=yes
5735 fi
5736fi
5737
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005738cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005739if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005740 cat > $TMPC << EOF
5741int main(void)
5742{
5743 unsigned __int128 x = 0, y = 0;
5744 __sync_val_compare_and_swap_16(&x, y, x);
5745 return 0;
5746}
5747EOF
5748 if compile_prog "" "" ; then
5749 cmpxchg128=yes
5750 fi
5751fi
5752
Richard Hendersondf79b992016-09-02 12:23:57 -07005753#########################################
5754# See if 64-bit atomic operations are supported.
5755# Note that without __atomic builtins, we can only
5756# assume atomic loads/stores max at pointer size.
5757
5758cat > $TMPC << EOF
5759#include <stdint.h>
5760int main(void)
5761{
5762 uint64_t x = 0, y = 0;
5763#ifdef __ATOMIC_RELAXED
5764 y = __atomic_load_8(&x, 0);
5765 __atomic_store_8(&x, y, 0);
5766 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5767 __atomic_exchange_8(&x, y, 0);
5768 __atomic_fetch_add_8(&x, y, 0);
5769#else
5770 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5771 __sync_lock_test_and_set(&x, y);
5772 __sync_val_compare_and_swap(&x, y, 0);
5773 __sync_fetch_and_add(&x, y);
5774#endif
5775 return 0;
5776}
5777EOF
5778if compile_prog "" "" ; then
5779 atomic64=yes
5780fi
5781
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005782#########################################
5783# See if --dynamic-list is supported by the linker
5784ld_dynamic_list="no"
5785if test "$static" = "no" ; then
5786 cat > $TMPTXT <<EOF
5787{
5788 foo;
5789};
5790EOF
5791
5792 cat > $TMPC <<EOF
5793#include <stdio.h>
5794void foo(void);
5795
5796void foo(void)
5797{
5798 printf("foo\n");
5799}
5800
5801int main(void)
5802{
5803 foo();
5804 return 0;
5805}
5806EOF
5807
5808 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5809 ld_dynamic_list="yes"
5810 fi
5811fi
5812
5813#########################################
5814# See if -exported_symbols_list is supported by the linker
5815
5816ld_exported_symbols_list="no"
5817if test "$static" = "no" ; then
5818 cat > $TMPTXT <<EOF
5819 _foo
5820EOF
5821
5822 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5823 ld_exported_symbols_list="yes"
5824 fi
5825fi
5826
5827if test "$plugins" = "yes" &&
5828 test "$ld_dynamic_list" = "no" &&
5829 test "$ld_exported_symbols_list" = "no" ; then
5830 error_exit \
5831 "Plugin support requires dynamic linking and specifying a set of symbols " \
5832 "that are exported to plugins. Unfortunately your linker doesn't " \
5833 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5834 "for this purpose. You can't build with --static."
5835fi
5836
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005837########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005838# See if __attribute__((alias)) is supported.
5839# This false for Xcode 9, but has been remedied for Xcode 10.
5840# Unfortunately, travis uses Xcode 9 by default.
5841
5842attralias=no
5843cat > $TMPC << EOF
5844int x = 1;
5845extern const int y __attribute__((alias("x")));
5846int main(void) { return 0; }
5847EOF
5848if compile_prog "" "" ; then
5849 attralias=yes
5850fi
5851
5852########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005853# check if getauxval is available.
5854
5855getauxval=no
5856cat > $TMPC << EOF
5857#include <sys/auxv.h>
5858int main(void) {
5859 return getauxval(AT_HWCAP) == 0;
5860}
5861EOF
5862if compile_prog "" "" ; then
5863 getauxval=yes
5864fi
5865
John Snowfd0e6052015-03-25 18:57:39 -04005866########################################
5867# check if ccache is interfering with
5868# semantic analysis of macros
5869
John Snow5e4dfd32015-10-28 13:56:40 -04005870unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005871ccache_cpp2=no
5872cat > $TMPC << EOF
5873static const int Z = 1;
5874#define fn() ({ Z; })
5875#define TAUT(X) ((X) == Z)
5876#define PAREN(X, Y) (X == Y)
5877#define ID(X) (X)
5878int main(int argc, char *argv[])
5879{
5880 int x = 0, y = 0;
5881 x = ID(x);
5882 x = fn();
5883 fn();
5884 if (PAREN(x, y)) return 0;
5885 if (TAUT(Z)) return 0;
5886 return 0;
5887}
5888EOF
5889
5890if ! compile_object "-Werror"; then
5891 ccache_cpp2=yes
5892fi
5893
John Snowb553a042015-11-03 15:43:42 -05005894#################################################
5895# clang does not support glibc + FORTIFY_SOURCE.
5896
5897if test "$fortify_source" != "no"; then
5898 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5899 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005900 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005901 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005902 fortify_source="no";
5903 else
5904 fortify_source="yes"
5905 fi
5906fi
5907
Fam Zheng1efad062018-06-01 17:26:43 +08005908###############################################
5909# Check if copy_file_range is provided by glibc
5910have_copy_file_range=no
5911cat > $TMPC << EOF
5912#include <unistd.h>
5913int main(void) {
5914 copy_file_range(0, NULL, 0, NULL, 0, 0);
5915 return 0;
5916}
5917EOF
5918if compile_prog "" "" ; then
5919 have_copy_file_range=yes
5920fi
5921
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305922##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005923# check if struct fsxattr is available via linux/fs.h
5924
5925have_fsxattr=no
5926cat > $TMPC << EOF
5927#include <linux/fs.h>
5928struct fsxattr foo;
5929int main(void) {
5930 return 0;
5931}
5932EOF
5933if compile_prog "" "" ; then
5934 have_fsxattr=yes
5935fi
5936
Peter Maydellb66e10e2016-06-08 18:34:32 +01005937##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005938# check for usable membarrier system call
5939if test "$membarrier" = "yes"; then
5940 have_membarrier=no
5941 if test "$mingw32" = "yes" ; then
5942 have_membarrier=yes
5943 elif test "$linux" = "yes" ; then
5944 cat > $TMPC << EOF
5945 #include <linux/membarrier.h>
5946 #include <sys/syscall.h>
5947 #include <unistd.h>
5948 #include <stdlib.h>
5949 int main(void) {
5950 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5951 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5952 exit(0);
5953 }
5954EOF
5955 if compile_prog "" "" ; then
5956 have_membarrier=yes
5957 fi
5958 fi
5959 if test "$have_membarrier" = "no"; then
5960 feature_not_found "membarrier" "membarrier system call not available"
5961 fi
5962else
5963 # Do not enable it by default even for Mingw32, because it doesn't
5964 # work on Wine.
5965 membarrier=no
5966fi
5967
5968##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005969# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005970have_rtnetlink=no
5971cat > $TMPC << EOF
5972#include <linux/rtnetlink.h>
5973int main(void) {
5974 return IFLA_PROTO_DOWN;
5975}
5976EOF
5977if compile_prog "" "" ; then
5978 have_rtnetlink=yes
5979fi
5980
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005981##########################################
5982# check for usable AF_VSOCK environment
5983have_af_vsock=no
5984cat > $TMPC << EOF
5985#include <errno.h>
5986#include <sys/types.h>
5987#include <sys/socket.h>
5988#if !defined(AF_VSOCK)
5989# error missing AF_VSOCK flag
5990#endif
5991#include <linux/vm_sockets.h>
5992int main(void) {
5993 int sock, ret;
5994 struct sockaddr_vm svm;
5995 socklen_t len = sizeof(svm);
5996 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5997 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5998 if ((ret == -1) && (errno == ENOTCONN)) {
5999 return 0;
6000 }
6001 return -1;
6002}
6003EOF
6004if compile_prog "" "" ; then
6005 have_af_vsock=yes
6006fi
6007
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006008##########################################
6009# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01006010have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006011cat > $TMPC << EOF
6012#include <errno.h>
6013#include <sys/types.h>
6014#include <sys/socket.h>
6015#include <linux/if_alg.h>
6016int main(void) {
6017 int sock;
6018 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6019 return sock;
6020}
6021EOF
6022if compile_prog "" "" ; then
6023 have_afalg=yes
6024fi
6025if test "$crypto_afalg" = "yes"
6026then
6027 if test "$have_afalg" != "yes"
6028 then
6029 error_exit "AF_ALG requested but could not be detected"
6030 fi
6031fi
6032
6033
James Clarke6969ec62016-06-06 12:02:50 +01006034#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006035# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00006036if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006037 cat > $TMPC << EOF
6038#include <Hypervisor/hv.h>
6039int main() { return 0;}
6040EOF
6041 if ! compile_object ""; then
6042 hvf='no'
6043 else
6044 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006045 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006046 fi
6047fi
6048
6049#################################################
James Clarke6969ec62016-06-06 12:02:50 +01006050# Sparc implicitly links with --relax, which is
6051# incompatible with -r, so --no-relax should be
6052# given. It does no harm to give it on other
6053# platforms too.
6054
6055# Note: the prototype is needed since QEMU_CFLAGS
6056# contains -Wmissing-prototypes
6057cat > $TMPC << EOF
6058extern int foo(void);
6059int foo(void) { return 0; }
6060EOF
6061if ! compile_object ""; then
6062 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6063fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01006064for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6065 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6066 LD_REL_FLAGS=$i
6067 break
6068 fi
6069done
6070if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6071 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006072fi
6073
Jan Vesely277abf12016-04-29 13:15:23 -04006074##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006075# check for sysmacros.h
6076
6077have_sysmacros=no
6078cat > $TMPC << EOF
6079#include <sys/sysmacros.h>
6080int main(void) {
6081 return makedev(0, 0);
6082}
6083EOF
6084if compile_prog "" "" ; then
6085 have_sysmacros=yes
6086fi
6087
6088##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006089# Veritas HyperScale block driver VxHS
6090# Check if libvxhs is installed
6091
6092if test "$vxhs" != "no" ; then
6093 cat > $TMPC <<EOF
6094#include <stdint.h>
6095#include <qnio/qnio_api.h>
6096
6097void *vxhs_callback;
6098
6099int main(void) {
6100 iio_init(QNIO_VERSION, vxhs_callback);
6101 return 0;
6102}
6103EOF
6104 vxhs_libs="-lvxhs -lssl"
6105 if compile_prog "" "$vxhs_libs" ; then
6106 vxhs=yes
6107 else
6108 if test "$vxhs" = "yes" ; then
6109 feature_not_found "vxhs block device" "Install libvxhs See github"
6110 fi
6111 vxhs=no
6112 fi
6113fi
6114
6115##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006116# check for _Static_assert()
6117
6118have_static_assert=no
6119cat > $TMPC << EOF
6120_Static_assert(1, "success");
6121int main(void) {
6122 return 0;
6123}
6124EOF
6125if compile_prog "" "" ; then
6126 have_static_assert=yes
6127fi
6128
6129##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006130# check for utmpx.h, it is missing e.g. on OpenBSD
6131
6132have_utmpx=no
6133cat > $TMPC << EOF
6134#include <utmpx.h>
6135struct utmpx user_info;
6136int main(void) {
6137 return 0;
6138}
6139EOF
6140if compile_prog "" "" ; then
6141 have_utmpx=yes
6142fi
6143
6144##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006145# check for getrandom()
6146
6147have_getrandom=no
6148cat > $TMPC << EOF
6149#include <sys/random.h>
6150int main(void) {
6151 return getrandom(0, 0, GRND_NONBLOCK);
6152}
6153EOF
6154if compile_prog "" "" ; then
6155 have_getrandom=yes
6156fi
6157
6158##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006159# checks for sanitizers
6160
Marc-André Lureau247724c2018-01-16 16:11:51 +01006161have_asan=no
6162have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006163have_asan_iface_h=no
6164have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006165
6166if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006167 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006168 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6169 have_asan=yes
6170 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006171
6172 # we could use a simple skeleton for flags checks, but this also
6173 # detect the static linking issue of ubsan, see also:
6174 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6175 cat > $TMPC << EOF
6176#include <stdlib.h>
6177int main(void) {
6178 void *tmp = malloc(10);
Leonid Blochf2dfe542020-05-25 01:12:04 +03006179 if (tmp != NULL) {
6180 return *(int *)(tmp + 2);
6181 }
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006182}
6183EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006184 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6185 have_ubsan=yes
6186 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006187
6188 if check_include "sanitizer/asan_interface.h" ; then
6189 have_asan_iface_h=yes
6190 fi
6191
6192 cat > $TMPC << EOF
6193#include <sanitizer/asan_interface.h>
6194int main(void) {
6195 __sanitizer_start_switch_fiber(0, 0, 0);
6196 return 0;
6197}
6198EOF
6199 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6200 have_asan_iface_fiber=yes
6201 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006202fi
6203
6204##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006205# checks for fuzzer
6206if test "$fuzzing" = "yes" ; then
6207 write_c_fuzzer_skeleton
6208 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6209 have_fuzzer=yes
6210 fi
6211fi
6212
6213##########################################
Junyan He17824402018-07-18 15:47:59 +08006214# check for libpmem
6215
6216if test "$libpmem" != "no"; then
6217 if $pkg_config --exists "libpmem"; then
6218 libpmem="yes"
6219 libpmem_libs=$($pkg_config --libs libpmem)
6220 libpmem_cflags=$($pkg_config --cflags libpmem)
6221 libs_softmmu="$libs_softmmu $libpmem_libs"
6222 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6223 else
6224 if test "$libpmem" = "yes" ; then
6225 feature_not_found "libpmem" "Install nvml or pmdk"
6226 fi
6227 libpmem="no"
6228 fi
6229fi
6230
6231##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006232# check for slirp
6233
Laurent Vivierd5999382019-06-21 15:05:44 +02006234# slirp is only required when building softmmu targets
6235if test -z "$slirp" -a "$softmmu" != "yes" ; then
6236 slirp="no"
6237fi
6238
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006239case "$slirp" in
6240 "" | yes)
6241 if $pkg_config slirp; then
6242 slirp=system
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02006243 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6244 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006245 elif test -e "${source_path}/slirp/Makefile" ; then
6246 slirp=internal
6247 elif test -z "$slirp" ; then
6248 slirp=no
6249 else
6250 feature_not_found "slirp" "Install slirp devel or git submodule"
6251 fi
6252 ;;
6253
6254 system)
6255 if ! $pkg_config slirp; then
6256 feature_not_found "slirp" "Install slirp devel"
6257 fi
6258 ;;
6259esac
6260
6261case "$slirp" in
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02006262 git | internal)
6263 if test "$slirp" = git; then
6264 git_submodules="${git_submodules} slirp"
6265 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006266 mkdir -p slirp
6267 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6268 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006269 if test "$mingw32" = "yes" ; then
6270 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6271 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006272 ;;
6273
6274 system)
6275 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6276 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6277 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6278 ;;
6279
6280 no)
6281 ;;
6282 *)
6283 error_exit "Unknown state for slirp: $slirp"
6284 ;;
6285esac
6286
6287
6288##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006289# End of CC checks
6290# After here, no more $cc or $ld runs
6291
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006292write_c_skeleton
6293
Blue Swirl1d728c32012-05-01 18:45:39 +00006294if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006295 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6296 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006297elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006298 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006299elif test "$debug" = "no"; then
6300 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006301fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006302
Marc-André Lureau247724c2018-01-16 16:11:51 +01006303if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006304 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6305 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006306 if test "$have_asan_iface_h" = "no" ; then
6307 echo "ASAN build enabled, but ASAN header missing." \
6308 "Without code annotation, the report may be inferior."
6309 elif test "$have_asan_iface_fiber" = "no" ; then
6310 echo "ASAN build enabled, but ASAN header is too old." \
6311 "Without code annotation, the report may be inferior."
6312 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006313fi
6314if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006315 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6316 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006317fi
6318
Peter Lieven6542aa92014-02-03 10:26:13 +01006319##########################################
6320# Do we have libnfs
6321if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006322 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006323 libnfs="yes"
6324 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006325 else
6326 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006327 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006328 fi
6329 libnfs="no"
6330 fi
6331fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006332
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006333##########################################
6334# Do we have libudev
6335if test "$libudev" != "no" ; then
6336 if $pkg_config libudev && test "$static" != "yes"; then
6337 libudev="yes"
6338 libudev_libs=$($pkg_config --libs libudev)
6339 else
6340 libudev="no"
6341 fi
6342fi
6343
Peter Maydell6ca026c2012-07-18 15:10:18 +01006344# Now we've finished running tests it's OK to add -Werror to the compiler flags
6345if test "$werror" = "yes"; then
6346 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6347fi
6348
Juan Quintelae86ecd42009-08-03 14:45:59 +02006349if test "$solaris" = "no" ; then
6350 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006351 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006352 fi
6353fi
6354
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006355# test if pod2man has --utf8 option
6356if pod2man --help | grep -q utf8; then
6357 POD2MAN="pod2man --utf8"
6358else
6359 POD2MAN="pod2man"
6360fi
6361
Blue Swirl952afb72010-09-19 08:36:34 +00006362# Use ASLR, no-SEH and DEP if available
6363if test "$mingw32" = "yes" ; then
6364 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006365 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006366 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006367 fi
6368 done
6369fi
6370
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006371# Disable OpenBSD W^X if available
6372if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6373 cat > $TMPC <<EOF
6374 int main(void) { return 0; }
6375EOF
6376 wx_ldflags="-Wl,-z,wxneeded"
6377 if compile_prog "" "$wx_ldflags"; then
6378 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6379 fi
6380fi
6381
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006382qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006383qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006384qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006385qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006386qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006387qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006388
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006389# We can only support ivshmem if we have eventfd
6390if [ "$eventfd" = "yes" ]; then
6391 ivshmem=yes
6392fi
6393
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006394tools=""
6395if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006396 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006397 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006398 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006399 fi
6400 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006401 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006402 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006403 if [ "$curl" = "yes" ]; then
6404 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006405 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006406fi
6407if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006408 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006409 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006410 virtfs=yes
Philippe Mathieu-Daudéfdbff6b2020-04-23 12:43:45 +02006411 helpers="$helpers fsdev/virtfs-proxy-helper\$(EXESUF)"
Andreas Färberaabfd882012-05-01 01:12:02 +02006412 else
6413 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006414 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306415 fi
Andreas Färber17500372012-05-01 01:12:03 +02006416 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006417 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006418 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6419 mpath=yes
6420 else
6421 if test "$mpath" = yes; then
6422 error_exit "Multipath requires libmpathpersist devel"
6423 fi
6424 mpath=no
6425 fi
Philippe Mathieu-Daudéfdbff6b2020-04-23 12:43:45 +02006426 helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006427 else
6428 if test "$virtfs" = yes; then
6429 error_exit "VirtFS is supported only on Linux"
6430 fi
6431 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006432 if test "$mpath" = yes; then
6433 error_exit "Multipath is supported only on Linux"
6434 fi
6435 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306436 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006437 if test "$xkbcommon" = "yes"; then
6438 tools="qemu-keymap\$(EXESUF) $tools"
6439 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006440fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006441
6442# Probe for guest agent support/options
6443
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006444if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006445 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6446 guest_agent=no
6447 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006448 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006449 guest_agent=yes
6450 elif [ "$guest_agent" != yes ]; then
6451 guest_agent=no
6452 else
6453 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006454 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006455fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006456
Michael Roth9d6bc272015-08-26 10:49:13 -05006457# Guest agent Window MSI package
6458
6459if test "$guest_agent" != yes; then
6460 if test "$guest_agent_msi" = yes; then
6461 error_exit "MSI guest agent package requires guest agent enabled"
6462 fi
6463 guest_agent_msi=no
6464elif test "$mingw32" != "yes"; then
6465 if test "$guest_agent_msi" = "yes"; then
6466 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6467 fi
6468 guest_agent_msi=no
6469elif ! has wixl; then
6470 if test "$guest_agent_msi" = "yes"; then
6471 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6472 fi
6473 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006474else
6475 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6476 # disabled explicitly
6477 if test "$guest_agent_msi" != "no"; then
6478 guest_agent_msi=yes
6479 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006480fi
6481
Michael Roth1a349042015-08-26 11:14:31 -05006482if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006483 if test "$guest_agent_with_vss" = "yes"; then
6484 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6485 fi
6486
6487 if test "$QEMU_GA_MANUFACTURER" = ""; then
6488 QEMU_GA_MANUFACTURER=QEMU
6489 fi
6490
6491 if test "$QEMU_GA_DISTRO" = ""; then
6492 QEMU_GA_DISTRO=Linux
6493 fi
6494
6495 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006496 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006497 fi
6498
Stefan Weil89138852016-05-16 15:10:20 +02006499 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006500
6501 case "$cpu" in
6502 x86_64)
6503 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6504 ;;
6505 i386)
6506 QEMU_GA_MSI_ARCH="-D Arch=32"
6507 ;;
6508 *)
6509 error_exit "CPU $cpu not supported for building installation package"
6510 ;;
6511 esac
6512fi
6513
Paolo Bonzinica35f782010-05-26 16:08:29 +02006514# Mac OS X ships with a broken assembler
6515roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006516if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6517 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6518 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006519 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006520 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6521 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6522 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006523 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6524 ld_i386_emulation="$emu"
6525 roms="optionrom"
6526 break
6527 fi
6528 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006529fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006530
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006531# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006532if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006533 write_c_skeleton
6534 if compile_prog "-march=z900" ""; then
6535 roms="$roms s390-ccw"
6536 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006537fi
6538
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006539# Check that the C++ compiler exists and works with the C compiler.
6540# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6541if has $cxx; then
6542 cat > $TMPC <<EOF
6543int c_function(void);
6544int main(void) { return c_function(); }
6545EOF
6546
6547 compile_object
6548
6549 cat > $TMPCXX <<EOF
6550extern "C" {
6551 int c_function(void);
6552}
6553int c_function(void) { return 42; }
6554EOF
6555
6556 update_cxxflags
6557
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006558 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006559 # C++ compiler $cxx works ok with C compiler $cc
6560 :
6561 else
6562 echo "C++ compiler $cxx does not work with C compiler $cc"
6563 echo "Disabling C++ specific optional code"
6564 cxx=
6565 fi
6566else
6567 echo "No C++ compiler available; disabling C++ specific optional code"
6568 cxx=
6569fi
6570
Cole Robinson02d34f62016-05-06 14:03:09 -04006571echo_version() {
6572 if test "$1" = "yes" ; then
6573 echo "($2)"
6574 fi
6575}
6576
Jan Kiszka50e12062014-10-02 10:03:55 +02006577# prepend pixman and ftd flags after all config tests are done
6578QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006579QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006580libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006581
bellard43ce4df2003-06-09 19:53:12 +00006582echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006583echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006584echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006585echo "binary directory $(eval echo $bindir)"
6586echo "library directory $(eval echo $libdir)"
6587echo "module directory $(eval echo $qemu_moddir)"
6588echo "libexec directory $(eval echo $libexecdir)"
6589echo "include directory $(eval echo $includedir)"
6590echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006591if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006592echo "local state directory $(eval echo $local_statedir)"
6593echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006594echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006595else
6596echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006597echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006598fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006599echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006600echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006601echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006602echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006603echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006604echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006605echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006606echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006607echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006608echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006609echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006610echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006611echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006612echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006613echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006614if test "$docs" != "no"; then
6615 echo "sphinx-build $sphinx_build"
6616fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006617echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006618echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6619if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006620 echo "smbd $smbd"
6621fi
Fam Zheng17969262014-02-10 14:48:56 +08006622echo "module support $modules"
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006623echo "alt path mod load $module_upgrades"
bellard43ce4df2003-06-09 19:53:12 +00006624echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006625echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006626echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006627echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006628echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006629echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006630echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006631echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006632if test "$darwin" = "yes" ; then
6633 echo "Cocoa support $cocoa"
6634fi
Stefan Weil89138852016-05-16 15:10:20 +02006635echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006636echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006637echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006638echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006639echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006640echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006641echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006642echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006643if test "$gcrypt" = "yes"
6644then
6645 echo " hmac $gcrypt_hmac"
6646 echo " XTS $gcrypt_xts"
6647fi
Stefan Weil89138852016-05-16 15:10:20 +02006648echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006649if test "$nettle" = "yes"
6650then
6651 echo " XTS $nettle_xts"
6652fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006653echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006654echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006655echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006656echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006657echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006658echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006659echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006660echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006661echo "Block whitelist (rw) $block_drv_rw_whitelist"
6662echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306663echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006664echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006665echo "VNC support $vnc"
6666if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006667 echo "VNC SASL support $vnc_sasl"
6668 echo "VNC JPEG support $vnc_jpeg"
6669 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006670fi
aliguorie37630c2009-04-22 15:19:10 +00006671echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006672if test "$xen" = "yes" ; then
6673 echo "xen ctrl version $xen_ctrl_version"
6674fi
aurel322e4d9fb2008-04-08 06:01:02 +00006675echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006676echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006677echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006678echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006679echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006680echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006681echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006682echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006683echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006684echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006685echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006686echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006687echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006688echo "TCG support $tcg"
6689if test "$tcg" = "yes" ; then
6690 echo "TCG debug enabled $debug_tcg"
6691 echo "TCG interpreter $tcg_interpreter"
6692fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006693echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006694echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006695echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006696echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006697echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006698echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006699echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006700echo "madvise $madvise"
6701echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006702echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006703echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006704echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006705echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006706echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006707echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006708echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006709echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006710echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006711if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006712echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006713fi
Stefan Weil89138852016-05-16 15:10:20 +02006714echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006715echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006716echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006717echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006718echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006719echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006720echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006721echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006722echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006723echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006724echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006725echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006726echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006727echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006728echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006729echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006730echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006731echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006732echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006733echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306734echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006735echo "gcov $gcov_tool"
6736echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006737echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006738echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006739echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006740echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006741echo "lzo support $lzo"
6742echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006743echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006744echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006745echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006746echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006747echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006748echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006749echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006750echo "avx2 optimization $avx2_opt"
Robert Hoo6b8cd442020-02-29 20:34:34 +08006751echo "avx512f optimization $avx512f_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006752echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006753echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006754echo "bochs support $bochs"
6755echo "cloop support $cloop"
6756echo "dmg support $dmg"
6757echo "qcow v1 support $qcow1"
6758echo "vdi support $vdi"
6759echo "vvfat support $vvfat"
6760echo "qed support $qed"
6761echo "parallels support $parallels"
6762echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006763echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006764echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006765echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006766echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006767echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006768echo "fuzzing support $fuzzing"
Alex Bennéef48e5902020-03-16 17:21:48 +00006769echo "gdb $gdb_bin"
bellard67b915a2004-03-31 23:37:16 +00006770
Peter Maydell898be3e2017-03-21 14:31:57 +00006771if test "$supported_cpu" = "no"; then
6772 echo
6773 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6774 echo
6775 echo "CPU host architecture $cpu support is not currently maintained."
6776 echo "The QEMU project intends to remove support for this host CPU in"
6777 echo "a future release if nobody volunteers to maintain it and to"
6778 echo "provide a build host for our continuous integration setup."
6779 echo "configure has succeeded and you can continue to build, but"
6780 echo "if you care about QEMU on this platform you should contact"
6781 echo "us upstream at qemu-devel@nongnu.org."
6782fi
6783
6784if test "$supported_os" = "no"; then
6785 echo
6786 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6787 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006788 echo "Host OS $targetos support is not currently maintained."
6789 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006790 echo "a future release if nobody volunteers to maintain it and to"
6791 echo "provide a build host for our continuous integration setup."
6792 echo "configure has succeeded and you can continue to build, but"
6793 echo "if you care about QEMU on this platform you should contact"
6794 echo "us upstream at qemu-devel@nongnu.org."
6795fi
6796
Juan Quintela98ec69a2009-07-16 18:34:18 +02006797config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006798
Stefan Weildbd99ae2013-01-01 18:33:44 +01006799echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6800
Juan Quintela98ec69a2009-07-16 18:34:18 +02006801echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006802echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006803
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006804echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006805echo "prefix=$prefix" >> $config_host_mak
6806echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006807echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006808echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006809echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006810echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006811echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006812echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006813echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006814echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006815echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006816echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006817if test "$mingw32" = "no" ; then
6818 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6819fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006820echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006821echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006822echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006823echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006824echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006825echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006826echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006827echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006828echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006829
Juan Quintela98ec69a2009-07-16 18:34:18 +02006830echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006831
Paolo Bonzinif3494742019-01-23 14:56:17 +08006832if test "$default_devices" = "yes" ; then
6833 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6834else
6835 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6836fi
aurel32f8393942009-04-13 18:45:38 +00006837if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006838 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006839fi
aliguori1625af82009-04-05 17:41:02 +00006840if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006841 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006842fi
bellard7d132992003-03-06 23:23:54 +00006843if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006844 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006845fi
bellard67b915a2004-03-31 23:37:16 +00006846if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006847 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006848 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006849 version_major=${rc_version%%.*}
6850 rc_version=${rc_version#*.}
6851 version_minor=${rc_version%%.*}
6852 rc_version=${rc_version#*.}
6853 version_subminor=${rc_version%%.*}
6854 version_micro=0
6855 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6856 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006857 if test "$guest_agent_with_vss" = "yes" ; then
6858 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006859 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006860 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6861 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006862 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006863 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006864 fi
Michael Roth1a349042015-08-26 11:14:31 -05006865 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006866 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006867 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6868 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6869 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6870 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6871 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6872 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6873 fi
pbrook210fa552007-02-27 21:04:49 +00006874else
Juan Quintela35f4df22009-07-27 16:13:07 +02006875 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006876fi
blueswir1128ab2f2008-08-15 18:33:42 +00006877
Mark McLoughlindffcb712009-10-22 17:49:11 +01006878if test "$linux" = "yes" ; then
6879 echo "CONFIG_LINUX=y" >> $config_host_mak
6880fi
6881
bellard83fb7ad2004-07-05 21:25:26 +00006882if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006883 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006884fi
malcb29fe3e2008-11-18 01:42:22 +00006885
bellardec530c82006-04-25 22:36:06 +00006886if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006887 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006888fi
Andreas Färber179cf402010-09-20 00:50:43 +02006889if test "$haiku" = "yes" ; then
6890 echo "CONFIG_HAIKU=y" >> $config_host_mak
6891fi
bellard97a847b2003-08-10 21:36:04 +00006892if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006893 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006894fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006895if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006896 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006897fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006898if test "$want_tools" = "yes" ; then
6899 echo "CONFIG_TOOLS=y" >> $config_host_mak
6900fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006901if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006902 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006903 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006904 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6905 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6906fi
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02006907if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006908 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006909fi
ths8a16d272008-07-19 09:56:24 +00006910if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006911 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006912 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006913fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006914if test "$netmap" = "yes" ; then
6915 echo "CONFIG_NETMAP=y" >> $config_host_mak
6916fi
Gonglei015a33b2014-07-01 20:58:08 +08006917if test "$l2tpv3" = "yes" ; then
6918 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6919fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006920if test "$gprof" = "yes" ; then
6921 echo "CONFIG_GPROF=y" >> $config_host_mak
6922fi
Corey Bryant47e98652012-01-26 09:42:26 -05006923if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006924 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006925fi
Juan Quintela2358a492009-07-27 16:13:25 +02006926echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006927for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006928 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006929 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006930 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006931 echo "$def=m" >> $config_host_mak ;;
6932 *)
6933 echo "$def=y" >> $config_host_mak ;;
6934 esac
malc0c58ac12008-06-25 21:04:05 +00006935done
Fam Zhengb1149912017-09-07 16:29:13 +08006936echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6937echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6938echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6939echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6940echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Geoffrey McRae2e445702020-04-29 15:53:58 +10006941echo "JACK_LIBS=$jack_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006942if test "$audio_win_int" = "yes" ; then
6943 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6944fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006945echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6946echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006947if test "$vnc" = "yes" ; then
6948 echo "CONFIG_VNC=y" >> $config_host_mak
6949fi
aliguori2f9606b2009-03-06 20:27:28 +00006950if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006951 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006952fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006953if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006954 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006955fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006956if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006957 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006958fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006959if test "$xkbcommon" = "yes" ; then
6960 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6961 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6962fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006963if test "$xfs" = "yes" ; then
6964 echo "CONFIG_XFS=y" >> $config_host_mak
6965fi
Stefan Weil89138852016-05-16 15:10:20 +02006966qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006967echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006968echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006969echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006970echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006971if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006972 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006973fi
Fam Zheng17969262014-02-10 14:48:56 +08006974if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006975 # $shacmd can generate a hash started with digit, which the compiler doesn't
6976 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006977 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006978 echo "CONFIG_MODULES=y" >> $config_host_mak
6979fi
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006980if test "$module_upgrades" = "yes"; then
6981 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6982fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006983if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006984 echo "CONFIG_X11=y" >> $config_host_mak
6985 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6986 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6987fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006988if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006989 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006990 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006991 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006992 if test "$sdl_image" = "yes" ; then
6993 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6994 fi
bellard49ecc3f2007-11-07 19:25:15 +00006995fi
6996if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006997 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006998fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006999if test "$iconv" = "yes" ; then
7000 echo "CONFIG_ICONV=y" >> $config_host_mak
7001 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7002 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7003fi
balrog4d3b6f62008-02-10 16:33:14 +00007004if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01007005 echo "CONFIG_CURSES=m" >> $config_host_mak
7006 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7007 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00007008fi
Riku Voipio099d6b02009-05-05 12:10:04 +03007009if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007010 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03007011fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01007012if test "$accept4" = "yes" ; then
7013 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7014fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05307015if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007016 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05307017fi
Riku Voipioc2882b92009-08-12 15:08:24 +03007018if test "$eventfd" = "yes" ; then
7019 echo "CONFIG_EVENTFD=y" >> $config_host_mak
7020fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02007021if test "$memfd" = "yes" ; then
7022 echo "CONFIG_MEMFD=y" >> $config_host_mak
7023fi
Cortland Tölva955727d2018-10-08 09:35:19 -07007024if test "$have_usbfs" = "yes" ; then
7025 echo "CONFIG_USBFS=y" >> $config_host_mak
7026fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007027if test "$fallocate" = "yes" ; then
7028 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7029fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01007030if test "$fallocate_punch_hole" = "yes" ; then
7031 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7032fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03007033if test "$fallocate_zero_range" = "yes" ; then
7034 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7035fi
Kevin Wolfed911432014-09-29 17:12:59 +02007036if test "$posix_fallocate" = "yes" ; then
7037 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7038fi
Peter Maydellc727f472011-01-06 11:05:10 +00007039if test "$sync_file_range" = "yes" ; then
7040 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7041fi
Peter Maydelldace20d2011-01-10 13:11:24 +00007042if test "$fiemap" = "yes" ; then
7043 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7044fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007045if test "$dup3" = "yes" ; then
7046 echo "CONFIG_DUP3=y" >> $config_host_mak
7047fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01007048if test "$ppoll" = "yes" ; then
7049 echo "CONFIG_PPOLL=y" >> $config_host_mak
7050fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007051if test "$prctl_pr_set_timerslack" = "yes" ; then
7052 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7053fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007054if test "$epoll" = "yes" ; then
7055 echo "CONFIG_EPOLL=y" >> $config_host_mak
7056fi
7057if test "$epoll_create1" = "yes" ; then
7058 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7059fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007060if test "$sendfile" = "yes" ; then
7061 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7062fi
Riku Voipio51834342014-06-22 11:25:42 +01007063if test "$timerfd" = "yes" ; then
7064 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7065fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007066if test "$setns" = "yes" ; then
7067 echo "CONFIG_SETNS=y" >> $config_host_mak
7068fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007069if test "$clock_adjtime" = "yes" ; then
7070 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7071fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007072if test "$syncfs" = "yes" ; then
7073 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7074fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007075if test "$kcov" = "yes" ; then
7076 echo "CONFIG_KCOV=y" >> $config_host_mak
7077fi
aurel323b3f24a2009-04-15 16:12:13 +00007078if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007079 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007080fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007081if test "$inotify1" = "yes" ; then
7082 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7083fi
Peter Maydell401bc052017-09-05 13:19:32 +01007084if test "$sem_timedwait" = "yes" ; then
7085 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7086fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007087if test "$strchrnul" = "yes" ; then
7088 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7089fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007090if test "$st_atim" = "yes" ; then
7091 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7092fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007093if test "$byteswap_h" = "yes" ; then
7094 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7095fi
7096if test "$bswap_h" = "yes" ; then
7097 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7098fi
Alexander Graf769ce762009-05-11 17:41:42 +02007099if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007100 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007101 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007102 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007103fi
aurel322e4d9fb2008-04-08 06:01:02 +00007104if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007105 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007106 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007107fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007108if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007109 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007110 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007111 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007112 if test "$gtk_gl" = "yes" ; then
7113 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7114 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007115fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007116if test "$gio" = "yes" ; then
7117 echo "CONFIG_GIO=y" >> $config_host_mak
7118 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7119 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007120 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007121fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007122echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007123if test "$gnutls" = "yes" ; then
7124 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7125fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007126if test "$gcrypt" = "yes" ; then
7127 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007128 if test "$gcrypt_hmac" = "yes" ; then
7129 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7130 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007131fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007132if test "$nettle" = "yes" ; then
7133 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007134 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007135fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007136if test "$qemu_private_xts" = "yes" ; then
7137 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7138fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007139if test "$tasn1" = "yes" ; then
7140 echo "CONFIG_TASN1=y" >> $config_host_mak
7141fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007142if test "$auth_pam" = "yes" ; then
7143 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7144fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007145if test "$have_ifaddrs_h" = "yes" ; then
7146 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7147fi
Eric Blake6b39b062016-10-11 10:46:23 -05007148if test "$have_broken_size_max" = "yes" ; then
7149 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7150fi
Jan Vesely277abf12016-04-29 13:15:23 -04007151
7152# Work around a system header bug with some kernel/XFS header
7153# versions where they both try to define 'struct fsxattr':
7154# xfs headers will not try to redefine structs from linux headers
7155# if this macro is set.
7156if test "$have_fsxattr" = "yes" ; then
7157 echo "HAVE_FSXATTR=y" >> $config_host_mak
7158fi
Fam Zheng1efad062018-06-01 17:26:43 +08007159if test "$have_copy_file_range" = "yes" ; then
7160 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7161fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007162if test "$vte" = "yes" ; then
7163 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007164 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007165 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007166fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007167if test "$virglrenderer" = "yes" ; then
7168 echo "CONFIG_VIRGL=y" >> $config_host_mak
7169 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7170 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7171fi
aliguorie37630c2009-04-22 15:19:10 +00007172if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007173 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007174 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007175fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007176if test "$linux_aio" = "yes" ; then
7177 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7178fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007179if test "$linux_io_uring" = "yes" ; then
7180 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7181 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7182 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7183fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007184if test "$attr" = "yes" ; then
7185 echo "CONFIG_ATTR=y" >> $config_host_mak
7186fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007187if test "$libattr" = "yes" ; then
7188 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7189fi
Meador Inge983eef52012-02-24 14:00:42 +05307190if test "$virtfs" = "yes" ; then
7191 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007192fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007193if test "$mpath" = "yes" ; then
7194 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007195 if test "$mpathpersist_new_api" = "yes"; then
7196 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7197 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007198fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007199if test "$vhost_scsi" = "yes" ; then
7200 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7201fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007202if test "$vhost_net" = "yes" ; then
7203 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7204fi
7205if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007206 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007207fi
Gonglei042cea22018-03-01 21:46:28 +08007208if test "$vhost_crypto" = "yes" ; then
7209 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7210fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007211if test "$vhost_vsock" = "yes" ; then
7212 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7213fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007214if test "$vhost_kernel" = "yes" ; then
7215 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7216fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007217if test "$vhost_user" = "yes" ; then
7218 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7219fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007220if test "$vhost_user_fs" = "yes" ; then
7221 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7222fi
ths77755342008-11-27 15:45:16 +00007223if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007224 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007225fi
aliguoribf9298b2008-12-05 20:05:26 +00007226if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007227 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007228fi
aliguoriceb42de2009-04-07 18:43:28 +00007229if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007230 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007231fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007232if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007233 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007234fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007235if test "$membarrier" = "yes" ; then
7236 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7237fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007238if test "$signalfd" = "yes" ; then
7239 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7240fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007241if test "$optreset" = "yes" ; then
7242 echo "HAVE_OPTRESET=y" >> $config_host_mak
7243fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007244if test "$tcg" = "yes"; then
7245 echo "CONFIG_TCG=y" >> $config_host_mak
7246 if test "$tcg_interpreter" = "yes" ; then
7247 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7248 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007249fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007250if test "$fdatasync" = "yes" ; then
7251 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7252fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007253if test "$madvise" = "yes" ; then
7254 echo "CONFIG_MADVISE=y" >> $config_host_mak
7255fi
7256if test "$posix_madvise" = "yes" ; then
7257 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7258fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007259if test "$posix_memalign" = "yes" ; then
7260 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7261fi
bellard97a847b2003-08-10 21:36:04 +00007262
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007263if test "$spice" = "yes" ; then
7264 echo "CONFIG_SPICE=y" >> $config_host_mak
7265fi
7266
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007267if test "$smartcard" = "yes" ; then
7268 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007269 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7270 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007271fi
7272
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007273if test "$libusb" = "yes" ; then
7274 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007275 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7276 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007277fi
7278
Hans de Goede69354a82011-07-19 11:04:10 +02007279if test "$usb_redir" = "yes" ; then
7280 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007281 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7282 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007283fi
7284
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007285if test "$opengl" = "yes" ; then
7286 echo "CONFIG_OPENGL=y" >> $config_host_mak
7287 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007288 if test "$opengl_dmabuf" = "yes" ; then
7289 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7290 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007291fi
7292
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007293if test "$gbm" = "yes" ; then
7294 echo "CONFIG_GBM=y" >> $config_host_mak
7295 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7296 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7297fi
7298
7299
Yang Zhong5a22ab72017-12-20 21:16:46 +08007300if test "$malloc_trim" = "yes" ; then
7301 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7302fi
7303
Liang Li99f2dbd2016-03-08 13:53:16 +08007304if test "$avx2_opt" = "yes" ; then
7305 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7306fi
7307
Robert Hoo6b8cd442020-02-29 20:34:34 +08007308if test "$avx512f_opt" = "yes" ; then
7309 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7310fi
7311
qiaonuohan607dacd2014-02-18 14:11:30 +08007312if test "$lzo" = "yes" ; then
7313 echo "CONFIG_LZO=y" >> $config_host_mak
7314fi
7315
7316if test "$snappy" = "yes" ; then
7317 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7318fi
7319
Peter Wu6b383c02015-01-06 18:48:14 +01007320if test "$bzip2" = "yes" ; then
7321 echo "CONFIG_BZIP2=y" >> $config_host_mak
7322 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7323fi
7324
Julio Faracco83bc1f92018-11-05 13:08:04 -02007325if test "$lzfse" = "yes" ; then
7326 echo "CONFIG_LZFSE=y" >> $config_host_mak
7327 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7328fi
7329
Juan Quintela3a678482019-12-17 21:15:24 +01007330if test "$zstd" = "yes" ; then
7331 echo "CONFIG_ZSTD=y" >> $config_host_mak
7332fi
7333
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007334if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007335 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007336 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7337 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007338fi
7339
Peter Lieven6542aa92014-02-03 10:26:13 +01007340if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007341 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7342 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007343fi
7344
Eduardo Otubof7945732012-08-14 18:44:05 -03007345if test "$seccomp" = "yes"; then
7346 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007347 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7348 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007349fi
7350
bellard83fb7ad2004-07-05 21:25:26 +00007351# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007352if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007353 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007354fi
7355
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007356if test "$localtime_r" = "yes" ; then
7357 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7358fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007359if test "$qom_cast_debug" = "yes" ; then
7360 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7361fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007362if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007363 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007364 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7365 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007366fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007367
Peter Maydell7c2acc72013-04-08 12:11:27 +01007368echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007369if test "$coroutine_pool" = "yes" ; then
7370 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7371else
7372 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7373fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307374
Peter Lieven7d992e42016-09-27 11:58:45 +02007375if test "$debug_stack_usage" = "yes" ; then
7376 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7377fi
7378
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007379if test "$crypto_afalg" = "yes" ; then
7380 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7381fi
7382
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307383if test "$open_by_handle_at" = "yes" ; then
7384 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7385fi
7386
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307387if test "$linux_magic_h" = "yes" ; then
7388 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7389fi
7390
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007391if test "$pragma_diagnostic_available" = "yes" ; then
7392 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007393fi
7394
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007395if test "$valgrind_h" = "yes" ; then
7396 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7397fi
7398
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007399if test "$have_asan_iface_fiber" = "yes" ; then
7400 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7401fi
7402
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007403if test "$has_environ" = "yes" ; then
7404 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7405fi
7406
Richard Henderson76a347e2012-12-28 14:17:02 -08007407if test "$cpuid_h" = "yes" ; then
7408 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7409fi
7410
Richard Hendersonf5401662013-02-16 12:46:59 -08007411if test "$int128" = "yes" ; then
7412 echo "CONFIG_INT128=y" >> $config_host_mak
7413fi
7414
Richard Henderson7ebee432016-06-29 21:10:59 -07007415if test "$atomic128" = "yes" ; then
7416 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7417fi
7418
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007419if test "$cmpxchg128" = "yes" ; then
7420 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7421fi
7422
Richard Hendersondf79b992016-09-02 12:23:57 -07007423if test "$atomic64" = "yes" ; then
7424 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7425fi
7426
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007427if test "$attralias" = "yes" ; then
7428 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7429fi
7430
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007431if test "$getauxval" = "yes" ; then
7432 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7433fi
7434
Bharata B Raoeb100392012-09-24 14:42:45 +05307435if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007436 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007437 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7438 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307439fi
7440
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007441if test "$glusterfs_xlator_opt" = "yes" ; then
7442 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7443fi
7444
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307445if test "$glusterfs_discard" = "yes" ; then
7446 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7447fi
7448
Niels de Vosdf3a4292017-05-28 12:01:14 +05307449if test "$glusterfs_fallocate" = "yes" ; then
7450 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7451fi
7452
Bharata B Rao7c815372013-12-21 14:51:25 +05307453if test "$glusterfs_zerofill" = "yes" ; then
7454 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7455fi
7456
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007457if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7458 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7459fi
7460
Niels de Vos0e3b8912019-03-05 16:46:34 +01007461if test "$glusterfs_iocb_has_stat" = "yes" ; then
7462 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7463fi
7464
Pino Toscanob10d49d2019-06-20 22:08:40 +02007465if test "$libssh" = "yes" ; then
7466 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7467 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7468 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007469fi
7470
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007471if test "$live_block_migration" = "yes" ; then
7472 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7473fi
7474
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007475if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007476 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007477fi
7478
Lluís Vilanova5b808272014-05-27 15:02:14 +02007479echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7480if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007481 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307482fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007483if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007484 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7485 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007486 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007487fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007488if have_backend "log"; then
7489 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007490fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007491if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007492 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7493fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007494if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007495 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7496 if test "$trace_backend_stap" = "yes" ; then
7497 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7498 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007499fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007500if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007501 if test "$linux" = "yes" ; then
7502 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007503 else
Stewart Smith21684af2014-01-24 12:39:10 +11007504 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007505 fi
7506fi
Paul Durrant0a852412016-08-04 14:44:14 +01007507if have_backend "syslog"; then
7508 if test "$posix_syslog" = "yes" ; then
7509 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7510 else
7511 feature_not_found "syslog(trace backend)" "syslog not available"
7512 fi
7513fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007514echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7515
Michael R. Hines2da776d2013-07-22 10:01:54 -04007516if test "$rdma" = "yes" ; then
7517 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007518 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007519fi
7520
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007521if test "$pvrdma" = "yes" ; then
7522 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7523fi
7524
Laurent Vivier575b22b2016-06-02 22:14:15 +02007525if test "$have_rtnetlink" = "yes" ; then
7526 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7527fi
7528
Klim Kireeved279a02018-01-12 12:01:19 +03007529if test "$libxml2" = "yes" ; then
7530 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7531 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7532 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7533fi
7534
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007535if test "$replication" = "yes" ; then
7536 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7537fi
7538
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007539if test "$have_af_vsock" = "yes" ; then
7540 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7541fi
7542
Christopher Covington4d043512016-12-28 15:04:33 -05007543if test "$have_sysmacros" = "yes" ; then
7544 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7545fi
7546
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007547if test "$have_static_assert" = "yes" ; then
7548 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7549fi
7550
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007551if test "$have_utmpx" = "yes" ; then
7552 echo "HAVE_UTMPX=y" >> $config_host_mak
7553fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007554if test "$have_getrandom" = "yes" ; then
7555 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7556fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007557if test "$ivshmem" = "yes" ; then
7558 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7559fi
Richard Hendersone219c492017-09-28 09:01:23 -07007560if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007561 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7562fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007563if test "$debug_mutex" = "yes" ; then
7564 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7565fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007566
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007567# Hold two types of flag:
7568# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7569# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007570# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007571# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007572if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007573 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007574 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7575elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7576 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7577 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007578fi
7579
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007580if test "$vxhs" = "yes" ; then
7581 echo "CONFIG_VXHS=y" >> $config_host_mak
7582 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7583fi
7584
Junyan He17824402018-07-18 15:47:59 +08007585if test "$libpmem" = "yes" ; then
7586 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7587fi
7588
Jeff Cody2f740132018-11-07 07:36:44 +01007589if test "$bochs" = "yes" ; then
7590 echo "CONFIG_BOCHS=y" >> $config_host_mak
7591fi
7592if test "$cloop" = "yes" ; then
7593 echo "CONFIG_CLOOP=y" >> $config_host_mak
7594fi
7595if test "$dmg" = "yes" ; then
7596 echo "CONFIG_DMG=y" >> $config_host_mak
7597fi
7598if test "$qcow1" = "yes" ; then
7599 echo "CONFIG_QCOW1=y" >> $config_host_mak
7600fi
7601if test "$vdi" = "yes" ; then
7602 echo "CONFIG_VDI=y" >> $config_host_mak
7603fi
7604if test "$vvfat" = "yes" ; then
7605 echo "CONFIG_VVFAT=y" >> $config_host_mak
7606fi
7607if test "$qed" = "yes" ; then
7608 echo "CONFIG_QED=y" >> $config_host_mak
7609fi
7610if test "$parallels" = "yes" ; then
7611 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7612fi
7613if test "$sheepdog" = "yes" ; then
7614 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7615fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007616if test "$fuzzing" = "yes" ; then
7617 if test "$have_fuzzer" = "yes"; then
7618 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7619 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7620 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7621 else
7622 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7623 exit 1
7624 fi
7625fi
Jeff Cody2f740132018-11-07 07:36:44 +01007626
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007627if test "$plugins" = "yes" ; then
7628 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7629 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007630 # Copy the export object list to the build dir
7631 if test "$ld_dynamic_list" = "yes" ; then
7632 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7633 ld_symbols=qemu-plugins-ld.symbols
7634 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7635 elif test "$ld_exported_symbols_list" = "yes" ; then
7636 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7637 ld64_symbols=qemu-plugins-ld64.symbols
7638 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7639 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7640 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7641 else
7642 error_exit \
7643 "If \$plugins=yes, either \$ld_dynamic_list or " \
7644 "\$ld_exported_symbols_list should have been set to 'yes'."
7645 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007646fi
7647
Alex Bennéef48e5902020-03-16 17:21:48 +00007648if test -n "$gdb_bin" ; then
7649 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7650fi
7651
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007652if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007653 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007654elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007655 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007656elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007657 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007658elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007659 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007660elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007661 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007662elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007663 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007664else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007665 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007666fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007667
Philippe Mathieu-Daudéfdbff6b2020-04-23 12:43:45 +02007668echo "HELPERS=$helpers" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007669echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007670echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007671echo "MAKE=$make" >> $config_host_mak
7672echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007673echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7674echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007675echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7676echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007677echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007678echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Peter Maydell516e8b72020-04-11 19:29:32 +01007679echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007680echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007681echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007682if $iasl -h > /dev/null 2>&1; then
7683 echo "IASL=$iasl" >> $config_host_mak
7684fi
Juan Quintela804edf22009-07-27 16:12:49 +02007685echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007686echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007687echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007688echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007689echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007690echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007691echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007692echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007693echo "OBJCOPY=$objcopy" >> $config_host_mak
7694echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007695echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007696echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007697echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007698echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007699echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007700echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007701echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007702echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007703echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007704if test "$sparse" = "yes" ; then
7705 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007706 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007707 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007708 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7709 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7710fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007711echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007712echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007713echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007714echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007715echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007716echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007717echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007718echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007719echo "DSOSUF=$DSOSUF" >> $config_host_mak
7720echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007721echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007722echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7723echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007724echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007725if test "$gcov" = "yes" ; then
7726 echo "CONFIG_GCOV=y" >> $config_host_mak
7727 echo "GCOV=$gcov_tool" >> $config_host_mak
7728fi
Juan Quintela804edf22009-07-27 16:12:49 +02007729
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007730if test "$libudev" != "no"; then
7731 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7732 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7733fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007734if test "$fuzzing" != "no"; then
7735 echo "CONFIG_FUZZ=y" >> $config_host_mak
7736 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7737 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7738fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007739
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007740if test "$edk2_blobs" = "yes" ; then
7741 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7742fi
7743
Peter Maydell6efd7512011-11-30 11:59:04 +00007744# use included Linux headers
7745if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007746 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007747 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007748 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007749 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007750 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007751 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007752 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007753 ;;
7754 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007755 linux_arch=s390
7756 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007757 aarch64)
7758 linux_arch=arm64
7759 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007760 mips64)
7761 linux_arch=mips
7762 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007763 *)
7764 # For most CPUs the kernel architecture name and QEMU CPU name match.
7765 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007766 ;;
7767 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007768 # For non-KVM architectures we will not have asm headers
7769 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7770 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7771 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007772fi
7773
bellard1d14ffa2005-10-30 18:58:22 +00007774for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007775target_dir="$target"
Juan Quintela25be210f2009-10-07 02:41:00 +02007776config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007777target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007778target_aligned_only="no"
7779case "$target_name" in
7780 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7781 target_aligned_only="yes"
7782 ;;
7783esac
bellard97a847b2003-08-10 21:36:04 +00007784target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007785case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007786 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 +00007787 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007788 ;;
7789esac
bellard97a847b2003-08-10 21:36:04 +00007790target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007791target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007792target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007793target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007794case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007795 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007796 target_softmmu="yes"
7797 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007798 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007799 target_user_only="yes"
7800 target_linux_user="yes"
7801 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007802 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007803 target_user_only="yes"
7804 target_bsd_user="yes"
7805 ;;
pbrook9e407a82007-05-26 16:38:53 +00007806 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007807 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007808 exit 1
7809 ;;
7810esac
ths831b7822007-01-18 20:06:33 +00007811
bellard97a847b2003-08-10 21:36:04 +00007812mkdir -p $target_dir
Juan Quintela25be210f2009-10-07 02:41:00 +02007813echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007814
pbrooke5fe0c52006-06-11 13:32:59 +00007815bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007816mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007817interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007818gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007819
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007820TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007821TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007822TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007823
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007824case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007825 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007826 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307827 gdb_xml_files="i386-32bit.xml"
Laurent Vivier28988112020-03-10 11:33:56 +01007828 TARGET_SYSTBL_ABI=i386
aurel322408a522008-04-20 20:19:44 +00007829 ;;
7830 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007831 TARGET_BASE_ARCH=i386
Laurent Vivier8d62f352020-03-10 11:33:57 +01007832 TARGET_SYSTBL_ABI=common,64
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007833 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307834 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007835 ;;
7836 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007837 mttcg="yes"
Laurent Vivier6116aea2020-03-10 11:33:44 +01007838 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007839 ;;
7840 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007841 TARGET_ARCH=arm
Laurent Vivier5bcb4982020-03-10 11:33:50 +01007842 TARGET_SYSTBL_ABI=common,oabi
aurel322408a522008-04-20 20:19:44 +00007843 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007844 mttcg="yes"
Peter Maydellc888f7e2020-05-07 14:47:55 +01007845 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 +00007846 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007847 aarch64|aarch64_be)
7848 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007849 TARGET_BASE_ARCH=arm
7850 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007851 mttcg="yes"
Peter Maydellc888f7e2020-05-07 14:47:55 +01007852 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 +01007853 ;;
aurel322408a522008-04-20 20:19:44 +00007854 cris)
aurel322408a522008-04-20 20:19:44 +00007855 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007856 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007857 mttcg="yes"
Laurent Vivier9566f4c2020-03-10 11:33:45 +01007858 TARGET_SYSTBL_ABI=common,32
Richard Henderson61766fe2016-12-15 11:26:14 -08007859 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007860 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007861 ;;
aurel322408a522008-04-20 20:19:44 +00007862 m68k)
aurel322408a522008-04-20 20:19:44 +00007863 bflt="yes"
KONRAD Frederica976ed32020-04-30 20:01:22 +01007864 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
Laurent Vivier5b85cae2020-03-10 11:33:46 +01007865 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007866 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007867 microblaze|microblazeel)
7868 TARGET_ARCH=microblaze
Laurent Vivierddf0c4c2020-03-10 11:33:49 +01007869 TARGET_SYSTBL_ABI=common
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007870 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007871 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007872 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007873 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007874 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007875 TARGET_ARCH=mips
Juan Quintela25be210f2009-10-07 02:41:00 +02007876 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
Laurent Vivierc59716f2020-03-10 11:33:58 +01007877 TARGET_SYSTBL_ABI=o32
aurel322408a522008-04-20 20:19:44 +00007878 ;;
7879 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007880 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007881 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007882 TARGET_BASE_ARCH=mips
Juan Quintela25be210f2009-10-07 02:41:00 +02007883 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007884 echo "TARGET_ABI32=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007885 TARGET_SYSTBL_ABI=n32
aurel322408a522008-04-20 20:19:44 +00007886 ;;
7887 mips64|mips64el)
Alex Bennéea092a952020-03-23 16:15:09 +00007888 mttcg="no"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007889 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007890 TARGET_BASE_ARCH=mips
Juan Quintela25be210f2009-10-07 02:41:00 +02007891 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007892 TARGET_SYSTBL_ABI=n64
aurel322408a522008-04-20 20:19:44 +00007893 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007894 moxie)
7895 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007896 nios2)
7897 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007898 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007899 TARGET_ARCH=openrisc
7900 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007901 ;;
aurel322408a522008-04-20 20:19:44 +00007902 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007903 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Laurent Vivier76a691f2020-03-10 11:33:51 +01007904 TARGET_SYSTBL_ABI=common,nospu,32
aurel322408a522008-04-20 20:19:44 +00007905 ;;
aurel322408a522008-04-20 20:19:44 +00007906 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007907 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007908 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007909 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307910 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007911 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007912 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007913 ppc64le)
7914 TARGET_ARCH=ppc64
7915 TARGET_BASE_ARCH=ppc
7916 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007917 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307918 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007919 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 -05007920 ;;
aurel322408a522008-04-20 20:19:44 +00007921 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007922 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007923 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007924 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007925 TARGET_SYSTBL_ABI=common,nospu,32
Juan Quintela25be210f2009-10-07 02:41:00 +02007926 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007927 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007928 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007929 riscv32)
7930 TARGET_BASE_ARCH=riscv
7931 TARGET_ABI_DIR=riscv
7932 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007933 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 +13007934 ;;
7935 riscv64)
7936 TARGET_BASE_ARCH=riscv
7937 TARGET_ABI_DIR=riscv
7938 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007939 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 +13007940 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08007941 rx)
7942 TARGET_ARCH=rx
7943 bflt="yes"
7944 target_compiler=$cross_cc_rx
7945 gdb_xml_files="rx-core.xml"
7946 ;;
aurel322408a522008-04-20 20:19:44 +00007947 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007948 TARGET_ARCH=sh4
Laurent Vivierd0c832f2020-03-10 11:33:48 +01007949 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007950 bflt="yes"
7951 ;;
7952 sparc)
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007953 TARGET_SYSTBL_ABI=common,32
aurel322408a522008-04-20 20:19:44 +00007954 ;;
7955 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007956 TARGET_BASE_ARCH=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007957 TARGET_SYSTBL_ABI=common,64
aurel322408a522008-04-20 20:19:44 +00007958 ;;
7959 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007960 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007961 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007962 TARGET_ABI_DIR=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007963 TARGET_SYSTBL_ABI=common,32
Juan Quintela25be210f2009-10-07 02:41:00 +02007964 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007965 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007966 s390x)
Laurent Vivier318f3712020-03-10 11:33:53 +01007967 TARGET_SYSTBL_ABI=common,64
David Hildenbrand63685bc2018-01-29 13:56:20 +01007968 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007969 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 +01007970 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007971 tilegx)
7972 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007973 tricore)
7974 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007975 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007976 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007977 xtensa|xtensaeb)
7978 TARGET_ARCH=xtensa
Laurent Viviera4a93592020-03-10 11:33:47 +01007979 TARGET_SYSTBL_ABI=common
Max Filippov02e33e92018-10-19 18:40:20 -07007980 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007981 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007982 ;;
aurel322408a522008-04-20 20:19:44 +00007983 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007984 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007985 ;;
7986esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007987# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7988if [ "$TARGET_BASE_ARCH" = "" ]; then
7989 TARGET_BASE_ARCH=$TARGET_ARCH
7990fi
7991
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007992symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7993
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007994upper() {
7995 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7996}
7997
Stefan Weil89138852016-05-16 15:10:20 +02007998target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be210f2009-10-07 02:41:00 +02007999echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01008000echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be210f2009-10-07 02:41:00 +02008001echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02008002if [ "$TARGET_ABI_DIR" = "" ]; then
8003 TARGET_ABI_DIR=$TARGET_ARCH
8004fi
Juan Quintela25be210f2009-10-07 02:41:00 +02008005echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07008006if [ "$HOST_VARIANT_DIR" != "" ]; then
8007 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8008fi
Laurent Vivier4d6a8352020-03-10 11:33:43 +01008009if [ "$TARGET_SYSTBL_ABI" != "" ]; then
8010 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
8011fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008012
8013if supported_xen_target $target; then
8014 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08008015 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008016 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00008017 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02008018 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08008019else
8020 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008021fi
8022if supported_kvm_target $target; then
8023 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08008024 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
8025else
8026 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008027fi
8028if supported_hax_target $target; then
8029 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01008030fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05008031if supported_hvf_target $target; then
8032 echo "CONFIG_HVF=y" >> $config_target_mak
8033fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08008034if supported_whpx_target $target; then
8035 echo "CONFIG_WHPX=y" >> $config_target_mak
8036fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00008037if test "$target_aligned_only" = "yes" ; then
8038 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8039fi
bellardde83cd02003-06-15 20:25:43 +00008040if test "$target_bigendian" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008041 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00008042fi
8043if test "$target_softmmu" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008044 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00008045 if test "$mttcg" = "yes" ; then
8046 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8047 fi
bellardde83cd02003-06-15 20:25:43 +00008048fi
bellard997344f2003-10-27 21:10:39 +00008049if test "$target_user_only" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008050 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01008051 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00008052fi
ths831b7822007-01-18 20:06:33 +00008053if test "$target_linux_user" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008054 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00008055fi
pbrook56aebc82008-10-11 17:55:29 +00008056list=""
8057if test ! -z "$gdb_xml_files" ; then
8058 for x in $gdb_xml_files; do
8059 list="$list $source_path/gdb-xml/$x"
8060 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02008061 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00008062fi
bellardde83cd02003-06-15 20:25:43 +00008063
Eric Blakee633a5c2019-02-04 20:39:37 -06008064if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008065 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008066fi
blueswir184778502008-10-26 20:33:16 +00008067if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02008068 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008069fi
bellard5b0753e2005-03-01 21:37:28 +00008070
Alex Bennée716a5072018-04-10 12:19:40 +01008071
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008072# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008073
Juan Quintela4afddb52009-08-03 14:46:45 +02008074cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008075ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008076
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008077disas_config() {
8078 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8079 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8080}
8081
Juan Quintela64656022009-08-03 14:46:53 +02008082for i in $ARCH $TARGET_BASE_ARCH ; do
8083 case "$i" in
8084 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008085 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008086 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008087 aarch64)
8088 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008089 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008090 fi
8091 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008092 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008093 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008094 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008095 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008096 fi
Juan Quintela64656022009-08-03 14:46:53 +02008097 ;;
8098 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008099 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008100 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008101 hppa)
8102 disas_config "HPPA"
8103 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008104 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008105 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008106 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008107 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008108 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008109 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008110 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008111 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008112 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008113 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008114 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008115 ;;
8116 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008117 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008118 if test -n "${cxx}"; then
8119 disas_config "NANOMIPS"
8120 fi
Juan Quintela64656022009-08-03 14:46:53 +02008121 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008122 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008123 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008124 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008125 nios2)
8126 disas_config "NIOS2"
8127 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008128 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008129 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008130 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008131 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008132 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008133 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008134 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008135 disas_config "RISCV"
8136 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08008137 rx)
8138 disas_config "RX"
8139 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008140 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008141 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008142 ;;
8143 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008144 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008145 ;;
8146 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008147 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008148 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008149 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008150 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008151 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008152 esac
8153done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008154if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008155 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008156fi
Juan Quintela64656022009-08-03 14:46:53 +02008157
Juan Quintela6ee71262009-08-03 14:46:47 +02008158case "$ARCH" in
8159alpha)
8160 # Ensure there's only a single GP
8161 cflags="-msmall-data $cflags"
8162;;
8163esac
8164
Juan Quintelad02c1db2009-08-03 14:46:50 +02008165if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008166 if test "$target_linux_user" = "yes" ; then
8167 cflags="-p $cflags"
8168 ldflags="-p $ldflags"
8169 fi
8170 if test "$target_softmmu" = "yes" ; then
8171 ldflags="-p $ldflags"
Juan Quintela25be210f2009-10-07 02:41:00 +02008172 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008173 fi
8174fi
8175
Christian Borntraegere9a35912017-08-23 12:16:23 +02008176# Newer kernels on s390 check for an S390_PGSTE program header and
8177# enable the pgste page table extensions in that case. This makes
8178# the vm.allocate_pgste sysctl unnecessary. We enable this program
8179# header if
8180# - we build on s390x
8181# - we build the system emulation for s390x (qemu-system-s390x)
8182# - KVM is enabled
8183# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008184if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8185 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008186 if ld_has --s390-pgste ; then
8187 ldflags="-Wl,--s390-pgste $ldflags"
8188 fi
8189fi
8190
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008191echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be210f2009-10-07 02:41:00 +02008192echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008193
bellard97a847b2003-08-10 21:36:04 +00008194done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008195
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008196echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8197echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8198
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008199if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008200 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008201fi
Richard Hendersone219c492017-09-28 09:01:23 -07008202if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008203 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008204fi
8205if test -n "$LIBCAPSTONE"; then
8206 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8207fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008208
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008209if test "$numa" = "yes"; then
8210 echo "CONFIG_NUMA=y" >> $config_host_mak
8211fi
8212
John Snowfd0e6052015-03-25 18:57:39 -04008213if test "$ccache_cpp2" = "yes"; then
8214 echo "export CCACHE_CPP2=y" >> $config_host_mak
8215fi
8216
Peter Maydelle29e5c62018-11-02 11:52:38 +00008217# If we're using a separate build tree, set it up now.
8218# DIRS are directories which we simply mkdir in the build tree;
8219# LINKS are things to symlink back into the source tree
8220# (these can be both files and directories).
8221# Caution: do not add files or directories here using wildcards. This
8222# will result in problems later if a new file matching the wildcard is
8223# added to the source tree -- nothing will cause configure to be rerun
8224# so the build tree will be missing the link back to the new file, and
8225# tests might fail. Prefer to keep the relevant files in their own
8226# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008227DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8228DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008229DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008230DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008231DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008232LINKS="Makefile"
8233LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8234LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008235LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008236LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008237LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8238LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8239LINKS="$LINKS pc-bios/qemu-icon.bmp"
8240LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008241LINKS="$LINKS tests/acceptance tests/data"
8242LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008243LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008244for bios_file in \
8245 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008246 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008247 $source_path/pc-bios/*.rom \
8248 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008249 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008250 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008251 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008252 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008253 $source_path/pc-bios/palcode-*
8254do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008255 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008256done
8257mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008258for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008259 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008260 symlink "$source_path/$f" "$f"
8261 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008262done
Paul Brook1ad21342009-05-19 16:17:58 +01008263
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008264(for i in $cross_cc_vars; do
8265 export $i
8266done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008267export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008268$source_path/tests/tcg/configure.sh)
8269
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008270# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008271for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008272 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008273 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008274 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008275 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008276 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008277 echo "CC=$cc" >> $config_mak
8278 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008279 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008280 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008281 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008282 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008283 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008284done
8285
Max Reitz76c75602014-05-24 23:24:56 +02008286# set up qemu-iotests in this build directory
8287iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008288
8289echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8290echo >> "$iotests_common_env"
8291echo "export PYTHON='$python'" >> "$iotests_common_env"
8292
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008293# Save the configure command line for later reuse.
8294cat <<EOD >config.status
8295#!/bin/sh
8296# Generated by configure.
8297# Run this file to recreate the current configuration.
8298# Compiler output produced by configure, useful for debugging
8299# configure, is in config.log if it exists.
8300EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008301
8302preserve_env() {
8303 envname=$1
8304
8305 eval envval=\$$envname
8306
8307 if test -n "$envval"
8308 then
8309 echo "$envname='$envval'" >> config.status
8310 echo "export $envname" >> config.status
8311 else
8312 echo "unset $envname" >> config.status
8313 fi
8314}
8315
8316# Preserve various env variables that influence what
8317# features/build target configure will detect
8318preserve_env AR
8319preserve_env AS
8320preserve_env CC
8321preserve_env CPP
8322preserve_env CXX
8323preserve_env INSTALL
8324preserve_env LD
8325preserve_env LD_LIBRARY_PATH
8326preserve_env LIBTOOL
8327preserve_env MAKE
8328preserve_env NM
8329preserve_env OBJCOPY
8330preserve_env PATH
8331preserve_env PKG_CONFIG
8332preserve_env PKG_CONFIG_LIBDIR
8333preserve_env PKG_CONFIG_PATH
8334preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008335preserve_env SDL2_CONFIG
8336preserve_env SMBD
8337preserve_env STRIP
8338preserve_env WINDRES
8339
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008340printf "exec" >>config.status
8341printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008342echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008343chmod +x config.status
8344
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008345rm -r "$TMPDIR1"