blob: 7b373bc0bb846da54286213b9650c3a2b7ff98d2 [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 | \
201 mips:mips | mipsel: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"
aliguoriac0df512008-12-29 17:14:15 +0000306
Daniel P. Berrange92712822017-09-29 11:11:58 +0100307if test -e "$source_path/.git"
308then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100309 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100310 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500311 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
312 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100313else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100314 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100315 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100316
317 if ! test -f "$source_path/ui/keycodemapdb/README"
318 then
319 echo
320 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
321 echo
322 echo "This is not a GIT checkout but module content appears to"
323 echo "be missing. Do not use 'git archive' or GitHub download links"
324 echo "to acquire QEMU source archives. Non-GIT builds are only"
325 echo "supported with source archives linked from:"
326 echo
Peter Maydella3e3b522019-07-22 14:07:39 +0100327 echo " https://www.qemu.org/download/#source"
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100328 echo
329 echo "Developers working with GIT can use scripts/archive-source.sh"
330 echo "if they need to create valid source archives."
331 echo
332 exit 1
333 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100334fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100335git="git"
aliguoriac0df512008-12-29 17:14:15 +0000336
Stefan Weilafb63eb2012-09-26 22:04:38 +0200337# Don't accept a target_list environment variable.
338unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000339unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100340
341# Default value for a variable defining feature "foo".
342# * foo="no" feature will only be used if --enable-foo arg is given
343# * foo="" feature will be searched for, and if found, will be used
344# unless --disable-foo is given
345# * foo="yes" this value will only be set by --enable-foo flag.
346# feature will searched for,
347# if not found, configure exits with error
348#
349# Always add --enable-foo and --disable-foo command line args.
350# Distributions want to ensure that several features are compiled in, and it
351# is impossible without a --enable-foo that exits if a feature is not found.
352
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353brlapi=""
354curl=""
355curses=""
356docs=""
357fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100358netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100359sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000360sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530361virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200362mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100363vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366vnc_sasl=""
367vnc_jpeg=""
368vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200369xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100370xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000371xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000372xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100373linux_aio=""
Aarushi Mehtac10dd852020-01-20 14:18:44 +0000374linux_io_uring=""
Corey Bryant47e98652012-01-26 09:42:26 -0500375cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100376attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200377libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100378xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200379tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100380membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100381vhost_net=""
382vhost_crypto=""
383vhost_scsi=""
384vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200385vhost_user=""
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +0100386vhost_user_fs=""
Bradd41a75a2011-07-26 23:11:26 -0400387kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100388hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500389hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800390whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400391rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300392pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100393gprof="no"
394debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100395debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100396sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500397fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100398strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200399tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100400bigendian="no"
401mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000402gcov="no"
403gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100404EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800405DSOSUF=".so"
406LDFLAGS_SHARED="-shared"
407modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100408prefix="/usr/local"
409mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300410datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200411firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300412qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100413bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300414libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400415libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200416includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100417sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300418local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100419confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100420slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100421oss_lib=""
422bsd="no"
423linux="no"
424solaris="no"
425profiler="no"
426cocoa="no"
427softmmu="yes"
428linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100429bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100430blobs="yes"
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +0100431edk2_blobs="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100432pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200433pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200434qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300435trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100436trace_file="trace"
437spice=""
438rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200439smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100440libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200441usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100442opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100443opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000444cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100445avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300446zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700447capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200448lzo=""
449snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100450bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200451lzfse=""
Juan Quintela3a678482019-12-17 21:15:24 +0100452zstd=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400453guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400454guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500455guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300456guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400457vss_win32_sdk=""
458win_sdk="no"
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +0100459want_tools=""
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100460libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100461libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100462coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200463coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200464debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400465crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300466seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530467glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400468glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530469glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530470glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530471glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100472glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100473glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600474gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200475gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100476tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100477gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100478nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100479nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100480gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800481gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100482gcrypt_xts="no"
483qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100484auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100485vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200486virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800487tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200488libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100489live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800490numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800491tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200492jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800493replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700494vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100495bochs="yes"
496cloop="yes"
497dmg="yes"
498qcow1="yes"
499vdi="yes"
500vvfat="yes"
501qed="yes"
502parallels="yes"
503sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300504libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200505debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800506libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800507default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100508plugins="no"
Alexander Bulekovadc28022020-02-19 23:11:14 -0500509fuzzing="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100510
Peter Maydell898be3e2017-03-21 14:31:57 +0000511supported_cpu="no"
512supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100513bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800514malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000515
aliguoriac0df512008-12-29 17:14:15 +0000516# parse CC options first
517for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200518 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000519 case "$opt" in
520 --cross-prefix=*) cross_prefix="$optarg"
521 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100522 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000523 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400524 --cxx=*) CXX="$optarg"
525 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200526 --cpu=*) cpu="$optarg"
527 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100528 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100529 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200530 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100531 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100532 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100533 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100534 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200535 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100536 --enable-debug-info) debug_info="yes"
537 ;;
538 --disable-debug-info) debug_info="no"
539 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100540 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
541 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100542 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
543 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200544 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100545 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100546 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200547 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100548 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200549 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100550 ;;
aliguoriac0df512008-12-29 17:14:15 +0000551 esac
552done
aliguoriac0df512008-12-29 17:14:15 +0000553# OS specific
554# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100555# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000556
Peter Maydelle49d0212012-12-07 15:39:13 +0000557# Preferred compiler:
558# ${CC} (if set)
559# ${cross_prefix}gcc (if cross-prefix specified)
560# system compiler
561if test -z "${CC}${cross_prefix}"; then
562 cc="$host_cc"
563else
564 cc="${CC-${cross_prefix}gcc}"
565fi
566
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400567if test -z "${CXX}${cross_prefix}"; then
568 cxx="c++"
569else
570 cxx="${CXX-${cross_prefix}g++}"
571fi
572
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500573ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700574as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700575ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000576cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500577objcopy="${OBJCOPY-${cross_prefix}objcopy}"
578ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800579ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200580nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500581strip="${STRIP-${cross_prefix}strip}"
582windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300583pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
584query_pkg_config() {
585 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
586}
587pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000588sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000589
Peter Maydell45d285a2013-10-21 21:03:06 +0100590# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
591ARFLAGS="${ARFLAGS-rv}"
592
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200593# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100594# We use -fwrapv to tell the compiler that we require a C dialect where
595# left shift of signed integers is well defined and has the expected
596# 2s-complement style results. (Both clang and gcc agree that it
597# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100598QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400599QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100600QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200601QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200602QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200603QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100604if test "$debug_info" = "yes"; then
605 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100606fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200607
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300608# running configure in the source tree?
609# we know that's the case if configure is there.
610if test -f "./configure"; then
611 pwd_is_source_path="y"
612else
613 pwd_is_source_path="n"
614fi
615
aliguoriac0df512008-12-29 17:14:15 +0000616check_define() {
617cat > $TMPC <<EOF
618#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000619#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000620#endif
621int main(void) { return 0; }
622EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200623 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000624}
625
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200626check_include() {
627cat > $TMPC <<EOF
628#include <$1>
629int main(void) { return 0; }
630EOF
631 compile_object
632}
633
John Snow93b25862015-03-25 18:57:37 -0400634write_c_skeleton() {
635 cat > $TMPC <<EOF
636int main(void) { return 0; }
637EOF
638}
639
Alexander Bulekovadc28022020-02-19 23:11:14 -0500640write_c_fuzzer_skeleton() {
641 cat > $TMPC <<EOF
642#include <stdint.h>
643#include <sys/types.h>
644int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
645int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
646EOF
647}
648
Peter Maydellbbea4052012-08-14 15:35:34 +0100649if check_define __linux__ ; then
650 targetos="Linux"
651elif check_define _WIN32 ; then
652 targetos='MINGW32'
653elif check_define __OpenBSD__ ; then
654 targetos='OpenBSD'
655elif check_define __sun__ ; then
656 targetos='SunOS'
657elif check_define __HAIKU__ ; then
658 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100659elif check_define __FreeBSD__ ; then
660 targetos='FreeBSD'
661elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
662 targetos='GNU/kFreeBSD'
663elif check_define __DragonFly__ ; then
664 targetos='DragonFly'
665elif check_define __NetBSD__; then
666 targetos='NetBSD'
667elif check_define __APPLE__; then
668 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100669else
Peter Maydell951fedf2017-07-13 16:15:32 +0100670 # This is a fatal error, but don't report it yet, because we
671 # might be going to just print the --help text, or it might
672 # be the result of a missing compiler.
673 targetos='bogus'
674 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100675fi
676
677# Some host OSes need non-standard checks for which CPU to use.
678# Note that these checks are broken for cross-compilation: if you're
679# cross-compiling to one of these OSes then you'll need to specify
680# the correct CPU with the --cpu option.
681case $targetos in
682Darwin)
683 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
684 # run 64-bit userspace code.
685 # If the user didn't specify a CPU explicitly and the kernel says this is
686 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
687 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
688 cpu="x86_64"
689 fi
690 ;;
691SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200692 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100693 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
694 cpu="x86_64"
695 fi
696esac
697
Juan Quintela2ff6b912009-08-03 14:45:55 +0200698if test ! -z "$cpu" ; then
699 # command line argument
700 :
701elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000702 cpu="i386"
703elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700704 if check_define __ILP32__ ; then
705 cpu="x32"
706 else
707 cpu="x86_64"
708 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000709elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000710 if check_define __arch64__ ; then
711 cpu="sparc64"
712 else
713 cpu="sparc"
714 fi
malcfdf7ed92009-01-14 18:39:52 +0000715elif check_define _ARCH_PPC ; then
716 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700717 if check_define _LITTLE_ENDIAN ; then
718 cpu="ppc64le"
719 else
720 cpu="ppc64"
721 fi
malcfdf7ed92009-01-14 18:39:52 +0000722 else
723 cpu="ppc"
724 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200725elif check_define __mips__ ; then
726 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200727elif check_define __s390__ ; then
728 if check_define __s390x__ ; then
729 cpu="s390x"
730 else
731 cpu="s390"
732 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000733elif check_define __riscv ; then
734 if check_define _LP64 ; then
735 cpu="riscv64"
736 else
737 cpu="riscv32"
738 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100739elif check_define __arm__ ; then
740 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100741elif check_define __aarch64__ ; then
742 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000743else
Stefan Weil89138852016-05-16 15:10:20 +0200744 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000745fi
746
Peter Maydell359bc952011-12-24 13:07:25 +0000747ARCH=
748# Normalise host CPU name and set ARCH.
749# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000750case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200751 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000752 supported_cpu="yes"
753 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700754 ppc64le)
755 ARCH="ppc64"
756 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700757 ;;
bellard7d132992003-03-06 23:23:54 +0000758 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000759 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000760 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000761 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000762 x86_64|amd64)
763 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000764 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000765 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100766 armv*b|armv*l|arm)
767 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000768 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000769 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100770 aarch64)
771 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000772 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100773 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200774 mips*)
775 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000776 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200777 ;;
blueswir131422552007-04-16 18:27:06 +0000778 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000779 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100780 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000781 ;;
bellard7d132992003-03-06 23:23:54 +0000782 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000783 # This will result in either an error or falling back to TCI later
784 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000785 ;;
786esac
Peter Maydell359bc952011-12-24 13:07:25 +0000787if test -z "$ARCH"; then
788 ARCH="$cpu"
789fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200790
bellard7d132992003-03-06 23:23:54 +0000791# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200792
Stacey Sonadfc3e92014-06-08 09:57:22 -0700793# host *BSD for user mode
794HOST_VARIANT_DIR=""
795
bellard7d132992003-03-06 23:23:54 +0000796case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000797MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200798 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100799 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100800 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200801 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200802 if check_include dsound.h; then
803 audio_drv_list="dsound"
804 else
805 audio_drv_list=""
806 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000807 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000808;;
ths5c40d2b2007-06-23 16:03:36 +0000809GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100810 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100811 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200812 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000813;;
bellard7d3505c2004-05-12 19:32:15 +0000814FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200815 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100816 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100817 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200818 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100819 # needed for kinfo_getvmmap(3) in libutil.h
820 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500821 # needed for kinfo_getproc
822 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100823 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700824 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000825 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000826;;
blueswir1c5e97232009-03-07 20:06:23 +0000827DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200828 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100829 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100830 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200831 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700832 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000833;;
bellard7d3505c2004-05-12 19:32:15 +0000834NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200835 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100836 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100837 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100838 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200839 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200840 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700841 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200842 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000843;;
844OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200845 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100846 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100847 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200848 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700849 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500850 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000851;;
bellard83fb7ad2004-07-05 21:25:26 +0000852Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200853 bsd="yes"
854 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100855 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500856 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800857 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200858 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200859 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100860 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200861 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200862 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100863 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200864 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100865 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200866 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100867 # Disable attempts to use ObjectiveC features in os/object.h since they
868 # won't work when we're compiling with gcc as a C compiler.
869 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700870 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000871 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000872;;
bellardec530c82006-04-25 22:36:06 +0000873SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200874 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100875 make="${MAKE-gmake}"
876 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400877 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200878 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100879 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200880 fi
881 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000882# needed for CMSG_ macros in sys/socket.h
883 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
884# needed for TIOCWIN* defines in termios.h
885 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200886 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200887 solarisnetlibs="-lsocket -lnsl -lresolv"
888 LIBS="$solarisnetlibs $LIBS"
889 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000890;;
Andreas Färber179cf402010-09-20 00:50:43 +0200891Haiku)
892 haiku="yes"
893 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
894 LIBS="-lposix_error_mapper -lnetwork $LIBS"
895;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000896Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100897 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200898 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200899 linux="yes"
900 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200901 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600902 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000903 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200904 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000905;;
bellard7d132992003-03-06 23:23:54 +0000906esac
907
bellard7d3505c2004-05-12 19:32:15 +0000908if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000909 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200910 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000911 fi
bellard7d3505c2004-05-12 19:32:15 +0000912fi
913
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100914: ${make=${MAKE-make}}
915: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000916# We prefer python 3.x. A bare 'python' is traditionally
917# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300918# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000919python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300920for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000921do
922 if has "$binary"
923 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200924 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000925 break
926 fi
927done
Markus Armbruster903458c2020-02-14 18:18:41 +0100928
929sphinx_build=
930for binary in sphinx-build-3 sphinx-build
931do
932 if has "$binary"
933 then
934 sphinx_build=$(command -v "$binary")
935 break
936 fi
937done
938
Brade2d88302011-09-02 16:53:28 -0400939: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100940
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100941# Default objcc to clang if available, otherwise use CC
942if has clang; then
943 objcc=clang
944else
945 objcc="$cc"
946fi
947
Juan Quintela3457a3f2009-08-03 14:46:07 +0200948if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200949 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800950 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100951 # MinGW needs -mthreads for TLS and macro _MT.
952 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100953 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400954 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100955 if compile_prog "" "-liberty" ; then
956 LIBS="-liberty $LIBS"
957 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200958 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200959 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300960 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300961 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200962 bindir="\${prefix}"
963 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200964 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200965 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300966 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200967fi
968
Anthony Liguori487fefd2009-06-11 13:28:25 -0500969werror=""
bellard85aa5182007-11-11 20:17:03 +0000970
bellard7d132992003-03-06 23:23:54 +0000971for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200972 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000973 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000974 --help|-h) show_help=yes
975 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400976 --version|-V) exec cat $source_path/VERSION
977 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000978 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000979 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000980 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000981 ;;
aliguoriac0df512008-12-29 17:14:15 +0000982 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000983 ;;
aliguoriac0df512008-12-29 17:14:15 +0000984 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000985 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000986 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000987 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400988 --cxx=*)
989 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200990 --iasl=*) iasl="$optarg"
991 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100992 --objcc=*) objcc="$optarg"
993 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000994 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000995 ;;
pbrook6a882642006-04-17 13:57:12 +0000996 --install=*) install="$optarg"
997 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000998 --python=*) python="$optarg"
999 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001000 --sphinx-build=*) sphinx_build="$optarg"
1001 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001002 --gcov=*) gcov_tool="$optarg"
1003 ;;
Brade2d88302011-09-02 16:53:28 -04001004 --smbd=*) smbd="$optarg"
1005 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001006 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001007 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001008 --extra-cxxflags=*)
1009 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001010 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001011 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001012 --enable-debug-info)
1013 ;;
1014 --disable-debug-info)
1015 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001016 --cross-cc-*)
1017 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001018 --enable-modules)
1019 modules="yes"
1020 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001021 --disable-modules)
1022 modules="no"
1023 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001024 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001025 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001026 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001027 if test "$target_list_exclude"; then
1028 error_exit "Can't mix --target-list with --target-list-exclude"
1029 fi
1030 ;;
1031 --target-list-exclude=*) target_list_exclude="$optarg"
1032 if test "$target_list"; then
1033 error_exit "Can't mix --target-list-exclude with --target-list"
1034 fi
bellardde83cd02003-06-15 20:25:43 +00001035 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001036 --enable-trace-backends=*) trace_backends="$optarg"
1037 ;;
1038 # XXX: backwards compatibility
1039 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001040 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001041 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001042 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001043 --with-default-devices) default_devices="yes"
1044 ;;
1045 --without-default-devices) default_devices="no"
1046 ;;
bellard7d132992003-03-06 23:23:54 +00001047 --enable-gprof) gprof="yes"
1048 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001049 --enable-gcov) gcov="yes"
1050 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001051 --static)
1052 static="yes"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001053 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001054 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001055 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001056 --mandir=*) mandir="$optarg"
1057 ;;
1058 --bindir=*) bindir="$optarg"
1059 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001060 --libdir=*) libdir="$optarg"
1061 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001062 --libexecdir=*) libexecdir="$optarg"
1063 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001064 --includedir=*) includedir="$optarg"
1065 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001066 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001067 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001068 --with-confsuffix=*) confsuffix="$optarg"
1069 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001070 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001071 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001072 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001073 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001074 --localstatedir=*) local_statedir="$optarg"
1075 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001076 --firmwarepath=*) firmwarepath="$optarg"
1077 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001078 --host=*|--build=*|\
1079 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001080 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001081 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1082 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1083 # These switches are silently ignored, for compatibility with
1084 # autoconf-generated configure scripts. This allows QEMU's
1085 # configure to be used by RPM and similar macros that set
1086 # lots of directory switches by default.
1087 ;;
bellard97a847b2003-08-10 21:36:04 +00001088 --disable-sdl) sdl="no"
1089 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001090 --enable-sdl) sdl="yes"
1091 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001092 --disable-sdl-image) sdl_image="no"
1093 ;;
1094 --enable-sdl-image) sdl_image="yes"
1095 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001096 --disable-qom-cast-debug) qom_cast_debug="no"
1097 ;;
1098 --enable-qom-cast-debug) qom_cast_debug="yes"
1099 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301100 --disable-virtfs) virtfs="no"
1101 ;;
1102 --enable-virtfs) virtfs="yes"
1103 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001104 --disable-mpath) mpath="no"
1105 ;;
1106 --enable-mpath) mpath="yes"
1107 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001108 --disable-vnc) vnc="no"
1109 ;;
1110 --enable-vnc) vnc="yes"
1111 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001112 --oss-lib=*) oss_lib="$optarg"
1113 ;;
malc0c58ac12008-06-25 21:04:05 +00001114 --audio-drv-list=*) audio_drv_list="$optarg"
1115 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001116 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001117 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001118 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001119 ;;
aurel32f8393942009-04-13 18:45:38 +00001120 --enable-debug-tcg) debug_tcg="yes"
1121 ;;
1122 --disable-debug-tcg) debug_tcg="no"
1123 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001124 --enable-debug)
1125 # Enable debugging options that aren't excessively noisy
1126 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001127 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001128 debug="yes"
1129 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001130 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001131 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001132 --enable-sanitizers) sanitizers="yes"
1133 ;;
1134 --disable-sanitizers) sanitizers="no"
1135 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001136 --enable-sparse) sparse="yes"
1137 ;;
1138 --disable-sparse) sparse="no"
1139 ;;
aliguori1625af82009-04-05 17:41:02 +00001140 --disable-strip) strip_opt="no"
1141 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001142 --disable-vnc-sasl) vnc_sasl="no"
1143 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001144 --enable-vnc-sasl) vnc_sasl="yes"
1145 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001146 --disable-vnc-jpeg) vnc_jpeg="no"
1147 ;;
1148 --enable-vnc-jpeg) vnc_jpeg="yes"
1149 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001150 --disable-vnc-png) vnc_png="no"
1151 ;;
1152 --enable-vnc-png) vnc_png="yes"
1153 ;;
bellard443f1372004-06-04 11:13:20 +00001154 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001155 ;;
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02001156 --enable-slirp=git) slirp="git"
1157 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001158 --enable-slirp=system) slirp="system"
1159 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001160 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001161 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001162 --enable-vde) vde="yes"
1163 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001164 --disable-netmap) netmap="no"
1165 ;;
1166 --enable-netmap) netmap="yes"
1167 ;;
aliguorie37630c2009-04-22 15:19:10 +00001168 --disable-xen) xen="no"
1169 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001170 --enable-xen) xen="yes"
1171 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001172 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1173 ;;
1174 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1175 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001176 --disable-brlapi) brlapi="no"
1177 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001178 --enable-brlapi) brlapi="yes"
1179 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001180 --disable-kvm) kvm="no"
1181 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001182 --enable-kvm) kvm="yes"
1183 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001184 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001185 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001186 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001187 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001188 --disable-hvf) hvf="no"
1189 ;;
1190 --enable-hvf) hvf="yes"
1191 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001192 --disable-whpx) whpx="no"
1193 ;;
1194 --enable-whpx) whpx="yes"
1195 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001196 --disable-tcg-interpreter) tcg_interpreter="no"
1197 ;;
1198 --enable-tcg-interpreter) tcg_interpreter="yes"
1199 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001200 --disable-cap-ng) cap_ng="no"
1201 ;;
1202 --enable-cap-ng) cap_ng="yes"
1203 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001204 --disable-tcg) tcg="no"
1205 ;;
1206 --enable-tcg) tcg="yes"
1207 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001208 --disable-malloc-trim) malloc_trim="no"
1209 ;;
1210 --enable-malloc-trim) malloc_trim="yes"
1211 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001212 --disable-spice) spice="no"
1213 ;;
1214 --enable-spice) spice="yes"
1215 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001216 --disable-libiscsi) libiscsi="no"
1217 ;;
1218 --enable-libiscsi) libiscsi="yes"
1219 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001220 --disable-libnfs) libnfs="no"
1221 ;;
1222 --enable-libnfs) libnfs="yes"
1223 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001224 --enable-profiler) profiler="yes"
1225 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001226 --disable-cocoa) cocoa="no"
1227 ;;
malcc2de5c92008-06-28 19:13:06 +00001228 --enable-cocoa)
1229 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001230 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001231 ;;
pbrookcad25d62006-03-19 16:31:11 +00001232 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001233 ;;
pbrookcad25d62006-03-19 16:31:11 +00001234 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001235 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001236 --disable-user)
1237 linux_user="no" ;
1238 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001239 ;;
1240 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001241 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001242 ;;
ths831b7822007-01-18 20:06:33 +00001243 --enable-linux-user) linux_user="yes"
1244 ;;
blueswir184778502008-10-26 20:33:16 +00001245 --disable-bsd-user) bsd_user="no"
1246 ;;
1247 --enable-bsd-user) bsd_user="yes"
1248 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001249 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001250 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001251 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001252 ;;
bellard85aa5182007-11-11 20:17:03 +00001253 --enable-werror) werror="yes"
1254 ;;
1255 --disable-werror) werror="no"
1256 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001257 --enable-stack-protector) stack_protector="yes"
1258 ;;
1259 --disable-stack-protector) stack_protector="no"
1260 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001261 --disable-curses) curses="no"
1262 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001263 --enable-curses) curses="yes"
1264 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001265 --disable-iconv) iconv="no"
1266 ;;
1267 --enable-iconv) iconv="yes"
1268 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001269 --disable-curl) curl="no"
1270 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001271 --enable-curl) curl="yes"
1272 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001273 --disable-fdt) fdt="no"
1274 ;;
1275 --enable-fdt) fdt="yes"
1276 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001277 --disable-linux-aio) linux_aio="no"
1278 ;;
1279 --enable-linux-aio) linux_aio="yes"
1280 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001281 --disable-linux-io-uring) linux_io_uring="no"
1282 ;;
1283 --enable-linux-io-uring) linux_io_uring="yes"
1284 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001285 --disable-attr) attr="no"
1286 ;;
1287 --enable-attr) attr="yes"
1288 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001289 --disable-membarrier) membarrier="no"
1290 ;;
1291 --enable-membarrier) membarrier="yes"
1292 ;;
ths77755342008-11-27 15:45:16 +00001293 --disable-blobs) blobs="no"
1294 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001295 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001296 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001297 --with-coroutine=*) coroutine="$optarg"
1298 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001299 --disable-coroutine-pool) coroutine_pool="no"
1300 ;;
1301 --enable-coroutine-pool) coroutine_pool="yes"
1302 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001303 --enable-debug-stack-usage) debug_stack_usage="yes"
1304 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001305 --enable-crypto-afalg) crypto_afalg="yes"
1306 ;;
1307 --disable-crypto-afalg) crypto_afalg="no"
1308 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001309 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001310 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001311 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001312 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001313 --disable-vhost-net) vhost_net="no"
1314 ;;
1315 --enable-vhost-net) vhost_net="yes"
1316 ;;
Gonglei042cea22018-03-01 21:46:28 +08001317 --disable-vhost-crypto) vhost_crypto="no"
1318 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001319 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001320 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001321 --disable-vhost-scsi) vhost_scsi="no"
1322 ;;
1323 --enable-vhost-scsi) vhost_scsi="yes"
1324 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001325 --disable-vhost-vsock) vhost_vsock="no"
1326 ;;
1327 --enable-vhost-vsock) vhost_vsock="yes"
1328 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001329 --disable-vhost-user-fs) vhost_user_fs="no"
1330 ;;
1331 --enable-vhost-user-fs) vhost_user_fs="yes"
1332 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001333 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001334 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001335 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001336 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001337 --disable-rbd) rbd="no"
1338 ;;
1339 --enable-rbd) rbd="yes"
1340 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001341 --disable-xfsctl) xfs="no"
1342 ;;
1343 --enable-xfsctl) xfs="yes"
1344 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001345 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001346 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001347 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001348 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001349 --disable-libusb) libusb="no"
1350 ;;
1351 --enable-libusb) libusb="yes"
1352 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001353 --disable-usb-redir) usb_redir="no"
1354 ;;
1355 --enable-usb-redir) usb_redir="yes"
1356 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001357 --disable-zlib-test) zlib="no"
1358 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001359 --disable-lzo) lzo="no"
1360 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001361 --enable-lzo) lzo="yes"
1362 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001363 --disable-snappy) snappy="no"
1364 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001365 --enable-snappy) snappy="yes"
1366 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001367 --disable-bzip2) bzip2="no"
1368 ;;
1369 --enable-bzip2) bzip2="yes"
1370 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001371 --enable-lzfse) lzfse="yes"
1372 ;;
1373 --disable-lzfse) lzfse="no"
1374 ;;
Juan Quintela3a678482019-12-17 21:15:24 +01001375 --disable-zstd) zstd="no"
1376 ;;
1377 --enable-zstd) zstd="yes"
1378 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001379 --enable-guest-agent) guest_agent="yes"
1380 ;;
1381 --disable-guest-agent) guest_agent="no"
1382 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001383 --enable-guest-agent-msi) guest_agent_msi="yes"
1384 ;;
1385 --disable-guest-agent-msi) guest_agent_msi="no"
1386 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001387 --with-vss-sdk) vss_win32_sdk=""
1388 ;;
1389 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1390 ;;
1391 --without-vss-sdk) vss_win32_sdk="no"
1392 ;;
1393 --with-win-sdk) win_sdk=""
1394 ;;
1395 --with-win-sdk=*) win_sdk="$optarg"
1396 ;;
1397 --without-win-sdk) win_sdk="no"
1398 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001399 --enable-tools) want_tools="yes"
1400 ;;
1401 --disable-tools) want_tools="no"
1402 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001403 --enable-seccomp) seccomp="yes"
1404 ;;
1405 --disable-seccomp) seccomp="no"
1406 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301407 --disable-glusterfs) glusterfs="no"
1408 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001409 --disable-avx2) avx2_opt="no"
1410 ;;
1411 --enable-avx2) avx2_opt="yes"
1412 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301413 --enable-glusterfs) glusterfs="yes"
1414 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001415 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1416 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001417 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001418 --enable-vhdx|--disable-vhdx)
1419 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1420 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001421 --enable-uuid|--disable-uuid)
1422 echo "$0: $opt is obsolete, UUID support is always built" >&2
1423 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001424 --disable-gtk) gtk="no"
1425 ;;
1426 --enable-gtk) gtk="yes"
1427 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001428 --tls-priority=*) tls_priority="$optarg"
1429 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001430 --disable-gnutls) gnutls="no"
1431 ;;
1432 --enable-gnutls) gnutls="yes"
1433 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001434 --disable-nettle) nettle="no"
1435 ;;
1436 --enable-nettle) nettle="yes"
1437 ;;
1438 --disable-gcrypt) gcrypt="no"
1439 ;;
1440 --enable-gcrypt) gcrypt="yes"
1441 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001442 --disable-auth-pam) auth_pam="no"
1443 ;;
1444 --enable-auth-pam) auth_pam="yes"
1445 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001446 --enable-rdma) rdma="yes"
1447 ;;
1448 --disable-rdma) rdma="no"
1449 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001450 --enable-pvrdma) pvrdma="yes"
1451 ;;
1452 --disable-pvrdma) pvrdma="no"
1453 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001454 --disable-vte) vte="no"
1455 ;;
1456 --enable-vte) vte="yes"
1457 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001458 --disable-virglrenderer) virglrenderer="no"
1459 ;;
1460 --enable-virglrenderer) virglrenderer="yes"
1461 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001462 --disable-tpm) tpm="no"
1463 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001464 --enable-tpm) tpm="yes"
1465 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001466 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001467 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001468 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001469 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001470 --disable-live-block-migration) live_block_migration="no"
1471 ;;
1472 --enable-live-block-migration) live_block_migration="yes"
1473 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001474 --disable-numa) numa="no"
1475 ;;
1476 --enable-numa) numa="yes"
1477 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001478 --disable-libxml2) libxml2="no"
1479 ;;
1480 --enable-libxml2) libxml2="yes"
1481 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001482 --disable-tcmalloc) tcmalloc="no"
1483 ;;
1484 --enable-tcmalloc) tcmalloc="yes"
1485 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001486 --disable-jemalloc) jemalloc="no"
1487 ;;
1488 --enable-jemalloc) jemalloc="yes"
1489 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001490 --disable-replication) replication="no"
1491 ;;
1492 --enable-replication) replication="yes"
1493 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001494 --disable-vxhs) vxhs="no"
1495 ;;
1496 --enable-vxhs) vxhs="yes"
1497 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001498 --disable-bochs) bochs="no"
1499 ;;
1500 --enable-bochs) bochs="yes"
1501 ;;
1502 --disable-cloop) cloop="no"
1503 ;;
1504 --enable-cloop) cloop="yes"
1505 ;;
1506 --disable-dmg) dmg="no"
1507 ;;
1508 --enable-dmg) dmg="yes"
1509 ;;
1510 --disable-qcow1) qcow1="no"
1511 ;;
1512 --enable-qcow1) qcow1="yes"
1513 ;;
1514 --disable-vdi) vdi="no"
1515 ;;
1516 --enable-vdi) vdi="yes"
1517 ;;
1518 --disable-vvfat) vvfat="no"
1519 ;;
1520 --enable-vvfat) vvfat="yes"
1521 ;;
1522 --disable-qed) qed="no"
1523 ;;
1524 --enable-qed) qed="yes"
1525 ;;
1526 --disable-parallels) parallels="no"
1527 ;;
1528 --enable-parallels) parallels="yes"
1529 ;;
1530 --disable-sheepdog) sheepdog="no"
1531 ;;
1532 --enable-sheepdog) sheepdog="yes"
1533 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001534 --disable-vhost-user) vhost_user="no"
1535 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001536 --enable-vhost-user) vhost_user="yes"
1537 ;;
1538 --disable-vhost-kernel) vhost_kernel="no"
1539 ;;
1540 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001541 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001542 --disable-capstone) capstone="no"
1543 ;;
1544 --enable-capstone) capstone="yes"
1545 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001546 --enable-capstone=git) capstone="git"
1547 ;;
1548 --enable-capstone=system) capstone="system"
1549 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001550 --with-git=*) git="$optarg"
1551 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001552 --enable-git-update) git_update=yes
1553 ;;
1554 --disable-git-update) git_update=no
1555 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001556 --enable-debug-mutex) debug_mutex=yes
1557 ;;
1558 --disable-debug-mutex) debug_mutex=no
1559 ;;
Junyan He17824402018-07-18 15:47:59 +08001560 --enable-libpmem) libpmem=yes
1561 ;;
1562 --disable-libpmem) libpmem=no
1563 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001564 --enable-xkbcommon) xkbcommon=yes
1565 ;;
1566 --disable-xkbcommon) xkbcommon=no
1567 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001568 --enable-plugins) plugins="yes"
1569 ;;
1570 --disable-plugins) plugins="no"
1571 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001572 --enable-containers) use_containers="yes"
1573 ;;
1574 --disable-containers) use_containers="no"
1575 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001576 --enable-fuzzing) fuzzing=yes
1577 ;;
1578 --disable-fuzzing) fuzzing=no
1579 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001580 *)
1581 echo "ERROR: unknown option $opt"
1582 echo "Try '$0 --help' for more information"
1583 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001584 ;;
bellard7d132992003-03-06 23:23:54 +00001585 esac
1586done
1587
bellard40293e52008-01-31 11:32:10 +00001588case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001589 ppc)
1590 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001591 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001592 ;;
1593 ppc64)
1594 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001595 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001596 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001597 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001598 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001599 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001600 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001601 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001602 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001603 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001604 ;;
ths76d83bd2007-11-18 21:22:10 +00001605 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001606 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001607 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001608 ;;
1609 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001610 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001611 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001612 ;;
bellard40293e52008-01-31 11:32:10 +00001613 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001614 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001615 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001616 ;;
1617 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001618 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1619 # If we truly care, we should simply detect this case at
1620 # runtime and generate the fallback to serial emulation.
1621 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001622 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001623 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001624 x32)
1625 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001626 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001627 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001628 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001629esac
1630
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001631eval "cross_cc_${cpu}=\$host_cc"
1632cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001633QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001634
Peter Maydellaffc88c2016-06-13 11:32:24 +01001635# For user-mode emulation the host arch has to be one we explicitly
1636# support, even if we're using TCI.
1637if [ "$ARCH" = "unknown" ]; then
1638 bsd_user="no"
1639 linux_user="no"
1640fi
1641
Peter Maydell60e0df22011-05-03 14:50:13 +01001642default_target_list=""
1643
Peter Maydell6e92f822013-05-20 16:16:15 +01001644mak_wilds=""
1645
1646if [ "$softmmu" = "yes" ]; then
1647 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001648fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001649if [ "$linux_user" = "yes" ]; then
1650 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001651fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001652if [ "$bsd_user" = "yes" ]; then
1653 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001654fi
1655
Alex Bennée447e1332019-03-19 11:59:12 +00001656if test -z "$target_list_exclude"; then
1657 for config in $mak_wilds; do
1658 default_target_list="${default_target_list} $(basename "$config" .mak)"
1659 done
1660else
1661 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1662 for config in $mak_wilds; do
1663 target="$(basename "$config" .mak)"
1664 exclude="no"
1665 for excl in $exclude_list; do
1666 if test "$excl" = "$target"; then
1667 exclude="yes"
1668 break;
1669 fi
1670 done
1671 if test "$exclude" = "no"; then
1672 default_target_list="${default_target_list} $target"
1673 fi
1674 done
1675fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001676
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001677# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001678trace_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 +01001679
pbrookaf5db582006-04-08 14:26:41 +00001680if test x"$show_help" = x"yes" ; then
1681cat << EOF
1682
1683Usage: configure [options]
1684Options: [defaults in brackets after descriptions]
1685
Stefan Weil08fb77e2013-12-18 22:09:39 +01001686Standard options:
1687 --help print this message
1688 --prefix=PREFIX install in PREFIX [$prefix]
1689 --interp-prefix=PREFIX where to find shared libraries, etc.
1690 use %M for cpu name [$interp_prefix]
1691 --target-list=LIST set target list (default: build everything)
1692$(echo Available targets: $default_target_list | \
1693 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001694 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001695
1696Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001697 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1698 --cc=CC use C compiler CC [$cc]
1699 --iasl=IASL use ACPI compiler IASL [$iasl]
1700 --host-cc=CC use C compiler CC [$host_cc] for code run at
1701 build time
1702 --cxx=CXX use C++ compiler CXX [$cxx]
1703 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1704 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001705 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001706 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001707 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001708 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001709 --make=MAKE use specified make [$make]
1710 --install=INSTALL use specified install [$install]
1711 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001712 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001713 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001714 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001715 --static enable static build [$static]
1716 --mandir=PATH install man pages in PATH
1717 --datadir=PATH install firmware in PATH$confsuffix
1718 --docdir=PATH install documentation in PATH$confsuffix
1719 --bindir=PATH install binaries in PATH
1720 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001721 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001722 --sysconfdir=PATH install config in PATH$confsuffix
1723 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001724 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001725 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001726 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001727 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001728 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001729 --disable-strip disable stripping binaries
1730 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001731 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001732 --audio-drv-list=LIST set audio drivers list:
1733 Available drivers: $audio_possible_drivers
1734 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1735 --block-drv-rw-whitelist=L
1736 set block driver read-write whitelist
1737 (affects only QEMU, not qemu-img)
1738 --block-drv-ro-whitelist=L
1739 set block driver read-only whitelist
1740 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001741 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001742 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001743 --with-trace-file=NAME Full PATH,NAME of file to store traces
1744 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001745 --disable-slirp disable SLIRP userspace network connectivity
1746 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001747 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001748 --oss-lib path to OSS library
1749 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001750 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001751 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001752 --enable-gcov enable test coverage analysis with gcov
1753 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001754 --disable-blobs disable installing provided firmware blobs
1755 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1756 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001757 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001758 --enable-gprof QEMU profiling with gprof
1759 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001760 --enable-debug-stack-usage
1761 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001762 --enable-plugins
1763 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001764 --disable-containers don't use containers for cross-building
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001765
1766Optional features, enabled with --enable-FEATURE and
1767disabled with --disable-FEATURE, default is enabled if available:
1768
1769 system all system emulation targets
1770 user supported user emulation targets
1771 linux-user all linux usermode emulation targets
1772 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001773 docs build documentation
1774 guest-agent build the QEMU Guest Agent
1775 guest-agent-msi build guest agent Windows MSI installation package
1776 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001777 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001778 debug-tcg TCG debugging (default is disabled)
1779 debug-info debugging information
1780 sparse sparse checker
1781
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001782 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001783 nettle nettle cryptography support
1784 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001785 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001786 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001787 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001788 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001789 vte vte support for the gtk UI
1790 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001791 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001792 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001793 vnc-sasl SASL encryption for VNC server
1794 vnc-jpeg JPEG lossy compression for VNC server
1795 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001796 cocoa Cocoa UI (Mac OS X only)
1797 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001798 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001799 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001800 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001801 brlapi BrlAPI (Braile)
1802 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001803 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001804 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001805 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001806 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001807 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001808 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001809 rdma Enable RDMA-based migration
1810 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001811 vde support for vde network
1812 netmap support for netmap network
1813 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001814 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001815 cap-ng libcap-ng support
1816 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001817 vhost-net vhost-net kernel acceleration support
1818 vhost-vsock virtio sockets device support
1819 vhost-scsi vhost-scsi kernel target support
1820 vhost-crypto vhost-user-crypto backend support
1821 vhost-kernel vhost kernel backend support
1822 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001823 spice spice
1824 rbd rados block device (rbd)
1825 libiscsi iscsi support
1826 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001827 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001828 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001829 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001830 usb-redir usb network redirection support
1831 lzo support of lzo compression library
1832 snappy support of snappy compression library
1833 bzip2 support of bzip2 compression library
1834 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001835 lzfse support of lzfse compression library
1836 (for reading lzfse-compressed dmg images)
Juan Quintela3a678482019-12-17 21:15:24 +01001837 zstd support for zstd compression library
1838 (for migration compression)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001839 seccomp seccomp support
1840 coroutine-pool coroutine freelist (better performance)
1841 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001842 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001843 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001844 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001845 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001846 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001847 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001848 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001849 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001850 opengl opengl support
1851 virglrenderer virgl rendering support
1852 xfsctl xfsctl support
1853 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001854 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001855 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001856 bochs bochs image format support
1857 cloop cloop image format support
1858 dmg dmg image format support
1859 qcow1 qcow v1 image format support
1860 vdi vdi image format support
1861 vvfat vvfat image format support
1862 qed qed image format support
1863 parallels parallels image format support
1864 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001865 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001866 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001867 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001868 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001869 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001870
1871NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001872EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001873exit 0
pbrookaf5db582006-04-08 14:26:41 +00001874fi
1875
Thomas Huth9c790242019-03-11 11:20:34 +01001876# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001877rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001878
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001879if test -z "$python"
1880then
1881 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001882fi
1883
1884# Note that if the Python conditional here evaluates True we will exit
1885# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001886if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1887 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001888 "Use --python=/path/to/python to specify a supported Python."
1889fi
1890
Cleber Rosa755ee702018-11-09 10:07:07 -05001891# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001892python_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 -05001893
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001894# Suppress writing compiled files
1895python="$python -B"
1896
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001897# Check that the C compiler works. Doing this here before testing
1898# the host CPU ensures that we had a valid CC to autodetect the
1899# $cpu var (and we should bail right here if that's not the case).
1900# It also allows the help message to be printed without a CC.
1901write_c_skeleton;
1902if compile_object ; then
1903 : C compiler works ok
1904else
1905 error_exit "\"$cc\" either does not exist or does not work"
1906fi
1907if ! compile_prog ; then
1908 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1909fi
1910
Peter Maydell359bc952011-12-24 13:07:25 +00001911# Now we have handled --enable-tcg-interpreter and know we're not just
1912# printing the help message, bail out if the host CPU isn't supported.
1913if test "$ARCH" = "unknown"; then
1914 if test "$tcg_interpreter" = "yes" ; then
1915 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001916 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001917 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001918 fi
1919fi
1920
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001921# Consult white-list to determine whether to enable werror
1922# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001923if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001924 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001925 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001926 werror="yes"
1927 else
1928 werror="no"
1929 fi
1930fi
1931
Peter Maydellfb59dab2017-03-28 14:01:52 +01001932if test "$bogus_os" = "yes"; then
1933 # Now that we know that we're not printing the help and that
1934 # the compiler works (so the results of the check_defines we used
1935 # to identify the OS are reliable), if we didn't recognize the
1936 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001937 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001938fi
1939
Thomas Huthefc6c072018-12-03 10:12:32 +01001940# Check whether the compiler matches our minimum requirements:
1941cat > $TMPC << EOF
1942#if defined(__clang_major__) && defined(__clang_minor__)
1943# ifdef __apple_build_version__
1944# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1945# error You need at least XCode Clang v5.1 to compile QEMU
1946# endif
1947# else
1948# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1949# error You need at least Clang v3.4 to compile QEMU
1950# endif
1951# endif
1952#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1953# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1954# error You need at least GCC v4.8 to compile QEMU
1955# endif
1956#else
1957# error You either need GCC or Clang to compiler QEMU
1958#endif
1959int main (void) { return 0; }
1960EOF
1961if ! compile_prog "" "" ; then
1962 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1963fi
1964
Paolo Bonzini8d050952010-12-23 11:43:52 +01001965gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1966gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001967gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001968gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001969gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001970gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001971# Note that we do not add -Werror to gcc_flags here, because that would
1972# enable it for all configure tests. If a configure test failed due
1973# to -Werror this would just silently disable some features,
1974# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001975
1976cc_has_warning_flag() {
1977 write_c_skeleton;
1978
Peter Maydella1d29d62012-10-27 22:19:07 +01001979 # Use the positive sense of the flag when testing for -Wno-wombat
1980 # support (gcc will happily accept the -Wno- form of unknown
1981 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001982 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1983 compile_prog "-Werror $optflag" ""
1984}
1985
1986for flag in $gcc_flags; do
1987 if cc_has_warning_flag $flag ; then
1988 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001989 fi
1990done
1991
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001992if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001993 cat > $TMPC << EOF
1994int main(int argc, char *argv[])
1995{
1996 char arr[64], *p = arr, *c = argv[0];
1997 while (*c) {
1998 *p++ = *c++;
1999 }
2000 return 0;
2001}
2002EOF
Steven Noonan63678e12014-03-28 17:19:02 +01002003 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002004 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01002005 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01002006 # We need to check both a compile and a link, since some compiler
2007 # setups fail only on a .c->.o compile and some only at link time
2008 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2009 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01002010 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002011 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002012 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01002013 break
2014 fi
2015 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002016 if test "$stack_protector" = yes; then
2017 if test $sp_on = 0; then
2018 error_exit "Stack protector not supported"
2019 fi
2020 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01002021fi
2022
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02002023# Disable -Wmissing-braces on older compilers that warn even for
2024# the "universal" C zero initializer {0}.
2025cat > $TMPC << EOF
2026struct {
2027 int a[2];
2028} x = {0};
2029EOF
2030if compile_object "-Werror" "" ; then
2031 :
2032else
2033 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2034fi
2035
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002036# Our module code doesn't support Windows
2037if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2038 error_exit "Modules are not available for Windows"
2039fi
2040
Thomas Huthd376e9d2018-12-03 11:41:38 +01002041# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002042if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002043 if test "$modules" = "yes" ; then
2044 error_exit "static and modules are mutually incompatible"
2045 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002046 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002047 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002048 else
2049 pie="no"
2050 fi
2051fi
2052
Emilio G. Cota768b7852015-04-29 13:09:02 +02002053# Unconditional check for compiler __thread support
2054 cat > $TMPC << EOF
2055static __thread int tls_var;
2056int main(void) { return tls_var; }
2057EOF
2058
2059if ! compile_prog "-Werror" "" ; then
2060 error_exit "Your compiler does not support the __thread specifier for " \
2061 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2062fi
2063
Avi Kivity40d64442011-11-15 20:12:17 +02002064if test "$pie" = ""; then
2065 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002066 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002067 ;;
2068 *)
2069 pie="no"
2070 ;;
2071 esac
2072fi
2073
2074if test "$pie" != "no" ; then
2075 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002076
2077#ifdef __linux__
2078# define THREAD __thread
2079#else
2080# define THREAD
2081#endif
2082
2083static THREAD int tls_var;
2084
2085int main(void) { return tls_var; }
2086
Avi Kivity40d64442011-11-15 20:12:17 +02002087EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002088 # check we support --no-pie first...
2089 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2090 CFLAGS_NOPIE="-fno-pie"
2091 LDFLAGS_NOPIE="-nopie"
2092 fi
2093
Avi Kivity40d64442011-11-15 20:12:17 +02002094 if compile_prog "-fPIE -DPIE" "-pie"; then
2095 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002096 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002097 pie="yes"
2098 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002099 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002100 fi
2101 else
2102 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002103 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002104 else
2105 echo "Disabling PIE due to missing toolchain support"
2106 pie="no"
2107 fi
2108 fi
2109fi
2110
Paolo Bonzini09dada42013-04-17 16:26:47 +02002111##########################################
2112# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2113# use i686 as default anyway, but for those that don't, an explicit
2114# specification is necessary
2115
2116if test "$cpu" = "i386"; then
2117 cat > $TMPC << EOF
2118static int sfaa(int *ptr)
2119{
2120 return __sync_fetch_and_and(ptr, 0);
2121}
2122
2123int main(void)
2124{
2125 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002126 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002127 sfaa(&val);
2128 return val;
2129}
2130EOF
2131 if ! compile_prog "" "" ; then
2132 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2133 fi
2134fi
2135
2136#########################################
bellardec530c82006-04-25 22:36:06 +00002137# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002138
bellardec530c82006-04-25 22:36:06 +00002139if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002140 if has $install; then
2141 :
2142 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002143 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2144 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2145 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002146 fi
Stefan Weil89138852016-05-16 15:10:20 +02002147 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002148 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2149 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2150 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002151 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002152 if has ar; then
2153 :
2154 else
bellardec530c82006-04-25 22:36:06 +00002155 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002156 error_exit "No path includes ar" \
2157 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002158 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002159 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002160 fi
ths5fafdf22007-09-16 21:08:06 +00002161fi
bellardec530c82006-04-25 22:36:06 +00002162
Stefan Weilafb63eb2012-09-26 22:04:38 +02002163if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002164 for target in $default_target_list; do
2165 supported_target $target 2>/dev/null && \
2166 target_list="$target_list $target"
2167 done
2168 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002169else
Stefan Weil89138852016-05-16 15:10:20 +02002170 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002171 for target in $target_list; do
2172 # Check that we recognised the target name; this allows a more
2173 # friendly error message than if we let it fall through.
2174 case " $default_target_list " in
2175 *" $target "*)
2176 ;;
2177 *)
2178 error_exit "Unknown target name '$target'"
2179 ;;
2180 esac
2181 supported_target $target || exit 1
2182 done
bellard5327cf42005-01-10 23:18:50 +00002183fi
Peter Maydell25b48332013-05-20 16:16:16 +01002184
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002185# see if system emulation was really requested
2186case " $target_list " in
2187 *"-softmmu "*) softmmu=yes
2188 ;;
2189 *) softmmu=no
2190 ;;
2191esac
bellard5327cf42005-01-10 23:18:50 +00002192
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002193for target in $target_list; do
2194 case "$target" in
2195 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2196 edk2_blobs="yes"
2197 ;;
2198 esac
2199done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002200# The EDK2 binaries are compressed with bzip2
2201if test "$edk2_blobs" = "yes" && ! has bzip2; then
2202 error_exit "The bzip2 program is required for building QEMU"
2203fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002204
Juan Quintela249247c2009-08-12 18:20:25 +02002205feature_not_found() {
2206 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002207 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002208
Peter Maydell76ad07a2013-04-08 12:11:26 +01002209 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002210 "configure was not able to find it." \
2211 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002212}
2213
bellard7d132992003-03-06 23:23:54 +00002214# ---
2215# big/little endian test
2216cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002217short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2218short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2219extern int foo(short *, short *);
2220int main(int argc, char *argv[]) {
2221 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002222}
2223EOF
2224
Mike Frysinger61cc9192013-06-30 23:30:18 -04002225if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002226 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002227 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002228 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002229 bigendian="no"
2230 else
2231 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002232 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002233else
2234 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002235fi
2236
Juan Quintelab0a47e72009-08-12 18:29:49 +02002237##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002238# system tools
2239if test -z "$want_tools"; then
2240 if test "$softmmu" = "no"; then
2241 want_tools=no
2242 else
2243 want_tools=yes
2244 fi
2245fi
2246
2247##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002248# cocoa implies not SDL or GTK
2249# (the cocoa UI code currently assumes it is always the active UI
2250# and doesn't interact well with other UI frontend code)
2251if test "$cocoa" = "yes"; then
2252 if test "$sdl" = "yes"; then
2253 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2254 fi
2255 if test "$gtk" = "yes"; then
2256 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2257 fi
2258 gtk=no
2259 sdl=no
2260fi
2261
Eric Blake6b39b062016-10-11 10:46:23 -05002262# Some versions of Mac OS X incorrectly define SIZE_MAX
2263cat > $TMPC << EOF
2264#include <stdint.h>
2265#include <stdio.h>
2266int main(int argc, char *argv[]) {
2267 return printf("%zu", SIZE_MAX);
2268}
2269EOF
2270have_broken_size_max=no
2271if ! compile_object -Werror ; then
2272 have_broken_size_max=yes
2273fi
2274
Peter Maydella30878e2015-08-14 16:10:52 +01002275##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002276# L2TPV3 probe
2277
2278cat > $TMPC <<EOF
2279#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002280#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002281int main(void) { return sizeof(struct mmsghdr); }
2282EOF
2283if compile_prog "" "" ; then
2284 l2tpv3=yes
2285else
2286 l2tpv3=no
2287fi
2288
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002289#########################################
2290# vhost interdependencies and host support
2291
2292# vhost backends
2293test "$vhost_user" = "" && vhost_user=yes
2294if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2295 error_exit "vhost-user isn't available on win32"
2296fi
2297test "$vhost_kernel" = "" && vhost_kernel=$linux
2298if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2299 error_exit "vhost-kernel is only available on Linux"
2300fi
2301
2302# vhost-kernel devices
2303test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2304if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2305 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2306fi
2307test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2308if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2309 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2310fi
2311
2312# vhost-user backends
2313test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2314if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2315 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2316fi
2317test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2318if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2319 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2320fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002321test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2322if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2323 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2324fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002325
2326# OR the vhost-kernel and vhost-user values for simplicity
2327if test "$vhost_net" = ""; then
2328 test "$vhost_net_user" = "yes" && vhost_net=yes
2329 test "$vhost_kernel" = "yes" && vhost_net=yes
2330fi
2331
Gonglei015a33b2014-07-01 20:58:08 +08002332##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002333# MinGW / Mingw-w64 localtime_r/gmtime_r check
2334
2335if test "$mingw32" = "yes"; then
2336 # Some versions of MinGW / Mingw-w64 lack localtime_r
2337 # and gmtime_r entirely.
2338 #
2339 # Some versions of Mingw-w64 define a macro for
2340 # localtime_r/gmtime_r.
2341 #
2342 # Some versions of Mingw-w64 will define functions
2343 # for localtime_r/gmtime_r, but only if you have
2344 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2345 # though, unistd.h and pthread.h both define
2346 # that for you.
2347 #
2348 # So this #undef localtime_r and #include <unistd.h>
2349 # are not in fact redundant.
2350cat > $TMPC << EOF
2351#include <unistd.h>
2352#include <time.h>
2353#undef localtime_r
2354int main(void) { localtime_r(NULL, NULL); return 0; }
2355EOF
2356 if compile_prog "" "" ; then
2357 localtime_r="yes"
2358 else
2359 localtime_r="no"
2360 fi
2361fi
2362
2363##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002364# pkg-config probe
2365
2366if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002367 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002368fi
2369
2370##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002371# NPTL probe
2372
Peter Maydell24cb36a2013-07-16 18:45:00 +01002373if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002374 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002375#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002376#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002377int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002378#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2379#error bork
2380#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002381 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002382}
2383EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002384 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002385 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002386 fi
pbrookbd0c5662008-05-29 14:34:11 +00002387fi
2388
balrogac629222008-10-11 09:56:04 +00002389##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002390# lzo check
2391
2392if test "$lzo" != "no" ; then
2393 cat > $TMPC << EOF
2394#include <lzo/lzo1x.h>
2395int main(void) { lzo_version(); return 0; }
2396EOF
2397 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002398 libs_softmmu="$libs_softmmu -llzo2"
2399 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002400 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002401 if test "$lzo" = "yes"; then
2402 feature_not_found "liblzo2" "Install liblzo2 devel"
2403 fi
2404 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002405 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002406fi
2407
2408##########################################
2409# snappy check
2410
2411if test "$snappy" != "no" ; then
2412 cat > $TMPC << EOF
2413#include <snappy-c.h>
2414int main(void) { snappy_max_compressed_length(4096); return 0; }
2415EOF
2416 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002417 libs_softmmu="$libs_softmmu -lsnappy"
2418 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002419 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002420 if test "$snappy" = "yes"; then
2421 feature_not_found "libsnappy" "Install libsnappy devel"
2422 fi
2423 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002424 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002425fi
2426
2427##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002428# bzip2 check
2429
2430if test "$bzip2" != "no" ; then
2431 cat > $TMPC << EOF
2432#include <bzlib.h>
2433int main(void) { BZ2_bzlibVersion(); return 0; }
2434EOF
2435 if compile_prog "" "-lbz2" ; then
2436 bzip2="yes"
2437 else
2438 if test "$bzip2" = "yes"; then
2439 feature_not_found "libbzip2" "Install libbzip2 devel"
2440 fi
2441 bzip2="no"
2442 fi
2443fi
2444
2445##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002446# lzfse check
2447
2448if test "$lzfse" != "no" ; then
2449 cat > $TMPC << EOF
2450#include <lzfse.h>
2451int main(void) { lzfse_decode_scratch_size(); return 0; }
2452EOF
2453 if compile_prog "" "-llzfse" ; then
2454 lzfse="yes"
2455 else
2456 if test "$lzfse" = "yes"; then
2457 feature_not_found "lzfse" "Install lzfse devel"
2458 fi
2459 lzfse="no"
2460 fi
2461fi
2462
2463##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002464# zstd check
2465
2466if test "$zstd" != "no" ; then
2467 if $pkg_config --exist libzstd ; then
2468 zstd_cflags="$($pkg_config --cflags libzstd)"
2469 zstd_libs="$($pkg_config --libs libzstd)"
2470 LIBS="$zstd_libs $LIBS"
2471 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2472 zstd="yes"
2473 else
2474 if test "$zstd" = "yes" ; then
2475 feature_not_found "libzstd" "Install libzstd devel"
2476 fi
2477 zstd="no"
2478 fi
2479fi
2480
2481##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002482# libseccomp check
2483
2484if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002485 libseccomp_minver="2.3.0"
2486 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002487 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2488 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002489 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002490 else
Andrew Jones693e5912015-09-30 11:59:18 -04002491 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002492 feature_not_found "libseccomp" \
2493 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002494 fi
2495 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002496 fi
2497fi
2498##########################################
aliguorie37630c2009-04-22 15:19:10 +00002499# xen probe
2500
Juan Quintelafc321b42009-08-12 18:29:55 +02002501if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002502 # Check whether Xen library path is specified via --extra-ldflags to avoid
2503 # overriding this setting with pkg-config output. If not, try pkg-config
2504 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002505
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002506 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2507 $pkg_config --exists xencontrol ; then
2508 xen_ctrl_version="$(printf '%d%02d%02d' \
2509 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2510 xen=yes
2511 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2512 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002513 if $pkg_config --exists xentoolcore; then
2514 xen_pc="$xen_pc xentoolcore"
2515 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002516 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2517 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002518 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002519
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002520 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002521 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002522
2523 # First we test whether Xen headers and libraries are available.
2524 # If no, we are done and there is no Xen support.
2525 # If yes, more tests are run to detect the Xen version.
2526
2527 # Xen (any)
2528 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002529#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002530int main(void) {
2531 return 0;
2532}
2533EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002534 if ! compile_prog "" "$xen_libs" ; then
2535 # Xen not found
2536 if test "$xen" = "yes" ; then
2537 feature_not_found "xen" "Install xen devel"
2538 fi
2539 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002540
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002541 # Xen unstable
2542 elif
2543 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002544#undef XC_WANT_COMPAT_DEVICEMODEL_API
2545#define __XEN_TOOLS__
2546#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002547#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002548int main(void) {
2549 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002550 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002551
2552 xd = xendevicemodel_open(0, 0);
2553 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2554
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002555 xfmem = xenforeignmemory_open(0, 0);
2556 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2557
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002558 return 0;
2559}
2560EOF
2561 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2562 then
2563 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2564 xen_ctrl_version=41100
2565 xen=yes
2566 elif
2567 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002568#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2569#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002570#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002571int main(void) {
2572 xenforeignmemory_handle *xfmem;
2573
2574 xfmem = xenforeignmemory_open(0, 0);
2575 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002576 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002577
2578 return 0;
2579}
2580EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002581 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002582 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002583 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002584 xen_ctrl_version=41000
2585 xen=yes
2586 elif
2587 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002588#undef XC_WANT_COMPAT_DEVICEMODEL_API
2589#define __XEN_TOOLS__
2590#include <xendevicemodel.h>
2591int main(void) {
2592 xendevicemodel_handle *xd;
2593
2594 xd = xendevicemodel_open(0, 0);
2595 xendevicemodel_close(xd);
2596
2597 return 0;
2598}
2599EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002600 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2601 then
2602 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2603 xen_ctrl_version=40900
2604 xen=yes
2605 elif
2606 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002607/*
2608 * If we have stable libs the we don't want the libxc compat
2609 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002610 *
2611 * Also, check if xengnttab_grant_copy_segment_t is defined and
2612 * grant copy operation is implemented.
2613 */
2614#undef XC_WANT_COMPAT_EVTCHN_API
2615#undef XC_WANT_COMPAT_GNTTAB_API
2616#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2617#include <xenctrl.h>
2618#include <xenstore.h>
2619#include <xenevtchn.h>
2620#include <xengnttab.h>
2621#include <xenforeignmemory.h>
2622#include <stdint.h>
2623#include <xen/hvm/hvm_info_table.h>
2624#if !defined(HVM_MAX_VCPUS)
2625# error HVM_MAX_VCPUS not defined
2626#endif
2627int main(void) {
2628 xc_interface *xc = NULL;
2629 xenforeignmemory_handle *xfmem;
2630 xenevtchn_handle *xe;
2631 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002632 xengnttab_grant_copy_segment_t* seg = NULL;
2633
2634 xs_daemon_open();
2635
2636 xc = xc_interface_open(0, 0, 0);
2637 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2638 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2639 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2640 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002641
2642 xfmem = xenforeignmemory_open(0, 0);
2643 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2644
2645 xe = xenevtchn_open(0, 0);
2646 xenevtchn_fd(xe);
2647
2648 xg = xengnttab_open(0, 0);
2649 xengnttab_grant_copy(xg, 0, seg);
2650
2651 return 0;
2652}
2653EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002654 compile_prog "" "$xen_libs $xen_stable_libs"
2655 then
2656 xen_ctrl_version=40800
2657 xen=yes
2658 elif
2659 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002660/*
2661 * If we have stable libs the we don't want the libxc compat
2662 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002663 */
2664#undef XC_WANT_COMPAT_EVTCHN_API
2665#undef XC_WANT_COMPAT_GNTTAB_API
2666#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2667#include <xenctrl.h>
2668#include <xenstore.h>
2669#include <xenevtchn.h>
2670#include <xengnttab.h>
2671#include <xenforeignmemory.h>
2672#include <stdint.h>
2673#include <xen/hvm/hvm_info_table.h>
2674#if !defined(HVM_MAX_VCPUS)
2675# error HVM_MAX_VCPUS not defined
2676#endif
2677int main(void) {
2678 xc_interface *xc = NULL;
2679 xenforeignmemory_handle *xfmem;
2680 xenevtchn_handle *xe;
2681 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002682
2683 xs_daemon_open();
2684
2685 xc = xc_interface_open(0, 0, 0);
2686 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2687 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2688 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2689 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002690
2691 xfmem = xenforeignmemory_open(0, 0);
2692 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2693
2694 xe = xenevtchn_open(0, 0);
2695 xenevtchn_fd(xe);
2696
2697 xg = xengnttab_open(0, 0);
2698 xengnttab_map_grant_ref(xg, 0, 0, 0);
2699
2700 return 0;
2701}
2702EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002703 compile_prog "" "$xen_libs $xen_stable_libs"
2704 then
2705 xen_ctrl_version=40701
2706 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002707
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002708 # Xen 4.6
2709 elif
2710 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002711#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002712#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002713#include <stdint.h>
2714#include <xen/hvm/hvm_info_table.h>
2715#if !defined(HVM_MAX_VCPUS)
2716# error HVM_MAX_VCPUS not defined
2717#endif
2718int main(void) {
2719 xc_interface *xc;
2720 xs_daemon_open();
2721 xc = xc_interface_open(0, 0, 0);
2722 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2723 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002724 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002725 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002726 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002727 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002728 return 0;
2729}
2730EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002731 compile_prog "" "$xen_libs"
2732 then
2733 xen_ctrl_version=40600
2734 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002735
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002736 # Xen 4.5
2737 elif
2738 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002739#include <xenctrl.h>
2740#include <xenstore.h>
2741#include <stdint.h>
2742#include <xen/hvm/hvm_info_table.h>
2743#if !defined(HVM_MAX_VCPUS)
2744# error HVM_MAX_VCPUS not defined
2745#endif
2746int main(void) {
2747 xc_interface *xc;
2748 xs_daemon_open();
2749 xc = xc_interface_open(0, 0, 0);
2750 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2751 xc_gnttab_open(NULL, 0);
2752 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2753 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002754 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2755 return 0;
2756}
2757EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002758 compile_prog "" "$xen_libs"
2759 then
2760 xen_ctrl_version=40500
2761 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002762
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002763 elif
2764 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002765#include <xenctrl.h>
2766#include <xenstore.h>
2767#include <stdint.h>
2768#include <xen/hvm/hvm_info_table.h>
2769#if !defined(HVM_MAX_VCPUS)
2770# error HVM_MAX_VCPUS not defined
2771#endif
2772int main(void) {
2773 xc_interface *xc;
2774 xs_daemon_open();
2775 xc = xc_interface_open(0, 0, 0);
2776 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2777 xc_gnttab_open(NULL, 0);
2778 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2779 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002780 return 0;
2781}
2782EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002783 compile_prog "" "$xen_libs"
2784 then
2785 xen_ctrl_version=40200
2786 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002787
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002788 else
2789 if test "$xen" = "yes" ; then
2790 feature_not_found "xen (unsupported version)" \
2791 "Install a supported xen (xen 4.2 or newer)"
2792 fi
2793 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002794 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002795
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002796 if test "$xen" = yes; then
2797 if test $xen_ctrl_version -ge 40701 ; then
2798 libs_softmmu="$xen_stable_libs $libs_softmmu"
2799 fi
2800 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002801 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002802 fi
aliguorie37630c2009-04-22 15:19:10 +00002803fi
2804
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002805if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002806 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002807 xen_pci_passthrough=yes
2808 else
2809 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002810 error_exit "User requested feature Xen PCI Passthrough" \
2811 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002812 fi
2813 xen_pci_passthrough=no
2814 fi
2815fi
2816
aliguorie37630c2009-04-22 15:19:10 +00002817##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002818# Windows Hypervisor Platform accelerator (WHPX) check
2819if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002820 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002821 whpx="yes"
2822 else
2823 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002824 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002825 fi
2826 whpx="no"
2827 fi
2828fi
2829
2830##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002831# Sparse probe
2832if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002833 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002834 sparse=yes
2835 else
2836 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002837 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002838 fi
2839 sparse=no
2840 fi
2841fi
2842
2843##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002844# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002845if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002846 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002847 x11_cflags=$($pkg_config --cflags x11)
2848 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002849fi
2850
2851##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002852# GTK probe
2853
2854if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002855 gtkpackage="gtk+-3.0"
2856 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002857 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002858 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002859 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2860 gtk_libs=$($pkg_config --libs $gtkpackage)
2861 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002862 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002863 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002864 gtk_cflags="$gtk_cflags $x11_cflags"
2865 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002866 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002867 gtk="yes"
2868 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002869 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002870 else
2871 gtk="no"
2872 fi
2873fi
2874
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002875
2876##########################################
2877# GNUTLS probe
2878
2879if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002880 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002881 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002882 gnutls_cflags=$($pkg_config --cflags gnutls)
2883 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002884 # Packaging for the static libraries is not always correct.
2885 # At least ubuntu 18.04 ships only shared libraries.
2886 write_c_skeleton
2887 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002888 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002889 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2890 pass="yes"
2891 fi
2892 fi
2893 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002894 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002895 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002896 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002897 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002898fi
2899
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002900
2901# If user didn't give a --disable/enable-gcrypt flag,
2902# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002903# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002904if test -z "$gcrypt"
2905then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002906 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002907 then
2908 gcrypt="no"
2909 fi
2910fi
2911
2912# If user didn't give a --disable/enable-nettle flag,
2913# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002914# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002915if test -z "$nettle"
2916then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002917 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002918 then
2919 nettle="no"
2920 fi
2921fi
2922
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002923has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002924 if ! has "libgcrypt-config"
2925 then
2926 return 1
2927 fi
2928
2929 if test -n "$cross_prefix"
2930 then
Stefan Weil89138852016-05-16 15:10:20 +02002931 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002932 if test "$host-" != $cross_prefix
2933 then
2934 return 1
2935 fi
2936 fi
2937
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002938 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2939 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2940
2941 if test $maj != 1 || test $min -lt 5
2942 then
2943 return 1
2944 fi
2945
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002946 return 0
2947}
2948
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002949
2950if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002951 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002952 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002953 nettle_cflags=$($pkg_config --cflags nettle)
2954 nettle_libs=$($pkg_config --libs nettle)
2955 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002956 # Link test to make sure the given libraries work (e.g for static).
2957 write_c_skeleton
2958 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002959 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002960 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2961 if test -z "$gcrypt"; then
2962 gcrypt="no"
2963 fi
2964 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002965 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002966 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01002967 if test "$pass" = "yes"
2968 then
2969 cat > $TMPC << EOF
2970#include <nettle/xts.h>
2971int main(void) {
2972 return 0;
2973}
2974EOF
2975 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2976 nettle_xts=yes
2977 qemu_private_xts=no
2978 fi
2979 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002980 if test "$pass" = "no" && test "$nettle" = "yes"; then
2981 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002982 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002983 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002984 fi
2985fi
2986
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002987if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002988 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002989 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002990 gcrypt_cflags=$(libgcrypt-config --cflags)
2991 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002992 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002993 # as it "spreads unnecessary dependencies" which in
2994 # turn breaks static builds...
2995 if test "$static" = "yes"
2996 then
2997 gcrypt_libs="$gcrypt_libs -lgpg-error"
2998 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002999
Richard Hendersona73e82e2019-05-09 18:24:35 -07003000 # Link test to make sure the given libraries work (e.g for static).
3001 write_c_skeleton
3002 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003003 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003004 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3005 pass="yes"
3006 fi
3007 fi
3008 if test "$pass" = "yes"; then
3009 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003010 cat > $TMPC << EOF
3011#include <gcrypt.h>
3012int main(void) {
3013 gcry_mac_hd_t handle;
3014 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3015 GCRY_MAC_FLAG_SECURE, NULL);
3016 return 0;
3017}
3018EOF
3019 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3020 gcrypt_hmac=yes
3021 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003022 cat > $TMPC << EOF
3023#include <gcrypt.h>
3024int main(void) {
3025 gcry_cipher_hd_t handle;
3026 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3027 return 0;
3028}
3029EOF
3030 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3031 gcrypt_xts=yes
3032 qemu_private_xts=no
3033 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003034 elif test "$gcrypt" = "yes"; then
3035 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003036 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003037 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003038 fi
3039fi
3040
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003041
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003042if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3043then
3044 error_exit "Only one of gcrypt & nettle can be enabled"
3045fi
3046
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003047##########################################
3048# libtasn1 - only for the TLS creds/session test suite
3049
3050tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003051tasn1_cflags=""
3052tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003053if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003054 tasn1_cflags=$($pkg_config --cflags libtasn1)
3055 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003056else
3057 tasn1=no
3058fi
3059
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003060
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003061##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003062# PAM probe
3063
3064if test "$auth_pam" != "no"; then
3065 cat > $TMPC <<EOF
3066#include <security/pam_appl.h>
3067#include <stdio.h>
3068int main(void) {
3069 const char *service_name = "qemu";
3070 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003071 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003072 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003073 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003074 return 0;
3075}
3076EOF
3077 if compile_prog "" "-lpam" ; then
3078 auth_pam=yes
3079 else
3080 if test "$auth_pam" = "yes"; then
3081 feature_not_found "PAM" "Install PAM development package"
3082 else
3083 auth_pam=no
3084 fi
3085 fi
3086fi
3087
3088##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003089# getifaddrs (for tests/test-io-channel-socket )
3090
3091have_ifaddrs_h=yes
3092if ! check_include "ifaddrs.h" ; then
3093 have_ifaddrs_h=no
3094fi
3095
3096##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003097# VTE probe
3098
3099if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003100 vteminversion="0.32.0"
3101 if $pkg_config --exists "vte-2.91"; then
3102 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003103 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003104 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003105 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003106 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003107 vte_cflags=$($pkg_config --cflags $vtepackage)
3108 vte_libs=$($pkg_config --libs $vtepackage)
3109 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003110 vte="yes"
3111 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003112 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003113 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003114 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003115 fi
3116fi
3117
3118##########################################
bellard11d9f692004-04-02 20:55:59 +00003119# SDL probe
3120
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003121# Look for sdl configuration program (pkg-config or sdl2-config). Try
3122# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003123
Peter Xuc6093a02018-04-10 13:40:34 +08003124sdl_probe ()
3125{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003126 if $pkg_config sdl2 --exists; then
3127 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003128 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003129 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003130 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003131 sdlversion=$($sdlconfig --version)
3132 else
3133 if test "$sdl" = "yes" ; then
3134 feature_not_found "sdl" "Install SDL2-devel"
3135 fi
3136 sdl=no
3137 # no need to do the rest
3138 return
3139 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003140 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003141 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3142 fi
3143
Juan Quintelaac119f92009-07-27 16:13:15 +02003144 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003145#include <SDL.h>
3146#undef main /* We don't want SDL to override our main() */
3147int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3148EOF
Stefan Weil89138852016-05-16 15:10:20 +02003149 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003150 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003151 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003152 if $pkg_config sdl2 --exists; then
3153 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003154 else
3155 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3156 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003157 else
Stefan Weil89138852016-05-16 15:10:20 +02003158 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003159 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003160 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003161 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003162
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003163 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003164 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003165 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003166 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3167 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003168 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003169 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003170 :
3171 else
3172 sdl=no
3173 fi
3174 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003175 else # sdl not found
3176 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003177 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003178 fi
3179 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003180 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003181}
3182
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003183sdl_image_probe ()
3184{
3185 if test "$sdl_image" != "no" ; then
3186 if $pkg_config SDL2_image --exists; then
3187 if test "$static" = "yes"; then
3188 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3189 else
3190 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3191 fi
3192 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3193 sdl_image=yes
3194
3195 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3196 sdl_libs="$sdl_libs $sdl_image_libs"
3197 else
3198 if test "$sdl_image" = "yes" ; then
3199 feature_not_found "sdl_image" "Install SDL Image devel"
3200 else
3201 sdl_image=no
3202 fi
3203 fi
3204 fi
3205}
3206
Peter Xuc6093a02018-04-10 13:40:34 +08003207if test "$sdl" != "no" ; then
3208 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003209fi
bellard11d9f692004-04-02 20:55:59 +00003210
aliguori5368a422009-03-03 17:37:21 +00003211if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003212 sdl_image_probe
3213else
3214 if test "$sdl_image" = "yes"; then
3215 echo "warning: SDL Image requested, but SDL is not available, disabling"
3216 fi
3217 sdl_image=no
3218fi
3219
3220if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003221 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003222#include <SDL.h>
3223#if defined(SDL_VIDEO_DRIVER_X11)
3224#include <X11/XKBlib.h>
3225#else
3226#error No x11 support
3227#endif
3228int main(void) { return 0; }
3229EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003230 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003231 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003232 sdl_cflags="$sdl_cflags $x11_cflags"
3233 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003234 fi
aliguori5368a422009-03-03 17:37:21 +00003235fi
3236
ths8f28f3f2007-01-05 21:25:54 +00003237##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003238# RDMA needs OpenFabrics libraries
3239if test "$rdma" != "no" ; then
3240 cat > $TMPC <<EOF
3241#include <rdma/rdma_cma.h>
3242int main(void) { return 0; }
3243EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003244 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003245 if compile_prog "" "$rdma_libs" ; then
3246 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003247 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003248 else
3249 if test "$rdma" = "yes" ; then
3250 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003251 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003252 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003253 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003254 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3255 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3256 fi
3257 rdma="no"
3258 fi
3259fi
3260
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003261##########################################
3262# PVRDMA detection
3263
3264cat > $TMPC <<EOF &&
3265#include <sys/mman.h>
3266
3267int
3268main(void)
3269{
3270 char buf = 0;
3271 void *addr = &buf;
3272 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3273
3274 return 0;
3275}
3276EOF
3277
3278if test "$rdma" = "yes" ; then
3279 case "$pvrdma" in
3280 "")
3281 if compile_prog "" ""; then
3282 pvrdma="yes"
3283 else
3284 pvrdma="no"
3285 fi
3286 ;;
3287 "yes")
3288 if ! compile_prog "" ""; then
3289 error_exit "PVRDMA is not supported since mremap is not implemented"
3290 fi
3291 pvrdma="yes"
3292 ;;
3293 "no")
3294 pvrdma="no"
3295 ;;
3296 esac
3297else
3298 if test "$pvrdma" = "yes" ; then
3299 error_exit "PVRDMA requires rdma suppport"
3300 fi
3301 pvrdma="no"
3302fi
ths8d5d2d42007-08-25 01:37:51 +00003303
Yuval Shaiaee108582019-08-18 16:21:06 +03003304# Let's see if enhanced reg_mr is supported
3305if test "$pvrdma" = "yes" ; then
3306
3307cat > $TMPC <<EOF &&
3308#include <infiniband/verbs.h>
3309
3310int
3311main(void)
3312{
3313 struct ibv_mr *mr;
3314 struct ibv_pd *pd = NULL;
3315 size_t length = 10;
3316 uint64_t iova = 0;
3317 int access = 0;
3318 void *addr = NULL;
3319
3320 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3321
3322 ibv_dereg_mr(mr);
3323
3324 return 0;
3325}
3326EOF
3327 if ! compile_prog "" "-libverbs"; then
3328 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3329 fi
3330fi
3331
ths8d5d2d42007-08-25 01:37:51 +00003332##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003333# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003334if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003335 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003336#include <sasl/sasl.h>
3337#include <stdio.h>
3338int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3339EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003340 # Assuming Cyrus-SASL installed in /usr prefix
3341 vnc_sasl_cflags=""
3342 vnc_sasl_libs="-lsasl2"
3343 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3344 vnc_sasl=yes
3345 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003346 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003347 else
3348 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003349 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003350 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003351 vnc_sasl=no
3352 fi
aliguori2f9606b2009-03-06 20:27:28 +00003353fi
3354
3355##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003356# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003357if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003358cat > $TMPC <<EOF
3359#include <stdio.h>
3360#include <jpeglib.h>
3361int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3362EOF
3363 vnc_jpeg_cflags=""
3364 vnc_jpeg_libs="-ljpeg"
3365 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3366 vnc_jpeg=yes
3367 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003368 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003369 else
3370 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003371 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003372 fi
3373 vnc_jpeg=no
3374 fi
3375fi
3376
3377##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003378# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003379if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003380cat > $TMPC <<EOF
3381//#include <stdio.h>
3382#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003383#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003384int main(void) {
3385 png_structp png_ptr;
3386 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003387 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003388}
3389EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003390 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003391 vnc_png_cflags=$($pkg_config libpng --cflags)
3392 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003393 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003394 vnc_png_cflags=""
3395 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003396 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003397 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3398 vnc_png=yes
3399 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003400 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003401 else
3402 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003403 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003404 fi
3405 vnc_png=no
3406 fi
3407fi
3408
3409##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003410# xkbcommon probe
3411if test "$xkbcommon" != "no" ; then
3412 if $pkg_config xkbcommon --exists; then
3413 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3414 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3415 xkbcommon=yes
3416 else
3417 if test "$xkbcommon" = "yes" ; then
3418 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3419 fi
3420 xkbcommon=no
3421 fi
3422fi
3423
aliguori76655d62009-03-06 20:27:37 +00003424
3425##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003426# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003427if test "$xfs" != "no" ; then
3428 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003429#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003430#include <xfs/xfs.h>
3431int main(void)
3432{
3433 xfsctl(NULL, 0, 0, NULL);
3434 return 0;
3435}
3436EOF
3437 if compile_prog "" "" ; then
3438 xfs="yes"
3439 else
3440 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003441 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003442 fi
3443 xfs=no
3444 fi
3445fi
3446
3447##########################################
ths8a16d272008-07-19 09:56:24 +00003448# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003449if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003450 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003451 cat > $TMPC << EOF
3452#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003453int main(void)
3454{
3455 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003456 char s[] = "";
3457 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003458 return 0;
3459}
ths8a16d272008-07-19 09:56:24 +00003460EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003461 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003462 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003463 else
3464 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003465 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003466 fi
3467 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003468 fi
ths8a16d272008-07-19 09:56:24 +00003469fi
3470
3471##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003472# netmap support probe
3473# Apart from looking for netmap headers, we make sure that the host API version
3474# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3475# a minor/major version number. Minor new features will be marked with values up
3476# to 15, and if something happens that requires a change to the backend we will
3477# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003478if test "$netmap" != "no" ; then
3479 cat > $TMPC << EOF
3480#include <inttypes.h>
3481#include <net/if.h>
3482#include <net/netmap.h>
3483#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003484#if (NETMAP_API < 11) || (NETMAP_API > 15)
3485#error
3486#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003487int main(void) { return 0; }
3488EOF
3489 if compile_prog "" "" ; then
3490 netmap=yes
3491 else
3492 if test "$netmap" = "yes" ; then
3493 feature_not_found "netmap"
3494 fi
3495 netmap=no
3496 fi
3497fi
3498
3499##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003500# libcap-ng library probe
3501if test "$cap_ng" != "no" ; then
3502 cap_libs="-lcap-ng"
3503 cat > $TMPC << EOF
3504#include <cap-ng.h>
3505int main(void)
3506{
3507 capng_capability_to_name(CAPNG_EFFECTIVE);
3508 return 0;
3509}
3510EOF
3511 if compile_prog "" "$cap_libs" ; then
3512 cap_ng=yes
3513 libs_tools="$cap_libs $libs_tools"
3514 else
3515 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003516 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003517 fi
3518 cap_ng=no
3519 fi
3520fi
3521
3522##########################################
malcc2de5c92008-06-28 19:13:06 +00003523# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003524
Stefan Weil89138852016-05-16 15:10:20 +02003525audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003526for drv in $audio_drv_list; do
3527 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003528 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003529 if $pkg_config alsa --exists; then
3530 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003531 if test "$drv" = "try-alsa"; then
3532 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3533 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003534 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003535 if test "$drv" = "try-alsa"; then
3536 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3537 else
3538 error_exit "$drv check failed" \
3539 "Make sure to have the $drv libs and headers installed."
3540 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003541 fi
malcc2de5c92008-06-28 19:13:06 +00003542 ;;
3543
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003544 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003545 if $pkg_config libpulse --exists; then
3546 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003547 if test "$drv" = "try-pa"; then
3548 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3549 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003550 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003551 if test "$drv" = "try-pa"; then
3552 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3553 else
3554 error_exit "$drv check failed" \
3555 "Make sure to have the $drv libs and headers installed."
3556 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003557 fi
malcb8e59f12008-07-02 21:03:08 +00003558 ;;
3559
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003560 sdl)
3561 if test "$sdl" = "no"; then
3562 error_exit "sdl not found or disabled, can not use sdl audio driver"
3563 fi
3564 ;;
3565
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003566 try-sdl)
3567 if test "$sdl" = "no"; then
3568 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3569 else
3570 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3571 fi
3572 ;;
3573
Juan Quintela997e6902009-08-03 14:46:29 +02003574 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003575 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003576 ;;
3577
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003578 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003579 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003580 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003581 ;;
3582
3583 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003584 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003585 ;;
3586
malce4c63a62008-07-19 16:15:16 +00003587 *)
malc1c9b2a52008-07-19 16:57:30 +00003588 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003589 error_exit "Unknown driver '$drv' selected" \
3590 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003591 }
3592 ;;
malcc2de5c92008-06-28 19:13:06 +00003593 esac
3594done
ths8f28f3f2007-01-05 21:25:54 +00003595
balrog4d3b6f62008-02-10 16:33:14 +00003596##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003597# BrlAPI probe
3598
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003599if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003600 brlapi_libs="-lbrlapi"
3601 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003602#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003603#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003604int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3605EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003606 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003607 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003608 else
3609 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003610 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003611 fi
3612 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003613 fi
3614fi
aurel322e4d9fb2008-04-08 06:01:02 +00003615
3616##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003617# iconv probe
3618if test "$iconv" != "no" ; then
3619 cat > $TMPC << EOF
3620#include <iconv.h>
3621int main(void) {
3622 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3623 return conv != (iconv_t) -1;
3624}
3625EOF
3626 iconv_prefix_list="/usr/local:/usr"
3627 iconv_lib_list=":-liconv"
3628 IFS=:
3629 for iconv_prefix in $iconv_prefix_list; do
3630 IFS=:
3631 iconv_cflags="-I$iconv_prefix/include"
3632 iconv_ldflags="-L$iconv_prefix/lib"
3633 for iconv_link in $iconv_lib_list; do
3634 unset IFS
3635 iconv_lib="$iconv_ldflags $iconv_link"
3636 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3637 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3638 iconv_found=yes
3639 break
3640 fi
3641 done
3642 if test "$iconv_found" = yes ; then
3643 break
3644 fi
3645 done
3646 if test "$iconv_found" = "yes" ; then
3647 iconv=yes
3648 else
3649 if test "$iconv" = "yes" ; then
3650 feature_not_found "iconv" "Install iconv devel"
3651 fi
3652 iconv=no
3653 fi
3654fi
3655
3656##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003657# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003658if test "$iconv" = "no" ; then
3659 # curses will need iconv
3660 curses=no
3661fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003662if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003663 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003664 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3665 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003666 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003667 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003668 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003669 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003670 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003671 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003672#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003673#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003674#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003675#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003676int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003677 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003678 wchar_t wch = L'w';
3679 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003680 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003681 addwstr(L"wide chars\n");
3682 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003683 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003684 codeset = nl_langinfo(CODESET);
3685 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003686}
balrog4d3b6f62008-02-10 16:33:14 +00003687EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003688 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003689 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003690 # Make sure we get the wide character prototypes
3691 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003692 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003693 for curses_lib in $curses_lib_list; do
3694 unset IFS
3695 if compile_prog "$curses_inc" "$curses_lib" ; then
3696 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003697 break
3698 fi
3699 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003700 if test "$curses_found" = yes ; then
3701 break
3702 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003703 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003704 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003705 if test "$curses_found" = "yes" ; then
3706 curses=yes
3707 else
3708 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003709 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003710 fi
3711 curses=no
3712 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003713fi
balrog4d3b6f62008-02-10 16:33:14 +00003714
blueswir1414f0da2008-08-15 18:20:52 +00003715##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003716# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003717if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003718 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003719 curlconfig="$pkg_config libcurl"
3720 else
3721 curlconfig=curl-config
3722 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003723 cat > $TMPC << EOF
3724#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003725int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003726EOF
Stefan Weil89138852016-05-16 15:10:20 +02003727 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3728 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003729 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003730 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003731 else
3732 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003733 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003734 fi
3735 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003736 fi
3737fi # test "$curl"
3738
3739##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003740# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003741
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003742glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003743glib_modules=gthread-2.0
3744if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003745 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003746fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003747if test "$plugins" = yes; then
3748 glib_modules="$glib_modules gmodule-2.0"
3749fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003750
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003751# This workaround is required due to a bug in pkg-config file for glib as it
3752# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3753
Eric Blakee633a5c2019-02-04 20:39:37 -06003754if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003755 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3756fi
3757
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003758for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003759 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003760 glib_cflags=$($pkg_config --cflags $i)
3761 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003762 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003763 LIBS="$glib_libs $LIBS"
3764 libs_qga="$glib_libs $libs_qga"
3765 else
3766 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3767 fi
3768done
3769
Marc-André Lureauf876b762019-02-21 12:07:00 +01003770if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3771 gio=yes
3772 gio_cflags=$($pkg_config --cflags gio-2.0)
3773 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003774 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003775 if [ ! -x "$gdbus_codegen" ]; then
3776 gdbus_codegen=
3777 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003778else
3779 gio=no
3780fi
3781
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003782if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3783 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3784 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3785fi
3786
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003787# Sanity check that the current size_t matches the
3788# size that glib thinks it should be. This catches
3789# problems on multi-arch where people try to build
3790# 32-bit QEMU while pointing at 64-bit glib headers
3791cat > $TMPC <<EOF
3792#include <glib.h>
3793#include <unistd.h>
3794
3795#define QEMU_BUILD_BUG_ON(x) \
3796 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3797
3798int main(void) {
3799 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3800 return 0;
3801}
3802EOF
3803
Stefan Weil5919e032016-04-28 23:33:41 +02003804if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003805 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3806 "You probably need to set PKG_CONFIG_LIBDIR"\
3807 "to point to the right pkg-config files for your"\
3808 "build target"
3809fi
3810
John Snowbbbf2e02015-03-25 18:57:38 -04003811# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3812cat > $TMPC << EOF
3813#include <glib.h>
3814int main(void) { return 0; }
3815EOF
3816if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3817 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3818 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3819 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3820 fi
3821fi
3822
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003823#########################################
3824# zlib check
3825
3826if test "$zlib" != "no" ; then
3827 if $pkg_config --exists zlib; then
3828 zlib_cflags=$($pkg_config --cflags zlib)
3829 zlib_libs=$($pkg_config --libs zlib)
3830 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3831 LIBS="$zlib_libs $LIBS"
3832 else
3833 cat > $TMPC << EOF
3834#include <zlib.h>
3835int main(void) { zlibVersion(); return 0; }
3836EOF
3837 if compile_prog "" "-lz" ; then
3838 LIBS="$LIBS -lz"
3839 else
3840 error_exit "zlib check failed" \
3841 "Make sure to have the zlib libs and headers installed."
3842 fi
3843 fi
3844fi
3845
Fam Zhenge26110c2014-02-10 14:48:57 +08003846##########################################
3847# SHA command probe for modules
3848if test "$modules" = yes; then
3849 shacmd_probe="sha1sum sha1 shasum"
3850 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003851 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003852 shacmd="$c"
3853 break
3854 fi
3855 done
3856 if test "$shacmd" = ""; then
3857 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3858 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003859fi
3860
3861##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003862# pixman support probe
3863
Eric Blakee633a5c2019-02-04 20:39:37 -06003864if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003865 pixman_cflags=
3866 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003867elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003868 pixman_cflags=$($pkg_config --cflags pixman-1)
3869 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003870else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003871 error_exit "pixman >= 0.21.8 not present." \
3872 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003873fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003874
3875##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003876# libmpathpersist probe
3877
3878if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003879 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003880 cat > $TMPC <<EOF
3881#include <libudev.h>
3882#include <mpath_persist.h>
3883unsigned mpath_mx_alloc_len = 1024;
3884int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003885static struct config *multipath_conf;
3886extern struct udev *udev;
3887extern struct config *get_multipath_config(void);
3888extern void put_multipath_config(struct config *conf);
3889struct udev *udev;
3890struct config *get_multipath_config(void) { return multipath_conf; }
3891void put_multipath_config(struct config *conf) { }
3892
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003893int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003894 udev = udev_new();
3895 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003896 return 0;
3897}
3898EOF
3899 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3900 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003901 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003902 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003903 # probe for the old API
3904 cat > $TMPC <<EOF
3905#include <libudev.h>
3906#include <mpath_persist.h>
3907unsigned mpath_mx_alloc_len = 1024;
3908int logsink;
3909int main(void) {
3910 struct udev *udev = udev_new();
3911 mpath_lib_init(udev);
3912 return 0;
3913}
3914EOF
3915 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3916 mpathpersist=yes
3917 mpathpersist_new_api=no
3918 else
3919 mpathpersist=no
3920 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003921 fi
3922else
3923 mpathpersist=no
3924fi
3925
3926##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003927# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003928PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003929
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003930pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003931cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003932#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003933static void *f(void *p) { return NULL; }
3934int main(void) {
3935 pthread_t thread;
3936 pthread_create(&thread, 0, f, 0);
3937 return 0;
3938}
blueswir1414f0da2008-08-15 18:20:52 +00003939EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003940if compile_prog "" "" ; then
3941 pthread=yes
3942else
3943 for pthread_lib in $PTHREADLIBS_LIST; do
3944 if compile_prog "" "$pthread_lib" ; then
3945 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003946 found=no
3947 for lib_entry in $LIBS; do
3948 if test "$lib_entry" = "$pthread_lib"; then
3949 found=yes
3950 break
3951 fi
3952 done
3953 if test "$found" = "no"; then
3954 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003955 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003956 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003957 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003958 break
3959 fi
3960 done
3961fi
blueswir1414f0da2008-08-15 18:20:52 +00003962
Eric Blakee633a5c2019-02-04 20:39:37 -06003963if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003964 error_exit "pthread check failed" \
3965 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003966fi
3967
Roman Bolshakov479a5742018-12-17 23:26:01 +03003968# check for pthread_setname_np with thread id
3969pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003970cat > $TMPC << EOF
3971#include <pthread.h>
3972
3973static void *f(void *p) { return NULL; }
3974int main(void)
3975{
3976 pthread_t thread;
3977 pthread_create(&thread, 0, f, 0);
3978 pthread_setname_np(thread, "QEMU");
3979 return 0;
3980}
3981EOF
3982if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003983 pthread_setname_np_w_tid=yes
3984fi
3985
3986# check for pthread_setname_np without thread id
3987pthread_setname_np_wo_tid=no
3988cat > $TMPC << EOF
3989#include <pthread.h>
3990
3991static void *f(void *p) { pthread_setname_np("QEMU"); }
3992int main(void)
3993{
3994 pthread_t thread;
3995 pthread_create(&thread, 0, f, 0);
3996 return 0;
3997}
3998EOF
3999if compile_prog "" "$pthread_lib" ; then
4000 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004001fi
4002
aliguoribf9298b2008-12-05 20:05:26 +00004003##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004004# rbd probe
4005if test "$rbd" != "no" ; then
4006 cat > $TMPC <<EOF
4007#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004008#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004009int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004010 rados_t cluster;
4011 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004012 return 0;
4013}
4014EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004015 rbd_libs="-lrbd -lrados"
4016 if compile_prog "" "$rbd_libs" ; then
4017 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004018 else
4019 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004020 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004021 fi
4022 rbd=no
4023 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004024fi
4025
4026##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004027# libssh probe
4028if test "$libssh" != "no" ; then
4029 if $pkg_config --exists libssh; then
4030 libssh_cflags=$($pkg_config libssh --cflags)
4031 libssh_libs=$($pkg_config libssh --libs)
4032 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004033 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004034 if test "$libssh" = "yes" ; then
4035 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004036 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004037 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004038 fi
4039fi
4040
4041##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004042# Check for libssh 0.8
4043# This is done like this instead of using the LIBSSH_VERSION_* and
4044# SSH_VERSION_* macros because some distributions in the past shipped
4045# snapshots of the future 0.8 from Git, and those snapshots did not
4046# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004047
Pino Toscanob10d49d2019-06-20 22:08:40 +02004048if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004049 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004050#include <libssh/libssh.h>
4051int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004052EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004053 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4054 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004055 fi
4056fi
4057
4058##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004059# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004060
4061if test "$linux_aio" != "no" ; then
4062 cat > $TMPC <<EOF
4063#include <libaio.h>
4064#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004065#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004066int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4067EOF
4068 if compile_prog "" "-laio" ; then
4069 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004070 else
4071 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004072 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004073 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004074 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004075 fi
4076fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004077##########################################
4078# linux-io-uring probe
4079
4080if test "$linux_io_uring" != "no" ; then
4081 if $pkg_config liburing; then
4082 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4083 linux_io_uring_libs=$($pkg_config --libs liburing)
4084 linux_io_uring=yes
4085 else
4086 if test "$linux_io_uring" = "yes" ; then
4087 feature_not_found "linux io_uring" "Install liburing devel"
4088 fi
4089 linux_io_uring=no
4090 fi
4091fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004092
4093##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004094# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004095
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004096if test "$tpm" = ""; then
4097 if test "$mingw32" = "yes"; then
4098 tpm=no
4099 else
4100 tpm=yes
4101 fi
4102elif test "$tpm" = "yes"; then
4103 if test "$mingw32" = "yes" ; then
4104 error_exit "TPM emulation only available on POSIX systems"
4105 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004106fi
4107
4108##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004109# attr probe
4110
4111if test "$attr" != "no" ; then
4112 cat > $TMPC <<EOF
4113#include <stdio.h>
4114#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004115#ifdef CONFIG_LIBATTR
4116#include <attr/xattr.h>
4117#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004118#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004119#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004120int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4121EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004122 if compile_prog "" "" ; then
4123 attr=yes
4124 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004125 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004126 attr=yes
4127 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004128 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004129 else
4130 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004131 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004132 fi
4133 attr=no
4134 fi
4135fi
4136
4137##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004138# iovec probe
4139cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004140#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004141#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004142#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004143int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004144EOF
4145iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004146if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004147 iovec=yes
4148fi
4149
aurel32f652e6a2008-12-16 10:43:48 +00004150##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004151# preadv probe
4152cat > $TMPC <<EOF
4153#include <sys/types.h>
4154#include <sys/uio.h>
4155#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004156int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004157EOF
4158preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004159if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004160 preadv=yes
4161fi
4162
4163##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004164# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004165# fdt support is mandatory for at least some target architectures,
4166# so insist on it if we're building those system emulators.
4167fdt_required=no
4168for target in $target_list; do
4169 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004170 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004171 fdt_required=yes
4172 ;;
4173 esac
4174done
4175
4176if test "$fdt_required" = "yes"; then
4177 if test "$fdt" = "no"; then
4178 error_exit "fdt disabled but some requested targets require it." \
4179 "You can turn off fdt only if you also disable all the system emulation" \
4180 "targets which need it (by specifying a cut down --target-list)."
4181 fi
4182 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004183elif test "$fdt" != "yes" ; then
4184 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004185fi
4186
Laurent Vivierd5999382019-06-21 15:05:44 +02004187# fdt is only required when building softmmu targets
4188if test -z "$fdt" -a "$softmmu" != "yes" ; then
4189 fdt="no"
4190fi
4191
Juan Quintela2df87df2009-08-12 18:29:54 +02004192if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004193 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004194 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004195 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004196 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004197#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004198#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004199int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004200EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004201 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004202 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004203 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004204 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004205 # have GIT checkout, so activate dtc submodule
4206 if test -e "${source_path}/.git" ; then
4207 git_submodules="${git_submodules} dtc"
4208 fi
4209 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004210 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004211 mkdir -p dtc
4212 if [ "$pwd_is_source_path" != "y" ] ; then
4213 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4214 symlink "$source_path/dtc/scripts" "dtc/scripts"
4215 fi
4216 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004217 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4218 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004219 elif test "$fdt" = "yes" ; then
4220 # Not a git build & no libfdt found, prompt for system install
4221 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4222 "Please install the DTC (libfdt) devel package"
4223 else
4224 # don't have and don't want
4225 fdt_libs=
4226 fdt=no
4227 fi
aurel32f652e6a2008-12-16 10:43:48 +00004228 fi
4229fi
4230
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004231libs_softmmu="$libs_softmmu $fdt_libs"
4232
Michael Walle20ff0752011-03-07 23:32:39 +01004233##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004234# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004235
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004236gbm="no"
4237if $pkg_config gbm; then
4238 gbm_cflags="$($pkg_config --cflags gbm)"
4239 gbm_libs="$($pkg_config --libs gbm)"
4240 gbm="yes"
4241fi
4242
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004243if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004244 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004245 if $pkg_config $opengl_pkgs; then
4246 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4247 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004248 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004249 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4250 gtk_gl="yes"
4251 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004252 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004253 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004254 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004255 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004256 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004257 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004258 opengl_libs=""
4259 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004260 fi
4261fi
4262
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004263if test "$opengl" = "yes"; then
4264 cat > $TMPC << EOF
4265#include <epoxy/egl.h>
4266#ifndef EGL_MESA_image_dma_buf_export
4267# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4268#endif
4269int main(void) { return 0; }
4270EOF
4271 if compile_prog "" "" ; then
4272 opengl_dmabuf=yes
4273 fi
4274fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004275
Eric Blakee633a5c2019-02-04 20:39:37 -06004276if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004277 for target in $target_list; do
4278 case $target in
4279 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4280 need_x11=yes
4281 ;;
4282 esac
4283 done
4284fi
4285
Klim Kireeved279a02018-01-12 12:01:19 +03004286##########################################
4287# libxml2 probe
4288if test "$libxml2" != "no" ; then
4289 if $pkg_config --exists libxml-2.0; then
4290 libxml2="yes"
4291 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4292 libxml2_libs=$($pkg_config --libs libxml-2.0)
4293 else
4294 if test "$libxml2" = "yes"; then
4295 feature_not_found "libxml2" "Install libxml2 devel"
4296 fi
4297 libxml2="no"
4298 fi
4299fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004300
Bharata B Raoeb100392012-09-24 14:42:45 +05304301##########################################
4302# glusterfs probe
4303if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004304 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304305 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004306 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4307 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004308 if $pkg_config --atleast-version=4 glusterfs-api; then
4309 glusterfs_xlator_opt="yes"
4310 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004311 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304312 glusterfs_discard="yes"
4313 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304314 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304315 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304316 glusterfs_zerofill="yes"
4317 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004318 cat > $TMPC << EOF
4319#include <glusterfs/api/glfs.h>
4320
4321int
4322main(void)
4323{
4324 /* new glfs_ftruncate() passes two additional args */
4325 return glfs_ftruncate(NULL, 0, NULL, NULL);
4326}
4327EOF
4328 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4329 glusterfs_ftruncate_has_stat="yes"
4330 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004331 cat > $TMPC << EOF
4332#include <glusterfs/api/glfs.h>
4333
4334/* new glfs_io_cbk() passes two additional glfs_stat structs */
4335static void
4336glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4337{}
4338
4339int
4340main(void)
4341{
4342 glfs_io_cbk iocb = &glusterfs_iocb;
4343 iocb(NULL, 0 , NULL, NULL, NULL);
4344 return 0;
4345}
4346EOF
4347 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4348 glusterfs_iocb_has_stat="yes"
4349 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304350 else
4351 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004352 feature_not_found "GlusterFS backend support" \
4353 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304354 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304355 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304356 fi
4357fi
4358
aurel3239386ac2009-04-15 19:48:17 +00004359# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004360# emulator. This is done because older glibc versions don't
4361# have syscall stubs for these implemented. In that case we
4362# don't provide them even if kernel supports them.
4363#
4364inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004365cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004366#include <sys/inotify.h>
4367
4368int
4369main(void)
4370{
4371 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004372 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004373}
4374EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004375if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004376 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004377fi
4378
Riku Voipioc05c7a72010-03-26 15:25:11 +00004379inotify1=no
4380cat > $TMPC << EOF
4381#include <sys/inotify.h>
4382
4383int
4384main(void)
4385{
4386 /* try to start inotify */
4387 return inotify_init1(0);
4388}
4389EOF
4390if compile_prog "" "" ; then
4391 inotify1=yes
4392fi
4393
Riku Voipio099d6b02009-05-05 12:10:04 +03004394# check if pipe2 is there
4395pipe2=no
4396cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004397#include <unistd.h>
4398#include <fcntl.h>
4399
4400int main(void)
4401{
4402 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004403 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004404}
4405EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004406if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004407 pipe2=yes
4408fi
4409
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004410# check if accept4 is there
4411accept4=no
4412cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004413#include <sys/socket.h>
4414#include <stddef.h>
4415
4416int main(void)
4417{
4418 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4419 return 0;
4420}
4421EOF
4422if compile_prog "" "" ; then
4423 accept4=yes
4424fi
4425
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304426# check if tee/splice is there. vmsplice was added same time.
4427splice=no
4428cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304429#include <unistd.h>
4430#include <fcntl.h>
4431#include <limits.h>
4432
4433int main(void)
4434{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004435 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304436 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4437 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4438 return 0;
4439}
4440EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004441if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304442 splice=yes
4443fi
4444
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004445##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004446# libnuma probe
4447
4448if test "$numa" != "no" ; then
4449 cat > $TMPC << EOF
4450#include <numa.h>
4451int main(void) { return numa_available(); }
4452EOF
4453
4454 if compile_prog "" "-lnuma" ; then
4455 numa=yes
4456 libs_softmmu="-lnuma $libs_softmmu"
4457 else
4458 if test "$numa" = "yes" ; then
4459 feature_not_found "numa" "install numactl devel"
4460 fi
4461 numa=no
4462 fi
4463fi
4464
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004465if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4466 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4467 exit 1
4468fi
4469
Yang Zhong5a22ab72017-12-20 21:16:46 +08004470# Even if malloc_trim() is available, these non-libc memory allocators
4471# do not support it.
4472if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4473 if test "$malloc_trim" = "yes" ; then
4474 echo "Disabling malloc_trim with non-libc memory allocator"
4475 fi
4476 malloc_trim="no"
4477fi
4478
4479#######################################
4480# malloc_trim
4481
4482if test "$malloc_trim" != "no" ; then
4483 cat > $TMPC << EOF
4484#include <malloc.h>
4485int main(void) { malloc_trim(0); return 0; }
4486EOF
4487 if compile_prog "" "" ; then
4488 malloc_trim="yes"
4489 else
4490 malloc_trim="no"
4491 fi
4492fi
4493
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004494##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004495# tcmalloc probe
4496
4497if test "$tcmalloc" = "yes" ; then
4498 cat > $TMPC << EOF
4499#include <stdlib.h>
4500int main(void) { malloc(1); return 0; }
4501EOF
4502
4503 if compile_prog "" "-ltcmalloc" ; then
4504 LIBS="-ltcmalloc $LIBS"
4505 else
4506 feature_not_found "tcmalloc" "install gperftools devel"
4507 fi
4508fi
4509
4510##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004511# jemalloc probe
4512
4513if test "$jemalloc" = "yes" ; then
4514 cat > $TMPC << EOF
4515#include <stdlib.h>
4516int main(void) { malloc(1); return 0; }
4517EOF
4518
4519 if compile_prog "" "-ljemalloc" ; then
4520 LIBS="-ljemalloc $LIBS"
4521 else
4522 feature_not_found "jemalloc" "install jemalloc devel"
4523 fi
4524fi
4525
4526##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004527# signalfd probe
4528signalfd="no"
4529cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004530#include <unistd.h>
4531#include <sys/syscall.h>
4532#include <signal.h>
4533int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4534EOF
4535
4536if compile_prog "" "" ; then
4537 signalfd=yes
4538fi
4539
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004540# check if optreset global is declared by <getopt.h>
4541optreset="no"
4542cat > $TMPC << EOF
4543#include <getopt.h>
4544int main(void) { return optreset; }
4545EOF
4546
4547if compile_prog "" "" ; then
4548 optreset=yes
4549fi
4550
Riku Voipioc2882b92009-08-12 15:08:24 +03004551# check if eventfd is supported
4552eventfd=no
4553cat > $TMPC << EOF
4554#include <sys/eventfd.h>
4555
4556int main(void)
4557{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004558 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004559}
4560EOF
4561if compile_prog "" "" ; then
4562 eventfd=yes
4563fi
4564
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004565# check if memfd is supported
4566memfd=no
4567cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004568#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004569
4570int main(void)
4571{
4572 return memfd_create("foo", MFD_ALLOW_SEALING);
4573}
4574EOF
4575if compile_prog "" "" ; then
4576 memfd=yes
4577fi
4578
Cortland Tölva955727d2018-10-08 09:35:19 -07004579# check for usbfs
4580have_usbfs=no
4581if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004582 cat > $TMPC << EOF
4583#include <linux/usbdevice_fs.h>
4584
4585#ifndef USBDEVFS_GET_CAPABILITIES
4586#error "USBDEVFS_GET_CAPABILITIES undefined"
4587#endif
4588
4589#ifndef USBDEVFS_DISCONNECT_CLAIM
4590#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4591#endif
4592
4593int main(void)
4594{
4595 return 0;
4596}
4597EOF
4598 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004599 have_usbfs=yes
4600 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004601fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004602
Ulrich Hechtd0927932009-09-17 20:22:14 +03004603# check for fallocate
4604fallocate=no
4605cat > $TMPC << EOF
4606#include <fcntl.h>
4607
4608int main(void)
4609{
4610 fallocate(0, 0, 0, 0);
4611 return 0;
4612}
4613EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004614if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004615 fallocate=yes
4616fi
4617
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004618# check for fallocate hole punching
4619fallocate_punch_hole=no
4620cat > $TMPC << EOF
4621#include <fcntl.h>
4622#include <linux/falloc.h>
4623
4624int main(void)
4625{
4626 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4627 return 0;
4628}
4629EOF
4630if compile_prog "" "" ; then
4631 fallocate_punch_hole=yes
4632fi
4633
Denis V. Lunevb953f072015-01-30 11:42:14 +03004634# check that fallocate supports range zeroing inside the file
4635fallocate_zero_range=no
4636cat > $TMPC << EOF
4637#include <fcntl.h>
4638#include <linux/falloc.h>
4639
4640int main(void)
4641{
4642 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4643 return 0;
4644}
4645EOF
4646if compile_prog "" "" ; then
4647 fallocate_zero_range=yes
4648fi
4649
Kevin Wolfed911432014-09-29 17:12:59 +02004650# check for posix_fallocate
4651posix_fallocate=no
4652cat > $TMPC << EOF
4653#include <fcntl.h>
4654
4655int main(void)
4656{
4657 posix_fallocate(0, 0, 0);
4658 return 0;
4659}
4660EOF
4661if compile_prog "" "" ; then
4662 posix_fallocate=yes
4663fi
4664
Peter Maydellc727f472011-01-06 11:05:10 +00004665# check for sync_file_range
4666sync_file_range=no
4667cat > $TMPC << EOF
4668#include <fcntl.h>
4669
4670int main(void)
4671{
4672 sync_file_range(0, 0, 0, 0);
4673 return 0;
4674}
4675EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004676if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004677 sync_file_range=yes
4678fi
4679
Peter Maydelldace20d2011-01-10 13:11:24 +00004680# check for linux/fiemap.h and FS_IOC_FIEMAP
4681fiemap=no
4682cat > $TMPC << EOF
4683#include <sys/ioctl.h>
4684#include <linux/fs.h>
4685#include <linux/fiemap.h>
4686
4687int main(void)
4688{
4689 ioctl(0, FS_IOC_FIEMAP, 0);
4690 return 0;
4691}
4692EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004693if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004694 fiemap=yes
4695fi
4696
Ulrich Hechtd0927932009-09-17 20:22:14 +03004697# check for dup3
4698dup3=no
4699cat > $TMPC << EOF
4700#include <unistd.h>
4701
4702int main(void)
4703{
4704 dup3(0, 0, 0);
4705 return 0;
4706}
4707EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004708if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004709 dup3=yes
4710fi
4711
Alex Bligh4e0c6522013-08-21 16:02:43 +01004712# check for ppoll support
4713ppoll=no
4714cat > $TMPC << EOF
4715#include <poll.h>
4716
4717int main(void)
4718{
4719 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4720 ppoll(&pfd, 1, 0, 0);
4721 return 0;
4722}
4723EOF
4724if compile_prog "" "" ; then
4725 ppoll=yes
4726fi
4727
Alex Blighcd758dd2013-08-21 16:02:44 +01004728# check for prctl(PR_SET_TIMERSLACK , ... ) support
4729prctl_pr_set_timerslack=no
4730cat > $TMPC << EOF
4731#include <sys/prctl.h>
4732
4733int main(void)
4734{
4735 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4736 return 0;
4737}
4738EOF
4739if compile_prog "" "" ; then
4740 prctl_pr_set_timerslack=yes
4741fi
4742
Peter Maydell3b6edd12011-02-15 18:35:05 +00004743# check for epoll support
4744epoll=no
4745cat > $TMPC << EOF
4746#include <sys/epoll.h>
4747
4748int main(void)
4749{
4750 epoll_create(0);
4751 return 0;
4752}
4753EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004754if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004755 epoll=yes
4756fi
4757
Peter Maydell227f0212016-06-06 19:58:11 +01004758# epoll_create1 is a later addition
4759# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004760epoll_create1=no
4761cat > $TMPC << EOF
4762#include <sys/epoll.h>
4763
4764int main(void)
4765{
Peter Maydell19e83f62011-04-26 16:56:40 +01004766 /* Note that we use epoll_create1 as a value, not as
4767 * a function being called. This is necessary so that on
4768 * old SPARC glibc versions where the function was present in
4769 * the library but not declared in the header file we will
4770 * fail the configure check. (Otherwise we will get a compiler
4771 * warning but not an error, and will proceed to fail the
4772 * qemu compile where we compile with -Werror.)
4773 */
Blue Swirlc075a722012-08-09 20:21:25 +00004774 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004775}
4776EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004777if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004778 epoll_create1=yes
4779fi
4780
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004781# check for sendfile support
4782sendfile=no
4783cat > $TMPC << EOF
4784#include <sys/sendfile.h>
4785
4786int main(void)
4787{
4788 return sendfile(0, 0, 0, 0);
4789}
4790EOF
4791if compile_prog "" "" ; then
4792 sendfile=yes
4793fi
4794
Riku Voipio51834342014-06-22 11:25:42 +01004795# check for timerfd support (glibc 2.8 and newer)
4796timerfd=no
4797cat > $TMPC << EOF
4798#include <sys/timerfd.h>
4799
4800int main(void)
4801{
4802 return(timerfd_create(CLOCK_REALTIME, 0));
4803}
4804EOF
4805if compile_prog "" "" ; then
4806 timerfd=yes
4807fi
4808
Riku Voipio9af5c902014-08-12 15:58:57 +03004809# check for setns and unshare support
4810setns=no
4811cat > $TMPC << EOF
4812#include <sched.h>
4813
4814int main(void)
4815{
4816 int ret;
4817 ret = setns(0, 0);
4818 ret = unshare(0);
4819 return ret;
4820}
4821EOF
4822if compile_prog "" "" ; then
4823 setns=yes
4824fi
4825
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004826# clock_adjtime probe
4827clock_adjtime=no
4828cat > $TMPC <<EOF
4829#include <time.h>
4830
4831int main(void)
4832{
4833 return clock_adjtime(0, 0);
4834}
4835EOF
4836clock_adjtime=no
4837if compile_prog "" "" ; then
4838 clock_adjtime=yes
4839fi
4840
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004841# syncfs probe
4842syncfs=no
4843cat > $TMPC <<EOF
4844#include <unistd.h>
4845
4846int main(void)
4847{
4848 return syncfs(0);
4849}
4850EOF
4851syncfs=no
4852if compile_prog "" "" ; then
4853 syncfs=yes
4854fi
4855
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004856# check for kcov support (kernel must be 4.4+, compiled with certain options)
4857kcov=no
4858if check_include sys/kcov.h ; then
4859 kcov=yes
4860fi
4861
Peter Maydell5f71eac2019-03-07 14:26:46 +00004862# Check we have a new enough version of sphinx-build
4863has_sphinx_build() {
4864 # This is a bit awkward but works: create a trivial document and
4865 # try to run it with our configuration file (which enforces a
4866 # version requirement). This will fail if either
4867 # sphinx-build doesn't exist at all or if it is too old.
4868 mkdir -p "$TMPDIR1/sphinx"
4869 touch "$TMPDIR1/sphinx/index.rst"
Markus Armbruster903458c2020-02-14 18:18:41 +01004870 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004871}
4872
pbrookcc8ae6d2006-04-23 17:57:59 +00004873# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004874if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004875 if has_sphinx_build; then
4876 sphinx_ok=yes
4877 else
4878 sphinx_ok=no
4879 fi
4880 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004881 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004882 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004883 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004884 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4885 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4886 fi
4887 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004888 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004889 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004890 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004891fi
4892
Stefan Weilf514f412009-10-11 12:44:07 +02004893# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004894byteswap_h=no
4895cat > $TMPC << EOF
4896#include <byteswap.h>
4897int main(void) { return bswap_32(0); }
4898EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004899if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004900 byteswap_h=yes
4901fi
4902
Stefan Weil75f13592013-01-05 12:17:38 +01004903# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004904bswap_h=no
4905cat > $TMPC << EOF
4906#include <sys/endian.h>
4907#include <sys/types.h>
4908#include <machine/bswap.h>
4909int main(void) { return bswap32(0); }
4910EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004911if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004912 bswap_h=yes
4913fi
4914
aliguorida93a1f2008-12-12 20:02:52 +00004915##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004916# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004917if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004918 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004919 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004920 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4921 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004922 else
4923 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004924 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004925 fi
4926 libiscsi="no"
4927 fi
4928fi
4929
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004930##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004931# Do we need libm
4932cat > $TMPC << EOF
4933#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004934int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004935EOF
4936if compile_prog "" "" ; then
4937 :
4938elif compile_prog "" "-lm" ; then
4939 LIBS="-lm $LIBS"
4940 libs_qga="-lm $libs_qga"
4941else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004942 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004943fi
4944
4945##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004946# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004947# uClibc provides 2 versions of clock_gettime(), one with realtime
4948# support and one without. This means that the clock_gettime() don't
4949# need -lrt. We still need it for timer_create() so we check for this
4950# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004951cat > $TMPC <<EOF
4952#include <signal.h>
4953#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004954int main(void) {
4955 timer_create(CLOCK_REALTIME, NULL, NULL);
4956 return clock_gettime(CLOCK_REALTIME, NULL);
4957}
aliguorida93a1f2008-12-12 20:02:52 +00004958EOF
4959
Juan Quintela52166aa2009-08-03 14:46:03 +02004960if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004961 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004962# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004963elif compile_prog "" "$pthread_lib -lrt" ; then
4964 LIBS="$LIBS -lrt"
4965 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004966fi
4967
Thomas Huthd99e97e2019-01-17 18:14:08 +01004968# Check whether we need to link libutil for openpty()
4969cat > $TMPC << EOF
4970extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4971int main(void) { return openpty(0, 0, 0, 0, 0); }
4972EOF
4973
4974if ! compile_prog "" "" ; then
4975 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004976 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004977 libs_tools="-lutil $libs_tools"
4978 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004979fi
4980
Blue Swirlde5071c2009-09-12 09:58:46 +00004981##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004982# spice probe
4983if test "$spice" != "no" ; then
4984 cat > $TMPC << EOF
4985#include <spice.h>
4986int main(void) { spice_server_new(); return 0; }
4987EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004988 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4989 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004990 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004991 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004992 compile_prog "$spice_cflags" "$spice_libs" ; then
4993 spice="yes"
4994 libs_softmmu="$libs_softmmu $spice_libs"
4995 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004996 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4997 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004998 else
4999 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005000 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005001 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005002 fi
5003 spice="no"
5004 fi
5005fi
5006
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005007# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005008if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005009 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005010 libcacard_cflags=$($pkg_config --cflags libcacard)
5011 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005012 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005013 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005014 if test "$smartcard" = "yes"; then
5015 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005016 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005017 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005018 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005019fi
5020
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005021# check for libusb
5022if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005023 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005024 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005025 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5026 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005027 else
5028 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005029 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005030 fi
5031 libusb="no"
5032 fi
5033fi
5034
Hans de Goede69354a82011-07-19 11:04:10 +02005035# check for usbredirparser for usb network redirection support
5036if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005037 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005038 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005039 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5040 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005041 else
5042 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005043 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005044 fi
5045 usb_redir="no"
5046 fi
5047fi
5048
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005049##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005050# check if we have VSS SDK headers for win
5051
Eric Blakee633a5c2019-02-04 20:39:37 -06005052if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5053 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005054 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005055 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005056 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5057 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005058 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005059 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5060 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005061 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005062 esac
5063 cat > $TMPC << EOF
5064#define __MIDL_user_allocate_free_DEFINED__
5065#include <inc/win2003/vss.h>
5066int main(void) { return VSS_CTX_BACKUP; }
5067EOF
5068 if compile_prog "$vss_win32_include" "" ; then
5069 guest_agent_with_vss="yes"
5070 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005071 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005072 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005073 else
5074 if test "$vss_win32_sdk" != "" ; then
5075 echo "ERROR: Please download and install Microsoft VSS SDK:"
5076 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5077 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5078 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5079 echo "ERROR: The headers are extracted in the directory \`inc'."
5080 feature_not_found "VSS support"
5081 fi
5082 guest_agent_with_vss="no"
5083 fi
5084fi
5085
5086##########################################
5087# lookup Windows platform SDK (if not specified)
5088# The SDK is needed only to build .tlb (type library) file of guest agent
5089# VSS provider from the source. It is usually unnecessary because the
5090# pre-compiled .tlb file is included.
5091
Eric Blakee633a5c2019-02-04 20:39:37 -06005092if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5093 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005094 if test -z "$win_sdk"; then
5095 programfiles="$PROGRAMFILES"
5096 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5097 if test -n "$programfiles"; then
5098 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5099 else
5100 feature_not_found "Windows SDK"
5101 fi
5102 elif test "$win_sdk" = "no"; then
5103 win_sdk=""
5104 fi
5105fi
5106
5107##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005108# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005109if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005110 cat > $TMPC << EOF
5111#include <windows.h>
5112#include <ntddscsi.h>
5113int main(void) {
5114#if !defined(IOCTL_SCSI_GET_ADDRESS)
5115#error Missing required ioctl definitions
5116#endif
5117 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5118 return addr.Lun;
5119}
5120EOF
5121 if compile_prog "" "" ; then
5122 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005123 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005124 fi
5125fi
5126
5127##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005128# virgl renderer probe
5129
5130if test "$virglrenderer" != "no" ; then
5131 cat > $TMPC << EOF
5132#include <virglrenderer.h>
5133int main(void) { virgl_renderer_poll(); return 0; }
5134EOF
5135 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5136 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005137 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005138 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5139 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5140 virglrenderer="yes"
5141 else
5142 if test "$virglrenderer" = "yes" ; then
5143 feature_not_found "virglrenderer"
5144 fi
5145 virglrenderer="no"
5146 fi
5147fi
5148
5149##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005150# capstone
5151
Richard Hendersone219c492017-09-28 09:01:23 -07005152case "$capstone" in
5153 "" | yes)
5154 if $pkg_config capstone; then
5155 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005156 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005157 capstone=git
5158 elif test -e "${source_path}/capstone/Makefile" ; then
5159 capstone=internal
5160 elif test -z "$capstone" ; then
5161 capstone=no
5162 else
5163 feature_not_found "capstone" "Install capstone devel or git submodule"
5164 fi
5165 ;;
5166
5167 system)
5168 if ! $pkg_config capstone; then
5169 feature_not_found "capstone" "Install capstone devel"
5170 fi
5171 ;;
5172esac
5173
5174case "$capstone" in
5175 git | internal)
5176 if test "$capstone" = git; then
5177 git_submodules="${git_submodules} capstone"
5178 fi
5179 mkdir -p capstone
5180 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5181 if test "$mingw32" = "yes"; then
5182 LIBCAPSTONE=capstone.lib
5183 else
5184 LIBCAPSTONE=libcapstone.a
5185 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005186 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005187 ;;
5188
5189 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005190 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005191 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005192 ;;
5193
5194 no)
5195 ;;
5196 *)
5197 error_exit "Unknown state for capstone: $capstone"
5198 ;;
5199esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005200
5201##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005202# check if we have fdatasync
5203
5204fdatasync=no
5205cat > $TMPC << EOF
5206#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005207int main(void) {
5208#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5209return fdatasync(0);
5210#else
Stefan Weile172fe12012-04-06 21:33:20 +02005211#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005212#endif
5213}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005214EOF
5215if compile_prog "" "" ; then
5216 fdatasync=yes
5217fi
5218
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005219##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005220# check if we have madvise
5221
5222madvise=no
5223cat > $TMPC << EOF
5224#include <sys/types.h>
5225#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005226#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005227int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5228EOF
5229if compile_prog "" "" ; then
5230 madvise=yes
5231fi
5232
5233##########################################
5234# check if we have posix_madvise
5235
5236posix_madvise=no
5237cat > $TMPC << EOF
5238#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005239#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005240int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5241EOF
5242if compile_prog "" "" ; then
5243 posix_madvise=yes
5244fi
5245
5246##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005247# check if we have posix_memalign()
5248
5249posix_memalign=no
5250cat > $TMPC << EOF
5251#include <stdlib.h>
5252int main(void) {
5253 void *p;
5254 return posix_memalign(&p, 8, 8);
5255}
5256EOF
5257if compile_prog "" "" ; then
5258 posix_memalign=yes
5259fi
5260
5261##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005262# check if we have posix_syslog
5263
5264posix_syslog=no
5265cat > $TMPC << EOF
5266#include <syslog.h>
5267int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5268EOF
5269if compile_prog "" "" ; then
5270 posix_syslog=yes
5271fi
5272
5273##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005274# check if we have sem_timedwait
5275
5276sem_timedwait=no
5277cat > $TMPC << EOF
5278#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005279int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005280EOF
5281if compile_prog "" "" ; then
5282 sem_timedwait=yes
5283fi
5284
5285##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005286# check if we have strchrnul
5287
5288strchrnul=no
5289cat > $TMPC << EOF
5290#include <string.h>
5291int main(void);
5292// Use a haystack that the compiler shouldn't be able to constant fold
5293char *haystack = (char*)&main;
5294int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5295EOF
5296if compile_prog "" "" ; then
5297 strchrnul=yes
5298fi
5299
Jiufei Xue8a792b02019-04-17 03:08:56 +08005300#########################################
5301# check if we have st_atim
5302
5303st_atim=no
5304cat > $TMPC << EOF
5305#include <sys/stat.h>
5306#include <stddef.h>
5307int main(void) { return offsetof(struct stat, st_atim); }
5308EOF
5309if compile_prog "" "" ; then
5310 st_atim=yes
5311fi
5312
Keno Fischer5c99fa32018-06-29 12:32:10 +02005313##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005314# check if trace backend exists
5315
Lluís Vilanova5b808272014-05-27 15:02:14 +02005316$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005317if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005318 error_exit "invalid trace backends" \
5319 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005320fi
5321
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005322##########################################
5323# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005324if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005325 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005326#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005327int main(void) { return 0; }
5328EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005329 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005330 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005331 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005332 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005333 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005334 fi
5335 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005336 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005337 else
5338 urcu_bp_libs="-lurcu-bp"
5339 fi
5340
5341 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5342 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005343 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005344 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005345 fi
5346fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005347
5348##########################################
5349# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005350if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005351 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005352 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005353 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005354 trace_backend_stap="no"
5355 if has 'stap' ; then
5356 trace_backend_stap="yes"
5357 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005358fi
5359
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005360##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005361# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305362
Peter Maydell7c2acc72013-04-08 12:11:27 +01005363# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005364# is sigcontext. On Windows the only valid backend is the Windows
5365# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005366
5367ucontext_works=no
5368if test "$darwin" != "yes"; then
5369 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305370#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005371#ifdef __stub_makecontext
5372#error Ignoring glibc stub makecontext which will always fail
5373#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005374int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305375EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005376 if compile_prog "" "" ; then
5377 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305378 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005379fi
5380
5381if test "$coroutine" = ""; then
5382 if test "$mingw32" = "yes"; then
5383 coroutine=win32
5384 elif test "$ucontext_works" = "yes"; then
5385 coroutine=ucontext
5386 else
5387 coroutine=sigaltstack
5388 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005389else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005390 case $coroutine in
5391 windows)
5392 if test "$mingw32" != "yes"; then
5393 error_exit "'windows' coroutine backend only valid for Windows"
5394 fi
5395 # Unfortunately the user visible backend name doesn't match the
5396 # coroutine-*.c filename for this case, so we have to adjust it here.
5397 coroutine=win32
5398 ;;
5399 ucontext)
5400 if test "$ucontext_works" != "yes"; then
5401 feature_not_found "ucontext"
5402 fi
5403 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005404 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005405 if test "$mingw32" = "yes"; then
5406 error_exit "only the 'windows' coroutine backend is valid for Windows"
5407 fi
5408 ;;
5409 *)
5410 error_exit "unknown coroutine backend $coroutine"
5411 ;;
5412 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305413fi
5414
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005415if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005416 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005417fi
5418
Peter Lieven7d992e42016-09-27 11:58:45 +02005419if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005420 if test "$coroutine_pool" = "yes"; then
5421 echo "WARN: disabling coroutine pool for stack usage debugging"
5422 coroutine_pool=no
5423 fi
5424fi
5425
5426
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305427##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305428# check if we have open_by_handle_at
5429
Stefan Weil4e1797f2012-06-18 22:11:06 +02005430open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305431cat > $TMPC << EOF
5432#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005433#if !defined(AT_EMPTY_PATH)
5434# error missing definition
5435#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005436int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005437#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305438EOF
5439if compile_prog "" "" ; then
5440 open_by_handle_at=yes
5441fi
5442
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305443########################################
5444# check if we have linux/magic.h
5445
5446linux_magic_h=no
5447cat > $TMPC << EOF
5448#include <linux/magic.h>
5449int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005450 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305451}
5452EOF
5453if compile_prog "" "" ; then
5454 linux_magic_h=yes
5455fi
5456
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005457########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005458# check whether we can disable warning option with a pragma (this is needed
5459# to silence warnings in the headers of some versions of external libraries).
5460# This test has to be compiled with -Werror as otherwise an unknown pragma is
5461# only a warning.
5462#
5463# If we can't selectively disable warning in the code, disable -Werror so that
5464# the build doesn't fail anyway.
5465
Peter Maydell06d71fa2012-07-30 16:13:07 +01005466pragma_disable_unused_but_set=no
5467cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005468#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005469#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005470#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005471
Peter Maydell06d71fa2012-07-30 16:13:07 +01005472int main(void) {
5473 return 0;
5474}
5475EOF
5476if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005477 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005478else
5479 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005480fi
5481
5482########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005483# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005484
5485valgrind_h=no
5486cat > $TMPC << EOF
5487#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005488int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005489 return 0;
5490}
5491EOF
5492if compile_prog "" "" ; then
5493 valgrind_h=yes
5494fi
5495
5496########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005497# check if environ is declared
5498
5499has_environ=no
5500cat > $TMPC << EOF
5501#include <unistd.h>
5502int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005503 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005504 return 0;
5505}
5506EOF
5507if compile_prog "" "" ; then
5508 has_environ=yes
5509fi
5510
Richard Henderson76a347e2012-12-28 14:17:02 -08005511########################################
5512# check if cpuid.h is usable.
5513
Richard Henderson76a347e2012-12-28 14:17:02 -08005514cat > $TMPC << EOF
5515#include <cpuid.h>
5516int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005517 unsigned a, b, c, d;
5518 int max = __get_cpuid_max(0, 0);
5519
5520 if (max >= 1) {
5521 __cpuid(1, a, b, c, d);
5522 }
5523
5524 if (max >= 7) {
5525 __cpuid_count(7, 0, a, b, c, d);
5526 }
5527
5528 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005529}
5530EOF
5531if compile_prog "" "" ; then
5532 cpuid_h=yes
5533fi
5534
Richard Henderson5dd89902017-07-18 18:40:18 -10005535##########################################
5536# avx2 optimization requirement check
5537#
5538# There is no point enabling this if cpuid.h is not usable,
5539# since we won't be able to select the new routines.
5540
Eric Blakee633a5c2019-02-04 20:39:37 -06005541if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005542 cat > $TMPC << EOF
5543#pragma GCC push_options
5544#pragma GCC target("avx2")
5545#include <cpuid.h>
5546#include <immintrin.h>
5547static int bar(void *a) {
5548 __m256i x = *(__m256i *)a;
5549 return _mm256_testz_si256(x, x);
5550}
5551int main(int argc, char *argv[]) { return bar(argv[0]); }
5552EOF
5553 if compile_object "" ; then
5554 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005555 else
5556 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005557 fi
5558fi
5559
Richard Hendersonf5401662013-02-16 12:46:59 -08005560########################################
5561# check if __[u]int128_t is usable.
5562
5563int128=no
5564cat > $TMPC << EOF
5565__int128_t a;
5566__uint128_t b;
5567int main (void) {
5568 a = a + b;
5569 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005570 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005571 return 0;
5572}
5573EOF
5574if compile_prog "" "" ; then
5575 int128=yes
5576fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005577
Richard Henderson7ebee432016-06-29 21:10:59 -07005578#########################################
5579# See if 128-bit atomic operations are supported.
5580
5581atomic128=no
5582if test "$int128" = "yes"; then
5583 cat > $TMPC << EOF
5584int main(void)
5585{
5586 unsigned __int128 x = 0, y = 0;
5587 y = __atomic_load_16(&x, 0);
5588 __atomic_store_16(&x, y, 0);
5589 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5590 return 0;
5591}
5592EOF
5593 if compile_prog "" "" ; then
5594 atomic128=yes
5595 fi
5596fi
5597
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005598cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005599if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005600 cat > $TMPC << EOF
5601int main(void)
5602{
5603 unsigned __int128 x = 0, y = 0;
5604 __sync_val_compare_and_swap_16(&x, y, x);
5605 return 0;
5606}
5607EOF
5608 if compile_prog "" "" ; then
5609 cmpxchg128=yes
5610 fi
5611fi
5612
Richard Hendersondf79b992016-09-02 12:23:57 -07005613#########################################
5614# See if 64-bit atomic operations are supported.
5615# Note that without __atomic builtins, we can only
5616# assume atomic loads/stores max at pointer size.
5617
5618cat > $TMPC << EOF
5619#include <stdint.h>
5620int main(void)
5621{
5622 uint64_t x = 0, y = 0;
5623#ifdef __ATOMIC_RELAXED
5624 y = __atomic_load_8(&x, 0);
5625 __atomic_store_8(&x, y, 0);
5626 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5627 __atomic_exchange_8(&x, y, 0);
5628 __atomic_fetch_add_8(&x, y, 0);
5629#else
5630 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5631 __sync_lock_test_and_set(&x, y);
5632 __sync_val_compare_and_swap(&x, y, 0);
5633 __sync_fetch_and_add(&x, y);
5634#endif
5635 return 0;
5636}
5637EOF
5638if compile_prog "" "" ; then
5639 atomic64=yes
5640fi
5641
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005642#########################################
5643# See if --dynamic-list is supported by the linker
5644ld_dynamic_list="no"
5645if test "$static" = "no" ; then
5646 cat > $TMPTXT <<EOF
5647{
5648 foo;
5649};
5650EOF
5651
5652 cat > $TMPC <<EOF
5653#include <stdio.h>
5654void foo(void);
5655
5656void foo(void)
5657{
5658 printf("foo\n");
5659}
5660
5661int main(void)
5662{
5663 foo();
5664 return 0;
5665}
5666EOF
5667
5668 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5669 ld_dynamic_list="yes"
5670 fi
5671fi
5672
5673#########################################
5674# See if -exported_symbols_list is supported by the linker
5675
5676ld_exported_symbols_list="no"
5677if test "$static" = "no" ; then
5678 cat > $TMPTXT <<EOF
5679 _foo
5680EOF
5681
5682 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5683 ld_exported_symbols_list="yes"
5684 fi
5685fi
5686
5687if test "$plugins" = "yes" &&
5688 test "$ld_dynamic_list" = "no" &&
5689 test "$ld_exported_symbols_list" = "no" ; then
5690 error_exit \
5691 "Plugin support requires dynamic linking and specifying a set of symbols " \
5692 "that are exported to plugins. Unfortunately your linker doesn't " \
5693 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5694 "for this purpose. You can't build with --static."
5695fi
5696
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005697########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005698# See if 16-byte vector operations are supported.
5699# Even without a vector unit the compiler may expand these.
5700# There is a bug in old GCC for PPC that crashes here.
5701# Unfortunately it's the system compiler for Centos 7.
5702
5703cat > $TMPC << EOF
5704typedef unsigned char U1 __attribute__((vector_size(16)));
5705typedef unsigned short U2 __attribute__((vector_size(16)));
5706typedef unsigned int U4 __attribute__((vector_size(16)));
5707typedef unsigned long long U8 __attribute__((vector_size(16)));
5708typedef signed char S1 __attribute__((vector_size(16)));
5709typedef signed short S2 __attribute__((vector_size(16)));
5710typedef signed int S4 __attribute__((vector_size(16)));
5711typedef signed long long S8 __attribute__((vector_size(16)));
5712static U1 a1, b1;
5713static U2 a2, b2;
5714static U4 a4, b4;
5715static U8 a8, b8;
5716static S1 c1;
5717static S2 c2;
5718static S4 c4;
5719static S8 c8;
5720static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005721void helper(void *d, void *a, int shift, int i);
5722void helper(void *d, void *a, int shift, int i)
5723{
5724 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5725 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5726 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5727 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5728}
Richard Hendersondb432672017-09-15 14:11:45 -07005729int main(void)
5730{
5731 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5732 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5733 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5734 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5735 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5736 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5737 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5738 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5739 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5740 return 0;
5741}
5742EOF
5743
5744vector16=no
5745if compile_prog "" "" ; then
5746 vector16=yes
5747fi
5748
5749########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005750# See if __attribute__((alias)) is supported.
5751# This false for Xcode 9, but has been remedied for Xcode 10.
5752# Unfortunately, travis uses Xcode 9 by default.
5753
5754attralias=no
5755cat > $TMPC << EOF
5756int x = 1;
5757extern const int y __attribute__((alias("x")));
5758int main(void) { return 0; }
5759EOF
5760if compile_prog "" "" ; then
5761 attralias=yes
5762fi
5763
5764########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005765# check if getauxval is available.
5766
5767getauxval=no
5768cat > $TMPC << EOF
5769#include <sys/auxv.h>
5770int main(void) {
5771 return getauxval(AT_HWCAP) == 0;
5772}
5773EOF
5774if compile_prog "" "" ; then
5775 getauxval=yes
5776fi
5777
John Snowfd0e6052015-03-25 18:57:39 -04005778########################################
5779# check if ccache is interfering with
5780# semantic analysis of macros
5781
John Snow5e4dfd32015-10-28 13:56:40 -04005782unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005783ccache_cpp2=no
5784cat > $TMPC << EOF
5785static const int Z = 1;
5786#define fn() ({ Z; })
5787#define TAUT(X) ((X) == Z)
5788#define PAREN(X, Y) (X == Y)
5789#define ID(X) (X)
5790int main(int argc, char *argv[])
5791{
5792 int x = 0, y = 0;
5793 x = ID(x);
5794 x = fn();
5795 fn();
5796 if (PAREN(x, y)) return 0;
5797 if (TAUT(Z)) return 0;
5798 return 0;
5799}
5800EOF
5801
5802if ! compile_object "-Werror"; then
5803 ccache_cpp2=yes
5804fi
5805
John Snowb553a042015-11-03 15:43:42 -05005806#################################################
5807# clang does not support glibc + FORTIFY_SOURCE.
5808
5809if test "$fortify_source" != "no"; then
5810 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5811 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005812 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005813 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005814 fortify_source="no";
5815 else
5816 fortify_source="yes"
5817 fi
5818fi
5819
Fam Zheng1efad062018-06-01 17:26:43 +08005820###############################################
5821# Check if copy_file_range is provided by glibc
5822have_copy_file_range=no
5823cat > $TMPC << EOF
5824#include <unistd.h>
5825int main(void) {
5826 copy_file_range(0, NULL, 0, NULL, 0, 0);
5827 return 0;
5828}
5829EOF
5830if compile_prog "" "" ; then
5831 have_copy_file_range=yes
5832fi
5833
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305834##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005835# check if struct fsxattr is available via linux/fs.h
5836
5837have_fsxattr=no
5838cat > $TMPC << EOF
5839#include <linux/fs.h>
5840struct fsxattr foo;
5841int main(void) {
5842 return 0;
5843}
5844EOF
5845if compile_prog "" "" ; then
5846 have_fsxattr=yes
5847fi
5848
Peter Maydellb66e10e2016-06-08 18:34:32 +01005849##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005850# check for usable membarrier system call
5851if test "$membarrier" = "yes"; then
5852 have_membarrier=no
5853 if test "$mingw32" = "yes" ; then
5854 have_membarrier=yes
5855 elif test "$linux" = "yes" ; then
5856 cat > $TMPC << EOF
5857 #include <linux/membarrier.h>
5858 #include <sys/syscall.h>
5859 #include <unistd.h>
5860 #include <stdlib.h>
5861 int main(void) {
5862 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5863 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5864 exit(0);
5865 }
5866EOF
5867 if compile_prog "" "" ; then
5868 have_membarrier=yes
5869 fi
5870 fi
5871 if test "$have_membarrier" = "no"; then
5872 feature_not_found "membarrier" "membarrier system call not available"
5873 fi
5874else
5875 # Do not enable it by default even for Mingw32, because it doesn't
5876 # work on Wine.
5877 membarrier=no
5878fi
5879
5880##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005881# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005882have_rtnetlink=no
5883cat > $TMPC << EOF
5884#include <linux/rtnetlink.h>
5885int main(void) {
5886 return IFLA_PROTO_DOWN;
5887}
5888EOF
5889if compile_prog "" "" ; then
5890 have_rtnetlink=yes
5891fi
5892
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005893##########################################
5894# check for usable AF_VSOCK environment
5895have_af_vsock=no
5896cat > $TMPC << EOF
5897#include <errno.h>
5898#include <sys/types.h>
5899#include <sys/socket.h>
5900#if !defined(AF_VSOCK)
5901# error missing AF_VSOCK flag
5902#endif
5903#include <linux/vm_sockets.h>
5904int main(void) {
5905 int sock, ret;
5906 struct sockaddr_vm svm;
5907 socklen_t len = sizeof(svm);
5908 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5909 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5910 if ((ret == -1) && (errno == ENOTCONN)) {
5911 return 0;
5912 }
5913 return -1;
5914}
5915EOF
5916if compile_prog "" "" ; then
5917 have_af_vsock=yes
5918fi
5919
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005920##########################################
5921# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005922have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005923cat > $TMPC << EOF
5924#include <errno.h>
5925#include <sys/types.h>
5926#include <sys/socket.h>
5927#include <linux/if_alg.h>
5928int main(void) {
5929 int sock;
5930 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5931 return sock;
5932}
5933EOF
5934if compile_prog "" "" ; then
5935 have_afalg=yes
5936fi
5937if test "$crypto_afalg" = "yes"
5938then
5939 if test "$have_afalg" != "yes"
5940 then
5941 error_exit "AF_ALG requested but could not be detected"
5942 fi
5943fi
5944
5945
James Clarke6969ec62016-06-06 12:02:50 +01005946#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005947# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005948if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005949 cat > $TMPC << EOF
5950#include <Hypervisor/hv.h>
5951int main() { return 0;}
5952EOF
5953 if ! compile_object ""; then
5954 hvf='no'
5955 else
5956 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01005957 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005958 fi
5959fi
5960
5961#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005962# Sparc implicitly links with --relax, which is
5963# incompatible with -r, so --no-relax should be
5964# given. It does no harm to give it on other
5965# platforms too.
5966
5967# Note: the prototype is needed since QEMU_CFLAGS
5968# contains -Wmissing-prototypes
5969cat > $TMPC << EOF
5970extern int foo(void);
5971int foo(void) { return 0; }
5972EOF
5973if ! compile_object ""; then
5974 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5975fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005976for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5977 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5978 LD_REL_FLAGS=$i
5979 break
5980 fi
5981done
5982if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5983 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005984fi
5985
Jan Vesely277abf12016-04-29 13:15:23 -04005986##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005987# check for sysmacros.h
5988
5989have_sysmacros=no
5990cat > $TMPC << EOF
5991#include <sys/sysmacros.h>
5992int main(void) {
5993 return makedev(0, 0);
5994}
5995EOF
5996if compile_prog "" "" ; then
5997 have_sysmacros=yes
5998fi
5999
6000##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006001# Veritas HyperScale block driver VxHS
6002# Check if libvxhs is installed
6003
6004if test "$vxhs" != "no" ; then
6005 cat > $TMPC <<EOF
6006#include <stdint.h>
6007#include <qnio/qnio_api.h>
6008
6009void *vxhs_callback;
6010
6011int main(void) {
6012 iio_init(QNIO_VERSION, vxhs_callback);
6013 return 0;
6014}
6015EOF
6016 vxhs_libs="-lvxhs -lssl"
6017 if compile_prog "" "$vxhs_libs" ; then
6018 vxhs=yes
6019 else
6020 if test "$vxhs" = "yes" ; then
6021 feature_not_found "vxhs block device" "Install libvxhs See github"
6022 fi
6023 vxhs=no
6024 fi
6025fi
6026
6027##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006028# check for _Static_assert()
6029
6030have_static_assert=no
6031cat > $TMPC << EOF
6032_Static_assert(1, "success");
6033int main(void) {
6034 return 0;
6035}
6036EOF
6037if compile_prog "" "" ; then
6038 have_static_assert=yes
6039fi
6040
6041##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006042# check for utmpx.h, it is missing e.g. on OpenBSD
6043
6044have_utmpx=no
6045cat > $TMPC << EOF
6046#include <utmpx.h>
6047struct utmpx user_info;
6048int main(void) {
6049 return 0;
6050}
6051EOF
6052if compile_prog "" "" ; then
6053 have_utmpx=yes
6054fi
6055
6056##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006057# check for getrandom()
6058
6059have_getrandom=no
6060cat > $TMPC << EOF
6061#include <sys/random.h>
6062int main(void) {
6063 return getrandom(0, 0, GRND_NONBLOCK);
6064}
6065EOF
6066if compile_prog "" "" ; then
6067 have_getrandom=yes
6068fi
6069
6070##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006071# checks for sanitizers
6072
Marc-André Lureau247724c2018-01-16 16:11:51 +01006073have_asan=no
6074have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006075have_asan_iface_h=no
6076have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006077
6078if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006079 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006080 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6081 have_asan=yes
6082 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006083
6084 # we could use a simple skeleton for flags checks, but this also
6085 # detect the static linking issue of ubsan, see also:
6086 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6087 cat > $TMPC << EOF
6088#include <stdlib.h>
6089int main(void) {
6090 void *tmp = malloc(10);
6091 return *(int *)(tmp + 2);
6092}
6093EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006094 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6095 have_ubsan=yes
6096 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006097
6098 if check_include "sanitizer/asan_interface.h" ; then
6099 have_asan_iface_h=yes
6100 fi
6101
6102 cat > $TMPC << EOF
6103#include <sanitizer/asan_interface.h>
6104int main(void) {
6105 __sanitizer_start_switch_fiber(0, 0, 0);
6106 return 0;
6107}
6108EOF
6109 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6110 have_asan_iface_fiber=yes
6111 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006112fi
6113
6114##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006115# checks for fuzzer
6116if test "$fuzzing" = "yes" ; then
6117 write_c_fuzzer_skeleton
6118 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6119 have_fuzzer=yes
6120 fi
6121fi
6122
6123##########################################
Junyan He17824402018-07-18 15:47:59 +08006124# check for libpmem
6125
6126if test "$libpmem" != "no"; then
6127 if $pkg_config --exists "libpmem"; then
6128 libpmem="yes"
6129 libpmem_libs=$($pkg_config --libs libpmem)
6130 libpmem_cflags=$($pkg_config --cflags libpmem)
6131 libs_softmmu="$libs_softmmu $libpmem_libs"
6132 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6133 else
6134 if test "$libpmem" = "yes" ; then
6135 feature_not_found "libpmem" "Install nvml or pmdk"
6136 fi
6137 libpmem="no"
6138 fi
6139fi
6140
6141##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006142# check for slirp
6143
Laurent Vivierd5999382019-06-21 15:05:44 +02006144# slirp is only required when building softmmu targets
6145if test -z "$slirp" -a "$softmmu" != "yes" ; then
6146 slirp="no"
6147fi
6148
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006149case "$slirp" in
6150 "" | yes)
6151 if $pkg_config slirp; then
6152 slirp=system
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02006153 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6154 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006155 elif test -e "${source_path}/slirp/Makefile" ; then
6156 slirp=internal
6157 elif test -z "$slirp" ; then
6158 slirp=no
6159 else
6160 feature_not_found "slirp" "Install slirp devel or git submodule"
6161 fi
6162 ;;
6163
6164 system)
6165 if ! $pkg_config slirp; then
6166 feature_not_found "slirp" "Install slirp devel"
6167 fi
6168 ;;
6169esac
6170
6171case "$slirp" in
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02006172 git | internal)
6173 if test "$slirp" = git; then
6174 git_submodules="${git_submodules} slirp"
6175 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006176 mkdir -p slirp
6177 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6178 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006179 if test "$mingw32" = "yes" ; then
6180 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6181 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006182 ;;
6183
6184 system)
6185 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6186 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6187 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6188 ;;
6189
6190 no)
6191 ;;
6192 *)
6193 error_exit "Unknown state for slirp: $slirp"
6194 ;;
6195esac
6196
6197
6198##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006199# End of CC checks
6200# After here, no more $cc or $ld runs
6201
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006202write_c_skeleton
6203
Blue Swirl1d728c32012-05-01 18:45:39 +00006204if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006205 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6206 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006207elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006208 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006209elif test "$debug" = "no"; then
6210 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006211fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006212
Marc-André Lureau247724c2018-01-16 16:11:51 +01006213if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006214 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6215 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006216 if test "$have_asan_iface_h" = "no" ; then
6217 echo "ASAN build enabled, but ASAN header missing." \
6218 "Without code annotation, the report may be inferior."
6219 elif test "$have_asan_iface_fiber" = "no" ; then
6220 echo "ASAN build enabled, but ASAN header is too old." \
6221 "Without code annotation, the report may be inferior."
6222 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006223fi
6224if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006225 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6226 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006227fi
6228
Peter Lieven6542aa92014-02-03 10:26:13 +01006229##########################################
6230# Do we have libnfs
6231if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006232 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006233 libnfs="yes"
6234 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006235 else
6236 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006237 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006238 fi
6239 libnfs="no"
6240 fi
6241fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006242
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006243##########################################
6244# Do we have libudev
6245if test "$libudev" != "no" ; then
6246 if $pkg_config libudev && test "$static" != "yes"; then
6247 libudev="yes"
6248 libudev_libs=$($pkg_config --libs libudev)
6249 else
6250 libudev="no"
6251 fi
6252fi
6253
Peter Maydell6ca026c2012-07-18 15:10:18 +01006254# Now we've finished running tests it's OK to add -Werror to the compiler flags
6255if test "$werror" = "yes"; then
6256 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6257fi
6258
Juan Quintelae86ecd42009-08-03 14:45:59 +02006259if test "$solaris" = "no" ; then
6260 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006261 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006262 fi
6263fi
6264
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006265# test if pod2man has --utf8 option
6266if pod2man --help | grep -q utf8; then
6267 POD2MAN="pod2man --utf8"
6268else
6269 POD2MAN="pod2man"
6270fi
6271
Blue Swirl952afb72010-09-19 08:36:34 +00006272# Use ASLR, no-SEH and DEP if available
6273if test "$mingw32" = "yes" ; then
6274 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006275 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006276 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006277 fi
6278 done
6279fi
6280
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006281# Disable OpenBSD W^X if available
6282if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6283 cat > $TMPC <<EOF
6284 int main(void) { return 0; }
6285EOF
6286 wx_ldflags="-Wl,-z,wxneeded"
6287 if compile_prog "" "$wx_ldflags"; then
6288 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6289 fi
6290fi
6291
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006292qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006293qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006294qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006295qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006296qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006297qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006298
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006299# We can only support ivshmem if we have eventfd
6300if [ "$eventfd" = "yes" ]; then
6301 ivshmem=yes
6302fi
6303
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006304tools=""
6305if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006306 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006307 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6308 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006309 fi
6310 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006311 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006312 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006313 if [ "$curl" = "yes" ]; then
6314 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006315 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006316fi
6317if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006318 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006319 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006320 virtfs=yes
6321 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6322 else
6323 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006324 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306325 fi
Andreas Färber17500372012-05-01 01:12:03 +02006326 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006327 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006328 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6329 mpath=yes
6330 else
6331 if test "$mpath" = yes; then
6332 error_exit "Multipath requires libmpathpersist devel"
6333 fi
6334 mpath=no
6335 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006336 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6337 else
6338 if test "$virtfs" = yes; then
6339 error_exit "VirtFS is supported only on Linux"
6340 fi
6341 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006342 if test "$mpath" = yes; then
6343 error_exit "Multipath is supported only on Linux"
6344 fi
6345 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306346 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006347 if test "$xkbcommon" = "yes"; then
6348 tools="qemu-keymap\$(EXESUF) $tools"
6349 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006350fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006351
6352# Probe for guest agent support/options
6353
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006354if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006355 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6356 guest_agent=no
6357 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006358 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006359 guest_agent=yes
6360 elif [ "$guest_agent" != yes ]; then
6361 guest_agent=no
6362 else
6363 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006364 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006365fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006366
Michael Roth9d6bc272015-08-26 10:49:13 -05006367# Guest agent Window MSI package
6368
6369if test "$guest_agent" != yes; then
6370 if test "$guest_agent_msi" = yes; then
6371 error_exit "MSI guest agent package requires guest agent enabled"
6372 fi
6373 guest_agent_msi=no
6374elif test "$mingw32" != "yes"; then
6375 if test "$guest_agent_msi" = "yes"; then
6376 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6377 fi
6378 guest_agent_msi=no
6379elif ! has wixl; then
6380 if test "$guest_agent_msi" = "yes"; then
6381 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6382 fi
6383 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006384else
6385 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6386 # disabled explicitly
6387 if test "$guest_agent_msi" != "no"; then
6388 guest_agent_msi=yes
6389 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006390fi
6391
Michael Roth1a349042015-08-26 11:14:31 -05006392if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006393 if test "$guest_agent_with_vss" = "yes"; then
6394 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6395 fi
6396
6397 if test "$QEMU_GA_MANUFACTURER" = ""; then
6398 QEMU_GA_MANUFACTURER=QEMU
6399 fi
6400
6401 if test "$QEMU_GA_DISTRO" = ""; then
6402 QEMU_GA_DISTRO=Linux
6403 fi
6404
6405 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006406 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006407 fi
6408
Stefan Weil89138852016-05-16 15:10:20 +02006409 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006410
6411 case "$cpu" in
6412 x86_64)
6413 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6414 ;;
6415 i386)
6416 QEMU_GA_MSI_ARCH="-D Arch=32"
6417 ;;
6418 *)
6419 error_exit "CPU $cpu not supported for building installation package"
6420 ;;
6421 esac
6422fi
6423
Paolo Bonzinica35f782010-05-26 16:08:29 +02006424# Mac OS X ships with a broken assembler
6425roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006426if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6427 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6428 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006429 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006430 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6431 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6432 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006433 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6434 ld_i386_emulation="$emu"
6435 roms="optionrom"
6436 break
6437 fi
6438 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006439fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006440
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006441# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006442if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006443 write_c_skeleton
6444 if compile_prog "-march=z900" ""; then
6445 roms="$roms s390-ccw"
6446 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006447fi
6448
Richard Henderson964c6fa2013-06-21 19:10:16 -07006449# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006450if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006451 textseg_addr=
6452 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006453 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6454 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006455 textseg_addr=0x60000000
6456 ;;
6457 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006458 # A 256M aligned address, high in the address space, with enough
6459 # room for the code_gen_buffer above it before the stack.
6460 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006461 ;;
6462 esac
6463 if [ -n "$textseg_addr" ]; then
6464 cat > $TMPC <<EOF
6465 int main(void) { return 0; }
6466EOF
6467 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6468 if ! compile_prog "" "$textseg_ldflags"; then
6469 # In case ld does not support -Ttext-segment, edit the default linker
6470 # script via sed to set the .text start addr. This is needed on FreeBSD
6471 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006472 if ! $ld --verbose >/dev/null 2>&1; then
6473 error_exit \
6474 "We need to link the QEMU user mode binaries at a" \
6475 "specific text address. Unfortunately your linker" \
6476 "doesn't support either the -Ttext-segment option or" \
6477 "printing the default linker script with --verbose." \
6478 "If you don't want the user mode binaries, pass the" \
6479 "--disable-user option to configure."
6480 fi
6481
Richard Henderson964c6fa2013-06-21 19:10:16 -07006482 $ld --verbose | sed \
6483 -e '1,/==================================================/d' \
6484 -e '/==================================================/,$d' \
6485 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6486 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6487 textseg_ldflags="-Wl,-T../config-host.ld"
6488 fi
6489 fi
6490fi
6491
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006492# Check that the C++ compiler exists and works with the C compiler.
6493# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6494if has $cxx; then
6495 cat > $TMPC <<EOF
6496int c_function(void);
6497int main(void) { return c_function(); }
6498EOF
6499
6500 compile_object
6501
6502 cat > $TMPCXX <<EOF
6503extern "C" {
6504 int c_function(void);
6505}
6506int c_function(void) { return 42; }
6507EOF
6508
6509 update_cxxflags
6510
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006511 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006512 # C++ compiler $cxx works ok with C compiler $cc
6513 :
6514 else
6515 echo "C++ compiler $cxx does not work with C compiler $cc"
6516 echo "Disabling C++ specific optional code"
6517 cxx=
6518 fi
6519else
6520 echo "No C++ compiler available; disabling C++ specific optional code"
6521 cxx=
6522fi
6523
Cole Robinson02d34f62016-05-06 14:03:09 -04006524echo_version() {
6525 if test "$1" = "yes" ; then
6526 echo "($2)"
6527 fi
6528}
6529
Jan Kiszka50e12062014-10-02 10:03:55 +02006530# prepend pixman and ftd flags after all config tests are done
6531QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006532QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006533libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006534
bellard43ce4df2003-06-09 19:53:12 +00006535echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006536echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006537echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006538echo "binary directory $(eval echo $bindir)"
6539echo "library directory $(eval echo $libdir)"
6540echo "module directory $(eval echo $qemu_moddir)"
6541echo "libexec directory $(eval echo $libexecdir)"
6542echo "include directory $(eval echo $includedir)"
6543echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006544if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006545echo "local state directory $(eval echo $local_statedir)"
6546echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006547echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006548else
6549echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006550echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006551fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006552echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006553echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006554echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006555echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006556echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006557echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006558echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006559echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006560echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006561echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006562echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006563echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006564echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006565echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006566echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006567if test "$docs" != "no"; then
6568 echo "sphinx-build $sphinx_build"
6569fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006570echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6571if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006572 echo "smbd $smbd"
6573fi
Fam Zheng17969262014-02-10 14:48:56 +08006574echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006575echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006576echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006577echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006578echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006579echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006580echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006581echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006582echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006583if test "$darwin" = "yes" ; then
6584 echo "Cocoa support $cocoa"
6585fi
Stefan Weil89138852016-05-16 15:10:20 +02006586echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006587echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006588echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006589echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006590echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006591echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006592echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006593echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006594if test "$gcrypt" = "yes"
6595then
6596 echo " hmac $gcrypt_hmac"
6597 echo " XTS $gcrypt_xts"
6598fi
Stefan Weil89138852016-05-16 15:10:20 +02006599echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006600if test "$nettle" = "yes"
6601then
6602 echo " XTS $nettle_xts"
6603fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006604echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006605echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006606echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006607echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006608echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006609echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006610echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006611echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006612echo "Block whitelist (rw) $block_drv_rw_whitelist"
6613echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306614echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006615echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006616echo "VNC support $vnc"
6617if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006618 echo "VNC SASL support $vnc_sasl"
6619 echo "VNC JPEG support $vnc_jpeg"
6620 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006621fi
aliguorie37630c2009-04-22 15:19:10 +00006622echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006623if test "$xen" = "yes" ; then
6624 echo "xen ctrl version $xen_ctrl_version"
6625fi
aurel322e4d9fb2008-04-08 06:01:02 +00006626echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006627echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006628echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006629echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006630echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006631echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006632echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006633echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006634echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006635echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006636echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006637echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006638echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006639echo "TCG support $tcg"
6640if test "$tcg" = "yes" ; then
6641 echo "TCG debug enabled $debug_tcg"
6642 echo "TCG interpreter $tcg_interpreter"
6643fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006644echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006645echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006646echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006647echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006648echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006649echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006650echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006651echo "madvise $madvise"
6652echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006653echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006654echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006655echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006656echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006657echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006658echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006659echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006660echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006661echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006662if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006663echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006664fi
Stefan Weil89138852016-05-16 15:10:20 +02006665echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006666echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006667echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006668echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006669echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006670echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006671echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006672echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006673echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006674echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006675echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006676echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006677echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006678echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006679echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006680echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006681echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006682echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006683echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006684echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306685echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006686echo "gcov $gcov_tool"
6687echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006688echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006689echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006690echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006691echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006692echo "lzo support $lzo"
6693echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006694echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006695echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006696echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006697echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006698echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006699echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006700echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006701echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006702echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006703echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006704echo "bochs support $bochs"
6705echo "cloop support $cloop"
6706echo "dmg support $dmg"
6707echo "qcow v1 support $qcow1"
6708echo "vdi support $vdi"
6709echo "vvfat support $vvfat"
6710echo "qed support $qed"
6711echo "parallels support $parallels"
6712echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006713echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006714echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006715echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006716echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006717echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006718echo "fuzzing support $fuzzing"
bellard67b915a2004-03-31 23:37:16 +00006719
Peter Maydell898be3e2017-03-21 14:31:57 +00006720if test "$supported_cpu" = "no"; then
6721 echo
6722 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6723 echo
6724 echo "CPU host architecture $cpu support is not currently maintained."
6725 echo "The QEMU project intends to remove support for this host CPU in"
6726 echo "a future release if nobody volunteers to maintain it and to"
6727 echo "provide a build host for our continuous integration setup."
6728 echo "configure has succeeded and you can continue to build, but"
6729 echo "if you care about QEMU on this platform you should contact"
6730 echo "us upstream at qemu-devel@nongnu.org."
6731fi
6732
6733if test "$supported_os" = "no"; then
6734 echo
6735 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6736 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006737 echo "Host OS $targetos support is not currently maintained."
6738 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006739 echo "a future release if nobody volunteers to maintain it and to"
6740 echo "provide a build host for our continuous integration setup."
6741 echo "configure has succeeded and you can continue to build, but"
6742 echo "if you care about QEMU on this platform you should contact"
6743 echo "us upstream at qemu-devel@nongnu.org."
6744fi
6745
Juan Quintela98ec69a2009-07-16 18:34:18 +02006746config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006747
Stefan Weildbd99ae2013-01-01 18:33:44 +01006748echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6749
Juan Quintela98ec69a2009-07-16 18:34:18 +02006750echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006751echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006752
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006753echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006754echo "prefix=$prefix" >> $config_host_mak
6755echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006756echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006757echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006758echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006759echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006760echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006761echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006762echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006763echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006764echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006765echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006766if test "$mingw32" = "no" ; then
6767 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6768fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006769echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006770echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006771echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006772echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006773echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006774echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006775echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006776echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006777echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006778
Juan Quintela98ec69a2009-07-16 18:34:18 +02006779echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006780
Paolo Bonzinif3494742019-01-23 14:56:17 +08006781if test "$default_devices" = "yes" ; then
6782 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6783else
6784 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6785fi
aurel32f8393942009-04-13 18:45:38 +00006786if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006787 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006788fi
aliguori1625af82009-04-05 17:41:02 +00006789if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006790 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006791fi
bellard7d132992003-03-06 23:23:54 +00006792if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006793 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006794fi
bellard67b915a2004-03-31 23:37:16 +00006795if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006796 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006797 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006798 version_major=${rc_version%%.*}
6799 rc_version=${rc_version#*.}
6800 version_minor=${rc_version%%.*}
6801 rc_version=${rc_version#*.}
6802 version_subminor=${rc_version%%.*}
6803 version_micro=0
6804 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6805 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006806 if test "$guest_agent_with_vss" = "yes" ; then
6807 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006808 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006809 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6810 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006811 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006812 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006813 fi
Michael Roth1a349042015-08-26 11:14:31 -05006814 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006815 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006816 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6817 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6818 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6819 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6820 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6821 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6822 fi
pbrook210fa552007-02-27 21:04:49 +00006823else
Juan Quintela35f4df22009-07-27 16:13:07 +02006824 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006825fi
blueswir1128ab2f2008-08-15 18:33:42 +00006826
Mark McLoughlindffcb712009-10-22 17:49:11 +01006827if test "$linux" = "yes" ; then
6828 echo "CONFIG_LINUX=y" >> $config_host_mak
6829fi
6830
bellard83fb7ad2004-07-05 21:25:26 +00006831if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006832 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006833fi
malcb29fe3e2008-11-18 01:42:22 +00006834
bellardec530c82006-04-25 22:36:06 +00006835if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006836 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006837fi
Andreas Färber179cf402010-09-20 00:50:43 +02006838if test "$haiku" = "yes" ; then
6839 echo "CONFIG_HAIKU=y" >> $config_host_mak
6840fi
bellard97a847b2003-08-10 21:36:04 +00006841if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006842 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006843fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006844if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006845 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006846fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006847if test "$want_tools" = "yes" ; then
6848 echo "CONFIG_TOOLS=y" >> $config_host_mak
6849fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006850if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006851 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006852 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006853 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6854 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6855fi
Marc-André Lureau7c57bdd82019-04-24 13:00:41 +02006856if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006857 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006858fi
ths8a16d272008-07-19 09:56:24 +00006859if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006860 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006861 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006862fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006863if test "$netmap" = "yes" ; then
6864 echo "CONFIG_NETMAP=y" >> $config_host_mak
6865fi
Gonglei015a33b2014-07-01 20:58:08 +08006866if test "$l2tpv3" = "yes" ; then
6867 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6868fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006869if test "$gprof" = "yes" ; then
6870 echo "CONFIG_GPROF=y" >> $config_host_mak
6871fi
Corey Bryant47e98652012-01-26 09:42:26 -05006872if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006873 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006874fi
Juan Quintela2358a492009-07-27 16:13:25 +02006875echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006876for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006877 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006878 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006879 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006880 echo "$def=m" >> $config_host_mak ;;
6881 *)
6882 echo "$def=y" >> $config_host_mak ;;
6883 esac
malc0c58ac12008-06-25 21:04:05 +00006884done
Fam Zhengb1149912017-09-07 16:29:13 +08006885echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6886echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6887echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6888echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6889echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006890if test "$audio_win_int" = "yes" ; then
6891 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6892fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006893echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6894echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006895if test "$vnc" = "yes" ; then
6896 echo "CONFIG_VNC=y" >> $config_host_mak
6897fi
aliguori2f9606b2009-03-06 20:27:28 +00006898if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006899 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006900fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006901if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006902 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006903fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006904if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006905 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006906fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006907if test "$xkbcommon" = "yes" ; then
6908 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6909 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6910fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006911if test "$xfs" = "yes" ; then
6912 echo "CONFIG_XFS=y" >> $config_host_mak
6913fi
Stefan Weil89138852016-05-16 15:10:20 +02006914qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006915echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006916echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006917echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006918echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006919if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006920 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006921fi
Fam Zheng17969262014-02-10 14:48:56 +08006922if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006923 # $shacmd can generate a hash started with digit, which the compiler doesn't
6924 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006925 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006926 echo "CONFIG_MODULES=y" >> $config_host_mak
6927fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006928if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006929 echo "CONFIG_X11=y" >> $config_host_mak
6930 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6931 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6932fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006933if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006934 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006935 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006936 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006937 if test "$sdl_image" = "yes" ; then
6938 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6939 fi
bellard49ecc3f2007-11-07 19:25:15 +00006940fi
6941if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006942 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006943fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006944if test "$iconv" = "yes" ; then
6945 echo "CONFIG_ICONV=y" >> $config_host_mak
6946 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6947 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6948fi
balrog4d3b6f62008-02-10 16:33:14 +00006949if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006950 echo "CONFIG_CURSES=m" >> $config_host_mak
6951 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6952 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006953fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006954if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006955 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006956fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006957if test "$accept4" = "yes" ; then
6958 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6959fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306960if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006961 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306962fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006963if test "$eventfd" = "yes" ; then
6964 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6965fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006966if test "$memfd" = "yes" ; then
6967 echo "CONFIG_MEMFD=y" >> $config_host_mak
6968fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006969if test "$have_usbfs" = "yes" ; then
6970 echo "CONFIG_USBFS=y" >> $config_host_mak
6971fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006972if test "$fallocate" = "yes" ; then
6973 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6974fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006975if test "$fallocate_punch_hole" = "yes" ; then
6976 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6977fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006978if test "$fallocate_zero_range" = "yes" ; then
6979 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6980fi
Kevin Wolfed911432014-09-29 17:12:59 +02006981if test "$posix_fallocate" = "yes" ; then
6982 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6983fi
Peter Maydellc727f472011-01-06 11:05:10 +00006984if test "$sync_file_range" = "yes" ; then
6985 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6986fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006987if test "$fiemap" = "yes" ; then
6988 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6989fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006990if test "$dup3" = "yes" ; then
6991 echo "CONFIG_DUP3=y" >> $config_host_mak
6992fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006993if test "$ppoll" = "yes" ; then
6994 echo "CONFIG_PPOLL=y" >> $config_host_mak
6995fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006996if test "$prctl_pr_set_timerslack" = "yes" ; then
6997 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6998fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006999if test "$epoll" = "yes" ; then
7000 echo "CONFIG_EPOLL=y" >> $config_host_mak
7001fi
7002if test "$epoll_create1" = "yes" ; then
7003 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7004fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007005if test "$sendfile" = "yes" ; then
7006 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7007fi
Riku Voipio51834342014-06-22 11:25:42 +01007008if test "$timerfd" = "yes" ; then
7009 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7010fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007011if test "$setns" = "yes" ; then
7012 echo "CONFIG_SETNS=y" >> $config_host_mak
7013fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007014if test "$clock_adjtime" = "yes" ; then
7015 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7016fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007017if test "$syncfs" = "yes" ; then
7018 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7019fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007020if test "$kcov" = "yes" ; then
7021 echo "CONFIG_KCOV=y" >> $config_host_mak
7022fi
aurel323b3f24a2009-04-15 16:12:13 +00007023if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007024 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007025fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007026if test "$inotify1" = "yes" ; then
7027 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7028fi
Peter Maydell401bc052017-09-05 13:19:32 +01007029if test "$sem_timedwait" = "yes" ; then
7030 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7031fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007032if test "$strchrnul" = "yes" ; then
7033 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7034fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007035if test "$st_atim" = "yes" ; then
7036 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7037fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007038if test "$byteswap_h" = "yes" ; then
7039 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7040fi
7041if test "$bswap_h" = "yes" ; then
7042 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7043fi
Alexander Graf769ce762009-05-11 17:41:42 +02007044if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007045 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007046 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007047 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007048fi
aurel322e4d9fb2008-04-08 06:01:02 +00007049if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007050 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007051 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007052fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007053if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007054 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007055 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007056 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007057 if test "$gtk_gl" = "yes" ; then
7058 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7059 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007060fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007061if test "$gio" = "yes" ; then
7062 echo "CONFIG_GIO=y" >> $config_host_mak
7063 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7064 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007065 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007066fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007067echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007068if test "$gnutls" = "yes" ; then
7069 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7070fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007071if test "$gcrypt" = "yes" ; then
7072 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007073 if test "$gcrypt_hmac" = "yes" ; then
7074 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7075 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007076fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007077if test "$nettle" = "yes" ; then
7078 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007079 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007080fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007081if test "$qemu_private_xts" = "yes" ; then
7082 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7083fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007084if test "$tasn1" = "yes" ; then
7085 echo "CONFIG_TASN1=y" >> $config_host_mak
7086fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007087if test "$auth_pam" = "yes" ; then
7088 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7089fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007090if test "$have_ifaddrs_h" = "yes" ; then
7091 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7092fi
Eric Blake6b39b062016-10-11 10:46:23 -05007093if test "$have_broken_size_max" = "yes" ; then
7094 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7095fi
Jan Vesely277abf12016-04-29 13:15:23 -04007096
7097# Work around a system header bug with some kernel/XFS header
7098# versions where they both try to define 'struct fsxattr':
7099# xfs headers will not try to redefine structs from linux headers
7100# if this macro is set.
7101if test "$have_fsxattr" = "yes" ; then
7102 echo "HAVE_FSXATTR=y" >> $config_host_mak
7103fi
Fam Zheng1efad062018-06-01 17:26:43 +08007104if test "$have_copy_file_range" = "yes" ; then
7105 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7106fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007107if test "$vte" = "yes" ; then
7108 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007109 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007110 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007111fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007112if test "$virglrenderer" = "yes" ; then
7113 echo "CONFIG_VIRGL=y" >> $config_host_mak
7114 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7115 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7116fi
aliguorie37630c2009-04-22 15:19:10 +00007117if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007118 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007119 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007120fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007121if test "$linux_aio" = "yes" ; then
7122 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7123fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007124if test "$linux_io_uring" = "yes" ; then
7125 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7126 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7127 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7128fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007129if test "$attr" = "yes" ; then
7130 echo "CONFIG_ATTR=y" >> $config_host_mak
7131fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007132if test "$libattr" = "yes" ; then
7133 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7134fi
Meador Inge983eef52012-02-24 14:00:42 +05307135if test "$virtfs" = "yes" ; then
7136 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007137fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007138if test "$mpath" = "yes" ; then
7139 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007140 if test "$mpathpersist_new_api" = "yes"; then
7141 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7142 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007143fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007144if test "$vhost_scsi" = "yes" ; then
7145 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7146fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007147if test "$vhost_net" = "yes" ; then
7148 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7149fi
7150if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007151 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007152fi
Gonglei042cea22018-03-01 21:46:28 +08007153if test "$vhost_crypto" = "yes" ; then
7154 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7155fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007156if test "$vhost_vsock" = "yes" ; then
7157 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7158fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007159if test "$vhost_kernel" = "yes" ; then
7160 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7161fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007162if test "$vhost_user" = "yes" ; then
7163 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7164fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007165if test "$vhost_user_fs" = "yes" ; then
7166 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7167fi
ths77755342008-11-27 15:45:16 +00007168if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007169 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007170fi
aliguoribf9298b2008-12-05 20:05:26 +00007171if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007172 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007173fi
aliguoriceb42de2009-04-07 18:43:28 +00007174if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007175 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007176fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007177if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007178 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007179fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007180if test "$membarrier" = "yes" ; then
7181 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7182fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007183if test "$signalfd" = "yes" ; then
7184 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7185fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007186if test "$optreset" = "yes" ; then
7187 echo "HAVE_OPTRESET=y" >> $config_host_mak
7188fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007189if test "$tcg" = "yes"; then
7190 echo "CONFIG_TCG=y" >> $config_host_mak
7191 if test "$tcg_interpreter" = "yes" ; then
7192 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7193 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007194fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007195if test "$fdatasync" = "yes" ; then
7196 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7197fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007198if test "$madvise" = "yes" ; then
7199 echo "CONFIG_MADVISE=y" >> $config_host_mak
7200fi
7201if test "$posix_madvise" = "yes" ; then
7202 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7203fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007204if test "$posix_memalign" = "yes" ; then
7205 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7206fi
bellard97a847b2003-08-10 21:36:04 +00007207
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007208if test "$spice" = "yes" ; then
7209 echo "CONFIG_SPICE=y" >> $config_host_mak
7210fi
7211
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007212if test "$smartcard" = "yes" ; then
7213 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007214 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7215 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007216fi
7217
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007218if test "$libusb" = "yes" ; then
7219 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007220 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7221 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007222fi
7223
Hans de Goede69354a82011-07-19 11:04:10 +02007224if test "$usb_redir" = "yes" ; then
7225 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007226 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7227 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007228fi
7229
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007230if test "$opengl" = "yes" ; then
7231 echo "CONFIG_OPENGL=y" >> $config_host_mak
7232 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007233 if test "$opengl_dmabuf" = "yes" ; then
7234 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7235 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007236fi
7237
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007238if test "$gbm" = "yes" ; then
7239 echo "CONFIG_GBM=y" >> $config_host_mak
7240 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7241 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7242fi
7243
7244
Yang Zhong5a22ab72017-12-20 21:16:46 +08007245if test "$malloc_trim" = "yes" ; then
7246 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7247fi
7248
Liang Li99f2dbd2016-03-08 13:53:16 +08007249if test "$avx2_opt" = "yes" ; then
7250 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7251fi
7252
qiaonuohan607dacd2014-02-18 14:11:30 +08007253if test "$lzo" = "yes" ; then
7254 echo "CONFIG_LZO=y" >> $config_host_mak
7255fi
7256
7257if test "$snappy" = "yes" ; then
7258 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7259fi
7260
Peter Wu6b383c02015-01-06 18:48:14 +01007261if test "$bzip2" = "yes" ; then
7262 echo "CONFIG_BZIP2=y" >> $config_host_mak
7263 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7264fi
7265
Julio Faracco83bc1f92018-11-05 13:08:04 -02007266if test "$lzfse" = "yes" ; then
7267 echo "CONFIG_LZFSE=y" >> $config_host_mak
7268 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7269fi
7270
Juan Quintela3a678482019-12-17 21:15:24 +01007271if test "$zstd" = "yes" ; then
7272 echo "CONFIG_ZSTD=y" >> $config_host_mak
7273fi
7274
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007275if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007276 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007277 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7278 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007279fi
7280
Peter Lieven6542aa92014-02-03 10:26:13 +01007281if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007282 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7283 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007284fi
7285
Eduardo Otubof7945732012-08-14 18:44:05 -03007286if test "$seccomp" = "yes"; then
7287 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007288 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7289 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007290fi
7291
bellard83fb7ad2004-07-05 21:25:26 +00007292# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007293if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007294 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007295fi
7296
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007297if test "$localtime_r" = "yes" ; then
7298 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7299fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007300if test "$qom_cast_debug" = "yes" ; then
7301 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7302fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007303if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007304 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007305 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7306 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007307fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007308
Peter Maydell7c2acc72013-04-08 12:11:27 +01007309echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007310if test "$coroutine_pool" = "yes" ; then
7311 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7312else
7313 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7314fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307315
Peter Lieven7d992e42016-09-27 11:58:45 +02007316if test "$debug_stack_usage" = "yes" ; then
7317 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7318fi
7319
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007320if test "$crypto_afalg" = "yes" ; then
7321 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7322fi
7323
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307324if test "$open_by_handle_at" = "yes" ; then
7325 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7326fi
7327
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307328if test "$linux_magic_h" = "yes" ; then
7329 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7330fi
7331
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007332if test "$pragma_diagnostic_available" = "yes" ; then
7333 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007334fi
7335
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007336if test "$valgrind_h" = "yes" ; then
7337 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7338fi
7339
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007340if test "$have_asan_iface_fiber" = "yes" ; then
7341 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7342fi
7343
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007344if test "$has_environ" = "yes" ; then
7345 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7346fi
7347
Richard Henderson76a347e2012-12-28 14:17:02 -08007348if test "$cpuid_h" = "yes" ; then
7349 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7350fi
7351
Richard Hendersonf5401662013-02-16 12:46:59 -08007352if test "$int128" = "yes" ; then
7353 echo "CONFIG_INT128=y" >> $config_host_mak
7354fi
7355
Richard Henderson7ebee432016-06-29 21:10:59 -07007356if test "$atomic128" = "yes" ; then
7357 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7358fi
7359
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007360if test "$cmpxchg128" = "yes" ; then
7361 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7362fi
7363
Richard Hendersondf79b992016-09-02 12:23:57 -07007364if test "$atomic64" = "yes" ; then
7365 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7366fi
7367
Richard Hendersondb432672017-09-15 14:11:45 -07007368if test "$vector16" = "yes" ; then
7369 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7370fi
7371
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007372if test "$attralias" = "yes" ; then
7373 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7374fi
7375
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007376if test "$getauxval" = "yes" ; then
7377 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7378fi
7379
Bharata B Raoeb100392012-09-24 14:42:45 +05307380if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007381 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007382 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7383 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307384fi
7385
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007386if test "$glusterfs_xlator_opt" = "yes" ; then
7387 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7388fi
7389
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307390if test "$glusterfs_discard" = "yes" ; then
7391 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7392fi
7393
Niels de Vosdf3a4292017-05-28 12:01:14 +05307394if test "$glusterfs_fallocate" = "yes" ; then
7395 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7396fi
7397
Bharata B Rao7c815372013-12-21 14:51:25 +05307398if test "$glusterfs_zerofill" = "yes" ; then
7399 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7400fi
7401
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007402if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7403 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7404fi
7405
Niels de Vos0e3b8912019-03-05 16:46:34 +01007406if test "$glusterfs_iocb_has_stat" = "yes" ; then
7407 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7408fi
7409
Pino Toscanob10d49d2019-06-20 22:08:40 +02007410if test "$libssh" = "yes" ; then
7411 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7412 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7413 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007414fi
7415
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007416if test "$live_block_migration" = "yes" ; then
7417 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7418fi
7419
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007420if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007421 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007422fi
7423
Lluís Vilanova5b808272014-05-27 15:02:14 +02007424echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7425if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007426 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307427fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007428if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007429 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7430 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007431 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007432fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007433if have_backend "log"; then
7434 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007435fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007436if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007437 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7438fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007439if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007440 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7441 if test "$trace_backend_stap" = "yes" ; then
7442 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7443 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007444fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007445if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007446 if test "$linux" = "yes" ; then
7447 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007448 else
Stewart Smith21684af2014-01-24 12:39:10 +11007449 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007450 fi
7451fi
Paul Durrant0a852412016-08-04 14:44:14 +01007452if have_backend "syslog"; then
7453 if test "$posix_syslog" = "yes" ; then
7454 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7455 else
7456 feature_not_found "syslog(trace backend)" "syslog not available"
7457 fi
7458fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007459echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7460
Michael R. Hines2da776d2013-07-22 10:01:54 -04007461if test "$rdma" = "yes" ; then
7462 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007463 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007464fi
7465
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007466if test "$pvrdma" = "yes" ; then
7467 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7468fi
7469
Laurent Vivier575b22b2016-06-02 22:14:15 +02007470if test "$have_rtnetlink" = "yes" ; then
7471 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7472fi
7473
Klim Kireeved279a02018-01-12 12:01:19 +03007474if test "$libxml2" = "yes" ; then
7475 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7476 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7477 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7478fi
7479
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007480if test "$replication" = "yes" ; then
7481 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7482fi
7483
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007484if test "$have_af_vsock" = "yes" ; then
7485 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7486fi
7487
Christopher Covington4d043512016-12-28 15:04:33 -05007488if test "$have_sysmacros" = "yes" ; then
7489 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7490fi
7491
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007492if test "$have_static_assert" = "yes" ; then
7493 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7494fi
7495
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007496if test "$have_utmpx" = "yes" ; then
7497 echo "HAVE_UTMPX=y" >> $config_host_mak
7498fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007499if test "$have_getrandom" = "yes" ; then
7500 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7501fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007502if test "$ivshmem" = "yes" ; then
7503 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7504fi
Richard Hendersone219c492017-09-28 09:01:23 -07007505if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007506 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7507fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007508if test "$debug_mutex" = "yes" ; then
7509 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7510fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007511
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007512# Hold two types of flag:
7513# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7514# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007515# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007516# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007517if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007518 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007519 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7520elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7521 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7522 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007523fi
7524
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007525if test "$vxhs" = "yes" ; then
7526 echo "CONFIG_VXHS=y" >> $config_host_mak
7527 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7528fi
7529
Junyan He17824402018-07-18 15:47:59 +08007530if test "$libpmem" = "yes" ; then
7531 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7532fi
7533
Jeff Cody2f740132018-11-07 07:36:44 +01007534if test "$bochs" = "yes" ; then
7535 echo "CONFIG_BOCHS=y" >> $config_host_mak
7536fi
7537if test "$cloop" = "yes" ; then
7538 echo "CONFIG_CLOOP=y" >> $config_host_mak
7539fi
7540if test "$dmg" = "yes" ; then
7541 echo "CONFIG_DMG=y" >> $config_host_mak
7542fi
7543if test "$qcow1" = "yes" ; then
7544 echo "CONFIG_QCOW1=y" >> $config_host_mak
7545fi
7546if test "$vdi" = "yes" ; then
7547 echo "CONFIG_VDI=y" >> $config_host_mak
7548fi
7549if test "$vvfat" = "yes" ; then
7550 echo "CONFIG_VVFAT=y" >> $config_host_mak
7551fi
7552if test "$qed" = "yes" ; then
7553 echo "CONFIG_QED=y" >> $config_host_mak
7554fi
7555if test "$parallels" = "yes" ; then
7556 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7557fi
7558if test "$sheepdog" = "yes" ; then
7559 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7560fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007561if test "$fuzzing" = "yes" ; then
7562 if test "$have_fuzzer" = "yes"; then
7563 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7564 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7565 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7566 else
7567 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7568 exit 1
7569 fi
7570fi
Jeff Cody2f740132018-11-07 07:36:44 +01007571
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007572if test "$plugins" = "yes" ; then
7573 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7574 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007575 # Copy the export object list to the build dir
7576 if test "$ld_dynamic_list" = "yes" ; then
7577 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7578 ld_symbols=qemu-plugins-ld.symbols
7579 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7580 elif test "$ld_exported_symbols_list" = "yes" ; then
7581 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7582 ld64_symbols=qemu-plugins-ld64.symbols
7583 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7584 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7585 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7586 else
7587 error_exit \
7588 "If \$plugins=yes, either \$ld_dynamic_list or " \
7589 "\$ld_exported_symbols_list should have been set to 'yes'."
7590 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007591fi
7592
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007593if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007594 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007595elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007596 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007597elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007598 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007599elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007600 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007601elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007602 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007603elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007604 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007605else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007606 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007607fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007608
Juan Quintela98ec69a2009-07-16 18:34:18 +02007609echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007610echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007611echo "MAKE=$make" >> $config_host_mak
7612echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007613echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7614echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007615echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7616echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007617echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007618echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007619echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007620if $iasl -h > /dev/null 2>&1; then
7621 echo "IASL=$iasl" >> $config_host_mak
7622fi
Juan Quintela804edf22009-07-27 16:12:49 +02007623echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007624echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007625echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007626echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007627echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007628echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007629echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007630echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007631echo "OBJCOPY=$objcopy" >> $config_host_mak
7632echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007633echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007634echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007635echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007636echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007637echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007638echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007639echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007640echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007641echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007642if test "$sparse" = "yes" ; then
7643 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007644 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007645 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007646 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7647 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7648fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007649echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007650echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007651echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007652echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007653echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007654echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007655echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007656echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007657echo "DSOSUF=$DSOSUF" >> $config_host_mak
7658echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007659echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007660echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7661echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007662echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007663if test "$gcov" = "yes" ; then
7664 echo "CONFIG_GCOV=y" >> $config_host_mak
7665 echo "GCOV=$gcov_tool" >> $config_host_mak
7666fi
Juan Quintela804edf22009-07-27 16:12:49 +02007667
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007668if test "$libudev" != "no"; then
7669 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7670 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7671fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007672if test "$fuzzing" != "no"; then
7673 echo "CONFIG_FUZZ=y" >> $config_host_mak
7674 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7675 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7676fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007677
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007678if test "$edk2_blobs" = "yes" ; then
7679 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7680fi
7681
Peter Maydell6efd7512011-11-30 11:59:04 +00007682# use included Linux headers
7683if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007684 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007685 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007686 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007687 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007688 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007689 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007690 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007691 ;;
7692 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007693 linux_arch=s390
7694 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007695 aarch64)
7696 linux_arch=arm64
7697 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007698 mips64)
7699 linux_arch=mips
7700 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007701 *)
7702 # For most CPUs the kernel architecture name and QEMU CPU name match.
7703 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007704 ;;
7705 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007706 # For non-KVM architectures we will not have asm headers
7707 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7708 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7709 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007710fi
7711
bellard1d14ffa2005-10-30 18:58:22 +00007712for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007713target_dir="$target"
Juan Quintela25be210f2009-10-07 02:41:00 +02007714config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007715target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007716target_aligned_only="no"
7717case "$target_name" in
7718 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7719 target_aligned_only="yes"
7720 ;;
7721esac
bellard97a847b2003-08-10 21:36:04 +00007722target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007723case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007724 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 +00007725 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007726 ;;
7727esac
bellard97a847b2003-08-10 21:36:04 +00007728target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007729target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007730target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007731target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007732case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007733 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007734 target_softmmu="yes"
7735 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007736 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007737 target_user_only="yes"
7738 target_linux_user="yes"
7739 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007740 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007741 target_user_only="yes"
7742 target_bsd_user="yes"
7743 ;;
pbrook9e407a82007-05-26 16:38:53 +00007744 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007745 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007746 exit 1
7747 ;;
7748esac
ths831b7822007-01-18 20:06:33 +00007749
bellard97a847b2003-08-10 21:36:04 +00007750mkdir -p $target_dir
Juan Quintela25be210f2009-10-07 02:41:00 +02007751echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007752
pbrooke5fe0c52006-06-11 13:32:59 +00007753bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007754mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007755interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007756gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007757
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007758TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007759TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007760TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007761
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007762case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007763 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007764 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307765 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007766 ;;
7767 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007768 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007769 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307770 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007771 ;;
7772 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007773 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00007774 ;;
7775 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007776 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007777 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007778 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007779 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007780 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007781 aarch64|aarch64_be)
7782 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007783 TARGET_BASE_ARCH=arm
7784 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007785 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007786 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007787 ;;
aurel322408a522008-04-20 20:19:44 +00007788 cris)
aurel322408a522008-04-20 20:19:44 +00007789 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007790 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007791 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08007792 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007793 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007794 ;;
aurel322408a522008-04-20 20:19:44 +00007795 m68k)
aurel322408a522008-04-20 20:19:44 +00007796 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007797 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00007798 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007799 microblaze|microblazeel)
7800 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007801 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007802 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007803 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007804 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007805 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007806 TARGET_ARCH=mips
Juan Quintela25be210f2009-10-07 02:41:00 +02007807 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007808 ;;
7809 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007810 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007811 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007812 TARGET_BASE_ARCH=mips
Juan Quintela25be210f2009-10-07 02:41:00 +02007813 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007814 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007815 ;;
7816 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007817 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007818 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007819 TARGET_BASE_ARCH=mips
Juan Quintela25be210f2009-10-07 02:41:00 +02007820 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007821 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007822 moxie)
7823 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007824 nios2)
7825 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007826 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007827 TARGET_ARCH=openrisc
7828 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007829 ;;
aurel322408a522008-04-20 20:19:44 +00007830 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007831 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007832 ;;
aurel322408a522008-04-20 20:19:44 +00007833 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007834 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007835 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307836 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007837 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007838 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007839 ppc64le)
7840 TARGET_ARCH=ppc64
7841 TARGET_BASE_ARCH=ppc
7842 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307843 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007844 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 -05007845 ;;
aurel322408a522008-04-20 20:19:44 +00007846 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007847 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007848 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007849 TARGET_ABI_DIR=ppc
Juan Quintela25be210f2009-10-07 02:41:00 +02007850 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007851 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007852 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007853 riscv32)
7854 TARGET_BASE_ARCH=riscv
7855 TARGET_ABI_DIR=riscv
7856 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007857 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 +13007858 ;;
7859 riscv64)
7860 TARGET_BASE_ARCH=riscv
7861 TARGET_ABI_DIR=riscv
7862 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007863 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 +13007864 ;;
aurel322408a522008-04-20 20:19:44 +00007865 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007866 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007867 bflt="yes"
7868 ;;
7869 sparc)
aurel322408a522008-04-20 20:19:44 +00007870 ;;
7871 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007872 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007873 ;;
7874 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007875 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007876 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007877 TARGET_ABI_DIR=sparc
Juan Quintela25be210f2009-10-07 02:41:00 +02007878 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007879 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007880 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007881 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007882 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 +01007883 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007884 tilegx)
7885 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007886 tricore)
7887 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007888 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007889 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007890 xtensa|xtensaeb)
7891 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007892 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007893 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007894 ;;
aurel322408a522008-04-20 20:19:44 +00007895 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007896 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007897 ;;
7898esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007899# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7900if [ "$TARGET_BASE_ARCH" = "" ]; then
7901 TARGET_BASE_ARCH=$TARGET_ARCH
7902fi
7903
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007904symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7905
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007906upper() {
7907 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7908}
7909
Stefan Weil89138852016-05-16 15:10:20 +02007910target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be210f2009-10-07 02:41:00 +02007911echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007912echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be210f2009-10-07 02:41:00 +02007913echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007914if [ "$TARGET_ABI_DIR" = "" ]; then
7915 TARGET_ABI_DIR=$TARGET_ARCH
7916fi
Juan Quintela25be210f2009-10-07 02:41:00 +02007917echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007918if [ "$HOST_VARIANT_DIR" != "" ]; then
7919 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7920fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007921
7922if supported_xen_target $target; then
7923 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007924 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007925 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007926 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007927 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007928else
7929 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007930fi
7931if supported_kvm_target $target; then
7932 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007933 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7934else
7935 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007936fi
7937if supported_hax_target $target; then
7938 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007939fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007940if supported_hvf_target $target; then
7941 echo "CONFIG_HVF=y" >> $config_target_mak
7942fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007943if supported_whpx_target $target; then
7944 echo "CONFIG_WHPX=y" >> $config_target_mak
7945fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007946if test "$target_aligned_only" = "yes" ; then
7947 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7948fi
bellardde83cd02003-06-15 20:25:43 +00007949if test "$target_bigendian" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02007950 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007951fi
7952if test "$target_softmmu" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02007953 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007954 if test "$mttcg" = "yes" ; then
7955 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7956 fi
bellardde83cd02003-06-15 20:25:43 +00007957fi
bellard997344f2003-10-27 21:10:39 +00007958if test "$target_user_only" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02007959 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007960 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007961fi
ths831b7822007-01-18 20:06:33 +00007962if test "$target_linux_user" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02007963 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007964fi
pbrook56aebc82008-10-11 17:55:29 +00007965list=""
7966if test ! -z "$gdb_xml_files" ; then
7967 for x in $gdb_xml_files; do
7968 list="$list $source_path/gdb-xml/$x"
7969 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007970 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007971fi
bellardde83cd02003-06-15 20:25:43 +00007972
Eric Blakee633a5c2019-02-04 20:39:37 -06007973if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be210f2009-10-07 02:41:00 +02007974 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007975fi
blueswir184778502008-10-26 20:33:16 +00007976if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be210f2009-10-07 02:41:00 +02007977 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007978fi
bellard5b0753e2005-03-01 21:37:28 +00007979
Alex Bennée716a5072018-04-10 12:19:40 +01007980
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007981# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007982
Juan Quintela4afddb52009-08-03 14:46:45 +02007983cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007984ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007985
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007986disas_config() {
7987 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7988 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7989}
7990
Juan Quintela64656022009-08-03 14:46:53 +02007991for i in $ARCH $TARGET_BASE_ARCH ; do
7992 case "$i" in
7993 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007994 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007995 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007996 aarch64)
7997 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007998 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007999 fi
8000 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008001 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008002 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008003 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008004 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008005 fi
Juan Quintela64656022009-08-03 14:46:53 +02008006 ;;
8007 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008008 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008009 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008010 hppa)
8011 disas_config "HPPA"
8012 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008013 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008014 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008015 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008016 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008017 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008018 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008019 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008020 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008021 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008022 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008023 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008024 ;;
8025 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008026 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008027 if test -n "${cxx}"; then
8028 disas_config "NANOMIPS"
8029 fi
Juan Quintela64656022009-08-03 14:46:53 +02008030 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008031 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008032 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008033 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008034 nios2)
8035 disas_config "NIOS2"
8036 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008037 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008038 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008039 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008040 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008041 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008042 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008043 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008044 disas_config "RISCV"
8045 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008046 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008047 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008048 ;;
8049 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008050 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008051 ;;
8052 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008053 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008054 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008055 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008056 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008057 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008058 esac
8059done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008060if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008061 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008062fi
Juan Quintela64656022009-08-03 14:46:53 +02008063
Juan Quintela6ee71262009-08-03 14:46:47 +02008064case "$ARCH" in
8065alpha)
8066 # Ensure there's only a single GP
8067 cflags="-msmall-data $cflags"
8068;;
8069esac
8070
Juan Quintelad02c1db2009-08-03 14:46:50 +02008071if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008072 if test "$target_linux_user" = "yes" ; then
8073 cflags="-p $cflags"
8074 ldflags="-p $ldflags"
8075 fi
8076 if test "$target_softmmu" = "yes" ; then
8077 ldflags="-p $ldflags"
Juan Quintela25be210f2009-10-07 02:41:00 +02008078 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008079 fi
8080fi
8081
Eric Blakee633a5c2019-02-04 20:39:37 -06008082if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07008083 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02008084fi
Juan Quintelafa282482009-07-22 22:37:39 +02008085
Christian Borntraegere9a35912017-08-23 12:16:23 +02008086# Newer kernels on s390 check for an S390_PGSTE program header and
8087# enable the pgste page table extensions in that case. This makes
8088# the vm.allocate_pgste sysctl unnecessary. We enable this program
8089# header if
8090# - we build on s390x
8091# - we build the system emulation for s390x (qemu-system-s390x)
8092# - KVM is enabled
8093# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008094if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8095 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008096 if ld_has --s390-pgste ; then
8097 ldflags="-Wl,--s390-pgste $ldflags"
8098 fi
8099fi
8100
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008101echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be210f2009-10-07 02:41:00 +02008102echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008103
bellard97a847b2003-08-10 21:36:04 +00008104done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008105
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008106echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8107echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8108
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008109if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008110 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008111fi
Richard Hendersone219c492017-09-28 09:01:23 -07008112if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008113 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008114fi
8115if test -n "$LIBCAPSTONE"; then
8116 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8117fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008118
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008119if test "$numa" = "yes"; then
8120 echo "CONFIG_NUMA=y" >> $config_host_mak
8121fi
8122
John Snowfd0e6052015-03-25 18:57:39 -04008123if test "$ccache_cpp2" = "yes"; then
8124 echo "export CCACHE_CPP2=y" >> $config_host_mak
8125fi
8126
Peter Maydelle29e5c62018-11-02 11:52:38 +00008127# If we're using a separate build tree, set it up now.
8128# DIRS are directories which we simply mkdir in the build tree;
8129# LINKS are things to symlink back into the source tree
8130# (these can be both files and directories).
8131# Caution: do not add files or directories here using wildcards. This
8132# will result in problems later if a new file matching the wildcard is
8133# added to the source tree -- nothing will cause configure to be rerun
8134# so the build tree will be missing the link back to the new file, and
8135# tests might fail. Prefer to keep the relevant files in their own
8136# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008137DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8138DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008139DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008140DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008141DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008142LINKS="Makefile"
8143LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8144LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008145LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008146LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008147LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8148LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8149LINKS="$LINKS pc-bios/qemu-icon.bmp"
8150LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008151LINKS="$LINKS tests/acceptance tests/data"
8152LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008153LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008154for bios_file in \
8155 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008156 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008157 $source_path/pc-bios/*.rom \
8158 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008159 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008160 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008161 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008162 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008163 $source_path/pc-bios/palcode-*
8164do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008165 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008166done
8167mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008168for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008169 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008170 symlink "$source_path/$f" "$f"
8171 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008172done
Paul Brook1ad21342009-05-19 16:17:58 +01008173
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008174(for i in $cross_cc_vars; do
8175 export $i
8176done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008177export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008178$source_path/tests/tcg/configure.sh)
8179
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008180# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008181for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008182 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008183 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008184 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008185 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008186 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008187 echo "CC=$cc" >> $config_mak
8188 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008189 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008190 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008191 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008192 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008193 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008194done
8195
Max Reitz76c75602014-05-24 23:24:56 +02008196# set up qemu-iotests in this build directory
8197iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008198
8199echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8200echo >> "$iotests_common_env"
8201echo "export PYTHON='$python'" >> "$iotests_common_env"
8202
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008203# Save the configure command line for later reuse.
8204cat <<EOD >config.status
8205#!/bin/sh
8206# Generated by configure.
8207# Run this file to recreate the current configuration.
8208# Compiler output produced by configure, useful for debugging
8209# configure, is in config.log if it exists.
8210EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008211
8212preserve_env() {
8213 envname=$1
8214
8215 eval envval=\$$envname
8216
8217 if test -n "$envval"
8218 then
8219 echo "$envname='$envval'" >> config.status
8220 echo "export $envname" >> config.status
8221 else
8222 echo "unset $envname" >> config.status
8223 fi
8224}
8225
8226# Preserve various env variables that influence what
8227# features/build target configure will detect
8228preserve_env AR
8229preserve_env AS
8230preserve_env CC
8231preserve_env CPP
8232preserve_env CXX
8233preserve_env INSTALL
8234preserve_env LD
8235preserve_env LD_LIBRARY_PATH
8236preserve_env LIBTOOL
8237preserve_env MAKE
8238preserve_env NM
8239preserve_env OBJCOPY
8240preserve_env PATH
8241preserve_env PKG_CONFIG
8242preserve_env PKG_CONFIG_LIBDIR
8243preserve_env PKG_CONFIG_PATH
8244preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008245preserve_env SDL2_CONFIG
8246preserve_env SMBD
8247preserve_env STRIP
8248preserve_env WINDRES
8249
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008250printf "exec" >>config.status
8251printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008252echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008253chmod +x config.status
8254
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008255rm -r "$TMPDIR1"