blob: 84bedad04b2194df8e5d25fd457115f8d12300ce [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
Alex Bennée39d87c82020-03-03 15:06:20 +0000939# Check for ancillary tools used in testing
940genisoimage=
941for binary in genisoimage
942do
943 if has $binary
944 then
945 genisoimage=$(command -v "$binary")
946 break
947 fi
948done
949
Brade2d88302011-09-02 16:53:28 -0400950: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100951
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100952# Default objcc to clang if available, otherwise use CC
953if has clang; then
954 objcc=clang
955else
956 objcc="$cc"
957fi
958
Juan Quintela3457a3f2009-08-03 14:46:07 +0200959if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200960 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800961 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100962 # MinGW needs -mthreads for TLS and macro _MT.
963 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100964 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400965 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100966 if compile_prog "" "-liberty" ; then
967 LIBS="-liberty $LIBS"
968 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200969 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200970 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300971 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300972 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200973 bindir="\${prefix}"
974 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200975 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200976 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300977 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200978fi
979
Anthony Liguori487fefd2009-06-11 13:28:25 -0500980werror=""
bellard85aa5182007-11-11 20:17:03 +0000981
bellard7d132992003-03-06 23:23:54 +0000982for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200983 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000984 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000985 --help|-h) show_help=yes
986 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400987 --version|-V) exec cat $source_path/VERSION
988 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000989 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000990 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000991 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000992 ;;
aliguoriac0df512008-12-29 17:14:15 +0000993 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000994 ;;
aliguoriac0df512008-12-29 17:14:15 +0000995 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000996 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000997 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000998 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400999 --cxx=*)
1000 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +02001001 --iasl=*) iasl="$optarg"
1002 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +01001003 --objcc=*) objcc="$optarg"
1004 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001005 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +00001006 ;;
pbrook6a882642006-04-17 13:57:12 +00001007 --install=*) install="$optarg"
1008 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +00001009 --python=*) python="$optarg"
1010 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001011 --sphinx-build=*) sphinx_build="$optarg"
1012 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001013 --gcov=*) gcov_tool="$optarg"
1014 ;;
Brade2d88302011-09-02 16:53:28 -04001015 --smbd=*) smbd="$optarg"
1016 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001017 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001018 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001019 --extra-cxxflags=*)
1020 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001021 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001022 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001023 --enable-debug-info)
1024 ;;
1025 --disable-debug-info)
1026 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001027 --cross-cc-*)
1028 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001029 --enable-modules)
1030 modules="yes"
1031 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001032 --disable-modules)
1033 modules="no"
1034 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001035 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001036 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001037 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001038 if test "$target_list_exclude"; then
1039 error_exit "Can't mix --target-list with --target-list-exclude"
1040 fi
1041 ;;
1042 --target-list-exclude=*) target_list_exclude="$optarg"
1043 if test "$target_list"; then
1044 error_exit "Can't mix --target-list-exclude with --target-list"
1045 fi
bellardde83cd02003-06-15 20:25:43 +00001046 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001047 --enable-trace-backends=*) trace_backends="$optarg"
1048 ;;
1049 # XXX: backwards compatibility
1050 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001051 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001052 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001053 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001054 --with-default-devices) default_devices="yes"
1055 ;;
1056 --without-default-devices) default_devices="no"
1057 ;;
bellard7d132992003-03-06 23:23:54 +00001058 --enable-gprof) gprof="yes"
1059 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001060 --enable-gcov) gcov="yes"
1061 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001062 --static)
1063 static="yes"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001064 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001065 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001066 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001067 --mandir=*) mandir="$optarg"
1068 ;;
1069 --bindir=*) bindir="$optarg"
1070 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001071 --libdir=*) libdir="$optarg"
1072 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001073 --libexecdir=*) libexecdir="$optarg"
1074 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001075 --includedir=*) includedir="$optarg"
1076 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001077 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001078 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001079 --with-confsuffix=*) confsuffix="$optarg"
1080 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001081 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001082 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001083 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001084 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001085 --localstatedir=*) local_statedir="$optarg"
1086 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001087 --firmwarepath=*) firmwarepath="$optarg"
1088 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001089 --host=*|--build=*|\
1090 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001091 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001092 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1093 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1094 # These switches are silently ignored, for compatibility with
1095 # autoconf-generated configure scripts. This allows QEMU's
1096 # configure to be used by RPM and similar macros that set
1097 # lots of directory switches by default.
1098 ;;
bellard97a847b2003-08-10 21:36:04 +00001099 --disable-sdl) sdl="no"
1100 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001101 --enable-sdl) sdl="yes"
1102 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001103 --disable-sdl-image) sdl_image="no"
1104 ;;
1105 --enable-sdl-image) sdl_image="yes"
1106 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001107 --disable-qom-cast-debug) qom_cast_debug="no"
1108 ;;
1109 --enable-qom-cast-debug) qom_cast_debug="yes"
1110 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301111 --disable-virtfs) virtfs="no"
1112 ;;
1113 --enable-virtfs) virtfs="yes"
1114 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001115 --disable-mpath) mpath="no"
1116 ;;
1117 --enable-mpath) mpath="yes"
1118 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001119 --disable-vnc) vnc="no"
1120 ;;
1121 --enable-vnc) vnc="yes"
1122 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001123 --oss-lib=*) oss_lib="$optarg"
1124 ;;
malc0c58ac12008-06-25 21:04:05 +00001125 --audio-drv-list=*) audio_drv_list="$optarg"
1126 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001127 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001128 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001129 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001130 ;;
aurel32f8393942009-04-13 18:45:38 +00001131 --enable-debug-tcg) debug_tcg="yes"
1132 ;;
1133 --disable-debug-tcg) debug_tcg="no"
1134 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001135 --enable-debug)
1136 # Enable debugging options that aren't excessively noisy
1137 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001138 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001139 debug="yes"
1140 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001141 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001142 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001143 --enable-sanitizers) sanitizers="yes"
1144 ;;
1145 --disable-sanitizers) sanitizers="no"
1146 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001147 --enable-sparse) sparse="yes"
1148 ;;
1149 --disable-sparse) sparse="no"
1150 ;;
aliguori1625af82009-04-05 17:41:02 +00001151 --disable-strip) strip_opt="no"
1152 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001153 --disable-vnc-sasl) vnc_sasl="no"
1154 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001155 --enable-vnc-sasl) vnc_sasl="yes"
1156 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001157 --disable-vnc-jpeg) vnc_jpeg="no"
1158 ;;
1159 --enable-vnc-jpeg) vnc_jpeg="yes"
1160 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001161 --disable-vnc-png) vnc_png="no"
1162 ;;
1163 --enable-vnc-png) vnc_png="yes"
1164 ;;
bellard443f1372004-06-04 11:13:20 +00001165 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001166 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001167 --enable-slirp=git) slirp="git"
1168 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001169 --enable-slirp=system) slirp="system"
1170 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001171 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001172 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001173 --enable-vde) vde="yes"
1174 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001175 --disable-netmap) netmap="no"
1176 ;;
1177 --enable-netmap) netmap="yes"
1178 ;;
aliguorie37630c2009-04-22 15:19:10 +00001179 --disable-xen) xen="no"
1180 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001181 --enable-xen) xen="yes"
1182 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001183 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1184 ;;
1185 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1186 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001187 --disable-brlapi) brlapi="no"
1188 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001189 --enable-brlapi) brlapi="yes"
1190 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001191 --disable-kvm) kvm="no"
1192 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001193 --enable-kvm) kvm="yes"
1194 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001195 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001196 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001197 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001198 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001199 --disable-hvf) hvf="no"
1200 ;;
1201 --enable-hvf) hvf="yes"
1202 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001203 --disable-whpx) whpx="no"
1204 ;;
1205 --enable-whpx) whpx="yes"
1206 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001207 --disable-tcg-interpreter) tcg_interpreter="no"
1208 ;;
1209 --enable-tcg-interpreter) tcg_interpreter="yes"
1210 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001211 --disable-cap-ng) cap_ng="no"
1212 ;;
1213 --enable-cap-ng) cap_ng="yes"
1214 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001215 --disable-tcg) tcg="no"
1216 ;;
1217 --enable-tcg) tcg="yes"
1218 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001219 --disable-malloc-trim) malloc_trim="no"
1220 ;;
1221 --enable-malloc-trim) malloc_trim="yes"
1222 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001223 --disable-spice) spice="no"
1224 ;;
1225 --enable-spice) spice="yes"
1226 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001227 --disable-libiscsi) libiscsi="no"
1228 ;;
1229 --enable-libiscsi) libiscsi="yes"
1230 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001231 --disable-libnfs) libnfs="no"
1232 ;;
1233 --enable-libnfs) libnfs="yes"
1234 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001235 --enable-profiler) profiler="yes"
1236 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001237 --disable-cocoa) cocoa="no"
1238 ;;
malcc2de5c92008-06-28 19:13:06 +00001239 --enable-cocoa)
1240 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001241 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001242 ;;
pbrookcad25d62006-03-19 16:31:11 +00001243 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001244 ;;
pbrookcad25d62006-03-19 16:31:11 +00001245 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001246 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001247 --disable-user)
1248 linux_user="no" ;
1249 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001250 ;;
1251 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001252 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001253 ;;
ths831b7822007-01-18 20:06:33 +00001254 --enable-linux-user) linux_user="yes"
1255 ;;
blueswir184778502008-10-26 20:33:16 +00001256 --disable-bsd-user) bsd_user="no"
1257 ;;
1258 --enable-bsd-user) bsd_user="yes"
1259 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001260 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001261 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001262 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001263 ;;
bellard85aa5182007-11-11 20:17:03 +00001264 --enable-werror) werror="yes"
1265 ;;
1266 --disable-werror) werror="no"
1267 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001268 --enable-stack-protector) stack_protector="yes"
1269 ;;
1270 --disable-stack-protector) stack_protector="no"
1271 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001272 --disable-curses) curses="no"
1273 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001274 --enable-curses) curses="yes"
1275 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001276 --disable-iconv) iconv="no"
1277 ;;
1278 --enable-iconv) iconv="yes"
1279 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001280 --disable-curl) curl="no"
1281 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001282 --enable-curl) curl="yes"
1283 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001284 --disable-fdt) fdt="no"
1285 ;;
1286 --enable-fdt) fdt="yes"
1287 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001288 --disable-linux-aio) linux_aio="no"
1289 ;;
1290 --enable-linux-aio) linux_aio="yes"
1291 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001292 --disable-linux-io-uring) linux_io_uring="no"
1293 ;;
1294 --enable-linux-io-uring) linux_io_uring="yes"
1295 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001296 --disable-attr) attr="no"
1297 ;;
1298 --enable-attr) attr="yes"
1299 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001300 --disable-membarrier) membarrier="no"
1301 ;;
1302 --enable-membarrier) membarrier="yes"
1303 ;;
ths77755342008-11-27 15:45:16 +00001304 --disable-blobs) blobs="no"
1305 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001306 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001307 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001308 --with-coroutine=*) coroutine="$optarg"
1309 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001310 --disable-coroutine-pool) coroutine_pool="no"
1311 ;;
1312 --enable-coroutine-pool) coroutine_pool="yes"
1313 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001314 --enable-debug-stack-usage) debug_stack_usage="yes"
1315 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001316 --enable-crypto-afalg) crypto_afalg="yes"
1317 ;;
1318 --disable-crypto-afalg) crypto_afalg="no"
1319 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001320 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001321 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001322 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001323 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001324 --disable-vhost-net) vhost_net="no"
1325 ;;
1326 --enable-vhost-net) vhost_net="yes"
1327 ;;
Gonglei042cea22018-03-01 21:46:28 +08001328 --disable-vhost-crypto) vhost_crypto="no"
1329 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001330 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001331 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001332 --disable-vhost-scsi) vhost_scsi="no"
1333 ;;
1334 --enable-vhost-scsi) vhost_scsi="yes"
1335 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001336 --disable-vhost-vsock) vhost_vsock="no"
1337 ;;
1338 --enable-vhost-vsock) vhost_vsock="yes"
1339 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001340 --disable-vhost-user-fs) vhost_user_fs="no"
1341 ;;
1342 --enable-vhost-user-fs) vhost_user_fs="yes"
1343 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001344 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001345 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001346 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001347 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001348 --disable-rbd) rbd="no"
1349 ;;
1350 --enable-rbd) rbd="yes"
1351 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001352 --disable-xfsctl) xfs="no"
1353 ;;
1354 --enable-xfsctl) xfs="yes"
1355 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001356 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001357 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001358 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001359 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001360 --disable-libusb) libusb="no"
1361 ;;
1362 --enable-libusb) libusb="yes"
1363 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001364 --disable-usb-redir) usb_redir="no"
1365 ;;
1366 --enable-usb-redir) usb_redir="yes"
1367 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001368 --disable-zlib-test) zlib="no"
1369 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001370 --disable-lzo) lzo="no"
1371 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001372 --enable-lzo) lzo="yes"
1373 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001374 --disable-snappy) snappy="no"
1375 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001376 --enable-snappy) snappy="yes"
1377 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001378 --disable-bzip2) bzip2="no"
1379 ;;
1380 --enable-bzip2) bzip2="yes"
1381 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001382 --enable-lzfse) lzfse="yes"
1383 ;;
1384 --disable-lzfse) lzfse="no"
1385 ;;
Juan Quintela3a678482019-12-17 21:15:24 +01001386 --disable-zstd) zstd="no"
1387 ;;
1388 --enable-zstd) zstd="yes"
1389 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001390 --enable-guest-agent) guest_agent="yes"
1391 ;;
1392 --disable-guest-agent) guest_agent="no"
1393 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001394 --enable-guest-agent-msi) guest_agent_msi="yes"
1395 ;;
1396 --disable-guest-agent-msi) guest_agent_msi="no"
1397 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001398 --with-vss-sdk) vss_win32_sdk=""
1399 ;;
1400 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1401 ;;
1402 --without-vss-sdk) vss_win32_sdk="no"
1403 ;;
1404 --with-win-sdk) win_sdk=""
1405 ;;
1406 --with-win-sdk=*) win_sdk="$optarg"
1407 ;;
1408 --without-win-sdk) win_sdk="no"
1409 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001410 --enable-tools) want_tools="yes"
1411 ;;
1412 --disable-tools) want_tools="no"
1413 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001414 --enable-seccomp) seccomp="yes"
1415 ;;
1416 --disable-seccomp) seccomp="no"
1417 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301418 --disable-glusterfs) glusterfs="no"
1419 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001420 --disable-avx2) avx2_opt="no"
1421 ;;
1422 --enable-avx2) avx2_opt="yes"
1423 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301424 --enable-glusterfs) glusterfs="yes"
1425 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001426 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1427 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001428 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001429 --enable-vhdx|--disable-vhdx)
1430 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1431 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001432 --enable-uuid|--disable-uuid)
1433 echo "$0: $opt is obsolete, UUID support is always built" >&2
1434 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001435 --disable-gtk) gtk="no"
1436 ;;
1437 --enable-gtk) gtk="yes"
1438 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001439 --tls-priority=*) tls_priority="$optarg"
1440 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001441 --disable-gnutls) gnutls="no"
1442 ;;
1443 --enable-gnutls) gnutls="yes"
1444 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001445 --disable-nettle) nettle="no"
1446 ;;
1447 --enable-nettle) nettle="yes"
1448 ;;
1449 --disable-gcrypt) gcrypt="no"
1450 ;;
1451 --enable-gcrypt) gcrypt="yes"
1452 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001453 --disable-auth-pam) auth_pam="no"
1454 ;;
1455 --enable-auth-pam) auth_pam="yes"
1456 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001457 --enable-rdma) rdma="yes"
1458 ;;
1459 --disable-rdma) rdma="no"
1460 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001461 --enable-pvrdma) pvrdma="yes"
1462 ;;
1463 --disable-pvrdma) pvrdma="no"
1464 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001465 --disable-vte) vte="no"
1466 ;;
1467 --enable-vte) vte="yes"
1468 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001469 --disable-virglrenderer) virglrenderer="no"
1470 ;;
1471 --enable-virglrenderer) virglrenderer="yes"
1472 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001473 --disable-tpm) tpm="no"
1474 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001475 --enable-tpm) tpm="yes"
1476 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001477 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001478 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001479 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001480 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001481 --disable-live-block-migration) live_block_migration="no"
1482 ;;
1483 --enable-live-block-migration) live_block_migration="yes"
1484 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001485 --disable-numa) numa="no"
1486 ;;
1487 --enable-numa) numa="yes"
1488 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001489 --disable-libxml2) libxml2="no"
1490 ;;
1491 --enable-libxml2) libxml2="yes"
1492 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001493 --disable-tcmalloc) tcmalloc="no"
1494 ;;
1495 --enable-tcmalloc) tcmalloc="yes"
1496 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001497 --disable-jemalloc) jemalloc="no"
1498 ;;
1499 --enable-jemalloc) jemalloc="yes"
1500 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001501 --disable-replication) replication="no"
1502 ;;
1503 --enable-replication) replication="yes"
1504 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001505 --disable-vxhs) vxhs="no"
1506 ;;
1507 --enable-vxhs) vxhs="yes"
1508 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001509 --disable-bochs) bochs="no"
1510 ;;
1511 --enable-bochs) bochs="yes"
1512 ;;
1513 --disable-cloop) cloop="no"
1514 ;;
1515 --enable-cloop) cloop="yes"
1516 ;;
1517 --disable-dmg) dmg="no"
1518 ;;
1519 --enable-dmg) dmg="yes"
1520 ;;
1521 --disable-qcow1) qcow1="no"
1522 ;;
1523 --enable-qcow1) qcow1="yes"
1524 ;;
1525 --disable-vdi) vdi="no"
1526 ;;
1527 --enable-vdi) vdi="yes"
1528 ;;
1529 --disable-vvfat) vvfat="no"
1530 ;;
1531 --enable-vvfat) vvfat="yes"
1532 ;;
1533 --disable-qed) qed="no"
1534 ;;
1535 --enable-qed) qed="yes"
1536 ;;
1537 --disable-parallels) parallels="no"
1538 ;;
1539 --enable-parallels) parallels="yes"
1540 ;;
1541 --disable-sheepdog) sheepdog="no"
1542 ;;
1543 --enable-sheepdog) sheepdog="yes"
1544 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001545 --disable-vhost-user) vhost_user="no"
1546 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001547 --enable-vhost-user) vhost_user="yes"
1548 ;;
1549 --disable-vhost-kernel) vhost_kernel="no"
1550 ;;
1551 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001552 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001553 --disable-capstone) capstone="no"
1554 ;;
1555 --enable-capstone) capstone="yes"
1556 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001557 --enable-capstone=git) capstone="git"
1558 ;;
1559 --enable-capstone=system) capstone="system"
1560 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001561 --with-git=*) git="$optarg"
1562 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001563 --enable-git-update) git_update=yes
1564 ;;
1565 --disable-git-update) git_update=no
1566 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001567 --enable-debug-mutex) debug_mutex=yes
1568 ;;
1569 --disable-debug-mutex) debug_mutex=no
1570 ;;
Junyan He17824402018-07-18 15:47:59 +08001571 --enable-libpmem) libpmem=yes
1572 ;;
1573 --disable-libpmem) libpmem=no
1574 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001575 --enable-xkbcommon) xkbcommon=yes
1576 ;;
1577 --disable-xkbcommon) xkbcommon=no
1578 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001579 --enable-plugins) plugins="yes"
1580 ;;
1581 --disable-plugins) plugins="no"
1582 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001583 --enable-containers) use_containers="yes"
1584 ;;
1585 --disable-containers) use_containers="no"
1586 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001587 --enable-fuzzing) fuzzing=yes
1588 ;;
1589 --disable-fuzzing) fuzzing=no
1590 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001591 *)
1592 echo "ERROR: unknown option $opt"
1593 echo "Try '$0 --help' for more information"
1594 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001595 ;;
bellard7d132992003-03-06 23:23:54 +00001596 esac
1597done
1598
bellard40293e52008-01-31 11:32:10 +00001599case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001600 ppc)
1601 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001602 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001603 ;;
1604 ppc64)
1605 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001606 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001607 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001608 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001609 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001610 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001611 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001612 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001613 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001614 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001615 ;;
ths76d83bd2007-11-18 21:22:10 +00001616 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001617 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001618 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001619 ;;
1620 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001621 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001622 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001623 ;;
bellard40293e52008-01-31 11:32:10 +00001624 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001625 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001626 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001627 ;;
1628 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001629 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1630 # If we truly care, we should simply detect this case at
1631 # runtime and generate the fallback to serial emulation.
1632 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001633 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001634 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001635 x32)
1636 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001637 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001638 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001639 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001640esac
1641
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001642eval "cross_cc_${cpu}=\$host_cc"
1643cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001644QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001645
Peter Maydellaffc88c2016-06-13 11:32:24 +01001646# For user-mode emulation the host arch has to be one we explicitly
1647# support, even if we're using TCI.
1648if [ "$ARCH" = "unknown" ]; then
1649 bsd_user="no"
1650 linux_user="no"
1651fi
1652
Peter Maydell60e0df22011-05-03 14:50:13 +01001653default_target_list=""
1654
Peter Maydell6e92f822013-05-20 16:16:15 +01001655mak_wilds=""
1656
1657if [ "$softmmu" = "yes" ]; then
1658 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001659fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001660if [ "$linux_user" = "yes" ]; then
1661 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001662fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001663if [ "$bsd_user" = "yes" ]; then
1664 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001665fi
1666
Alex Bennée447e1332019-03-19 11:59:12 +00001667if test -z "$target_list_exclude"; then
1668 for config in $mak_wilds; do
1669 default_target_list="${default_target_list} $(basename "$config" .mak)"
1670 done
1671else
1672 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1673 for config in $mak_wilds; do
1674 target="$(basename "$config" .mak)"
1675 exclude="no"
1676 for excl in $exclude_list; do
1677 if test "$excl" = "$target"; then
1678 exclude="yes"
1679 break;
1680 fi
1681 done
1682 if test "$exclude" = "no"; then
1683 default_target_list="${default_target_list} $target"
1684 fi
1685 done
1686fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001687
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001688# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001689trace_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 +01001690
pbrookaf5db582006-04-08 14:26:41 +00001691if test x"$show_help" = x"yes" ; then
1692cat << EOF
1693
1694Usage: configure [options]
1695Options: [defaults in brackets after descriptions]
1696
Stefan Weil08fb77e2013-12-18 22:09:39 +01001697Standard options:
1698 --help print this message
1699 --prefix=PREFIX install in PREFIX [$prefix]
1700 --interp-prefix=PREFIX where to find shared libraries, etc.
1701 use %M for cpu name [$interp_prefix]
1702 --target-list=LIST set target list (default: build everything)
1703$(echo Available targets: $default_target_list | \
1704 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001705 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001706
1707Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001708 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1709 --cc=CC use C compiler CC [$cc]
1710 --iasl=IASL use ACPI compiler IASL [$iasl]
1711 --host-cc=CC use C compiler CC [$host_cc] for code run at
1712 build time
1713 --cxx=CXX use C++ compiler CXX [$cxx]
1714 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1715 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001716 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001717 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001718 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001719 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001720 --make=MAKE use specified make [$make]
1721 --install=INSTALL use specified install [$install]
1722 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001723 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001724 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001725 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001726 --static enable static build [$static]
1727 --mandir=PATH install man pages in PATH
1728 --datadir=PATH install firmware in PATH$confsuffix
1729 --docdir=PATH install documentation in PATH$confsuffix
1730 --bindir=PATH install binaries in PATH
1731 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001732 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001733 --sysconfdir=PATH install config in PATH$confsuffix
1734 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001735 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001736 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001737 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001738 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001739 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001740 --disable-strip disable stripping binaries
1741 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001742 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001743 --audio-drv-list=LIST set audio drivers list:
1744 Available drivers: $audio_possible_drivers
1745 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1746 --block-drv-rw-whitelist=L
1747 set block driver read-write whitelist
1748 (affects only QEMU, not qemu-img)
1749 --block-drv-ro-whitelist=L
1750 set block driver read-only whitelist
1751 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001752 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001753 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001754 --with-trace-file=NAME Full PATH,NAME of file to store traces
1755 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001756 --disable-slirp disable SLIRP userspace network connectivity
1757 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001758 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001759 --oss-lib path to OSS library
1760 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001761 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001762 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001763 --enable-gcov enable test coverage analysis with gcov
1764 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001765 --disable-blobs disable installing provided firmware blobs
1766 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1767 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001768 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001769 --enable-gprof QEMU profiling with gprof
1770 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001771 --enable-debug-stack-usage
1772 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001773 --enable-plugins
1774 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001775 --disable-containers don't use containers for cross-building
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001776
1777Optional features, enabled with --enable-FEATURE and
1778disabled with --disable-FEATURE, default is enabled if available:
1779
1780 system all system emulation targets
1781 user supported user emulation targets
1782 linux-user all linux usermode emulation targets
1783 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001784 docs build documentation
1785 guest-agent build the QEMU Guest Agent
1786 guest-agent-msi build guest agent Windows MSI installation package
1787 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001788 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001789 debug-tcg TCG debugging (default is disabled)
1790 debug-info debugging information
1791 sparse sparse checker
1792
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001793 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001794 nettle nettle cryptography support
1795 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001796 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001797 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001798 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001799 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001800 vte vte support for the gtk UI
1801 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001802 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001803 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001804 vnc-sasl SASL encryption for VNC server
1805 vnc-jpeg JPEG lossy compression for VNC server
1806 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001807 cocoa Cocoa UI (Mac OS X only)
1808 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001809 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001810 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001811 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001812 brlapi BrlAPI (Braile)
1813 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001814 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001815 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001816 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001817 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001818 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001819 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001820 rdma Enable RDMA-based migration
1821 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001822 vde support for vde network
1823 netmap support for netmap network
1824 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001825 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001826 cap-ng libcap-ng support
1827 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001828 vhost-net vhost-net kernel acceleration support
1829 vhost-vsock virtio sockets device support
1830 vhost-scsi vhost-scsi kernel target support
1831 vhost-crypto vhost-user-crypto backend support
1832 vhost-kernel vhost kernel backend support
1833 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001834 spice spice
1835 rbd rados block device (rbd)
1836 libiscsi iscsi support
1837 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001838 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001839 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001840 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001841 usb-redir usb network redirection support
1842 lzo support of lzo compression library
1843 snappy support of snappy compression library
1844 bzip2 support of bzip2 compression library
1845 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001846 lzfse support of lzfse compression library
1847 (for reading lzfse-compressed dmg images)
Juan Quintela3a678482019-12-17 21:15:24 +01001848 zstd support for zstd compression library
1849 (for migration compression)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001850 seccomp seccomp support
1851 coroutine-pool coroutine freelist (better performance)
1852 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001853 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001854 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001855 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001856 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001857 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001858 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001859 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001860 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001861 opengl opengl support
1862 virglrenderer virgl rendering support
1863 xfsctl xfsctl support
1864 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001865 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001866 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001867 bochs bochs image format support
1868 cloop cloop image format support
1869 dmg dmg image format support
1870 qcow1 qcow v1 image format support
1871 vdi vdi image format support
1872 vvfat vvfat image format support
1873 qed qed image format support
1874 parallels parallels image format support
1875 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001876 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001877 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001878 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001879 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001880 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001881
1882NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001883EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001884exit 0
pbrookaf5db582006-04-08 14:26:41 +00001885fi
1886
Thomas Huth9c790242019-03-11 11:20:34 +01001887# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001888rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001889
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001890# Remove syscall_nr.h to be sure they will be regenerated in the build
1891# directory, not in the source directory
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01001892for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
Laurent Vivier28988112020-03-10 11:33:56 +01001893 i386 ; do
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001894 # remove the file if it has been generated in the source directory
1895 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1896 # remove the dependency files
1897 find . -name "*.d" \
1898 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1899 -exec rm {} \;
1900done
1901
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001902if test -z "$python"
1903then
1904 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001905fi
1906
1907# Note that if the Python conditional here evaluates True we will exit
1908# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001909if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1910 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001911 "Use --python=/path/to/python to specify a supported Python."
1912fi
1913
Cleber Rosa755ee702018-11-09 10:07:07 -05001914# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001915python_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 -05001916
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001917# Suppress writing compiled files
1918python="$python -B"
1919
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001920# Check that the C compiler works. Doing this here before testing
1921# the host CPU ensures that we had a valid CC to autodetect the
1922# $cpu var (and we should bail right here if that's not the case).
1923# It also allows the help message to be printed without a CC.
1924write_c_skeleton;
1925if compile_object ; then
1926 : C compiler works ok
1927else
1928 error_exit "\"$cc\" either does not exist or does not work"
1929fi
1930if ! compile_prog ; then
1931 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1932fi
1933
Peter Maydell359bc952011-12-24 13:07:25 +00001934# Now we have handled --enable-tcg-interpreter and know we're not just
1935# printing the help message, bail out if the host CPU isn't supported.
1936if test "$ARCH" = "unknown"; then
1937 if test "$tcg_interpreter" = "yes" ; then
1938 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001939 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001940 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001941 fi
1942fi
1943
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001944# Consult white-list to determine whether to enable werror
1945# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001946if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001947 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001948 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001949 werror="yes"
1950 else
1951 werror="no"
1952 fi
1953fi
1954
Peter Maydellfb59dab2017-03-28 14:01:52 +01001955if test "$bogus_os" = "yes"; then
1956 # Now that we know that we're not printing the help and that
1957 # the compiler works (so the results of the check_defines we used
1958 # to identify the OS are reliable), if we didn't recognize the
1959 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001960 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001961fi
1962
Thomas Huthefc6c072018-12-03 10:12:32 +01001963# Check whether the compiler matches our minimum requirements:
1964cat > $TMPC << EOF
1965#if defined(__clang_major__) && defined(__clang_minor__)
1966# ifdef __apple_build_version__
1967# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1968# error You need at least XCode Clang v5.1 to compile QEMU
1969# endif
1970# else
1971# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1972# error You need at least Clang v3.4 to compile QEMU
1973# endif
1974# endif
1975#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1976# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1977# error You need at least GCC v4.8 to compile QEMU
1978# endif
1979#else
1980# error You either need GCC or Clang to compiler QEMU
1981#endif
1982int main (void) { return 0; }
1983EOF
1984if ! compile_prog "" "" ; then
1985 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1986fi
1987
Paolo Bonzini8d050952010-12-23 11:43:52 +01001988gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1989gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001990gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001991gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001992gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001993gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001994# Note that we do not add -Werror to gcc_flags here, because that would
1995# enable it for all configure tests. If a configure test failed due
1996# to -Werror this would just silently disable some features,
1997# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001998
1999cc_has_warning_flag() {
2000 write_c_skeleton;
2001
Peter Maydella1d29d62012-10-27 22:19:07 +01002002 # Use the positive sense of the flag when testing for -Wno-wombat
2003 # support (gcc will happily accept the -Wno- form of unknown
2004 # warning options).
John Snow93b25862015-03-25 18:57:37 -04002005 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2006 compile_prog "-Werror $optflag" ""
2007}
2008
2009for flag in $gcc_flags; do
2010 if cc_has_warning_flag $flag ; then
2011 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01002012 fi
2013done
2014
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002015if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02002016 cat > $TMPC << EOF
2017int main(int argc, char *argv[])
2018{
2019 char arr[64], *p = arr, *c = argv[0];
2020 while (*c) {
2021 *p++ = *c++;
2022 }
2023 return 0;
2024}
2025EOF
Steven Noonan63678e12014-03-28 17:19:02 +01002026 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002027 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01002028 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01002029 # We need to check both a compile and a link, since some compiler
2030 # setups fail only on a .c->.o compile and some only at link time
2031 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2032 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01002033 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002034 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002035 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01002036 break
2037 fi
2038 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002039 if test "$stack_protector" = yes; then
2040 if test $sp_on = 0; then
2041 error_exit "Stack protector not supported"
2042 fi
2043 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01002044fi
2045
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02002046# Disable -Wmissing-braces on older compilers that warn even for
2047# the "universal" C zero initializer {0}.
2048cat > $TMPC << EOF
2049struct {
2050 int a[2];
2051} x = {0};
2052EOF
2053if compile_object "-Werror" "" ; then
2054 :
2055else
2056 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2057fi
2058
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002059# Our module code doesn't support Windows
2060if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2061 error_exit "Modules are not available for Windows"
2062fi
2063
Thomas Huthd376e9d2018-12-03 11:41:38 +01002064# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002065if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002066 if test "$modules" = "yes" ; then
2067 error_exit "static and modules are mutually incompatible"
2068 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002069 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002070 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002071 else
2072 pie="no"
2073 fi
2074fi
2075
Emilio G. Cota768b7852015-04-29 13:09:02 +02002076# Unconditional check for compiler __thread support
2077 cat > $TMPC << EOF
2078static __thread int tls_var;
2079int main(void) { return tls_var; }
2080EOF
2081
2082if ! compile_prog "-Werror" "" ; then
2083 error_exit "Your compiler does not support the __thread specifier for " \
2084 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2085fi
2086
Avi Kivity40d64442011-11-15 20:12:17 +02002087if test "$pie" = ""; then
2088 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002089 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002090 ;;
2091 *)
2092 pie="no"
2093 ;;
2094 esac
2095fi
2096
2097if test "$pie" != "no" ; then
2098 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002099
2100#ifdef __linux__
2101# define THREAD __thread
2102#else
2103# define THREAD
2104#endif
2105
2106static THREAD int tls_var;
2107
2108int main(void) { return tls_var; }
2109
Avi Kivity40d64442011-11-15 20:12:17 +02002110EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002111 # check we support --no-pie first...
2112 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2113 CFLAGS_NOPIE="-fno-pie"
2114 LDFLAGS_NOPIE="-nopie"
2115 fi
2116
Avi Kivity40d64442011-11-15 20:12:17 +02002117 if compile_prog "-fPIE -DPIE" "-pie"; then
2118 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002119 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002120 pie="yes"
2121 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002122 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002123 fi
2124 else
2125 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002126 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002127 else
2128 echo "Disabling PIE due to missing toolchain support"
2129 pie="no"
2130 fi
2131 fi
2132fi
2133
Paolo Bonzini09dada42013-04-17 16:26:47 +02002134##########################################
2135# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2136# use i686 as default anyway, but for those that don't, an explicit
2137# specification is necessary
2138
2139if test "$cpu" = "i386"; then
2140 cat > $TMPC << EOF
2141static int sfaa(int *ptr)
2142{
2143 return __sync_fetch_and_and(ptr, 0);
2144}
2145
2146int main(void)
2147{
2148 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002149 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002150 sfaa(&val);
2151 return val;
2152}
2153EOF
2154 if ! compile_prog "" "" ; then
2155 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2156 fi
2157fi
2158
2159#########################################
bellardec530c82006-04-25 22:36:06 +00002160# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002161
bellardec530c82006-04-25 22:36:06 +00002162if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002163 if has $install; then
2164 :
2165 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002166 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2167 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2168 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002169 fi
Stefan Weil89138852016-05-16 15:10:20 +02002170 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002171 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2172 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2173 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002174 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002175 if has ar; then
2176 :
2177 else
bellardec530c82006-04-25 22:36:06 +00002178 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002179 error_exit "No path includes ar" \
2180 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002181 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002182 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002183 fi
ths5fafdf22007-09-16 21:08:06 +00002184fi
bellardec530c82006-04-25 22:36:06 +00002185
Stefan Weilafb63eb2012-09-26 22:04:38 +02002186if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002187 for target in $default_target_list; do
2188 supported_target $target 2>/dev/null && \
2189 target_list="$target_list $target"
2190 done
2191 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002192else
Stefan Weil89138852016-05-16 15:10:20 +02002193 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002194 for target in $target_list; do
2195 # Check that we recognised the target name; this allows a more
2196 # friendly error message than if we let it fall through.
2197 case " $default_target_list " in
2198 *" $target "*)
2199 ;;
2200 *)
2201 error_exit "Unknown target name '$target'"
2202 ;;
2203 esac
2204 supported_target $target || exit 1
2205 done
bellard5327cf42005-01-10 23:18:50 +00002206fi
Peter Maydell25b48332013-05-20 16:16:16 +01002207
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002208# see if system emulation was really requested
2209case " $target_list " in
2210 *"-softmmu "*) softmmu=yes
2211 ;;
2212 *) softmmu=no
2213 ;;
2214esac
bellard5327cf42005-01-10 23:18:50 +00002215
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002216for target in $target_list; do
2217 case "$target" in
2218 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2219 edk2_blobs="yes"
2220 ;;
2221 esac
2222done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002223# The EDK2 binaries are compressed with bzip2
2224if test "$edk2_blobs" = "yes" && ! has bzip2; then
2225 error_exit "The bzip2 program is required for building QEMU"
2226fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002227
Juan Quintela249247c2009-08-12 18:20:25 +02002228feature_not_found() {
2229 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002230 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002231
Peter Maydell76ad07a2013-04-08 12:11:26 +01002232 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002233 "configure was not able to find it." \
2234 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002235}
2236
bellard7d132992003-03-06 23:23:54 +00002237# ---
2238# big/little endian test
2239cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002240short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2241short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2242extern int foo(short *, short *);
2243int main(int argc, char *argv[]) {
2244 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002245}
2246EOF
2247
Mike Frysinger61cc9192013-06-30 23:30:18 -04002248if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002249 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002250 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002251 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002252 bigendian="no"
2253 else
2254 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002255 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002256else
2257 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002258fi
2259
Juan Quintelab0a47e72009-08-12 18:29:49 +02002260##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002261# system tools
2262if test -z "$want_tools"; then
2263 if test "$softmmu" = "no"; then
2264 want_tools=no
2265 else
2266 want_tools=yes
2267 fi
2268fi
2269
2270##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002271# cocoa implies not SDL or GTK
2272# (the cocoa UI code currently assumes it is always the active UI
2273# and doesn't interact well with other UI frontend code)
2274if test "$cocoa" = "yes"; then
2275 if test "$sdl" = "yes"; then
2276 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2277 fi
2278 if test "$gtk" = "yes"; then
2279 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2280 fi
2281 gtk=no
2282 sdl=no
2283fi
2284
Eric Blake6b39b062016-10-11 10:46:23 -05002285# Some versions of Mac OS X incorrectly define SIZE_MAX
2286cat > $TMPC << EOF
2287#include <stdint.h>
2288#include <stdio.h>
2289int main(int argc, char *argv[]) {
2290 return printf("%zu", SIZE_MAX);
2291}
2292EOF
2293have_broken_size_max=no
2294if ! compile_object -Werror ; then
2295 have_broken_size_max=yes
2296fi
2297
Peter Maydella30878e2015-08-14 16:10:52 +01002298##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002299# L2TPV3 probe
2300
2301cat > $TMPC <<EOF
2302#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002303#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002304int main(void) { return sizeof(struct mmsghdr); }
2305EOF
2306if compile_prog "" "" ; then
2307 l2tpv3=yes
2308else
2309 l2tpv3=no
2310fi
2311
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002312#########################################
2313# vhost interdependencies and host support
2314
2315# vhost backends
2316test "$vhost_user" = "" && vhost_user=yes
2317if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2318 error_exit "vhost-user isn't available on win32"
2319fi
2320test "$vhost_kernel" = "" && vhost_kernel=$linux
2321if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2322 error_exit "vhost-kernel is only available on Linux"
2323fi
2324
2325# vhost-kernel devices
2326test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2327if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2328 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2329fi
2330test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2331if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2332 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2333fi
2334
2335# vhost-user backends
2336test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2337if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2338 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2339fi
2340test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2341if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2342 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2343fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002344test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2345if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2346 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2347fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002348
2349# OR the vhost-kernel and vhost-user values for simplicity
2350if test "$vhost_net" = ""; then
2351 test "$vhost_net_user" = "yes" && vhost_net=yes
2352 test "$vhost_kernel" = "yes" && vhost_net=yes
2353fi
2354
Gonglei015a33b2014-07-01 20:58:08 +08002355##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002356# MinGW / Mingw-w64 localtime_r/gmtime_r check
2357
2358if test "$mingw32" = "yes"; then
2359 # Some versions of MinGW / Mingw-w64 lack localtime_r
2360 # and gmtime_r entirely.
2361 #
2362 # Some versions of Mingw-w64 define a macro for
2363 # localtime_r/gmtime_r.
2364 #
2365 # Some versions of Mingw-w64 will define functions
2366 # for localtime_r/gmtime_r, but only if you have
2367 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2368 # though, unistd.h and pthread.h both define
2369 # that for you.
2370 #
2371 # So this #undef localtime_r and #include <unistd.h>
2372 # are not in fact redundant.
2373cat > $TMPC << EOF
2374#include <unistd.h>
2375#include <time.h>
2376#undef localtime_r
2377int main(void) { localtime_r(NULL, NULL); return 0; }
2378EOF
2379 if compile_prog "" "" ; then
2380 localtime_r="yes"
2381 else
2382 localtime_r="no"
2383 fi
2384fi
2385
2386##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002387# pkg-config probe
2388
2389if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002390 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002391fi
2392
2393##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002394# NPTL probe
2395
Peter Maydell24cb36a2013-07-16 18:45:00 +01002396if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002397 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002398#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002399#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002400int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002401#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2402#error bork
2403#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002404 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002405}
2406EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002407 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002408 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002409 fi
pbrookbd0c5662008-05-29 14:34:11 +00002410fi
2411
balrogac629222008-10-11 09:56:04 +00002412##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002413# lzo check
2414
2415if test "$lzo" != "no" ; then
2416 cat > $TMPC << EOF
2417#include <lzo/lzo1x.h>
2418int main(void) { lzo_version(); return 0; }
2419EOF
2420 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002421 libs_softmmu="$libs_softmmu -llzo2"
2422 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002423 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002424 if test "$lzo" = "yes"; then
2425 feature_not_found "liblzo2" "Install liblzo2 devel"
2426 fi
2427 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002428 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002429fi
2430
2431##########################################
2432# snappy check
2433
2434if test "$snappy" != "no" ; then
2435 cat > $TMPC << EOF
2436#include <snappy-c.h>
2437int main(void) { snappy_max_compressed_length(4096); return 0; }
2438EOF
2439 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002440 libs_softmmu="$libs_softmmu -lsnappy"
2441 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002442 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002443 if test "$snappy" = "yes"; then
2444 feature_not_found "libsnappy" "Install libsnappy devel"
2445 fi
2446 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002447 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002448fi
2449
2450##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002451# bzip2 check
2452
2453if test "$bzip2" != "no" ; then
2454 cat > $TMPC << EOF
2455#include <bzlib.h>
2456int main(void) { BZ2_bzlibVersion(); return 0; }
2457EOF
2458 if compile_prog "" "-lbz2" ; then
2459 bzip2="yes"
2460 else
2461 if test "$bzip2" = "yes"; then
2462 feature_not_found "libbzip2" "Install libbzip2 devel"
2463 fi
2464 bzip2="no"
2465 fi
2466fi
2467
2468##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002469# lzfse check
2470
2471if test "$lzfse" != "no" ; then
2472 cat > $TMPC << EOF
2473#include <lzfse.h>
2474int main(void) { lzfse_decode_scratch_size(); return 0; }
2475EOF
2476 if compile_prog "" "-llzfse" ; then
2477 lzfse="yes"
2478 else
2479 if test "$lzfse" = "yes"; then
2480 feature_not_found "lzfse" "Install lzfse devel"
2481 fi
2482 lzfse="no"
2483 fi
2484fi
2485
2486##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002487# zstd check
2488
2489if test "$zstd" != "no" ; then
2490 if $pkg_config --exist libzstd ; then
2491 zstd_cflags="$($pkg_config --cflags libzstd)"
2492 zstd_libs="$($pkg_config --libs libzstd)"
2493 LIBS="$zstd_libs $LIBS"
2494 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2495 zstd="yes"
2496 else
2497 if test "$zstd" = "yes" ; then
2498 feature_not_found "libzstd" "Install libzstd devel"
2499 fi
2500 zstd="no"
2501 fi
2502fi
2503
2504##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002505# libseccomp check
2506
2507if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002508 libseccomp_minver="2.3.0"
2509 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002510 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2511 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002512 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002513 else
Andrew Jones693e5912015-09-30 11:59:18 -04002514 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002515 feature_not_found "libseccomp" \
2516 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002517 fi
2518 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002519 fi
2520fi
2521##########################################
aliguorie37630c2009-04-22 15:19:10 +00002522# xen probe
2523
Juan Quintelafc321b42009-08-12 18:29:55 +02002524if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002525 # Check whether Xen library path is specified via --extra-ldflags to avoid
2526 # overriding this setting with pkg-config output. If not, try pkg-config
2527 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002528
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002529 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2530 $pkg_config --exists xencontrol ; then
2531 xen_ctrl_version="$(printf '%d%02d%02d' \
2532 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2533 xen=yes
2534 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2535 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002536 if $pkg_config --exists xentoolcore; then
2537 xen_pc="$xen_pc xentoolcore"
2538 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002539 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2540 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002541 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002542
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002543 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002544 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002545
2546 # First we test whether Xen headers and libraries are available.
2547 # If no, we are done and there is no Xen support.
2548 # If yes, more tests are run to detect the Xen version.
2549
2550 # Xen (any)
2551 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002552#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002553int main(void) {
2554 return 0;
2555}
2556EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002557 if ! compile_prog "" "$xen_libs" ; then
2558 # Xen not found
2559 if test "$xen" = "yes" ; then
2560 feature_not_found "xen" "Install xen devel"
2561 fi
2562 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002563
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002564 # Xen unstable
2565 elif
2566 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002567#undef XC_WANT_COMPAT_DEVICEMODEL_API
2568#define __XEN_TOOLS__
2569#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002570#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002571int main(void) {
2572 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002573 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002574
2575 xd = xendevicemodel_open(0, 0);
2576 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2577
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002578 xfmem = xenforeignmemory_open(0, 0);
2579 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2580
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002581 return 0;
2582}
2583EOF
2584 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2585 then
2586 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2587 xen_ctrl_version=41100
2588 xen=yes
2589 elif
2590 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002591#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2592#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002593#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002594int main(void) {
2595 xenforeignmemory_handle *xfmem;
2596
2597 xfmem = xenforeignmemory_open(0, 0);
2598 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002599 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002600
2601 return 0;
2602}
2603EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002604 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002605 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002606 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002607 xen_ctrl_version=41000
2608 xen=yes
2609 elif
2610 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002611#undef XC_WANT_COMPAT_DEVICEMODEL_API
2612#define __XEN_TOOLS__
2613#include <xendevicemodel.h>
2614int main(void) {
2615 xendevicemodel_handle *xd;
2616
2617 xd = xendevicemodel_open(0, 0);
2618 xendevicemodel_close(xd);
2619
2620 return 0;
2621}
2622EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002623 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2624 then
2625 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2626 xen_ctrl_version=40900
2627 xen=yes
2628 elif
2629 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002630/*
2631 * If we have stable libs the we don't want the libxc compat
2632 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002633 *
2634 * Also, check if xengnttab_grant_copy_segment_t is defined and
2635 * grant copy operation is implemented.
2636 */
2637#undef XC_WANT_COMPAT_EVTCHN_API
2638#undef XC_WANT_COMPAT_GNTTAB_API
2639#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2640#include <xenctrl.h>
2641#include <xenstore.h>
2642#include <xenevtchn.h>
2643#include <xengnttab.h>
2644#include <xenforeignmemory.h>
2645#include <stdint.h>
2646#include <xen/hvm/hvm_info_table.h>
2647#if !defined(HVM_MAX_VCPUS)
2648# error HVM_MAX_VCPUS not defined
2649#endif
2650int main(void) {
2651 xc_interface *xc = NULL;
2652 xenforeignmemory_handle *xfmem;
2653 xenevtchn_handle *xe;
2654 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002655 xengnttab_grant_copy_segment_t* seg = NULL;
2656
2657 xs_daemon_open();
2658
2659 xc = xc_interface_open(0, 0, 0);
2660 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2661 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2662 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2663 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002664
2665 xfmem = xenforeignmemory_open(0, 0);
2666 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2667
2668 xe = xenevtchn_open(0, 0);
2669 xenevtchn_fd(xe);
2670
2671 xg = xengnttab_open(0, 0);
2672 xengnttab_grant_copy(xg, 0, seg);
2673
2674 return 0;
2675}
2676EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002677 compile_prog "" "$xen_libs $xen_stable_libs"
2678 then
2679 xen_ctrl_version=40800
2680 xen=yes
2681 elif
2682 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002683/*
2684 * If we have stable libs the we don't want the libxc compat
2685 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002686 */
2687#undef XC_WANT_COMPAT_EVTCHN_API
2688#undef XC_WANT_COMPAT_GNTTAB_API
2689#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2690#include <xenctrl.h>
2691#include <xenstore.h>
2692#include <xenevtchn.h>
2693#include <xengnttab.h>
2694#include <xenforeignmemory.h>
2695#include <stdint.h>
2696#include <xen/hvm/hvm_info_table.h>
2697#if !defined(HVM_MAX_VCPUS)
2698# error HVM_MAX_VCPUS not defined
2699#endif
2700int main(void) {
2701 xc_interface *xc = NULL;
2702 xenforeignmemory_handle *xfmem;
2703 xenevtchn_handle *xe;
2704 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002705
2706 xs_daemon_open();
2707
2708 xc = xc_interface_open(0, 0, 0);
2709 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2710 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2711 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2712 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002713
2714 xfmem = xenforeignmemory_open(0, 0);
2715 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2716
2717 xe = xenevtchn_open(0, 0);
2718 xenevtchn_fd(xe);
2719
2720 xg = xengnttab_open(0, 0);
2721 xengnttab_map_grant_ref(xg, 0, 0, 0);
2722
2723 return 0;
2724}
2725EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002726 compile_prog "" "$xen_libs $xen_stable_libs"
2727 then
2728 xen_ctrl_version=40701
2729 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002730
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002731 # Xen 4.6
2732 elif
2733 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002734#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002735#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002736#include <stdint.h>
2737#include <xen/hvm/hvm_info_table.h>
2738#if !defined(HVM_MAX_VCPUS)
2739# error HVM_MAX_VCPUS not defined
2740#endif
2741int main(void) {
2742 xc_interface *xc;
2743 xs_daemon_open();
2744 xc = xc_interface_open(0, 0, 0);
2745 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2746 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002747 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002748 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002749 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002750 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002751 return 0;
2752}
2753EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002754 compile_prog "" "$xen_libs"
2755 then
2756 xen_ctrl_version=40600
2757 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002758
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002759 # Xen 4.5
2760 elif
2761 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002762#include <xenctrl.h>
2763#include <xenstore.h>
2764#include <stdint.h>
2765#include <xen/hvm/hvm_info_table.h>
2766#if !defined(HVM_MAX_VCPUS)
2767# error HVM_MAX_VCPUS not defined
2768#endif
2769int main(void) {
2770 xc_interface *xc;
2771 xs_daemon_open();
2772 xc = xc_interface_open(0, 0, 0);
2773 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2774 xc_gnttab_open(NULL, 0);
2775 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2776 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002777 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2778 return 0;
2779}
2780EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002781 compile_prog "" "$xen_libs"
2782 then
2783 xen_ctrl_version=40500
2784 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002785
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002786 elif
2787 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002788#include <xenctrl.h>
2789#include <xenstore.h>
2790#include <stdint.h>
2791#include <xen/hvm/hvm_info_table.h>
2792#if !defined(HVM_MAX_VCPUS)
2793# error HVM_MAX_VCPUS not defined
2794#endif
2795int main(void) {
2796 xc_interface *xc;
2797 xs_daemon_open();
2798 xc = xc_interface_open(0, 0, 0);
2799 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2800 xc_gnttab_open(NULL, 0);
2801 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2802 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002803 return 0;
2804}
2805EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002806 compile_prog "" "$xen_libs"
2807 then
2808 xen_ctrl_version=40200
2809 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002810
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002811 else
2812 if test "$xen" = "yes" ; then
2813 feature_not_found "xen (unsupported version)" \
2814 "Install a supported xen (xen 4.2 or newer)"
2815 fi
2816 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002817 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002818
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002819 if test "$xen" = yes; then
2820 if test $xen_ctrl_version -ge 40701 ; then
2821 libs_softmmu="$xen_stable_libs $libs_softmmu"
2822 fi
2823 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002824 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002825 fi
aliguorie37630c2009-04-22 15:19:10 +00002826fi
2827
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002828if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002829 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002830 xen_pci_passthrough=yes
2831 else
2832 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002833 error_exit "User requested feature Xen PCI Passthrough" \
2834 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002835 fi
2836 xen_pci_passthrough=no
2837 fi
2838fi
2839
aliguorie37630c2009-04-22 15:19:10 +00002840##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002841# Windows Hypervisor Platform accelerator (WHPX) check
2842if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002843 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002844 whpx="yes"
2845 else
2846 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002847 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002848 fi
2849 whpx="no"
2850 fi
2851fi
2852
2853##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002854# Sparse probe
2855if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002856 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002857 sparse=yes
2858 else
2859 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002860 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002861 fi
2862 sparse=no
2863 fi
2864fi
2865
2866##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002867# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002868if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002869 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002870 x11_cflags=$($pkg_config --cflags x11)
2871 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002872fi
2873
2874##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002875# GTK probe
2876
2877if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002878 gtkpackage="gtk+-3.0"
2879 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002880 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002881 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002882 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2883 gtk_libs=$($pkg_config --libs $gtkpackage)
2884 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002885 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002886 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002887 gtk_cflags="$gtk_cflags $x11_cflags"
2888 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002889 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002890 gtk="yes"
2891 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002892 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002893 else
2894 gtk="no"
2895 fi
2896fi
2897
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002898
2899##########################################
2900# GNUTLS probe
2901
2902if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002903 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002904 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002905 gnutls_cflags=$($pkg_config --cflags gnutls)
2906 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002907 # Packaging for the static libraries is not always correct.
2908 # At least ubuntu 18.04 ships only shared libraries.
2909 write_c_skeleton
2910 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002911 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002912 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2913 pass="yes"
2914 fi
2915 fi
2916 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002917 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002918 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002919 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002920 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002921fi
2922
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002923
2924# If user didn't give a --disable/enable-gcrypt flag,
2925# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002926# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002927if test -z "$gcrypt"
2928then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002929 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002930 then
2931 gcrypt="no"
2932 fi
2933fi
2934
2935# If user didn't give a --disable/enable-nettle flag,
2936# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002937# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002938if test -z "$nettle"
2939then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002940 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002941 then
2942 nettle="no"
2943 fi
2944fi
2945
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002946has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002947 if ! has "libgcrypt-config"
2948 then
2949 return 1
2950 fi
2951
2952 if test -n "$cross_prefix"
2953 then
Stefan Weil89138852016-05-16 15:10:20 +02002954 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002955 if test "$host-" != $cross_prefix
2956 then
2957 return 1
2958 fi
2959 fi
2960
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002961 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2962 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2963
2964 if test $maj != 1 || test $min -lt 5
2965 then
2966 return 1
2967 fi
2968
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002969 return 0
2970}
2971
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002972
2973if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002974 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002975 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002976 nettle_cflags=$($pkg_config --cflags nettle)
2977 nettle_libs=$($pkg_config --libs nettle)
2978 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002979 # Link test to make sure the given libraries work (e.g for static).
2980 write_c_skeleton
2981 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002982 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002983 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2984 if test -z "$gcrypt"; then
2985 gcrypt="no"
2986 fi
2987 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002988 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002989 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01002990 if test "$pass" = "yes"
2991 then
2992 cat > $TMPC << EOF
2993#include <nettle/xts.h>
2994int main(void) {
2995 return 0;
2996}
2997EOF
2998 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2999 nettle_xts=yes
3000 qemu_private_xts=no
3001 fi
3002 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003003 if test "$pass" = "no" && test "$nettle" = "yes"; then
3004 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003005 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003006 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003007 fi
3008fi
3009
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003010if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003011 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003012 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003013 gcrypt_cflags=$(libgcrypt-config --cflags)
3014 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003015 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003016 # as it "spreads unnecessary dependencies" which in
3017 # turn breaks static builds...
3018 if test "$static" = "yes"
3019 then
3020 gcrypt_libs="$gcrypt_libs -lgpg-error"
3021 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003022
Richard Hendersona73e82e2019-05-09 18:24:35 -07003023 # Link test to make sure the given libraries work (e.g for static).
3024 write_c_skeleton
3025 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003026 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003027 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3028 pass="yes"
3029 fi
3030 fi
3031 if test "$pass" = "yes"; then
3032 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003033 cat > $TMPC << EOF
3034#include <gcrypt.h>
3035int main(void) {
3036 gcry_mac_hd_t handle;
3037 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3038 GCRY_MAC_FLAG_SECURE, NULL);
3039 return 0;
3040}
3041EOF
3042 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3043 gcrypt_hmac=yes
3044 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003045 cat > $TMPC << EOF
3046#include <gcrypt.h>
3047int main(void) {
3048 gcry_cipher_hd_t handle;
3049 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3050 return 0;
3051}
3052EOF
3053 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3054 gcrypt_xts=yes
3055 qemu_private_xts=no
3056 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003057 elif test "$gcrypt" = "yes"; then
3058 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003059 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003060 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003061 fi
3062fi
3063
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003064
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003065if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3066then
3067 error_exit "Only one of gcrypt & nettle can be enabled"
3068fi
3069
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003070##########################################
3071# libtasn1 - only for the TLS creds/session test suite
3072
3073tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003074tasn1_cflags=""
3075tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003076if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003077 tasn1_cflags=$($pkg_config --cflags libtasn1)
3078 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003079else
3080 tasn1=no
3081fi
3082
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003083
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003084##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003085# PAM probe
3086
3087if test "$auth_pam" != "no"; then
3088 cat > $TMPC <<EOF
3089#include <security/pam_appl.h>
3090#include <stdio.h>
3091int main(void) {
3092 const char *service_name = "qemu";
3093 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003094 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003095 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003096 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003097 return 0;
3098}
3099EOF
3100 if compile_prog "" "-lpam" ; then
3101 auth_pam=yes
3102 else
3103 if test "$auth_pam" = "yes"; then
3104 feature_not_found "PAM" "Install PAM development package"
3105 else
3106 auth_pam=no
3107 fi
3108 fi
3109fi
3110
3111##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003112# getifaddrs (for tests/test-io-channel-socket )
3113
3114have_ifaddrs_h=yes
3115if ! check_include "ifaddrs.h" ; then
3116 have_ifaddrs_h=no
3117fi
3118
3119##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003120# VTE probe
3121
3122if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003123 vteminversion="0.32.0"
3124 if $pkg_config --exists "vte-2.91"; then
3125 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003126 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003127 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003128 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003129 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003130 vte_cflags=$($pkg_config --cflags $vtepackage)
3131 vte_libs=$($pkg_config --libs $vtepackage)
3132 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003133 vte="yes"
3134 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003135 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003136 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003137 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003138 fi
3139fi
3140
3141##########################################
bellard11d9f692004-04-02 20:55:59 +00003142# SDL probe
3143
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003144# Look for sdl configuration program (pkg-config or sdl2-config). Try
3145# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003146
Peter Xuc6093a02018-04-10 13:40:34 +08003147sdl_probe ()
3148{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003149 if $pkg_config sdl2 --exists; then
3150 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003151 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003152 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003153 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003154 sdlversion=$($sdlconfig --version)
3155 else
3156 if test "$sdl" = "yes" ; then
3157 feature_not_found "sdl" "Install SDL2-devel"
3158 fi
3159 sdl=no
3160 # no need to do the rest
3161 return
3162 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003163 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003164 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3165 fi
3166
Juan Quintelaac119f92009-07-27 16:13:15 +02003167 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003168#include <SDL.h>
3169#undef main /* We don't want SDL to override our main() */
3170int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3171EOF
Stefan Weil89138852016-05-16 15:10:20 +02003172 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003173 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003174 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003175 if $pkg_config sdl2 --exists; then
3176 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003177 else
3178 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3179 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003180 else
Stefan Weil89138852016-05-16 15:10:20 +02003181 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003182 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003183 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003184 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003185
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003186 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003187 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003188 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003189 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3190 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003191 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003192 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003193 :
3194 else
3195 sdl=no
3196 fi
3197 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003198 else # sdl not found
3199 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003200 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003201 fi
3202 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003203 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003204}
3205
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003206sdl_image_probe ()
3207{
3208 if test "$sdl_image" != "no" ; then
3209 if $pkg_config SDL2_image --exists; then
3210 if test "$static" = "yes"; then
3211 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3212 else
3213 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3214 fi
3215 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3216 sdl_image=yes
3217
3218 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3219 sdl_libs="$sdl_libs $sdl_image_libs"
3220 else
3221 if test "$sdl_image" = "yes" ; then
3222 feature_not_found "sdl_image" "Install SDL Image devel"
3223 else
3224 sdl_image=no
3225 fi
3226 fi
3227 fi
3228}
3229
Peter Xuc6093a02018-04-10 13:40:34 +08003230if test "$sdl" != "no" ; then
3231 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003232fi
bellard11d9f692004-04-02 20:55:59 +00003233
aliguori5368a422009-03-03 17:37:21 +00003234if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003235 sdl_image_probe
3236else
3237 if test "$sdl_image" = "yes"; then
3238 echo "warning: SDL Image requested, but SDL is not available, disabling"
3239 fi
3240 sdl_image=no
3241fi
3242
3243if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003244 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003245#include <SDL.h>
3246#if defined(SDL_VIDEO_DRIVER_X11)
3247#include <X11/XKBlib.h>
3248#else
3249#error No x11 support
3250#endif
3251int main(void) { return 0; }
3252EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003253 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003254 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003255 sdl_cflags="$sdl_cflags $x11_cflags"
3256 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003257 fi
aliguori5368a422009-03-03 17:37:21 +00003258fi
3259
ths8f28f3f2007-01-05 21:25:54 +00003260##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003261# RDMA needs OpenFabrics libraries
3262if test "$rdma" != "no" ; then
3263 cat > $TMPC <<EOF
3264#include <rdma/rdma_cma.h>
3265int main(void) { return 0; }
3266EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003267 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003268 if compile_prog "" "$rdma_libs" ; then
3269 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003270 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003271 else
3272 if test "$rdma" = "yes" ; then
3273 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003274 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003275 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003276 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003277 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3278 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3279 fi
3280 rdma="no"
3281 fi
3282fi
3283
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003284##########################################
3285# PVRDMA detection
3286
3287cat > $TMPC <<EOF &&
3288#include <sys/mman.h>
3289
3290int
3291main(void)
3292{
3293 char buf = 0;
3294 void *addr = &buf;
3295 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3296
3297 return 0;
3298}
3299EOF
3300
3301if test "$rdma" = "yes" ; then
3302 case "$pvrdma" in
3303 "")
3304 if compile_prog "" ""; then
3305 pvrdma="yes"
3306 else
3307 pvrdma="no"
3308 fi
3309 ;;
3310 "yes")
3311 if ! compile_prog "" ""; then
3312 error_exit "PVRDMA is not supported since mremap is not implemented"
3313 fi
3314 pvrdma="yes"
3315 ;;
3316 "no")
3317 pvrdma="no"
3318 ;;
3319 esac
3320else
3321 if test "$pvrdma" = "yes" ; then
3322 error_exit "PVRDMA requires rdma suppport"
3323 fi
3324 pvrdma="no"
3325fi
ths8d5d2d42007-08-25 01:37:51 +00003326
Yuval Shaiaee108582019-08-18 16:21:06 +03003327# Let's see if enhanced reg_mr is supported
3328if test "$pvrdma" = "yes" ; then
3329
3330cat > $TMPC <<EOF &&
3331#include <infiniband/verbs.h>
3332
3333int
3334main(void)
3335{
3336 struct ibv_mr *mr;
3337 struct ibv_pd *pd = NULL;
3338 size_t length = 10;
3339 uint64_t iova = 0;
3340 int access = 0;
3341 void *addr = NULL;
3342
3343 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3344
3345 ibv_dereg_mr(mr);
3346
3347 return 0;
3348}
3349EOF
3350 if ! compile_prog "" "-libverbs"; then
3351 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3352 fi
3353fi
3354
ths8d5d2d42007-08-25 01:37:51 +00003355##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003356# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003357if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003358 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003359#include <sasl/sasl.h>
3360#include <stdio.h>
3361int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3362EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003363 # Assuming Cyrus-SASL installed in /usr prefix
3364 vnc_sasl_cflags=""
3365 vnc_sasl_libs="-lsasl2"
3366 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3367 vnc_sasl=yes
3368 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003369 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003370 else
3371 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003372 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003373 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003374 vnc_sasl=no
3375 fi
aliguori2f9606b2009-03-06 20:27:28 +00003376fi
3377
3378##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003379# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003380if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003381cat > $TMPC <<EOF
3382#include <stdio.h>
3383#include <jpeglib.h>
3384int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3385EOF
3386 vnc_jpeg_cflags=""
3387 vnc_jpeg_libs="-ljpeg"
3388 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3389 vnc_jpeg=yes
3390 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003391 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003392 else
3393 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003394 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003395 fi
3396 vnc_jpeg=no
3397 fi
3398fi
3399
3400##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003401# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003402if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003403cat > $TMPC <<EOF
3404//#include <stdio.h>
3405#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003406#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003407int main(void) {
3408 png_structp png_ptr;
3409 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003410 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003411}
3412EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003413 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003414 vnc_png_cflags=$($pkg_config libpng --cflags)
3415 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003416 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003417 vnc_png_cflags=""
3418 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003419 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003420 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3421 vnc_png=yes
3422 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003423 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003424 else
3425 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003426 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003427 fi
3428 vnc_png=no
3429 fi
3430fi
3431
3432##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003433# xkbcommon probe
3434if test "$xkbcommon" != "no" ; then
3435 if $pkg_config xkbcommon --exists; then
3436 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3437 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3438 xkbcommon=yes
3439 else
3440 if test "$xkbcommon" = "yes" ; then
3441 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3442 fi
3443 xkbcommon=no
3444 fi
3445fi
3446
aliguori76655d62009-03-06 20:27:37 +00003447
3448##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003449# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003450if test "$xfs" != "no" ; then
3451 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003452#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003453#include <xfs/xfs.h>
3454int main(void)
3455{
3456 xfsctl(NULL, 0, 0, NULL);
3457 return 0;
3458}
3459EOF
3460 if compile_prog "" "" ; then
3461 xfs="yes"
3462 else
3463 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003464 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003465 fi
3466 xfs=no
3467 fi
3468fi
3469
3470##########################################
ths8a16d272008-07-19 09:56:24 +00003471# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003472if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003473 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003474 cat > $TMPC << EOF
3475#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003476int main(void)
3477{
3478 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003479 char s[] = "";
3480 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003481 return 0;
3482}
ths8a16d272008-07-19 09:56:24 +00003483EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003484 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003485 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003486 else
3487 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003488 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003489 fi
3490 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003491 fi
ths8a16d272008-07-19 09:56:24 +00003492fi
3493
3494##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003495# netmap support probe
3496# Apart from looking for netmap headers, we make sure that the host API version
3497# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3498# a minor/major version number. Minor new features will be marked with values up
3499# to 15, and if something happens that requires a change to the backend we will
3500# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003501if test "$netmap" != "no" ; then
3502 cat > $TMPC << EOF
3503#include <inttypes.h>
3504#include <net/if.h>
3505#include <net/netmap.h>
3506#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003507#if (NETMAP_API < 11) || (NETMAP_API > 15)
3508#error
3509#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003510int main(void) { return 0; }
3511EOF
3512 if compile_prog "" "" ; then
3513 netmap=yes
3514 else
3515 if test "$netmap" = "yes" ; then
3516 feature_not_found "netmap"
3517 fi
3518 netmap=no
3519 fi
3520fi
3521
3522##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003523# libcap-ng library probe
3524if test "$cap_ng" != "no" ; then
3525 cap_libs="-lcap-ng"
3526 cat > $TMPC << EOF
3527#include <cap-ng.h>
3528int main(void)
3529{
3530 capng_capability_to_name(CAPNG_EFFECTIVE);
3531 return 0;
3532}
3533EOF
3534 if compile_prog "" "$cap_libs" ; then
3535 cap_ng=yes
3536 libs_tools="$cap_libs $libs_tools"
3537 else
3538 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003539 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003540 fi
3541 cap_ng=no
3542 fi
3543fi
3544
3545##########################################
malcc2de5c92008-06-28 19:13:06 +00003546# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003547
Stefan Weil89138852016-05-16 15:10:20 +02003548audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003549for drv in $audio_drv_list; do
3550 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003551 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003552 if $pkg_config alsa --exists; then
3553 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003554 if test "$drv" = "try-alsa"; then
3555 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3556 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003557 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003558 if test "$drv" = "try-alsa"; then
3559 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3560 else
3561 error_exit "$drv check failed" \
3562 "Make sure to have the $drv libs and headers installed."
3563 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003564 fi
malcc2de5c92008-06-28 19:13:06 +00003565 ;;
3566
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003567 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003568 if $pkg_config libpulse --exists; then
3569 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003570 if test "$drv" = "try-pa"; then
3571 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3572 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003573 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003574 if test "$drv" = "try-pa"; then
3575 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3576 else
3577 error_exit "$drv check failed" \
3578 "Make sure to have the $drv libs and headers installed."
3579 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003580 fi
malcb8e59f12008-07-02 21:03:08 +00003581 ;;
3582
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003583 sdl)
3584 if test "$sdl" = "no"; then
3585 error_exit "sdl not found or disabled, can not use sdl audio driver"
3586 fi
3587 ;;
3588
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003589 try-sdl)
3590 if test "$sdl" = "no"; then
3591 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3592 else
3593 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3594 fi
3595 ;;
3596
Juan Quintela997e6902009-08-03 14:46:29 +02003597 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003598 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003599 ;;
3600
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003601 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003602 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003603 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003604 ;;
3605
3606 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003607 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003608 ;;
3609
malce4c63a62008-07-19 16:15:16 +00003610 *)
malc1c9b2a52008-07-19 16:57:30 +00003611 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003612 error_exit "Unknown driver '$drv' selected" \
3613 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003614 }
3615 ;;
malcc2de5c92008-06-28 19:13:06 +00003616 esac
3617done
ths8f28f3f2007-01-05 21:25:54 +00003618
balrog4d3b6f62008-02-10 16:33:14 +00003619##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003620# BrlAPI probe
3621
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003622if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003623 brlapi_libs="-lbrlapi"
3624 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003625#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003626#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003627int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3628EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003629 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003630 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003631 else
3632 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003633 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003634 fi
3635 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003636 fi
3637fi
aurel322e4d9fb2008-04-08 06:01:02 +00003638
3639##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003640# iconv probe
3641if test "$iconv" != "no" ; then
3642 cat > $TMPC << EOF
3643#include <iconv.h>
3644int main(void) {
3645 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3646 return conv != (iconv_t) -1;
3647}
3648EOF
3649 iconv_prefix_list="/usr/local:/usr"
3650 iconv_lib_list=":-liconv"
3651 IFS=:
3652 for iconv_prefix in $iconv_prefix_list; do
3653 IFS=:
3654 iconv_cflags="-I$iconv_prefix/include"
3655 iconv_ldflags="-L$iconv_prefix/lib"
3656 for iconv_link in $iconv_lib_list; do
3657 unset IFS
3658 iconv_lib="$iconv_ldflags $iconv_link"
3659 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3660 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3661 iconv_found=yes
3662 break
3663 fi
3664 done
3665 if test "$iconv_found" = yes ; then
3666 break
3667 fi
3668 done
3669 if test "$iconv_found" = "yes" ; then
3670 iconv=yes
3671 else
3672 if test "$iconv" = "yes" ; then
3673 feature_not_found "iconv" "Install iconv devel"
3674 fi
3675 iconv=no
3676 fi
3677fi
3678
3679##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003680# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003681if test "$iconv" = "no" ; then
3682 # curses will need iconv
3683 curses=no
3684fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003685if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003686 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003687 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3688 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003689 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003690 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003691 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003692 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003693 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003694 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003695#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003696#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003697#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003698#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003699int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003700 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003701 wchar_t wch = L'w';
3702 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003703 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003704 addwstr(L"wide chars\n");
3705 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003706 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003707 codeset = nl_langinfo(CODESET);
3708 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003709}
balrog4d3b6f62008-02-10 16:33:14 +00003710EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003711 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003712 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003713 # Make sure we get the wide character prototypes
3714 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003715 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003716 for curses_lib in $curses_lib_list; do
3717 unset IFS
3718 if compile_prog "$curses_inc" "$curses_lib" ; then
3719 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003720 break
3721 fi
3722 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003723 if test "$curses_found" = yes ; then
3724 break
3725 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003726 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003727 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003728 if test "$curses_found" = "yes" ; then
3729 curses=yes
3730 else
3731 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003732 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003733 fi
3734 curses=no
3735 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003736fi
balrog4d3b6f62008-02-10 16:33:14 +00003737
blueswir1414f0da2008-08-15 18:20:52 +00003738##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003739# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003740if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003741 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003742 curlconfig="$pkg_config libcurl"
3743 else
3744 curlconfig=curl-config
3745 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003746 cat > $TMPC << EOF
3747#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003748int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003749EOF
Stefan Weil89138852016-05-16 15:10:20 +02003750 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3751 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003752 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003753 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003754 else
3755 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003756 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003757 fi
3758 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003759 fi
3760fi # test "$curl"
3761
3762##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003763# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003764
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003765glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003766glib_modules=gthread-2.0
3767if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003768 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003769fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003770if test "$plugins" = yes; then
3771 glib_modules="$glib_modules gmodule-2.0"
3772fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003773
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003774# This workaround is required due to a bug in pkg-config file for glib as it
3775# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3776
Eric Blakee633a5c2019-02-04 20:39:37 -06003777if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003778 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3779fi
3780
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003781for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003782 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003783 glib_cflags=$($pkg_config --cflags $i)
3784 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003785 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003786 LIBS="$glib_libs $LIBS"
3787 libs_qga="$glib_libs $libs_qga"
3788 else
3789 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3790 fi
3791done
3792
Marc-André Lureauf876b762019-02-21 12:07:00 +01003793if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3794 gio=yes
3795 gio_cflags=$($pkg_config --cflags gio-2.0)
3796 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003797 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003798 if [ ! -x "$gdbus_codegen" ]; then
3799 gdbus_codegen=
3800 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003801else
3802 gio=no
3803fi
3804
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003805if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3806 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3807 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3808fi
3809
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003810# Sanity check that the current size_t matches the
3811# size that glib thinks it should be. This catches
3812# problems on multi-arch where people try to build
3813# 32-bit QEMU while pointing at 64-bit glib headers
3814cat > $TMPC <<EOF
3815#include <glib.h>
3816#include <unistd.h>
3817
3818#define QEMU_BUILD_BUG_ON(x) \
3819 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3820
3821int main(void) {
3822 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3823 return 0;
3824}
3825EOF
3826
Stefan Weil5919e032016-04-28 23:33:41 +02003827if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003828 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3829 "You probably need to set PKG_CONFIG_LIBDIR"\
3830 "to point to the right pkg-config files for your"\
3831 "build target"
3832fi
3833
John Snowbbbf2e02015-03-25 18:57:38 -04003834# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3835cat > $TMPC << EOF
3836#include <glib.h>
3837int main(void) { return 0; }
3838EOF
3839if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3840 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3841 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3842 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3843 fi
3844fi
3845
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003846#########################################
3847# zlib check
3848
3849if test "$zlib" != "no" ; then
3850 if $pkg_config --exists zlib; then
3851 zlib_cflags=$($pkg_config --cflags zlib)
3852 zlib_libs=$($pkg_config --libs zlib)
3853 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3854 LIBS="$zlib_libs $LIBS"
3855 else
3856 cat > $TMPC << EOF
3857#include <zlib.h>
3858int main(void) { zlibVersion(); return 0; }
3859EOF
3860 if compile_prog "" "-lz" ; then
3861 LIBS="$LIBS -lz"
3862 else
3863 error_exit "zlib check failed" \
3864 "Make sure to have the zlib libs and headers installed."
3865 fi
3866 fi
3867fi
3868
Fam Zhenge26110c2014-02-10 14:48:57 +08003869##########################################
3870# SHA command probe for modules
3871if test "$modules" = yes; then
3872 shacmd_probe="sha1sum sha1 shasum"
3873 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003874 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003875 shacmd="$c"
3876 break
3877 fi
3878 done
3879 if test "$shacmd" = ""; then
3880 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3881 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003882fi
3883
3884##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003885# pixman support probe
3886
Eric Blakee633a5c2019-02-04 20:39:37 -06003887if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003888 pixman_cflags=
3889 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003890elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003891 pixman_cflags=$($pkg_config --cflags pixman-1)
3892 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003893else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003894 error_exit "pixman >= 0.21.8 not present." \
3895 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003896fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003897
3898##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003899# libmpathpersist probe
3900
3901if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003902 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003903 cat > $TMPC <<EOF
3904#include <libudev.h>
3905#include <mpath_persist.h>
3906unsigned mpath_mx_alloc_len = 1024;
3907int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003908static struct config *multipath_conf;
3909extern struct udev *udev;
3910extern struct config *get_multipath_config(void);
3911extern void put_multipath_config(struct config *conf);
3912struct udev *udev;
3913struct config *get_multipath_config(void) { return multipath_conf; }
3914void put_multipath_config(struct config *conf) { }
3915
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003916int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003917 udev = udev_new();
3918 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003919 return 0;
3920}
3921EOF
3922 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3923 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003924 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003925 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003926 # probe for the old API
3927 cat > $TMPC <<EOF
3928#include <libudev.h>
3929#include <mpath_persist.h>
3930unsigned mpath_mx_alloc_len = 1024;
3931int logsink;
3932int main(void) {
3933 struct udev *udev = udev_new();
3934 mpath_lib_init(udev);
3935 return 0;
3936}
3937EOF
3938 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3939 mpathpersist=yes
3940 mpathpersist_new_api=no
3941 else
3942 mpathpersist=no
3943 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003944 fi
3945else
3946 mpathpersist=no
3947fi
3948
3949##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003950# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003951PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003952
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003953pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003954cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003955#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003956static void *f(void *p) { return NULL; }
3957int main(void) {
3958 pthread_t thread;
3959 pthread_create(&thread, 0, f, 0);
3960 return 0;
3961}
blueswir1414f0da2008-08-15 18:20:52 +00003962EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003963if compile_prog "" "" ; then
3964 pthread=yes
3965else
3966 for pthread_lib in $PTHREADLIBS_LIST; do
3967 if compile_prog "" "$pthread_lib" ; then
3968 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003969 found=no
3970 for lib_entry in $LIBS; do
3971 if test "$lib_entry" = "$pthread_lib"; then
3972 found=yes
3973 break
3974 fi
3975 done
3976 if test "$found" = "no"; then
3977 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003978 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003979 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003980 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003981 break
3982 fi
3983 done
3984fi
blueswir1414f0da2008-08-15 18:20:52 +00003985
Eric Blakee633a5c2019-02-04 20:39:37 -06003986if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003987 error_exit "pthread check failed" \
3988 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003989fi
3990
Roman Bolshakov479a5742018-12-17 23:26:01 +03003991# check for pthread_setname_np with thread id
3992pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003993cat > $TMPC << EOF
3994#include <pthread.h>
3995
3996static void *f(void *p) { return NULL; }
3997int main(void)
3998{
3999 pthread_t thread;
4000 pthread_create(&thread, 0, f, 0);
4001 pthread_setname_np(thread, "QEMU");
4002 return 0;
4003}
4004EOF
4005if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03004006 pthread_setname_np_w_tid=yes
4007fi
4008
4009# check for pthread_setname_np without thread id
4010pthread_setname_np_wo_tid=no
4011cat > $TMPC << EOF
4012#include <pthread.h>
4013
4014static void *f(void *p) { pthread_setname_np("QEMU"); }
4015int main(void)
4016{
4017 pthread_t thread;
4018 pthread_create(&thread, 0, f, 0);
4019 return 0;
4020}
4021EOF
4022if compile_prog "" "$pthread_lib" ; then
4023 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004024fi
4025
aliguoribf9298b2008-12-05 20:05:26 +00004026##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004027# rbd probe
4028if test "$rbd" != "no" ; then
4029 cat > $TMPC <<EOF
4030#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004031#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004032int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004033 rados_t cluster;
4034 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004035 return 0;
4036}
4037EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004038 rbd_libs="-lrbd -lrados"
4039 if compile_prog "" "$rbd_libs" ; then
4040 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004041 else
4042 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004043 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004044 fi
4045 rbd=no
4046 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004047fi
4048
4049##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004050# libssh probe
4051if test "$libssh" != "no" ; then
4052 if $pkg_config --exists libssh; then
4053 libssh_cflags=$($pkg_config libssh --cflags)
4054 libssh_libs=$($pkg_config libssh --libs)
4055 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004056 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004057 if test "$libssh" = "yes" ; then
4058 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004059 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004060 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004061 fi
4062fi
4063
4064##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004065# Check for libssh 0.8
4066# This is done like this instead of using the LIBSSH_VERSION_* and
4067# SSH_VERSION_* macros because some distributions in the past shipped
4068# snapshots of the future 0.8 from Git, and those snapshots did not
4069# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004070
Pino Toscanob10d49d2019-06-20 22:08:40 +02004071if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004072 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004073#include <libssh/libssh.h>
4074int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004075EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004076 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4077 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004078 fi
4079fi
4080
4081##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004082# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004083
4084if test "$linux_aio" != "no" ; then
4085 cat > $TMPC <<EOF
4086#include <libaio.h>
4087#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004088#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004089int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4090EOF
4091 if compile_prog "" "-laio" ; then
4092 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004093 else
4094 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004095 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004096 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004097 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004098 fi
4099fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004100##########################################
4101# linux-io-uring probe
4102
4103if test "$linux_io_uring" != "no" ; then
4104 if $pkg_config liburing; then
4105 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4106 linux_io_uring_libs=$($pkg_config --libs liburing)
4107 linux_io_uring=yes
4108 else
4109 if test "$linux_io_uring" = "yes" ; then
4110 feature_not_found "linux io_uring" "Install liburing devel"
4111 fi
4112 linux_io_uring=no
4113 fi
4114fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004115
4116##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004117# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004118
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004119if test "$tpm" = ""; then
4120 if test "$mingw32" = "yes"; then
4121 tpm=no
4122 else
4123 tpm=yes
4124 fi
4125elif test "$tpm" = "yes"; then
4126 if test "$mingw32" = "yes" ; then
4127 error_exit "TPM emulation only available on POSIX systems"
4128 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004129fi
4130
4131##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004132# attr probe
4133
4134if test "$attr" != "no" ; then
4135 cat > $TMPC <<EOF
4136#include <stdio.h>
4137#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004138#ifdef CONFIG_LIBATTR
4139#include <attr/xattr.h>
4140#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004141#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004142#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004143int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4144EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004145 if compile_prog "" "" ; then
4146 attr=yes
4147 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004148 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004149 attr=yes
4150 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004151 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004152 else
4153 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004154 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004155 fi
4156 attr=no
4157 fi
4158fi
4159
4160##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004161# iovec probe
4162cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004163#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004164#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004165#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004166int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004167EOF
4168iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004169if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004170 iovec=yes
4171fi
4172
aurel32f652e6a2008-12-16 10:43:48 +00004173##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004174# preadv probe
4175cat > $TMPC <<EOF
4176#include <sys/types.h>
4177#include <sys/uio.h>
4178#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004179int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004180EOF
4181preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004182if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004183 preadv=yes
4184fi
4185
4186##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004187# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004188# fdt support is mandatory for at least some target architectures,
4189# so insist on it if we're building those system emulators.
4190fdt_required=no
4191for target in $target_list; do
4192 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004193 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004194 fdt_required=yes
4195 ;;
4196 esac
4197done
4198
4199if test "$fdt_required" = "yes"; then
4200 if test "$fdt" = "no"; then
4201 error_exit "fdt disabled but some requested targets require it." \
4202 "You can turn off fdt only if you also disable all the system emulation" \
4203 "targets which need it (by specifying a cut down --target-list)."
4204 fi
4205 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004206elif test "$fdt" != "yes" ; then
4207 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004208fi
4209
Laurent Vivierd5999382019-06-21 15:05:44 +02004210# fdt is only required when building softmmu targets
4211if test -z "$fdt" -a "$softmmu" != "yes" ; then
4212 fdt="no"
4213fi
4214
Juan Quintela2df87df2009-08-12 18:29:54 +02004215if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004216 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004217 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004218 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004219 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004220#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004221#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004222int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004223EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004224 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004225 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004226 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004227 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004228 # have GIT checkout, so activate dtc submodule
4229 if test -e "${source_path}/.git" ; then
4230 git_submodules="${git_submodules} dtc"
4231 fi
4232 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004233 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004234 mkdir -p dtc
4235 if [ "$pwd_is_source_path" != "y" ] ; then
4236 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4237 symlink "$source_path/dtc/scripts" "dtc/scripts"
4238 fi
4239 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004240 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4241 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004242 elif test "$fdt" = "yes" ; then
4243 # Not a git build & no libfdt found, prompt for system install
4244 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4245 "Please install the DTC (libfdt) devel package"
4246 else
4247 # don't have and don't want
4248 fdt_libs=
4249 fdt=no
4250 fi
aurel32f652e6a2008-12-16 10:43:48 +00004251 fi
4252fi
4253
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004254libs_softmmu="$libs_softmmu $fdt_libs"
4255
Michael Walle20ff0752011-03-07 23:32:39 +01004256##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004257# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004258
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004259gbm="no"
4260if $pkg_config gbm; then
4261 gbm_cflags="$($pkg_config --cflags gbm)"
4262 gbm_libs="$($pkg_config --libs gbm)"
4263 gbm="yes"
4264fi
4265
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004266if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004267 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004268 if $pkg_config $opengl_pkgs; then
4269 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4270 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004271 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004272 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4273 gtk_gl="yes"
4274 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004275 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004276 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004277 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004278 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004279 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004280 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004281 opengl_libs=""
4282 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004283 fi
4284fi
4285
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004286if test "$opengl" = "yes"; then
4287 cat > $TMPC << EOF
4288#include <epoxy/egl.h>
4289#ifndef EGL_MESA_image_dma_buf_export
4290# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4291#endif
4292int main(void) { return 0; }
4293EOF
4294 if compile_prog "" "" ; then
4295 opengl_dmabuf=yes
4296 fi
4297fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004298
Eric Blakee633a5c2019-02-04 20:39:37 -06004299if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004300 for target in $target_list; do
4301 case $target in
4302 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4303 need_x11=yes
4304 ;;
4305 esac
4306 done
4307fi
4308
Klim Kireeved279a02018-01-12 12:01:19 +03004309##########################################
4310# libxml2 probe
4311if test "$libxml2" != "no" ; then
4312 if $pkg_config --exists libxml-2.0; then
4313 libxml2="yes"
4314 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4315 libxml2_libs=$($pkg_config --libs libxml-2.0)
4316 else
4317 if test "$libxml2" = "yes"; then
4318 feature_not_found "libxml2" "Install libxml2 devel"
4319 fi
4320 libxml2="no"
4321 fi
4322fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004323
Bharata B Raoeb100392012-09-24 14:42:45 +05304324##########################################
4325# glusterfs probe
4326if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004327 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304328 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004329 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4330 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004331 if $pkg_config --atleast-version=4 glusterfs-api; then
4332 glusterfs_xlator_opt="yes"
4333 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004334 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304335 glusterfs_discard="yes"
4336 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304337 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304338 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304339 glusterfs_zerofill="yes"
4340 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004341 cat > $TMPC << EOF
4342#include <glusterfs/api/glfs.h>
4343
4344int
4345main(void)
4346{
4347 /* new glfs_ftruncate() passes two additional args */
4348 return glfs_ftruncate(NULL, 0, NULL, NULL);
4349}
4350EOF
4351 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4352 glusterfs_ftruncate_has_stat="yes"
4353 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004354 cat > $TMPC << EOF
4355#include <glusterfs/api/glfs.h>
4356
4357/* new glfs_io_cbk() passes two additional glfs_stat structs */
4358static void
4359glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4360{}
4361
4362int
4363main(void)
4364{
4365 glfs_io_cbk iocb = &glusterfs_iocb;
4366 iocb(NULL, 0 , NULL, NULL, NULL);
4367 return 0;
4368}
4369EOF
4370 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4371 glusterfs_iocb_has_stat="yes"
4372 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304373 else
4374 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004375 feature_not_found "GlusterFS backend support" \
4376 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304377 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304378 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304379 fi
4380fi
4381
aurel3239386ac2009-04-15 19:48:17 +00004382# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004383# emulator. This is done because older glibc versions don't
4384# have syscall stubs for these implemented. In that case we
4385# don't provide them even if kernel supports them.
4386#
4387inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004388cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004389#include <sys/inotify.h>
4390
4391int
4392main(void)
4393{
4394 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004395 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004396}
4397EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004398if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004399 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004400fi
4401
Riku Voipioc05c7a72010-03-26 15:25:11 +00004402inotify1=no
4403cat > $TMPC << EOF
4404#include <sys/inotify.h>
4405
4406int
4407main(void)
4408{
4409 /* try to start inotify */
4410 return inotify_init1(0);
4411}
4412EOF
4413if compile_prog "" "" ; then
4414 inotify1=yes
4415fi
4416
Riku Voipio099d6b02009-05-05 12:10:04 +03004417# check if pipe2 is there
4418pipe2=no
4419cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004420#include <unistd.h>
4421#include <fcntl.h>
4422
4423int main(void)
4424{
4425 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004426 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004427}
4428EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004429if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004430 pipe2=yes
4431fi
4432
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004433# check if accept4 is there
4434accept4=no
4435cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004436#include <sys/socket.h>
4437#include <stddef.h>
4438
4439int main(void)
4440{
4441 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4442 return 0;
4443}
4444EOF
4445if compile_prog "" "" ; then
4446 accept4=yes
4447fi
4448
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304449# check if tee/splice is there. vmsplice was added same time.
4450splice=no
4451cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304452#include <unistd.h>
4453#include <fcntl.h>
4454#include <limits.h>
4455
4456int main(void)
4457{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004458 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304459 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4460 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4461 return 0;
4462}
4463EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004464if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304465 splice=yes
4466fi
4467
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004468##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004469# libnuma probe
4470
4471if test "$numa" != "no" ; then
4472 cat > $TMPC << EOF
4473#include <numa.h>
4474int main(void) { return numa_available(); }
4475EOF
4476
4477 if compile_prog "" "-lnuma" ; then
4478 numa=yes
4479 libs_softmmu="-lnuma $libs_softmmu"
4480 else
4481 if test "$numa" = "yes" ; then
4482 feature_not_found "numa" "install numactl devel"
4483 fi
4484 numa=no
4485 fi
4486fi
4487
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004488if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4489 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4490 exit 1
4491fi
4492
Yang Zhong5a22ab72017-12-20 21:16:46 +08004493# Even if malloc_trim() is available, these non-libc memory allocators
4494# do not support it.
4495if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4496 if test "$malloc_trim" = "yes" ; then
4497 echo "Disabling malloc_trim with non-libc memory allocator"
4498 fi
4499 malloc_trim="no"
4500fi
4501
4502#######################################
4503# malloc_trim
4504
4505if test "$malloc_trim" != "no" ; then
4506 cat > $TMPC << EOF
4507#include <malloc.h>
4508int main(void) { malloc_trim(0); return 0; }
4509EOF
4510 if compile_prog "" "" ; then
4511 malloc_trim="yes"
4512 else
4513 malloc_trim="no"
4514 fi
4515fi
4516
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004517##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004518# tcmalloc probe
4519
4520if test "$tcmalloc" = "yes" ; then
4521 cat > $TMPC << EOF
4522#include <stdlib.h>
4523int main(void) { malloc(1); return 0; }
4524EOF
4525
4526 if compile_prog "" "-ltcmalloc" ; then
4527 LIBS="-ltcmalloc $LIBS"
4528 else
4529 feature_not_found "tcmalloc" "install gperftools devel"
4530 fi
4531fi
4532
4533##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004534# jemalloc probe
4535
4536if test "$jemalloc" = "yes" ; then
4537 cat > $TMPC << EOF
4538#include <stdlib.h>
4539int main(void) { malloc(1); return 0; }
4540EOF
4541
4542 if compile_prog "" "-ljemalloc" ; then
4543 LIBS="-ljemalloc $LIBS"
4544 else
4545 feature_not_found "jemalloc" "install jemalloc devel"
4546 fi
4547fi
4548
4549##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004550# signalfd probe
4551signalfd="no"
4552cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004553#include <unistd.h>
4554#include <sys/syscall.h>
4555#include <signal.h>
4556int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4557EOF
4558
4559if compile_prog "" "" ; then
4560 signalfd=yes
4561fi
4562
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004563# check if optreset global is declared by <getopt.h>
4564optreset="no"
4565cat > $TMPC << EOF
4566#include <getopt.h>
4567int main(void) { return optreset; }
4568EOF
4569
4570if compile_prog "" "" ; then
4571 optreset=yes
4572fi
4573
Riku Voipioc2882b92009-08-12 15:08:24 +03004574# check if eventfd is supported
4575eventfd=no
4576cat > $TMPC << EOF
4577#include <sys/eventfd.h>
4578
4579int main(void)
4580{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004581 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004582}
4583EOF
4584if compile_prog "" "" ; then
4585 eventfd=yes
4586fi
4587
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004588# check if memfd is supported
4589memfd=no
4590cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004591#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004592
4593int main(void)
4594{
4595 return memfd_create("foo", MFD_ALLOW_SEALING);
4596}
4597EOF
4598if compile_prog "" "" ; then
4599 memfd=yes
4600fi
4601
Cortland Tölva955727d2018-10-08 09:35:19 -07004602# check for usbfs
4603have_usbfs=no
4604if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004605 cat > $TMPC << EOF
4606#include <linux/usbdevice_fs.h>
4607
4608#ifndef USBDEVFS_GET_CAPABILITIES
4609#error "USBDEVFS_GET_CAPABILITIES undefined"
4610#endif
4611
4612#ifndef USBDEVFS_DISCONNECT_CLAIM
4613#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4614#endif
4615
4616int main(void)
4617{
4618 return 0;
4619}
4620EOF
4621 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004622 have_usbfs=yes
4623 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004624fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004625
Ulrich Hechtd0927932009-09-17 20:22:14 +03004626# check for fallocate
4627fallocate=no
4628cat > $TMPC << EOF
4629#include <fcntl.h>
4630
4631int main(void)
4632{
4633 fallocate(0, 0, 0, 0);
4634 return 0;
4635}
4636EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004637if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004638 fallocate=yes
4639fi
4640
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004641# check for fallocate hole punching
4642fallocate_punch_hole=no
4643cat > $TMPC << EOF
4644#include <fcntl.h>
4645#include <linux/falloc.h>
4646
4647int main(void)
4648{
4649 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4650 return 0;
4651}
4652EOF
4653if compile_prog "" "" ; then
4654 fallocate_punch_hole=yes
4655fi
4656
Denis V. Lunevb953f072015-01-30 11:42:14 +03004657# check that fallocate supports range zeroing inside the file
4658fallocate_zero_range=no
4659cat > $TMPC << EOF
4660#include <fcntl.h>
4661#include <linux/falloc.h>
4662
4663int main(void)
4664{
4665 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4666 return 0;
4667}
4668EOF
4669if compile_prog "" "" ; then
4670 fallocate_zero_range=yes
4671fi
4672
Kevin Wolfed911432014-09-29 17:12:59 +02004673# check for posix_fallocate
4674posix_fallocate=no
4675cat > $TMPC << EOF
4676#include <fcntl.h>
4677
4678int main(void)
4679{
4680 posix_fallocate(0, 0, 0);
4681 return 0;
4682}
4683EOF
4684if compile_prog "" "" ; then
4685 posix_fallocate=yes
4686fi
4687
Peter Maydellc727f472011-01-06 11:05:10 +00004688# check for sync_file_range
4689sync_file_range=no
4690cat > $TMPC << EOF
4691#include <fcntl.h>
4692
4693int main(void)
4694{
4695 sync_file_range(0, 0, 0, 0);
4696 return 0;
4697}
4698EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004699if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004700 sync_file_range=yes
4701fi
4702
Peter Maydelldace20d2011-01-10 13:11:24 +00004703# check for linux/fiemap.h and FS_IOC_FIEMAP
4704fiemap=no
4705cat > $TMPC << EOF
4706#include <sys/ioctl.h>
4707#include <linux/fs.h>
4708#include <linux/fiemap.h>
4709
4710int main(void)
4711{
4712 ioctl(0, FS_IOC_FIEMAP, 0);
4713 return 0;
4714}
4715EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004716if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004717 fiemap=yes
4718fi
4719
Ulrich Hechtd0927932009-09-17 20:22:14 +03004720# check for dup3
4721dup3=no
4722cat > $TMPC << EOF
4723#include <unistd.h>
4724
4725int main(void)
4726{
4727 dup3(0, 0, 0);
4728 return 0;
4729}
4730EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004731if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004732 dup3=yes
4733fi
4734
Alex Bligh4e0c6522013-08-21 16:02:43 +01004735# check for ppoll support
4736ppoll=no
4737cat > $TMPC << EOF
4738#include <poll.h>
4739
4740int main(void)
4741{
4742 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4743 ppoll(&pfd, 1, 0, 0);
4744 return 0;
4745}
4746EOF
4747if compile_prog "" "" ; then
4748 ppoll=yes
4749fi
4750
Alex Blighcd758dd2013-08-21 16:02:44 +01004751# check for prctl(PR_SET_TIMERSLACK , ... ) support
4752prctl_pr_set_timerslack=no
4753cat > $TMPC << EOF
4754#include <sys/prctl.h>
4755
4756int main(void)
4757{
4758 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4759 return 0;
4760}
4761EOF
4762if compile_prog "" "" ; then
4763 prctl_pr_set_timerslack=yes
4764fi
4765
Peter Maydell3b6edd12011-02-15 18:35:05 +00004766# check for epoll support
4767epoll=no
4768cat > $TMPC << EOF
4769#include <sys/epoll.h>
4770
4771int main(void)
4772{
4773 epoll_create(0);
4774 return 0;
4775}
4776EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004777if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004778 epoll=yes
4779fi
4780
Peter Maydell227f0212016-06-06 19:58:11 +01004781# epoll_create1 is a later addition
4782# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004783epoll_create1=no
4784cat > $TMPC << EOF
4785#include <sys/epoll.h>
4786
4787int main(void)
4788{
Peter Maydell19e83f62011-04-26 16:56:40 +01004789 /* Note that we use epoll_create1 as a value, not as
4790 * a function being called. This is necessary so that on
4791 * old SPARC glibc versions where the function was present in
4792 * the library but not declared in the header file we will
4793 * fail the configure check. (Otherwise we will get a compiler
4794 * warning but not an error, and will proceed to fail the
4795 * qemu compile where we compile with -Werror.)
4796 */
Blue Swirlc075a722012-08-09 20:21:25 +00004797 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004798}
4799EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004800if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004801 epoll_create1=yes
4802fi
4803
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004804# check for sendfile support
4805sendfile=no
4806cat > $TMPC << EOF
4807#include <sys/sendfile.h>
4808
4809int main(void)
4810{
4811 return sendfile(0, 0, 0, 0);
4812}
4813EOF
4814if compile_prog "" "" ; then
4815 sendfile=yes
4816fi
4817
Riku Voipio51834342014-06-22 11:25:42 +01004818# check for timerfd support (glibc 2.8 and newer)
4819timerfd=no
4820cat > $TMPC << EOF
4821#include <sys/timerfd.h>
4822
4823int main(void)
4824{
4825 return(timerfd_create(CLOCK_REALTIME, 0));
4826}
4827EOF
4828if compile_prog "" "" ; then
4829 timerfd=yes
4830fi
4831
Riku Voipio9af5c902014-08-12 15:58:57 +03004832# check for setns and unshare support
4833setns=no
4834cat > $TMPC << EOF
4835#include <sched.h>
4836
4837int main(void)
4838{
4839 int ret;
4840 ret = setns(0, 0);
4841 ret = unshare(0);
4842 return ret;
4843}
4844EOF
4845if compile_prog "" "" ; then
4846 setns=yes
4847fi
4848
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004849# clock_adjtime probe
4850clock_adjtime=no
4851cat > $TMPC <<EOF
4852#include <time.h>
4853
4854int main(void)
4855{
4856 return clock_adjtime(0, 0);
4857}
4858EOF
4859clock_adjtime=no
4860if compile_prog "" "" ; then
4861 clock_adjtime=yes
4862fi
4863
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004864# syncfs probe
4865syncfs=no
4866cat > $TMPC <<EOF
4867#include <unistd.h>
4868
4869int main(void)
4870{
4871 return syncfs(0);
4872}
4873EOF
4874syncfs=no
4875if compile_prog "" "" ; then
4876 syncfs=yes
4877fi
4878
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004879# check for kcov support (kernel must be 4.4+, compiled with certain options)
4880kcov=no
4881if check_include sys/kcov.h ; then
4882 kcov=yes
4883fi
4884
Peter Maydell5f71eac2019-03-07 14:26:46 +00004885# Check we have a new enough version of sphinx-build
4886has_sphinx_build() {
4887 # This is a bit awkward but works: create a trivial document and
4888 # try to run it with our configuration file (which enforces a
4889 # version requirement). This will fail if either
4890 # sphinx-build doesn't exist at all or if it is too old.
4891 mkdir -p "$TMPDIR1/sphinx"
4892 touch "$TMPDIR1/sphinx/index.rst"
Markus Armbruster903458c2020-02-14 18:18:41 +01004893 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004894}
4895
pbrookcc8ae6d2006-04-23 17:57:59 +00004896# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004897if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004898 if has_sphinx_build; then
4899 sphinx_ok=yes
4900 else
4901 sphinx_ok=no
4902 fi
4903 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004904 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004905 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004906 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004907 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4908 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4909 fi
4910 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004911 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004912 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004913 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004914fi
4915
Stefan Weilf514f412009-10-11 12:44:07 +02004916# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004917byteswap_h=no
4918cat > $TMPC << EOF
4919#include <byteswap.h>
4920int main(void) { return bswap_32(0); }
4921EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004922if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004923 byteswap_h=yes
4924fi
4925
Stefan Weil75f13592013-01-05 12:17:38 +01004926# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004927bswap_h=no
4928cat > $TMPC << EOF
4929#include <sys/endian.h>
4930#include <sys/types.h>
4931#include <machine/bswap.h>
4932int main(void) { return bswap32(0); }
4933EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004934if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004935 bswap_h=yes
4936fi
4937
aliguorida93a1f2008-12-12 20:02:52 +00004938##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004939# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004940if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004941 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004942 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004943 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4944 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004945 else
4946 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004947 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004948 fi
4949 libiscsi="no"
4950 fi
4951fi
4952
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004953##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004954# Do we need libm
4955cat > $TMPC << EOF
4956#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004957int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004958EOF
4959if compile_prog "" "" ; then
4960 :
4961elif compile_prog "" "-lm" ; then
4962 LIBS="-lm $LIBS"
4963 libs_qga="-lm $libs_qga"
4964else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004965 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004966fi
4967
4968##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004969# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004970# uClibc provides 2 versions of clock_gettime(), one with realtime
4971# support and one without. This means that the clock_gettime() don't
4972# need -lrt. We still need it for timer_create() so we check for this
4973# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004974cat > $TMPC <<EOF
4975#include <signal.h>
4976#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004977int main(void) {
4978 timer_create(CLOCK_REALTIME, NULL, NULL);
4979 return clock_gettime(CLOCK_REALTIME, NULL);
4980}
aliguorida93a1f2008-12-12 20:02:52 +00004981EOF
4982
Juan Quintela52166aa2009-08-03 14:46:03 +02004983if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004984 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004985# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004986elif compile_prog "" "$pthread_lib -lrt" ; then
4987 LIBS="$LIBS -lrt"
4988 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004989fi
4990
Thomas Huthd99e97e2019-01-17 18:14:08 +01004991# Check whether we need to link libutil for openpty()
4992cat > $TMPC << EOF
4993extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4994int main(void) { return openpty(0, 0, 0, 0, 0); }
4995EOF
4996
4997if ! compile_prog "" "" ; then
4998 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004999 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01005000 libs_tools="-lutil $libs_tools"
5001 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005002fi
5003
Blue Swirlde5071c2009-09-12 09:58:46 +00005004##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005005# spice probe
5006if test "$spice" != "no" ; then
5007 cat > $TMPC << EOF
5008#include <spice.h>
5009int main(void) { spice_server_new(); return 0; }
5010EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005011 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5012 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005013 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005014 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005015 compile_prog "$spice_cflags" "$spice_libs" ; then
5016 spice="yes"
5017 libs_softmmu="$libs_softmmu $spice_libs"
5018 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005019 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5020 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005021 else
5022 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005023 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005024 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005025 fi
5026 spice="no"
5027 fi
5028fi
5029
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005030# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005031if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005032 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005033 libcacard_cflags=$($pkg_config --cflags libcacard)
5034 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005035 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005036 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005037 if test "$smartcard" = "yes"; then
5038 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005039 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005040 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005041 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005042fi
5043
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005044# check for libusb
5045if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005046 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005047 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005048 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5049 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005050 else
5051 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005052 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005053 fi
5054 libusb="no"
5055 fi
5056fi
5057
Hans de Goede69354a82011-07-19 11:04:10 +02005058# check for usbredirparser for usb network redirection support
5059if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005060 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005061 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005062 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5063 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005064 else
5065 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005066 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005067 fi
5068 usb_redir="no"
5069 fi
5070fi
5071
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005072##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005073# check if we have VSS SDK headers for win
5074
Eric Blakee633a5c2019-02-04 20:39:37 -06005075if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5076 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005077 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005078 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005079 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5080 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005081 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005082 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5083 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005084 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005085 esac
5086 cat > $TMPC << EOF
5087#define __MIDL_user_allocate_free_DEFINED__
5088#include <inc/win2003/vss.h>
5089int main(void) { return VSS_CTX_BACKUP; }
5090EOF
5091 if compile_prog "$vss_win32_include" "" ; then
5092 guest_agent_with_vss="yes"
5093 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005094 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005095 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005096 else
5097 if test "$vss_win32_sdk" != "" ; then
5098 echo "ERROR: Please download and install Microsoft VSS SDK:"
5099 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5100 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5101 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5102 echo "ERROR: The headers are extracted in the directory \`inc'."
5103 feature_not_found "VSS support"
5104 fi
5105 guest_agent_with_vss="no"
5106 fi
5107fi
5108
5109##########################################
5110# lookup Windows platform SDK (if not specified)
5111# The SDK is needed only to build .tlb (type library) file of guest agent
5112# VSS provider from the source. It is usually unnecessary because the
5113# pre-compiled .tlb file is included.
5114
Eric Blakee633a5c2019-02-04 20:39:37 -06005115if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5116 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005117 if test -z "$win_sdk"; then
5118 programfiles="$PROGRAMFILES"
5119 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5120 if test -n "$programfiles"; then
5121 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5122 else
5123 feature_not_found "Windows SDK"
5124 fi
5125 elif test "$win_sdk" = "no"; then
5126 win_sdk=""
5127 fi
5128fi
5129
5130##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005131# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005132if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005133 cat > $TMPC << EOF
5134#include <windows.h>
5135#include <ntddscsi.h>
5136int main(void) {
5137#if !defined(IOCTL_SCSI_GET_ADDRESS)
5138#error Missing required ioctl definitions
5139#endif
5140 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5141 return addr.Lun;
5142}
5143EOF
5144 if compile_prog "" "" ; then
5145 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005146 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005147 fi
5148fi
5149
5150##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005151# virgl renderer probe
5152
5153if test "$virglrenderer" != "no" ; then
5154 cat > $TMPC << EOF
5155#include <virglrenderer.h>
5156int main(void) { virgl_renderer_poll(); return 0; }
5157EOF
5158 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5159 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005160 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005161 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5162 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5163 virglrenderer="yes"
5164 else
5165 if test "$virglrenderer" = "yes" ; then
5166 feature_not_found "virglrenderer"
5167 fi
5168 virglrenderer="no"
5169 fi
5170fi
5171
5172##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005173# capstone
5174
Richard Hendersone219c492017-09-28 09:01:23 -07005175case "$capstone" in
5176 "" | yes)
5177 if $pkg_config capstone; then
5178 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005179 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005180 capstone=git
5181 elif test -e "${source_path}/capstone/Makefile" ; then
5182 capstone=internal
5183 elif test -z "$capstone" ; then
5184 capstone=no
5185 else
5186 feature_not_found "capstone" "Install capstone devel or git submodule"
5187 fi
5188 ;;
5189
5190 system)
5191 if ! $pkg_config capstone; then
5192 feature_not_found "capstone" "Install capstone devel"
5193 fi
5194 ;;
5195esac
5196
5197case "$capstone" in
5198 git | internal)
5199 if test "$capstone" = git; then
5200 git_submodules="${git_submodules} capstone"
5201 fi
5202 mkdir -p capstone
5203 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5204 if test "$mingw32" = "yes"; then
5205 LIBCAPSTONE=capstone.lib
5206 else
5207 LIBCAPSTONE=libcapstone.a
5208 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005209 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005210 ;;
5211
5212 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005213 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005214 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005215 ;;
5216
5217 no)
5218 ;;
5219 *)
5220 error_exit "Unknown state for capstone: $capstone"
5221 ;;
5222esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005223
5224##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005225# check if we have fdatasync
5226
5227fdatasync=no
5228cat > $TMPC << EOF
5229#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005230int main(void) {
5231#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5232return fdatasync(0);
5233#else
Stefan Weile172fe12012-04-06 21:33:20 +02005234#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005235#endif
5236}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005237EOF
5238if compile_prog "" "" ; then
5239 fdatasync=yes
5240fi
5241
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005242##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005243# check if we have madvise
5244
5245madvise=no
5246cat > $TMPC << EOF
5247#include <sys/types.h>
5248#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005249#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005250int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5251EOF
5252if compile_prog "" "" ; then
5253 madvise=yes
5254fi
5255
5256##########################################
5257# check if we have posix_madvise
5258
5259posix_madvise=no
5260cat > $TMPC << EOF
5261#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005262#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005263int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5264EOF
5265if compile_prog "" "" ; then
5266 posix_madvise=yes
5267fi
5268
5269##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005270# check if we have posix_memalign()
5271
5272posix_memalign=no
5273cat > $TMPC << EOF
5274#include <stdlib.h>
5275int main(void) {
5276 void *p;
5277 return posix_memalign(&p, 8, 8);
5278}
5279EOF
5280if compile_prog "" "" ; then
5281 posix_memalign=yes
5282fi
5283
5284##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005285# check if we have posix_syslog
5286
5287posix_syslog=no
5288cat > $TMPC << EOF
5289#include <syslog.h>
5290int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5291EOF
5292if compile_prog "" "" ; then
5293 posix_syslog=yes
5294fi
5295
5296##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005297# check if we have sem_timedwait
5298
5299sem_timedwait=no
5300cat > $TMPC << EOF
5301#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005302int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005303EOF
5304if compile_prog "" "" ; then
5305 sem_timedwait=yes
5306fi
5307
5308##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005309# check if we have strchrnul
5310
5311strchrnul=no
5312cat > $TMPC << EOF
5313#include <string.h>
5314int main(void);
5315// Use a haystack that the compiler shouldn't be able to constant fold
5316char *haystack = (char*)&main;
5317int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5318EOF
5319if compile_prog "" "" ; then
5320 strchrnul=yes
5321fi
5322
Jiufei Xue8a792b02019-04-17 03:08:56 +08005323#########################################
5324# check if we have st_atim
5325
5326st_atim=no
5327cat > $TMPC << EOF
5328#include <sys/stat.h>
5329#include <stddef.h>
5330int main(void) { return offsetof(struct stat, st_atim); }
5331EOF
5332if compile_prog "" "" ; then
5333 st_atim=yes
5334fi
5335
Keno Fischer5c99fa32018-06-29 12:32:10 +02005336##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005337# check if trace backend exists
5338
Lluís Vilanova5b808272014-05-27 15:02:14 +02005339$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005340if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005341 error_exit "invalid trace backends" \
5342 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005343fi
5344
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005345##########################################
5346# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005347if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005348 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005349#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005350int main(void) { return 0; }
5351EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005352 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005353 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005354 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005355 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005356 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005357 fi
5358 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005359 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005360 else
5361 urcu_bp_libs="-lurcu-bp"
5362 fi
5363
5364 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5365 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005366 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005367 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005368 fi
5369fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005370
5371##########################################
5372# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005373if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005374 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005375 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005376 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005377 trace_backend_stap="no"
5378 if has 'stap' ; then
5379 trace_backend_stap="yes"
5380 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005381fi
5382
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005383##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005384# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305385
Peter Maydell7c2acc72013-04-08 12:11:27 +01005386# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005387# is sigcontext. On Windows the only valid backend is the Windows
5388# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005389
5390ucontext_works=no
5391if test "$darwin" != "yes"; then
5392 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305393#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005394#ifdef __stub_makecontext
5395#error Ignoring glibc stub makecontext which will always fail
5396#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005397int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305398EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005399 if compile_prog "" "" ; then
5400 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305401 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005402fi
5403
5404if test "$coroutine" = ""; then
5405 if test "$mingw32" = "yes"; then
5406 coroutine=win32
5407 elif test "$ucontext_works" = "yes"; then
5408 coroutine=ucontext
5409 else
5410 coroutine=sigaltstack
5411 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005412else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005413 case $coroutine in
5414 windows)
5415 if test "$mingw32" != "yes"; then
5416 error_exit "'windows' coroutine backend only valid for Windows"
5417 fi
5418 # Unfortunately the user visible backend name doesn't match the
5419 # coroutine-*.c filename for this case, so we have to adjust it here.
5420 coroutine=win32
5421 ;;
5422 ucontext)
5423 if test "$ucontext_works" != "yes"; then
5424 feature_not_found "ucontext"
5425 fi
5426 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005427 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005428 if test "$mingw32" = "yes"; then
5429 error_exit "only the 'windows' coroutine backend is valid for Windows"
5430 fi
5431 ;;
5432 *)
5433 error_exit "unknown coroutine backend $coroutine"
5434 ;;
5435 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305436fi
5437
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005438if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005439 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005440fi
5441
Peter Lieven7d992e42016-09-27 11:58:45 +02005442if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005443 if test "$coroutine_pool" = "yes"; then
5444 echo "WARN: disabling coroutine pool for stack usage debugging"
5445 coroutine_pool=no
5446 fi
5447fi
5448
5449
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305450##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305451# check if we have open_by_handle_at
5452
Stefan Weil4e1797f2012-06-18 22:11:06 +02005453open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305454cat > $TMPC << EOF
5455#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005456#if !defined(AT_EMPTY_PATH)
5457# error missing definition
5458#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005459int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005460#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305461EOF
5462if compile_prog "" "" ; then
5463 open_by_handle_at=yes
5464fi
5465
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305466########################################
5467# check if we have linux/magic.h
5468
5469linux_magic_h=no
5470cat > $TMPC << EOF
5471#include <linux/magic.h>
5472int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005473 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305474}
5475EOF
5476if compile_prog "" "" ; then
5477 linux_magic_h=yes
5478fi
5479
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005480########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005481# check whether we can disable warning option with a pragma (this is needed
5482# to silence warnings in the headers of some versions of external libraries).
5483# This test has to be compiled with -Werror as otherwise an unknown pragma is
5484# only a warning.
5485#
5486# If we can't selectively disable warning in the code, disable -Werror so that
5487# the build doesn't fail anyway.
5488
Peter Maydell06d71fa2012-07-30 16:13:07 +01005489pragma_disable_unused_but_set=no
5490cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005491#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005492#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005493#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005494
Peter Maydell06d71fa2012-07-30 16:13:07 +01005495int main(void) {
5496 return 0;
5497}
5498EOF
5499if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005500 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005501else
5502 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005503fi
5504
5505########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005506# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005507
5508valgrind_h=no
5509cat > $TMPC << EOF
5510#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005511int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005512 return 0;
5513}
5514EOF
5515if compile_prog "" "" ; then
5516 valgrind_h=yes
5517fi
5518
5519########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005520# check if environ is declared
5521
5522has_environ=no
5523cat > $TMPC << EOF
5524#include <unistd.h>
5525int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005526 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005527 return 0;
5528}
5529EOF
5530if compile_prog "" "" ; then
5531 has_environ=yes
5532fi
5533
Richard Henderson76a347e2012-12-28 14:17:02 -08005534########################################
5535# check if cpuid.h is usable.
5536
Richard Henderson76a347e2012-12-28 14:17:02 -08005537cat > $TMPC << EOF
5538#include <cpuid.h>
5539int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005540 unsigned a, b, c, d;
5541 int max = __get_cpuid_max(0, 0);
5542
5543 if (max >= 1) {
5544 __cpuid(1, a, b, c, d);
5545 }
5546
5547 if (max >= 7) {
5548 __cpuid_count(7, 0, a, b, c, d);
5549 }
5550
5551 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005552}
5553EOF
5554if compile_prog "" "" ; then
5555 cpuid_h=yes
5556fi
5557
Richard Henderson5dd89902017-07-18 18:40:18 -10005558##########################################
5559# avx2 optimization requirement check
5560#
5561# There is no point enabling this if cpuid.h is not usable,
5562# since we won't be able to select the new routines.
5563
Eric Blakee633a5c2019-02-04 20:39:37 -06005564if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005565 cat > $TMPC << EOF
5566#pragma GCC push_options
5567#pragma GCC target("avx2")
5568#include <cpuid.h>
5569#include <immintrin.h>
5570static int bar(void *a) {
5571 __m256i x = *(__m256i *)a;
5572 return _mm256_testz_si256(x, x);
5573}
5574int main(int argc, char *argv[]) { return bar(argv[0]); }
5575EOF
5576 if compile_object "" ; then
5577 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005578 else
5579 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005580 fi
5581fi
5582
Richard Hendersonf5401662013-02-16 12:46:59 -08005583########################################
5584# check if __[u]int128_t is usable.
5585
5586int128=no
5587cat > $TMPC << EOF
5588__int128_t a;
5589__uint128_t b;
5590int main (void) {
5591 a = a + b;
5592 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005593 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005594 return 0;
5595}
5596EOF
5597if compile_prog "" "" ; then
5598 int128=yes
5599fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005600
Richard Henderson7ebee432016-06-29 21:10:59 -07005601#########################################
5602# See if 128-bit atomic operations are supported.
5603
5604atomic128=no
5605if test "$int128" = "yes"; then
5606 cat > $TMPC << EOF
5607int main(void)
5608{
5609 unsigned __int128 x = 0, y = 0;
5610 y = __atomic_load_16(&x, 0);
5611 __atomic_store_16(&x, y, 0);
5612 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5613 return 0;
5614}
5615EOF
5616 if compile_prog "" "" ; then
5617 atomic128=yes
5618 fi
5619fi
5620
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005621cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005622if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005623 cat > $TMPC << EOF
5624int main(void)
5625{
5626 unsigned __int128 x = 0, y = 0;
5627 __sync_val_compare_and_swap_16(&x, y, x);
5628 return 0;
5629}
5630EOF
5631 if compile_prog "" "" ; then
5632 cmpxchg128=yes
5633 fi
5634fi
5635
Richard Hendersondf79b992016-09-02 12:23:57 -07005636#########################################
5637# See if 64-bit atomic operations are supported.
5638# Note that without __atomic builtins, we can only
5639# assume atomic loads/stores max at pointer size.
5640
5641cat > $TMPC << EOF
5642#include <stdint.h>
5643int main(void)
5644{
5645 uint64_t x = 0, y = 0;
5646#ifdef __ATOMIC_RELAXED
5647 y = __atomic_load_8(&x, 0);
5648 __atomic_store_8(&x, y, 0);
5649 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5650 __atomic_exchange_8(&x, y, 0);
5651 __atomic_fetch_add_8(&x, y, 0);
5652#else
5653 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5654 __sync_lock_test_and_set(&x, y);
5655 __sync_val_compare_and_swap(&x, y, 0);
5656 __sync_fetch_and_add(&x, y);
5657#endif
5658 return 0;
5659}
5660EOF
5661if compile_prog "" "" ; then
5662 atomic64=yes
5663fi
5664
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005665#########################################
5666# See if --dynamic-list is supported by the linker
5667ld_dynamic_list="no"
5668if test "$static" = "no" ; then
5669 cat > $TMPTXT <<EOF
5670{
5671 foo;
5672};
5673EOF
5674
5675 cat > $TMPC <<EOF
5676#include <stdio.h>
5677void foo(void);
5678
5679void foo(void)
5680{
5681 printf("foo\n");
5682}
5683
5684int main(void)
5685{
5686 foo();
5687 return 0;
5688}
5689EOF
5690
5691 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5692 ld_dynamic_list="yes"
5693 fi
5694fi
5695
5696#########################################
5697# See if -exported_symbols_list is supported by the linker
5698
5699ld_exported_symbols_list="no"
5700if test "$static" = "no" ; then
5701 cat > $TMPTXT <<EOF
5702 _foo
5703EOF
5704
5705 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5706 ld_exported_symbols_list="yes"
5707 fi
5708fi
5709
5710if test "$plugins" = "yes" &&
5711 test "$ld_dynamic_list" = "no" &&
5712 test "$ld_exported_symbols_list" = "no" ; then
5713 error_exit \
5714 "Plugin support requires dynamic linking and specifying a set of symbols " \
5715 "that are exported to plugins. Unfortunately your linker doesn't " \
5716 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5717 "for this purpose. You can't build with --static."
5718fi
5719
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005720########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005721# See if 16-byte vector operations are supported.
5722# Even without a vector unit the compiler may expand these.
5723# There is a bug in old GCC for PPC that crashes here.
5724# Unfortunately it's the system compiler for Centos 7.
5725
5726cat > $TMPC << EOF
5727typedef unsigned char U1 __attribute__((vector_size(16)));
5728typedef unsigned short U2 __attribute__((vector_size(16)));
5729typedef unsigned int U4 __attribute__((vector_size(16)));
5730typedef unsigned long long U8 __attribute__((vector_size(16)));
5731typedef signed char S1 __attribute__((vector_size(16)));
5732typedef signed short S2 __attribute__((vector_size(16)));
5733typedef signed int S4 __attribute__((vector_size(16)));
5734typedef signed long long S8 __attribute__((vector_size(16)));
5735static U1 a1, b1;
5736static U2 a2, b2;
5737static U4 a4, b4;
5738static U8 a8, b8;
5739static S1 c1;
5740static S2 c2;
5741static S4 c4;
5742static S8 c8;
5743static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005744void helper(void *d, void *a, int shift, int i);
5745void helper(void *d, void *a, int shift, int i)
5746{
5747 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5748 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5749 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5750 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5751}
Richard Hendersondb432672017-09-15 14:11:45 -07005752int main(void)
5753{
5754 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5755 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5756 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5757 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5758 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5759 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5760 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5761 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5762 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5763 return 0;
5764}
5765EOF
5766
5767vector16=no
5768if compile_prog "" "" ; then
5769 vector16=yes
5770fi
5771
5772########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005773# See if __attribute__((alias)) is supported.
5774# This false for Xcode 9, but has been remedied for Xcode 10.
5775# Unfortunately, travis uses Xcode 9 by default.
5776
5777attralias=no
5778cat > $TMPC << EOF
5779int x = 1;
5780extern const int y __attribute__((alias("x")));
5781int main(void) { return 0; }
5782EOF
5783if compile_prog "" "" ; then
5784 attralias=yes
5785fi
5786
5787########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005788# check if getauxval is available.
5789
5790getauxval=no
5791cat > $TMPC << EOF
5792#include <sys/auxv.h>
5793int main(void) {
5794 return getauxval(AT_HWCAP) == 0;
5795}
5796EOF
5797if compile_prog "" "" ; then
5798 getauxval=yes
5799fi
5800
John Snowfd0e6052015-03-25 18:57:39 -04005801########################################
5802# check if ccache is interfering with
5803# semantic analysis of macros
5804
John Snow5e4dfd32015-10-28 13:56:40 -04005805unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005806ccache_cpp2=no
5807cat > $TMPC << EOF
5808static const int Z = 1;
5809#define fn() ({ Z; })
5810#define TAUT(X) ((X) == Z)
5811#define PAREN(X, Y) (X == Y)
5812#define ID(X) (X)
5813int main(int argc, char *argv[])
5814{
5815 int x = 0, y = 0;
5816 x = ID(x);
5817 x = fn();
5818 fn();
5819 if (PAREN(x, y)) return 0;
5820 if (TAUT(Z)) return 0;
5821 return 0;
5822}
5823EOF
5824
5825if ! compile_object "-Werror"; then
5826 ccache_cpp2=yes
5827fi
5828
John Snowb553a042015-11-03 15:43:42 -05005829#################################################
5830# clang does not support glibc + FORTIFY_SOURCE.
5831
5832if test "$fortify_source" != "no"; then
5833 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5834 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005835 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005836 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005837 fortify_source="no";
5838 else
5839 fortify_source="yes"
5840 fi
5841fi
5842
Fam Zheng1efad062018-06-01 17:26:43 +08005843###############################################
5844# Check if copy_file_range is provided by glibc
5845have_copy_file_range=no
5846cat > $TMPC << EOF
5847#include <unistd.h>
5848int main(void) {
5849 copy_file_range(0, NULL, 0, NULL, 0, 0);
5850 return 0;
5851}
5852EOF
5853if compile_prog "" "" ; then
5854 have_copy_file_range=yes
5855fi
5856
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305857##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005858# check if struct fsxattr is available via linux/fs.h
5859
5860have_fsxattr=no
5861cat > $TMPC << EOF
5862#include <linux/fs.h>
5863struct fsxattr foo;
5864int main(void) {
5865 return 0;
5866}
5867EOF
5868if compile_prog "" "" ; then
5869 have_fsxattr=yes
5870fi
5871
Peter Maydellb66e10e2016-06-08 18:34:32 +01005872##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005873# check for usable membarrier system call
5874if test "$membarrier" = "yes"; then
5875 have_membarrier=no
5876 if test "$mingw32" = "yes" ; then
5877 have_membarrier=yes
5878 elif test "$linux" = "yes" ; then
5879 cat > $TMPC << EOF
5880 #include <linux/membarrier.h>
5881 #include <sys/syscall.h>
5882 #include <unistd.h>
5883 #include <stdlib.h>
5884 int main(void) {
5885 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5886 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5887 exit(0);
5888 }
5889EOF
5890 if compile_prog "" "" ; then
5891 have_membarrier=yes
5892 fi
5893 fi
5894 if test "$have_membarrier" = "no"; then
5895 feature_not_found "membarrier" "membarrier system call not available"
5896 fi
5897else
5898 # Do not enable it by default even for Mingw32, because it doesn't
5899 # work on Wine.
5900 membarrier=no
5901fi
5902
5903##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005904# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005905have_rtnetlink=no
5906cat > $TMPC << EOF
5907#include <linux/rtnetlink.h>
5908int main(void) {
5909 return IFLA_PROTO_DOWN;
5910}
5911EOF
5912if compile_prog "" "" ; then
5913 have_rtnetlink=yes
5914fi
5915
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005916##########################################
5917# check for usable AF_VSOCK environment
5918have_af_vsock=no
5919cat > $TMPC << EOF
5920#include <errno.h>
5921#include <sys/types.h>
5922#include <sys/socket.h>
5923#if !defined(AF_VSOCK)
5924# error missing AF_VSOCK flag
5925#endif
5926#include <linux/vm_sockets.h>
5927int main(void) {
5928 int sock, ret;
5929 struct sockaddr_vm svm;
5930 socklen_t len = sizeof(svm);
5931 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5932 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5933 if ((ret == -1) && (errno == ENOTCONN)) {
5934 return 0;
5935 }
5936 return -1;
5937}
5938EOF
5939if compile_prog "" "" ; then
5940 have_af_vsock=yes
5941fi
5942
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005943##########################################
5944# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005945have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005946cat > $TMPC << EOF
5947#include <errno.h>
5948#include <sys/types.h>
5949#include <sys/socket.h>
5950#include <linux/if_alg.h>
5951int main(void) {
5952 int sock;
5953 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5954 return sock;
5955}
5956EOF
5957if compile_prog "" "" ; then
5958 have_afalg=yes
5959fi
5960if test "$crypto_afalg" = "yes"
5961then
5962 if test "$have_afalg" != "yes"
5963 then
5964 error_exit "AF_ALG requested but could not be detected"
5965 fi
5966fi
5967
5968
James Clarke6969ec62016-06-06 12:02:50 +01005969#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005970# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005971if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005972 cat > $TMPC << EOF
5973#include <Hypervisor/hv.h>
5974int main() { return 0;}
5975EOF
5976 if ! compile_object ""; then
5977 hvf='no'
5978 else
5979 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01005980 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005981 fi
5982fi
5983
5984#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005985# Sparc implicitly links with --relax, which is
5986# incompatible with -r, so --no-relax should be
5987# given. It does no harm to give it on other
5988# platforms too.
5989
5990# Note: the prototype is needed since QEMU_CFLAGS
5991# contains -Wmissing-prototypes
5992cat > $TMPC << EOF
5993extern int foo(void);
5994int foo(void) { return 0; }
5995EOF
5996if ! compile_object ""; then
5997 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5998fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005999for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6000 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6001 LD_REL_FLAGS=$i
6002 break
6003 fi
6004done
6005if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6006 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006007fi
6008
Jan Vesely277abf12016-04-29 13:15:23 -04006009##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006010# check for sysmacros.h
6011
6012have_sysmacros=no
6013cat > $TMPC << EOF
6014#include <sys/sysmacros.h>
6015int main(void) {
6016 return makedev(0, 0);
6017}
6018EOF
6019if compile_prog "" "" ; then
6020 have_sysmacros=yes
6021fi
6022
6023##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006024# Veritas HyperScale block driver VxHS
6025# Check if libvxhs is installed
6026
6027if test "$vxhs" != "no" ; then
6028 cat > $TMPC <<EOF
6029#include <stdint.h>
6030#include <qnio/qnio_api.h>
6031
6032void *vxhs_callback;
6033
6034int main(void) {
6035 iio_init(QNIO_VERSION, vxhs_callback);
6036 return 0;
6037}
6038EOF
6039 vxhs_libs="-lvxhs -lssl"
6040 if compile_prog "" "$vxhs_libs" ; then
6041 vxhs=yes
6042 else
6043 if test "$vxhs" = "yes" ; then
6044 feature_not_found "vxhs block device" "Install libvxhs See github"
6045 fi
6046 vxhs=no
6047 fi
6048fi
6049
6050##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006051# check for _Static_assert()
6052
6053have_static_assert=no
6054cat > $TMPC << EOF
6055_Static_assert(1, "success");
6056int main(void) {
6057 return 0;
6058}
6059EOF
6060if compile_prog "" "" ; then
6061 have_static_assert=yes
6062fi
6063
6064##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006065# check for utmpx.h, it is missing e.g. on OpenBSD
6066
6067have_utmpx=no
6068cat > $TMPC << EOF
6069#include <utmpx.h>
6070struct utmpx user_info;
6071int main(void) {
6072 return 0;
6073}
6074EOF
6075if compile_prog "" "" ; then
6076 have_utmpx=yes
6077fi
6078
6079##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006080# check for getrandom()
6081
6082have_getrandom=no
6083cat > $TMPC << EOF
6084#include <sys/random.h>
6085int main(void) {
6086 return getrandom(0, 0, GRND_NONBLOCK);
6087}
6088EOF
6089if compile_prog "" "" ; then
6090 have_getrandom=yes
6091fi
6092
6093##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006094# checks for sanitizers
6095
Marc-André Lureau247724c2018-01-16 16:11:51 +01006096have_asan=no
6097have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006098have_asan_iface_h=no
6099have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006100
6101if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006102 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006103 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6104 have_asan=yes
6105 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006106
6107 # we could use a simple skeleton for flags checks, but this also
6108 # detect the static linking issue of ubsan, see also:
6109 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6110 cat > $TMPC << EOF
6111#include <stdlib.h>
6112int main(void) {
6113 void *tmp = malloc(10);
6114 return *(int *)(tmp + 2);
6115}
6116EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006117 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6118 have_ubsan=yes
6119 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006120
6121 if check_include "sanitizer/asan_interface.h" ; then
6122 have_asan_iface_h=yes
6123 fi
6124
6125 cat > $TMPC << EOF
6126#include <sanitizer/asan_interface.h>
6127int main(void) {
6128 __sanitizer_start_switch_fiber(0, 0, 0);
6129 return 0;
6130}
6131EOF
6132 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6133 have_asan_iface_fiber=yes
6134 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006135fi
6136
6137##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006138# checks for fuzzer
6139if test "$fuzzing" = "yes" ; then
6140 write_c_fuzzer_skeleton
6141 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6142 have_fuzzer=yes
6143 fi
6144fi
6145
6146##########################################
Junyan He17824402018-07-18 15:47:59 +08006147# check for libpmem
6148
6149if test "$libpmem" != "no"; then
6150 if $pkg_config --exists "libpmem"; then
6151 libpmem="yes"
6152 libpmem_libs=$($pkg_config --libs libpmem)
6153 libpmem_cflags=$($pkg_config --cflags libpmem)
6154 libs_softmmu="$libs_softmmu $libpmem_libs"
6155 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6156 else
6157 if test "$libpmem" = "yes" ; then
6158 feature_not_found "libpmem" "Install nvml or pmdk"
6159 fi
6160 libpmem="no"
6161 fi
6162fi
6163
6164##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006165# check for slirp
6166
Laurent Vivierd5999382019-06-21 15:05:44 +02006167# slirp is only required when building softmmu targets
6168if test -z "$slirp" -a "$softmmu" != "yes" ; then
6169 slirp="no"
6170fi
6171
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006172case "$slirp" in
6173 "" | yes)
6174 if $pkg_config slirp; then
6175 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006176 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6177 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006178 elif test -e "${source_path}/slirp/Makefile" ; then
6179 slirp=internal
6180 elif test -z "$slirp" ; then
6181 slirp=no
6182 else
6183 feature_not_found "slirp" "Install slirp devel or git submodule"
6184 fi
6185 ;;
6186
6187 system)
6188 if ! $pkg_config slirp; then
6189 feature_not_found "slirp" "Install slirp devel"
6190 fi
6191 ;;
6192esac
6193
6194case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006195 git | internal)
6196 if test "$slirp" = git; then
6197 git_submodules="${git_submodules} slirp"
6198 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006199 mkdir -p slirp
6200 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6201 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006202 if test "$mingw32" = "yes" ; then
6203 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6204 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006205 ;;
6206
6207 system)
6208 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6209 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6210 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6211 ;;
6212
6213 no)
6214 ;;
6215 *)
6216 error_exit "Unknown state for slirp: $slirp"
6217 ;;
6218esac
6219
6220
6221##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006222# End of CC checks
6223# After here, no more $cc or $ld runs
6224
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006225write_c_skeleton
6226
Blue Swirl1d728c32012-05-01 18:45:39 +00006227if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006228 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6229 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006230elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006231 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006232elif test "$debug" = "no"; then
6233 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006234fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006235
Marc-André Lureau247724c2018-01-16 16:11:51 +01006236if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006237 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6238 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006239 if test "$have_asan_iface_h" = "no" ; then
6240 echo "ASAN build enabled, but ASAN header missing." \
6241 "Without code annotation, the report may be inferior."
6242 elif test "$have_asan_iface_fiber" = "no" ; then
6243 echo "ASAN build enabled, but ASAN header is too old." \
6244 "Without code annotation, the report may be inferior."
6245 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006246fi
6247if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006248 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6249 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006250fi
6251
Peter Lieven6542aa92014-02-03 10:26:13 +01006252##########################################
6253# Do we have libnfs
6254if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006255 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006256 libnfs="yes"
6257 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006258 else
6259 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006260 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006261 fi
6262 libnfs="no"
6263 fi
6264fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006265
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006266##########################################
6267# Do we have libudev
6268if test "$libudev" != "no" ; then
6269 if $pkg_config libudev && test "$static" != "yes"; then
6270 libudev="yes"
6271 libudev_libs=$($pkg_config --libs libudev)
6272 else
6273 libudev="no"
6274 fi
6275fi
6276
Peter Maydell6ca026c2012-07-18 15:10:18 +01006277# Now we've finished running tests it's OK to add -Werror to the compiler flags
6278if test "$werror" = "yes"; then
6279 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6280fi
6281
Juan Quintelae86ecd42009-08-03 14:45:59 +02006282if test "$solaris" = "no" ; then
6283 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006284 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006285 fi
6286fi
6287
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006288# test if pod2man has --utf8 option
6289if pod2man --help | grep -q utf8; then
6290 POD2MAN="pod2man --utf8"
6291else
6292 POD2MAN="pod2man"
6293fi
6294
Blue Swirl952afb72010-09-19 08:36:34 +00006295# Use ASLR, no-SEH and DEP if available
6296if test "$mingw32" = "yes" ; then
6297 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006298 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006299 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006300 fi
6301 done
6302fi
6303
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006304# Disable OpenBSD W^X if available
6305if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6306 cat > $TMPC <<EOF
6307 int main(void) { return 0; }
6308EOF
6309 wx_ldflags="-Wl,-z,wxneeded"
6310 if compile_prog "" "$wx_ldflags"; then
6311 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6312 fi
6313fi
6314
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006315qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006316qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006317qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006318qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006319qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006320qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006321
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006322# We can only support ivshmem if we have eventfd
6323if [ "$eventfd" = "yes" ]; then
6324 ivshmem=yes
6325fi
6326
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006327tools=""
6328if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006329 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006330 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006331 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006332 fi
6333 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006334 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006335 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006336 if [ "$curl" = "yes" ]; then
6337 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006338 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006339fi
6340if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006341 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006342 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006343 virtfs=yes
6344 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6345 else
6346 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006347 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306348 fi
Andreas Färber17500372012-05-01 01:12:03 +02006349 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006350 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006351 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6352 mpath=yes
6353 else
6354 if test "$mpath" = yes; then
6355 error_exit "Multipath requires libmpathpersist devel"
6356 fi
6357 mpath=no
6358 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006359 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6360 else
6361 if test "$virtfs" = yes; then
6362 error_exit "VirtFS is supported only on Linux"
6363 fi
6364 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006365 if test "$mpath" = yes; then
6366 error_exit "Multipath is supported only on Linux"
6367 fi
6368 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306369 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006370 if test "$xkbcommon" = "yes"; then
6371 tools="qemu-keymap\$(EXESUF) $tools"
6372 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006373fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006374
6375# Probe for guest agent support/options
6376
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006377if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006378 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6379 guest_agent=no
6380 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006381 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006382 guest_agent=yes
6383 elif [ "$guest_agent" != yes ]; then
6384 guest_agent=no
6385 else
6386 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006387 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006388fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006389
Michael Roth9d6bc272015-08-26 10:49:13 -05006390# Guest agent Window MSI package
6391
6392if test "$guest_agent" != yes; then
6393 if test "$guest_agent_msi" = yes; then
6394 error_exit "MSI guest agent package requires guest agent enabled"
6395 fi
6396 guest_agent_msi=no
6397elif test "$mingw32" != "yes"; then
6398 if test "$guest_agent_msi" = "yes"; then
6399 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6400 fi
6401 guest_agent_msi=no
6402elif ! has wixl; then
6403 if test "$guest_agent_msi" = "yes"; then
6404 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6405 fi
6406 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006407else
6408 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6409 # disabled explicitly
6410 if test "$guest_agent_msi" != "no"; then
6411 guest_agent_msi=yes
6412 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006413fi
6414
Michael Roth1a349042015-08-26 11:14:31 -05006415if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006416 if test "$guest_agent_with_vss" = "yes"; then
6417 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6418 fi
6419
6420 if test "$QEMU_GA_MANUFACTURER" = ""; then
6421 QEMU_GA_MANUFACTURER=QEMU
6422 fi
6423
6424 if test "$QEMU_GA_DISTRO" = ""; then
6425 QEMU_GA_DISTRO=Linux
6426 fi
6427
6428 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006429 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006430 fi
6431
Stefan Weil89138852016-05-16 15:10:20 +02006432 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006433
6434 case "$cpu" in
6435 x86_64)
6436 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6437 ;;
6438 i386)
6439 QEMU_GA_MSI_ARCH="-D Arch=32"
6440 ;;
6441 *)
6442 error_exit "CPU $cpu not supported for building installation package"
6443 ;;
6444 esac
6445fi
6446
Paolo Bonzinica35f782010-05-26 16:08:29 +02006447# Mac OS X ships with a broken assembler
6448roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006449if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6450 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6451 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006452 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006453 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6454 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6455 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006456 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6457 ld_i386_emulation="$emu"
6458 roms="optionrom"
6459 break
6460 fi
6461 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006462fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006463
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006464# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006465if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006466 write_c_skeleton
6467 if compile_prog "-march=z900" ""; then
6468 roms="$roms s390-ccw"
6469 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006470fi
6471
Richard Henderson964c6fa2013-06-21 19:10:16 -07006472# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006473if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006474 textseg_addr=
6475 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006476 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6477 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006478 textseg_addr=0x60000000
6479 ;;
6480 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006481 # A 256M aligned address, high in the address space, with enough
6482 # room for the code_gen_buffer above it before the stack.
6483 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006484 ;;
6485 esac
6486 if [ -n "$textseg_addr" ]; then
6487 cat > $TMPC <<EOF
6488 int main(void) { return 0; }
6489EOF
6490 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6491 if ! compile_prog "" "$textseg_ldflags"; then
6492 # In case ld does not support -Ttext-segment, edit the default linker
6493 # script via sed to set the .text start addr. This is needed on FreeBSD
6494 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006495 if ! $ld --verbose >/dev/null 2>&1; then
6496 error_exit \
6497 "We need to link the QEMU user mode binaries at a" \
6498 "specific text address. Unfortunately your linker" \
6499 "doesn't support either the -Ttext-segment option or" \
6500 "printing the default linker script with --verbose." \
6501 "If you don't want the user mode binaries, pass the" \
6502 "--disable-user option to configure."
6503 fi
6504
Richard Henderson964c6fa2013-06-21 19:10:16 -07006505 $ld --verbose | sed \
6506 -e '1,/==================================================/d' \
6507 -e '/==================================================/,$d' \
6508 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6509 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6510 textseg_ldflags="-Wl,-T../config-host.ld"
6511 fi
6512 fi
6513fi
6514
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006515# Check that the C++ compiler exists and works with the C compiler.
6516# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6517if has $cxx; then
6518 cat > $TMPC <<EOF
6519int c_function(void);
6520int main(void) { return c_function(); }
6521EOF
6522
6523 compile_object
6524
6525 cat > $TMPCXX <<EOF
6526extern "C" {
6527 int c_function(void);
6528}
6529int c_function(void) { return 42; }
6530EOF
6531
6532 update_cxxflags
6533
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006534 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006535 # C++ compiler $cxx works ok with C compiler $cc
6536 :
6537 else
6538 echo "C++ compiler $cxx does not work with C compiler $cc"
6539 echo "Disabling C++ specific optional code"
6540 cxx=
6541 fi
6542else
6543 echo "No C++ compiler available; disabling C++ specific optional code"
6544 cxx=
6545fi
6546
Cole Robinson02d34f62016-05-06 14:03:09 -04006547echo_version() {
6548 if test "$1" = "yes" ; then
6549 echo "($2)"
6550 fi
6551}
6552
Jan Kiszka50e12062014-10-02 10:03:55 +02006553# prepend pixman and ftd flags after all config tests are done
6554QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006555QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006556libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006557
bellard43ce4df2003-06-09 19:53:12 +00006558echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006559echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006560echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006561echo "binary directory $(eval echo $bindir)"
6562echo "library directory $(eval echo $libdir)"
6563echo "module directory $(eval echo $qemu_moddir)"
6564echo "libexec directory $(eval echo $libexecdir)"
6565echo "include directory $(eval echo $includedir)"
6566echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006567if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006568echo "local state directory $(eval echo $local_statedir)"
6569echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006570echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006571else
6572echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006573echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006574fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006575echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006576echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006577echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006578echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006579echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006580echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006581echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006582echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006583echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006584echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006585echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006586echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006587echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006588echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006589echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006590if test "$docs" != "no"; then
6591 echo "sphinx-build $sphinx_build"
6592fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006593echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006594echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6595if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006596 echo "smbd $smbd"
6597fi
Fam Zheng17969262014-02-10 14:48:56 +08006598echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006599echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006600echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006601echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006602echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006603echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006604echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006605echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006606echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006607if test "$darwin" = "yes" ; then
6608 echo "Cocoa support $cocoa"
6609fi
Stefan Weil89138852016-05-16 15:10:20 +02006610echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006611echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006612echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006613echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006614echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006615echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006616echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006617echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006618if test "$gcrypt" = "yes"
6619then
6620 echo " hmac $gcrypt_hmac"
6621 echo " XTS $gcrypt_xts"
6622fi
Stefan Weil89138852016-05-16 15:10:20 +02006623echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006624if test "$nettle" = "yes"
6625then
6626 echo " XTS $nettle_xts"
6627fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006628echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006629echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006630echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006631echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006632echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006633echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006634echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006635echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006636echo "Block whitelist (rw) $block_drv_rw_whitelist"
6637echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306638echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006639echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006640echo "VNC support $vnc"
6641if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006642 echo "VNC SASL support $vnc_sasl"
6643 echo "VNC JPEG support $vnc_jpeg"
6644 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006645fi
aliguorie37630c2009-04-22 15:19:10 +00006646echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006647if test "$xen" = "yes" ; then
6648 echo "xen ctrl version $xen_ctrl_version"
6649fi
aurel322e4d9fb2008-04-08 06:01:02 +00006650echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006651echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006652echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006653echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006654echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006655echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006656echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006657echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006658echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006659echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006660echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006661echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006662echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006663echo "TCG support $tcg"
6664if test "$tcg" = "yes" ; then
6665 echo "TCG debug enabled $debug_tcg"
6666 echo "TCG interpreter $tcg_interpreter"
6667fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006668echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006669echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006670echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006671echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006672echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006673echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006674echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006675echo "madvise $madvise"
6676echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006677echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006678echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006679echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006680echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006681echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006682echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006683echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006684echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006685echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006686if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006687echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006688fi
Stefan Weil89138852016-05-16 15:10:20 +02006689echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006690echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006691echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006692echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006693echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006694echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006695echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006696echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006697echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006698echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006699echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006700echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006701echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006702echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006703echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006704echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006705echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006706echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006707echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006708echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306709echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006710echo "gcov $gcov_tool"
6711echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006712echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006713echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006714echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006715echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006716echo "lzo support $lzo"
6717echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006718echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006719echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006720echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006721echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006722echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006723echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006724echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006725echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006726echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006727echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006728echo "bochs support $bochs"
6729echo "cloop support $cloop"
6730echo "dmg support $dmg"
6731echo "qcow v1 support $qcow1"
6732echo "vdi support $vdi"
6733echo "vvfat support $vvfat"
6734echo "qed support $qed"
6735echo "parallels support $parallels"
6736echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006737echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006738echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006739echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006740echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006741echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006742echo "fuzzing support $fuzzing"
bellard67b915a2004-03-31 23:37:16 +00006743
Peter Maydell898be3e2017-03-21 14:31:57 +00006744if test "$supported_cpu" = "no"; then
6745 echo
6746 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6747 echo
6748 echo "CPU host architecture $cpu support is not currently maintained."
6749 echo "The QEMU project intends to remove support for this host CPU in"
6750 echo "a future release if nobody volunteers to maintain it and to"
6751 echo "provide a build host for our continuous integration setup."
6752 echo "configure has succeeded and you can continue to build, but"
6753 echo "if you care about QEMU on this platform you should contact"
6754 echo "us upstream at qemu-devel@nongnu.org."
6755fi
6756
6757if test "$supported_os" = "no"; then
6758 echo
6759 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6760 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006761 echo "Host OS $targetos support is not currently maintained."
6762 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006763 echo "a future release if nobody volunteers to maintain it and to"
6764 echo "provide a build host for our continuous integration setup."
6765 echo "configure has succeeded and you can continue to build, but"
6766 echo "if you care about QEMU on this platform you should contact"
6767 echo "us upstream at qemu-devel@nongnu.org."
6768fi
6769
Juan Quintela98ec69a2009-07-16 18:34:18 +02006770config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006771
Stefan Weildbd99ae2013-01-01 18:33:44 +01006772echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6773
Juan Quintela98ec69a2009-07-16 18:34:18 +02006774echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006775echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006776
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006777echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006778echo "prefix=$prefix" >> $config_host_mak
6779echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006780echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006781echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006782echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006783echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006784echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006785echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006786echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006787echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006788echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006789echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006790if test "$mingw32" = "no" ; then
6791 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6792fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006793echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006794echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006795echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006796echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006797echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006798echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006799echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006800echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006801echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006802
Juan Quintela98ec69a2009-07-16 18:34:18 +02006803echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006804
Paolo Bonzinif3494742019-01-23 14:56:17 +08006805if test "$default_devices" = "yes" ; then
6806 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6807else
6808 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6809fi
aurel32f8393942009-04-13 18:45:38 +00006810if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006811 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006812fi
aliguori1625af82009-04-05 17:41:02 +00006813if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006814 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006815fi
bellard7d132992003-03-06 23:23:54 +00006816if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006817 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006818fi
bellard67b915a2004-03-31 23:37:16 +00006819if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006820 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006821 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006822 version_major=${rc_version%%.*}
6823 rc_version=${rc_version#*.}
6824 version_minor=${rc_version%%.*}
6825 rc_version=${rc_version#*.}
6826 version_subminor=${rc_version%%.*}
6827 version_micro=0
6828 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6829 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006830 if test "$guest_agent_with_vss" = "yes" ; then
6831 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006832 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006833 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6834 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006835 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006836 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006837 fi
Michael Roth1a349042015-08-26 11:14:31 -05006838 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006839 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006840 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6841 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6842 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6843 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6844 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6845 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6846 fi
pbrook210fa552007-02-27 21:04:49 +00006847else
Juan Quintela35f4df22009-07-27 16:13:07 +02006848 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006849fi
blueswir1128ab2f2008-08-15 18:33:42 +00006850
Mark McLoughlindffcb712009-10-22 17:49:11 +01006851if test "$linux" = "yes" ; then
6852 echo "CONFIG_LINUX=y" >> $config_host_mak
6853fi
6854
bellard83fb7ad2004-07-05 21:25:26 +00006855if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006856 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006857fi
malcb29fe3e2008-11-18 01:42:22 +00006858
bellardec530c82006-04-25 22:36:06 +00006859if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006860 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006861fi
Andreas Färber179cf402010-09-20 00:50:43 +02006862if test "$haiku" = "yes" ; then
6863 echo "CONFIG_HAIKU=y" >> $config_host_mak
6864fi
bellard97a847b2003-08-10 21:36:04 +00006865if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006866 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006867fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006868if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006869 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006870fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006871if test "$want_tools" = "yes" ; then
6872 echo "CONFIG_TOOLS=y" >> $config_host_mak
6873fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006874if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006875 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006876 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006877 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6878 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6879fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006880if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006881 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006882fi
ths8a16d272008-07-19 09:56:24 +00006883if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006884 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006885 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006886fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006887if test "$netmap" = "yes" ; then
6888 echo "CONFIG_NETMAP=y" >> $config_host_mak
6889fi
Gonglei015a33b2014-07-01 20:58:08 +08006890if test "$l2tpv3" = "yes" ; then
6891 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6892fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006893if test "$gprof" = "yes" ; then
6894 echo "CONFIG_GPROF=y" >> $config_host_mak
6895fi
Corey Bryant47e98652012-01-26 09:42:26 -05006896if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006897 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006898fi
Juan Quintela2358a492009-07-27 16:13:25 +02006899echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006900for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006901 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006902 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006903 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006904 echo "$def=m" >> $config_host_mak ;;
6905 *)
6906 echo "$def=y" >> $config_host_mak ;;
6907 esac
malc0c58ac12008-06-25 21:04:05 +00006908done
Fam Zhengb1149912017-09-07 16:29:13 +08006909echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6910echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6911echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6912echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6913echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006914if test "$audio_win_int" = "yes" ; then
6915 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6916fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006917echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6918echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006919if test "$vnc" = "yes" ; then
6920 echo "CONFIG_VNC=y" >> $config_host_mak
6921fi
aliguori2f9606b2009-03-06 20:27:28 +00006922if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006923 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006924fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006925if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006926 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006927fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006928if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006929 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006930fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006931if test "$xkbcommon" = "yes" ; then
6932 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6933 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6934fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006935if test "$xfs" = "yes" ; then
6936 echo "CONFIG_XFS=y" >> $config_host_mak
6937fi
Stefan Weil89138852016-05-16 15:10:20 +02006938qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006939echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006940echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006941echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006942echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006943if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006944 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006945fi
Fam Zheng17969262014-02-10 14:48:56 +08006946if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006947 # $shacmd can generate a hash started with digit, which the compiler doesn't
6948 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006949 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006950 echo "CONFIG_MODULES=y" >> $config_host_mak
6951fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006952if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006953 echo "CONFIG_X11=y" >> $config_host_mak
6954 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6955 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6956fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006957if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006958 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006959 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006960 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006961 if test "$sdl_image" = "yes" ; then
6962 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6963 fi
bellard49ecc3f2007-11-07 19:25:15 +00006964fi
6965if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006966 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006967fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006968if test "$iconv" = "yes" ; then
6969 echo "CONFIG_ICONV=y" >> $config_host_mak
6970 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6971 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6972fi
balrog4d3b6f62008-02-10 16:33:14 +00006973if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006974 echo "CONFIG_CURSES=m" >> $config_host_mak
6975 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6976 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006977fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006978if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006979 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006980fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006981if test "$accept4" = "yes" ; then
6982 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6983fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306984if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006985 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306986fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006987if test "$eventfd" = "yes" ; then
6988 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6989fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006990if test "$memfd" = "yes" ; then
6991 echo "CONFIG_MEMFD=y" >> $config_host_mak
6992fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006993if test "$have_usbfs" = "yes" ; then
6994 echo "CONFIG_USBFS=y" >> $config_host_mak
6995fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006996if test "$fallocate" = "yes" ; then
6997 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6998fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006999if test "$fallocate_punch_hole" = "yes" ; then
7000 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7001fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03007002if test "$fallocate_zero_range" = "yes" ; then
7003 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7004fi
Kevin Wolfed911432014-09-29 17:12:59 +02007005if test "$posix_fallocate" = "yes" ; then
7006 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7007fi
Peter Maydellc727f472011-01-06 11:05:10 +00007008if test "$sync_file_range" = "yes" ; then
7009 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7010fi
Peter Maydelldace20d2011-01-10 13:11:24 +00007011if test "$fiemap" = "yes" ; then
7012 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7013fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007014if test "$dup3" = "yes" ; then
7015 echo "CONFIG_DUP3=y" >> $config_host_mak
7016fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01007017if test "$ppoll" = "yes" ; then
7018 echo "CONFIG_PPOLL=y" >> $config_host_mak
7019fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007020if test "$prctl_pr_set_timerslack" = "yes" ; then
7021 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7022fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007023if test "$epoll" = "yes" ; then
7024 echo "CONFIG_EPOLL=y" >> $config_host_mak
7025fi
7026if test "$epoll_create1" = "yes" ; then
7027 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7028fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007029if test "$sendfile" = "yes" ; then
7030 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7031fi
Riku Voipio51834342014-06-22 11:25:42 +01007032if test "$timerfd" = "yes" ; then
7033 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7034fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007035if test "$setns" = "yes" ; then
7036 echo "CONFIG_SETNS=y" >> $config_host_mak
7037fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007038if test "$clock_adjtime" = "yes" ; then
7039 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7040fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007041if test "$syncfs" = "yes" ; then
7042 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7043fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007044if test "$kcov" = "yes" ; then
7045 echo "CONFIG_KCOV=y" >> $config_host_mak
7046fi
aurel323b3f24a2009-04-15 16:12:13 +00007047if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007048 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007049fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007050if test "$inotify1" = "yes" ; then
7051 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7052fi
Peter Maydell401bc052017-09-05 13:19:32 +01007053if test "$sem_timedwait" = "yes" ; then
7054 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7055fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007056if test "$strchrnul" = "yes" ; then
7057 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7058fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007059if test "$st_atim" = "yes" ; then
7060 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7061fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007062if test "$byteswap_h" = "yes" ; then
7063 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7064fi
7065if test "$bswap_h" = "yes" ; then
7066 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7067fi
Alexander Graf769ce762009-05-11 17:41:42 +02007068if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007069 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007070 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007071 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007072fi
aurel322e4d9fb2008-04-08 06:01:02 +00007073if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007074 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007075 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007076fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007077if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007078 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007079 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007080 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007081 if test "$gtk_gl" = "yes" ; then
7082 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7083 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007084fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007085if test "$gio" = "yes" ; then
7086 echo "CONFIG_GIO=y" >> $config_host_mak
7087 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7088 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007089 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007090fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007091echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007092if test "$gnutls" = "yes" ; then
7093 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7094fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007095if test "$gcrypt" = "yes" ; then
7096 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007097 if test "$gcrypt_hmac" = "yes" ; then
7098 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7099 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007100fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007101if test "$nettle" = "yes" ; then
7102 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007103 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007104fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007105if test "$qemu_private_xts" = "yes" ; then
7106 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7107fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007108if test "$tasn1" = "yes" ; then
7109 echo "CONFIG_TASN1=y" >> $config_host_mak
7110fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007111if test "$auth_pam" = "yes" ; then
7112 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7113fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007114if test "$have_ifaddrs_h" = "yes" ; then
7115 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7116fi
Eric Blake6b39b062016-10-11 10:46:23 -05007117if test "$have_broken_size_max" = "yes" ; then
7118 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7119fi
Jan Vesely277abf12016-04-29 13:15:23 -04007120
7121# Work around a system header bug with some kernel/XFS header
7122# versions where they both try to define 'struct fsxattr':
7123# xfs headers will not try to redefine structs from linux headers
7124# if this macro is set.
7125if test "$have_fsxattr" = "yes" ; then
7126 echo "HAVE_FSXATTR=y" >> $config_host_mak
7127fi
Fam Zheng1efad062018-06-01 17:26:43 +08007128if test "$have_copy_file_range" = "yes" ; then
7129 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7130fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007131if test "$vte" = "yes" ; then
7132 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007133 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007134 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007135fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007136if test "$virglrenderer" = "yes" ; then
7137 echo "CONFIG_VIRGL=y" >> $config_host_mak
7138 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7139 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7140fi
aliguorie37630c2009-04-22 15:19:10 +00007141if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007142 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007143 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007144fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007145if test "$linux_aio" = "yes" ; then
7146 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7147fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007148if test "$linux_io_uring" = "yes" ; then
7149 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7150 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7151 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7152fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007153if test "$attr" = "yes" ; then
7154 echo "CONFIG_ATTR=y" >> $config_host_mak
7155fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007156if test "$libattr" = "yes" ; then
7157 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7158fi
Meador Inge983eef52012-02-24 14:00:42 +05307159if test "$virtfs" = "yes" ; then
7160 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007161fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007162if test "$mpath" = "yes" ; then
7163 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007164 if test "$mpathpersist_new_api" = "yes"; then
7165 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7166 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007167fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007168if test "$vhost_scsi" = "yes" ; then
7169 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7170fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007171if test "$vhost_net" = "yes" ; then
7172 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7173fi
7174if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007175 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007176fi
Gonglei042cea22018-03-01 21:46:28 +08007177if test "$vhost_crypto" = "yes" ; then
7178 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7179fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007180if test "$vhost_vsock" = "yes" ; then
7181 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7182fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007183if test "$vhost_kernel" = "yes" ; then
7184 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7185fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007186if test "$vhost_user" = "yes" ; then
7187 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7188fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007189if test "$vhost_user_fs" = "yes" ; then
7190 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7191fi
ths77755342008-11-27 15:45:16 +00007192if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007193 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007194fi
aliguoribf9298b2008-12-05 20:05:26 +00007195if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007196 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007197fi
aliguoriceb42de2009-04-07 18:43:28 +00007198if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007199 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007200fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007201if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007202 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007203fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007204if test "$membarrier" = "yes" ; then
7205 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7206fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007207if test "$signalfd" = "yes" ; then
7208 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7209fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007210if test "$optreset" = "yes" ; then
7211 echo "HAVE_OPTRESET=y" >> $config_host_mak
7212fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007213if test "$tcg" = "yes"; then
7214 echo "CONFIG_TCG=y" >> $config_host_mak
7215 if test "$tcg_interpreter" = "yes" ; then
7216 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7217 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007218fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007219if test "$fdatasync" = "yes" ; then
7220 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7221fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007222if test "$madvise" = "yes" ; then
7223 echo "CONFIG_MADVISE=y" >> $config_host_mak
7224fi
7225if test "$posix_madvise" = "yes" ; then
7226 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7227fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007228if test "$posix_memalign" = "yes" ; then
7229 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7230fi
bellard97a847b2003-08-10 21:36:04 +00007231
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007232if test "$spice" = "yes" ; then
7233 echo "CONFIG_SPICE=y" >> $config_host_mak
7234fi
7235
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007236if test "$smartcard" = "yes" ; then
7237 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007238 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7239 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007240fi
7241
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007242if test "$libusb" = "yes" ; then
7243 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007244 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7245 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007246fi
7247
Hans de Goede69354a82011-07-19 11:04:10 +02007248if test "$usb_redir" = "yes" ; then
7249 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007250 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7251 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007252fi
7253
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007254if test "$opengl" = "yes" ; then
7255 echo "CONFIG_OPENGL=y" >> $config_host_mak
7256 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007257 if test "$opengl_dmabuf" = "yes" ; then
7258 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7259 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007260fi
7261
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007262if test "$gbm" = "yes" ; then
7263 echo "CONFIG_GBM=y" >> $config_host_mak
7264 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7265 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7266fi
7267
7268
Yang Zhong5a22ab72017-12-20 21:16:46 +08007269if test "$malloc_trim" = "yes" ; then
7270 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7271fi
7272
Liang Li99f2dbd2016-03-08 13:53:16 +08007273if test "$avx2_opt" = "yes" ; then
7274 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7275fi
7276
qiaonuohan607dacd2014-02-18 14:11:30 +08007277if test "$lzo" = "yes" ; then
7278 echo "CONFIG_LZO=y" >> $config_host_mak
7279fi
7280
7281if test "$snappy" = "yes" ; then
7282 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7283fi
7284
Peter Wu6b383c02015-01-06 18:48:14 +01007285if test "$bzip2" = "yes" ; then
7286 echo "CONFIG_BZIP2=y" >> $config_host_mak
7287 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7288fi
7289
Julio Faracco83bc1f92018-11-05 13:08:04 -02007290if test "$lzfse" = "yes" ; then
7291 echo "CONFIG_LZFSE=y" >> $config_host_mak
7292 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7293fi
7294
Juan Quintela3a678482019-12-17 21:15:24 +01007295if test "$zstd" = "yes" ; then
7296 echo "CONFIG_ZSTD=y" >> $config_host_mak
7297fi
7298
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007299if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007300 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007301 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7302 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007303fi
7304
Peter Lieven6542aa92014-02-03 10:26:13 +01007305if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007306 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7307 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007308fi
7309
Eduardo Otubof7945732012-08-14 18:44:05 -03007310if test "$seccomp" = "yes"; then
7311 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007312 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7313 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007314fi
7315
bellard83fb7ad2004-07-05 21:25:26 +00007316# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007317if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007318 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007319fi
7320
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007321if test "$localtime_r" = "yes" ; then
7322 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7323fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007324if test "$qom_cast_debug" = "yes" ; then
7325 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7326fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007327if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007328 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007329 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7330 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007331fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007332
Peter Maydell7c2acc72013-04-08 12:11:27 +01007333echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007334if test "$coroutine_pool" = "yes" ; then
7335 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7336else
7337 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7338fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307339
Peter Lieven7d992e42016-09-27 11:58:45 +02007340if test "$debug_stack_usage" = "yes" ; then
7341 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7342fi
7343
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007344if test "$crypto_afalg" = "yes" ; then
7345 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7346fi
7347
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307348if test "$open_by_handle_at" = "yes" ; then
7349 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7350fi
7351
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307352if test "$linux_magic_h" = "yes" ; then
7353 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7354fi
7355
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007356if test "$pragma_diagnostic_available" = "yes" ; then
7357 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007358fi
7359
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007360if test "$valgrind_h" = "yes" ; then
7361 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7362fi
7363
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007364if test "$have_asan_iface_fiber" = "yes" ; then
7365 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7366fi
7367
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007368if test "$has_environ" = "yes" ; then
7369 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7370fi
7371
Richard Henderson76a347e2012-12-28 14:17:02 -08007372if test "$cpuid_h" = "yes" ; then
7373 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7374fi
7375
Richard Hendersonf5401662013-02-16 12:46:59 -08007376if test "$int128" = "yes" ; then
7377 echo "CONFIG_INT128=y" >> $config_host_mak
7378fi
7379
Richard Henderson7ebee432016-06-29 21:10:59 -07007380if test "$atomic128" = "yes" ; then
7381 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7382fi
7383
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007384if test "$cmpxchg128" = "yes" ; then
7385 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7386fi
7387
Richard Hendersondf79b992016-09-02 12:23:57 -07007388if test "$atomic64" = "yes" ; then
7389 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7390fi
7391
Richard Hendersondb432672017-09-15 14:11:45 -07007392if test "$vector16" = "yes" ; then
7393 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7394fi
7395
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007396if test "$attralias" = "yes" ; then
7397 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7398fi
7399
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007400if test "$getauxval" = "yes" ; then
7401 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7402fi
7403
Bharata B Raoeb100392012-09-24 14:42:45 +05307404if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007405 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007406 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7407 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307408fi
7409
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007410if test "$glusterfs_xlator_opt" = "yes" ; then
7411 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7412fi
7413
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307414if test "$glusterfs_discard" = "yes" ; then
7415 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7416fi
7417
Niels de Vosdf3a4292017-05-28 12:01:14 +05307418if test "$glusterfs_fallocate" = "yes" ; then
7419 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7420fi
7421
Bharata B Rao7c815372013-12-21 14:51:25 +05307422if test "$glusterfs_zerofill" = "yes" ; then
7423 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7424fi
7425
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007426if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7427 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7428fi
7429
Niels de Vos0e3b8912019-03-05 16:46:34 +01007430if test "$glusterfs_iocb_has_stat" = "yes" ; then
7431 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7432fi
7433
Pino Toscanob10d49d2019-06-20 22:08:40 +02007434if test "$libssh" = "yes" ; then
7435 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7436 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7437 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007438fi
7439
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007440if test "$live_block_migration" = "yes" ; then
7441 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7442fi
7443
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007444if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007445 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007446fi
7447
Lluís Vilanova5b808272014-05-27 15:02:14 +02007448echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7449if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007450 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307451fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007452if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007453 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7454 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007455 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007456fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007457if have_backend "log"; then
7458 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007459fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007460if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007461 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7462fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007463if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007464 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7465 if test "$trace_backend_stap" = "yes" ; then
7466 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7467 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007468fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007469if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007470 if test "$linux" = "yes" ; then
7471 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007472 else
Stewart Smith21684af2014-01-24 12:39:10 +11007473 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007474 fi
7475fi
Paul Durrant0a852412016-08-04 14:44:14 +01007476if have_backend "syslog"; then
7477 if test "$posix_syslog" = "yes" ; then
7478 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7479 else
7480 feature_not_found "syslog(trace backend)" "syslog not available"
7481 fi
7482fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007483echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7484
Michael R. Hines2da776d2013-07-22 10:01:54 -04007485if test "$rdma" = "yes" ; then
7486 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007487 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007488fi
7489
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007490if test "$pvrdma" = "yes" ; then
7491 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7492fi
7493
Laurent Vivier575b22b2016-06-02 22:14:15 +02007494if test "$have_rtnetlink" = "yes" ; then
7495 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7496fi
7497
Klim Kireeved279a02018-01-12 12:01:19 +03007498if test "$libxml2" = "yes" ; then
7499 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7500 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7501 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7502fi
7503
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007504if test "$replication" = "yes" ; then
7505 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7506fi
7507
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007508if test "$have_af_vsock" = "yes" ; then
7509 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7510fi
7511
Christopher Covington4d043512016-12-28 15:04:33 -05007512if test "$have_sysmacros" = "yes" ; then
7513 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7514fi
7515
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007516if test "$have_static_assert" = "yes" ; then
7517 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7518fi
7519
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007520if test "$have_utmpx" = "yes" ; then
7521 echo "HAVE_UTMPX=y" >> $config_host_mak
7522fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007523if test "$have_getrandom" = "yes" ; then
7524 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7525fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007526if test "$ivshmem" = "yes" ; then
7527 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7528fi
Richard Hendersone219c492017-09-28 09:01:23 -07007529if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007530 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7531fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007532if test "$debug_mutex" = "yes" ; then
7533 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7534fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007535
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007536# Hold two types of flag:
7537# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7538# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007539# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007540# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007541if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007542 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007543 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7544elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7545 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7546 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007547fi
7548
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007549if test "$vxhs" = "yes" ; then
7550 echo "CONFIG_VXHS=y" >> $config_host_mak
7551 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7552fi
7553
Junyan He17824402018-07-18 15:47:59 +08007554if test "$libpmem" = "yes" ; then
7555 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7556fi
7557
Jeff Cody2f740132018-11-07 07:36:44 +01007558if test "$bochs" = "yes" ; then
7559 echo "CONFIG_BOCHS=y" >> $config_host_mak
7560fi
7561if test "$cloop" = "yes" ; then
7562 echo "CONFIG_CLOOP=y" >> $config_host_mak
7563fi
7564if test "$dmg" = "yes" ; then
7565 echo "CONFIG_DMG=y" >> $config_host_mak
7566fi
7567if test "$qcow1" = "yes" ; then
7568 echo "CONFIG_QCOW1=y" >> $config_host_mak
7569fi
7570if test "$vdi" = "yes" ; then
7571 echo "CONFIG_VDI=y" >> $config_host_mak
7572fi
7573if test "$vvfat" = "yes" ; then
7574 echo "CONFIG_VVFAT=y" >> $config_host_mak
7575fi
7576if test "$qed" = "yes" ; then
7577 echo "CONFIG_QED=y" >> $config_host_mak
7578fi
7579if test "$parallels" = "yes" ; then
7580 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7581fi
7582if test "$sheepdog" = "yes" ; then
7583 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7584fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007585if test "$fuzzing" = "yes" ; then
7586 if test "$have_fuzzer" = "yes"; then
7587 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7588 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7589 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7590 else
7591 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7592 exit 1
7593 fi
7594fi
Jeff Cody2f740132018-11-07 07:36:44 +01007595
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007596if test "$plugins" = "yes" ; then
7597 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7598 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007599 # Copy the export object list to the build dir
7600 if test "$ld_dynamic_list" = "yes" ; then
7601 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7602 ld_symbols=qemu-plugins-ld.symbols
7603 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7604 elif test "$ld_exported_symbols_list" = "yes" ; then
7605 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7606 ld64_symbols=qemu-plugins-ld64.symbols
7607 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7608 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7609 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7610 else
7611 error_exit \
7612 "If \$plugins=yes, either \$ld_dynamic_list or " \
7613 "\$ld_exported_symbols_list should have been set to 'yes'."
7614 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007615fi
7616
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007617if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007618 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007619elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007620 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007621elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007622 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007623elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007624 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007625elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007626 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007627elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007628 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007629else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007630 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007631fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007632
Juan Quintela98ec69a2009-07-16 18:34:18 +02007633echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007634echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007635echo "MAKE=$make" >> $config_host_mak
7636echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007637echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7638echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007639echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7640echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007641echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007642echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007643echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007644echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007645if $iasl -h > /dev/null 2>&1; then
7646 echo "IASL=$iasl" >> $config_host_mak
7647fi
Juan Quintela804edf22009-07-27 16:12:49 +02007648echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007649echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007650echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007651echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007652echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007653echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007654echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007655echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007656echo "OBJCOPY=$objcopy" >> $config_host_mak
7657echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007658echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007659echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007660echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007661echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007662echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007663echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007664echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007665echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007666echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007667if test "$sparse" = "yes" ; then
7668 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007669 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007670 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007671 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7672 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7673fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007674echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007675echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007676echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007677echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007678echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007679echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007680echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007681echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007682echo "DSOSUF=$DSOSUF" >> $config_host_mak
7683echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007684echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007685echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7686echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007687echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007688if test "$gcov" = "yes" ; then
7689 echo "CONFIG_GCOV=y" >> $config_host_mak
7690 echo "GCOV=$gcov_tool" >> $config_host_mak
7691fi
Juan Quintela804edf22009-07-27 16:12:49 +02007692
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007693if test "$libudev" != "no"; then
7694 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7695 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7696fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007697if test "$fuzzing" != "no"; then
7698 echo "CONFIG_FUZZ=y" >> $config_host_mak
7699 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7700 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7701fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007702
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007703if test "$edk2_blobs" = "yes" ; then
7704 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7705fi
7706
Peter Maydell6efd7512011-11-30 11:59:04 +00007707# use included Linux headers
7708if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007709 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007710 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007711 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007712 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007713 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007714 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007715 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007716 ;;
7717 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007718 linux_arch=s390
7719 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007720 aarch64)
7721 linux_arch=arm64
7722 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007723 mips64)
7724 linux_arch=mips
7725 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007726 *)
7727 # For most CPUs the kernel architecture name and QEMU CPU name match.
7728 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007729 ;;
7730 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007731 # For non-KVM architectures we will not have asm headers
7732 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7733 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7734 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007735fi
7736
bellard1d14ffa2005-10-30 18:58:22 +00007737for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007738target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007739config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007740target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007741target_aligned_only="no"
7742case "$target_name" in
7743 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7744 target_aligned_only="yes"
7745 ;;
7746esac
bellard97a847b2003-08-10 21:36:04 +00007747target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007748case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007749 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 +00007750 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007751 ;;
7752esac
bellard97a847b2003-08-10 21:36:04 +00007753target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007754target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007755target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007756target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007757case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007758 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007759 target_softmmu="yes"
7760 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007761 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007762 target_user_only="yes"
7763 target_linux_user="yes"
7764 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007765 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007766 target_user_only="yes"
7767 target_bsd_user="yes"
7768 ;;
pbrook9e407a82007-05-26 16:38:53 +00007769 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007770 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007771 exit 1
7772 ;;
7773esac
ths831b7822007-01-18 20:06:33 +00007774
bellard97a847b2003-08-10 21:36:04 +00007775mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007776echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007777
pbrooke5fe0c52006-06-11 13:32:59 +00007778bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007779mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007780interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007781gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007782
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007783TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007784TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007785TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007786
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007787case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007788 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007789 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307790 gdb_xml_files="i386-32bit.xml"
Laurent Vivier28988112020-03-10 11:33:56 +01007791 TARGET_SYSTBL_ABI=i386
aurel322408a522008-04-20 20:19:44 +00007792 ;;
7793 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007794 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007795 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307796 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007797 ;;
7798 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007799 mttcg="yes"
Laurent Vivier6116aea2020-03-10 11:33:44 +01007800 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007801 ;;
7802 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007803 TARGET_ARCH=arm
Laurent Vivier5bcb4982020-03-10 11:33:50 +01007804 TARGET_SYSTBL_ABI=common,oabi
aurel322408a522008-04-20 20:19:44 +00007805 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007806 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007807 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007808 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007809 aarch64|aarch64_be)
7810 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007811 TARGET_BASE_ARCH=arm
7812 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007813 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007814 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 +01007815 ;;
aurel322408a522008-04-20 20:19:44 +00007816 cris)
aurel322408a522008-04-20 20:19:44 +00007817 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007818 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007819 mttcg="yes"
Laurent Vivier9566f4c2020-03-10 11:33:45 +01007820 TARGET_SYSTBL_ABI=common,32
Richard Henderson61766fe2016-12-15 11:26:14 -08007821 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007822 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007823 ;;
aurel322408a522008-04-20 20:19:44 +00007824 m68k)
aurel322408a522008-04-20 20:19:44 +00007825 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007826 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Laurent Vivier5b85cae2020-03-10 11:33:46 +01007827 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007828 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007829 microblaze|microblazeel)
7830 TARGET_ARCH=microblaze
Laurent Vivierddf0c4c2020-03-10 11:33:49 +01007831 TARGET_SYSTBL_ABI=common
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007832 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007833 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007834 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007835 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007836 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007837 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007838 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007839 ;;
7840 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007841 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007842 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007843 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007844 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007845 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007846 ;;
7847 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007848 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007849 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007850 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007851 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007852 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007853 moxie)
7854 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007855 nios2)
7856 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007857 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007858 TARGET_ARCH=openrisc
7859 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007860 ;;
aurel322408a522008-04-20 20:19:44 +00007861 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007862 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Laurent Vivier76a691f2020-03-10 11:33:51 +01007863 TARGET_SYSTBL_ABI=common,nospu,32
aurel322408a522008-04-20 20:19:44 +00007864 ;;
aurel322408a522008-04-20 20:19:44 +00007865 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007866 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007867 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007868 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307869 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007870 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007871 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007872 ppc64le)
7873 TARGET_ARCH=ppc64
7874 TARGET_BASE_ARCH=ppc
7875 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007876 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307877 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007878 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 -05007879 ;;
aurel322408a522008-04-20 20:19:44 +00007880 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007881 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007882 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007883 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007884 TARGET_SYSTBL_ABI=common,nospu,32
Juan Quintela25be2102009-10-07 02:41:00 +02007885 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007886 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007887 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007888 riscv32)
7889 TARGET_BASE_ARCH=riscv
7890 TARGET_ABI_DIR=riscv
7891 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007892 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 +13007893 ;;
7894 riscv64)
7895 TARGET_BASE_ARCH=riscv
7896 TARGET_ABI_DIR=riscv
7897 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007898 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 +13007899 ;;
aurel322408a522008-04-20 20:19:44 +00007900 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007901 TARGET_ARCH=sh4
Laurent Vivierd0c832f2020-03-10 11:33:48 +01007902 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007903 bflt="yes"
7904 ;;
7905 sparc)
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007906 TARGET_SYSTBL_ABI=common,32
aurel322408a522008-04-20 20:19:44 +00007907 ;;
7908 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007909 TARGET_BASE_ARCH=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007910 TARGET_SYSTBL_ABI=common,64
aurel322408a522008-04-20 20:19:44 +00007911 ;;
7912 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007913 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007914 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007915 TARGET_ABI_DIR=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007916 TARGET_SYSTBL_ABI=common,32
Juan Quintela25be2102009-10-07 02:41:00 +02007917 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007918 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007919 s390x)
Laurent Vivier318f3712020-03-10 11:33:53 +01007920 TARGET_SYSTBL_ABI=common,64
David Hildenbrand63685bc2018-01-29 13:56:20 +01007921 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007922 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 +01007923 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007924 tilegx)
7925 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007926 tricore)
7927 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007928 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007929 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007930 xtensa|xtensaeb)
7931 TARGET_ARCH=xtensa
Laurent Viviera4a93592020-03-10 11:33:47 +01007932 TARGET_SYSTBL_ABI=common
Max Filippov02e33e92018-10-19 18:40:20 -07007933 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007934 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007935 ;;
aurel322408a522008-04-20 20:19:44 +00007936 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007937 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007938 ;;
7939esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007940# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7941if [ "$TARGET_BASE_ARCH" = "" ]; then
7942 TARGET_BASE_ARCH=$TARGET_ARCH
7943fi
7944
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007945symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7946
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007947upper() {
7948 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7949}
7950
Stefan Weil89138852016-05-16 15:10:20 +02007951target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007952echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007953echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007954echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007955if [ "$TARGET_ABI_DIR" = "" ]; then
7956 TARGET_ABI_DIR=$TARGET_ARCH
7957fi
Juan Quintela25be2102009-10-07 02:41:00 +02007958echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007959if [ "$HOST_VARIANT_DIR" != "" ]; then
7960 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7961fi
Laurent Vivier4d6a8352020-03-10 11:33:43 +01007962if [ "$TARGET_SYSTBL_ABI" != "" ]; then
7963 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
7964fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007965
7966if supported_xen_target $target; then
7967 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007968 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007969 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007970 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007971 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007972else
7973 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007974fi
7975if supported_kvm_target $target; then
7976 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007977 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7978else
7979 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007980fi
7981if supported_hax_target $target; then
7982 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007983fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007984if supported_hvf_target $target; then
7985 echo "CONFIG_HVF=y" >> $config_target_mak
7986fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007987if supported_whpx_target $target; then
7988 echo "CONFIG_WHPX=y" >> $config_target_mak
7989fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007990if test "$target_aligned_only" = "yes" ; then
7991 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7992fi
bellardde83cd02003-06-15 20:25:43 +00007993if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007994 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007995fi
7996if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007997 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007998 if test "$mttcg" = "yes" ; then
7999 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8000 fi
bellardde83cd02003-06-15 20:25:43 +00008001fi
bellard997344f2003-10-27 21:10:39 +00008002if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008003 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01008004 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00008005fi
ths831b7822007-01-18 20:06:33 +00008006if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008007 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00008008fi
pbrook56aebc82008-10-11 17:55:29 +00008009list=""
8010if test ! -z "$gdb_xml_files" ; then
8011 for x in $gdb_xml_files; do
8012 list="$list $source_path/gdb-xml/$x"
8013 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02008014 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00008015fi
bellardde83cd02003-06-15 20:25:43 +00008016
Eric Blakee633a5c2019-02-04 20:39:37 -06008017if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02008018 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008019fi
blueswir184778502008-10-26 20:33:16 +00008020if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008021 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008022fi
bellard5b0753e2005-03-01 21:37:28 +00008023
Alex Bennée716a5072018-04-10 12:19:40 +01008024
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008025# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008026
Juan Quintela4afddb52009-08-03 14:46:45 +02008027cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008028ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008029
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008030disas_config() {
8031 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8032 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8033}
8034
Juan Quintela64656022009-08-03 14:46:53 +02008035for i in $ARCH $TARGET_BASE_ARCH ; do
8036 case "$i" in
8037 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008038 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008039 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008040 aarch64)
8041 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008042 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008043 fi
8044 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008045 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008046 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008047 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008048 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008049 fi
Juan Quintela64656022009-08-03 14:46:53 +02008050 ;;
8051 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008052 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008053 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008054 hppa)
8055 disas_config "HPPA"
8056 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008057 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008058 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008059 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008060 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008061 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008062 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008063 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008064 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008065 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008066 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008067 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008068 ;;
8069 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008070 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008071 if test -n "${cxx}"; then
8072 disas_config "NANOMIPS"
8073 fi
Juan Quintela64656022009-08-03 14:46:53 +02008074 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008075 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008076 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008077 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008078 nios2)
8079 disas_config "NIOS2"
8080 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008081 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008082 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008083 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008084 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008085 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008086 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008087 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008088 disas_config "RISCV"
8089 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008090 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008091 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008092 ;;
8093 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008094 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008095 ;;
8096 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008097 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008098 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008099 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008100 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008101 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008102 esac
8103done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008104if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008105 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008106fi
Juan Quintela64656022009-08-03 14:46:53 +02008107
Juan Quintela6ee71262009-08-03 14:46:47 +02008108case "$ARCH" in
8109alpha)
8110 # Ensure there's only a single GP
8111 cflags="-msmall-data $cflags"
8112;;
8113esac
8114
Juan Quintelad02c1db2009-08-03 14:46:50 +02008115if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008116 if test "$target_linux_user" = "yes" ; then
8117 cflags="-p $cflags"
8118 ldflags="-p $ldflags"
8119 fi
8120 if test "$target_softmmu" = "yes" ; then
8121 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02008122 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008123 fi
8124fi
8125
Eric Blakee633a5c2019-02-04 20:39:37 -06008126if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07008127 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02008128fi
Juan Quintelafa282482009-07-22 22:37:39 +02008129
Christian Borntraegere9a35912017-08-23 12:16:23 +02008130# Newer kernels on s390 check for an S390_PGSTE program header and
8131# enable the pgste page table extensions in that case. This makes
8132# the vm.allocate_pgste sysctl unnecessary. We enable this program
8133# header if
8134# - we build on s390x
8135# - we build the system emulation for s390x (qemu-system-s390x)
8136# - KVM is enabled
8137# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008138if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8139 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008140 if ld_has --s390-pgste ; then
8141 ldflags="-Wl,--s390-pgste $ldflags"
8142 fi
8143fi
8144
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008145echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02008146echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008147
bellard97a847b2003-08-10 21:36:04 +00008148done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008149
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008150echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8151echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8152
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008153if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008154 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008155fi
Richard Hendersone219c492017-09-28 09:01:23 -07008156if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008157 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008158fi
8159if test -n "$LIBCAPSTONE"; then
8160 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8161fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008162
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008163if test "$numa" = "yes"; then
8164 echo "CONFIG_NUMA=y" >> $config_host_mak
8165fi
8166
John Snowfd0e6052015-03-25 18:57:39 -04008167if test "$ccache_cpp2" = "yes"; then
8168 echo "export CCACHE_CPP2=y" >> $config_host_mak
8169fi
8170
Peter Maydelle29e5c62018-11-02 11:52:38 +00008171# If we're using a separate build tree, set it up now.
8172# DIRS are directories which we simply mkdir in the build tree;
8173# LINKS are things to symlink back into the source tree
8174# (these can be both files and directories).
8175# Caution: do not add files or directories here using wildcards. This
8176# will result in problems later if a new file matching the wildcard is
8177# added to the source tree -- nothing will cause configure to be rerun
8178# so the build tree will be missing the link back to the new file, and
8179# tests might fail. Prefer to keep the relevant files in their own
8180# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008181DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8182DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008183DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008184DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008185DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008186LINKS="Makefile"
8187LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8188LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008189LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008190LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008191LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8192LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8193LINKS="$LINKS pc-bios/qemu-icon.bmp"
8194LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008195LINKS="$LINKS tests/acceptance tests/data"
8196LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008197LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008198for bios_file in \
8199 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008200 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008201 $source_path/pc-bios/*.rom \
8202 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008203 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008204 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008205 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008206 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008207 $source_path/pc-bios/palcode-*
8208do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008209 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008210done
8211mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008212for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008213 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008214 symlink "$source_path/$f" "$f"
8215 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008216done
Paul Brook1ad21342009-05-19 16:17:58 +01008217
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008218(for i in $cross_cc_vars; do
8219 export $i
8220done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008221export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008222$source_path/tests/tcg/configure.sh)
8223
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008224# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008225for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008226 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008227 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008228 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008229 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008230 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008231 echo "CC=$cc" >> $config_mak
8232 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008233 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008234 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008235 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008236 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008237 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008238done
8239
Max Reitz76c75602014-05-24 23:24:56 +02008240# set up qemu-iotests in this build directory
8241iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008242
8243echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8244echo >> "$iotests_common_env"
8245echo "export PYTHON='$python'" >> "$iotests_common_env"
8246
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008247# Save the configure command line for later reuse.
8248cat <<EOD >config.status
8249#!/bin/sh
8250# Generated by configure.
8251# Run this file to recreate the current configuration.
8252# Compiler output produced by configure, useful for debugging
8253# configure, is in config.log if it exists.
8254EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008255
8256preserve_env() {
8257 envname=$1
8258
8259 eval envval=\$$envname
8260
8261 if test -n "$envval"
8262 then
8263 echo "$envname='$envval'" >> config.status
8264 echo "export $envname" >> config.status
8265 else
8266 echo "unset $envname" >> config.status
8267 fi
8268}
8269
8270# Preserve various env variables that influence what
8271# features/build target configure will detect
8272preserve_env AR
8273preserve_env AS
8274preserve_env CC
8275preserve_env CPP
8276preserve_env CXX
8277preserve_env INSTALL
8278preserve_env LD
8279preserve_env LD_LIBRARY_PATH
8280preserve_env LIBTOOL
8281preserve_env MAKE
8282preserve_env NM
8283preserve_env OBJCOPY
8284preserve_env PATH
8285preserve_env PKG_CONFIG
8286preserve_env PKG_CONFIG_LIBDIR
8287preserve_env PKG_CONFIG_PATH
8288preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008289preserve_env SDL2_CONFIG
8290preserve_env SMBD
8291preserve_env STRIP
8292preserve_env WINDRES
8293
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008294printf "exec" >>config.status
8295printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008296echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008297chmod +x config.status
8298
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008299rm -r "$TMPDIR1"