blob: a7f2c3edd8d3f1b14f10f44a60e541b4e1f3037c [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"
Christian Ehrhardtbd83c862020-03-10 15:58:06 +0100408module_upgrades="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100409prefix="/usr/local"
410mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300411datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200412firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300413qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100414bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300415libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400416libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200417includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100418sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300419local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100420confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100421slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100422oss_lib=""
423bsd="no"
424linux="no"
425solaris="no"
426profiler="no"
427cocoa="no"
428softmmu="yes"
429linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100430bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100431blobs="yes"
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +0100432edk2_blobs="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100433pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200434pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200435qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300436trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100437trace_file="trace"
438spice=""
439rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200440smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100441libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200442usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100443opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100444opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000445cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100446avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300447zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700448capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200449lzo=""
450snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100451bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200452lzfse=""
Juan Quintela3a678482019-12-17 21:15:24 +0100453zstd=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400454guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400455guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500456guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300457guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400458vss_win32_sdk=""
459win_sdk="no"
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +0100460want_tools=""
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100461libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100462libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100463coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200464coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200465debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400466crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300467seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530468glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400469glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530470glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530471glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530472glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100473glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100474glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600475gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200476gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100477tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100478gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100479nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100480nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100481gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800482gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100483gcrypt_xts="no"
484qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100485auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100486vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200487virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800488tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200489libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100490live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800491numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800492tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200493jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800494replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700495vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100496bochs="yes"
497cloop="yes"
498dmg="yes"
499qcow1="yes"
500vdi="yes"
501vvfat="yes"
502qed="yes"
503parallels="yes"
504sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300505libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200506debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800507libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800508default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100509plugins="no"
Alexander Bulekovadc28022020-02-19 23:11:14 -0500510fuzzing="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100511
Peter Maydell898be3e2017-03-21 14:31:57 +0000512supported_cpu="no"
513supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100514bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800515malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000516
aliguoriac0df512008-12-29 17:14:15 +0000517# parse CC options first
518for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200519 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000520 case "$opt" in
521 --cross-prefix=*) cross_prefix="$optarg"
522 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100523 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000524 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400525 --cxx=*) CXX="$optarg"
526 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200527 --cpu=*) cpu="$optarg"
528 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100529 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100530 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200531 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100532 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100533 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100534 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100535 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200536 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100537 --enable-debug-info) debug_info="yes"
538 ;;
539 --disable-debug-info) debug_info="no"
540 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100541 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
542 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100543 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
544 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200545 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100546 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100547 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200548 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100549 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200550 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100551 ;;
aliguoriac0df512008-12-29 17:14:15 +0000552 esac
553done
aliguoriac0df512008-12-29 17:14:15 +0000554# OS specific
555# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100556# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000557
Peter Maydelle49d0212012-12-07 15:39:13 +0000558# Preferred compiler:
559# ${CC} (if set)
560# ${cross_prefix}gcc (if cross-prefix specified)
561# system compiler
562if test -z "${CC}${cross_prefix}"; then
563 cc="$host_cc"
564else
565 cc="${CC-${cross_prefix}gcc}"
566fi
567
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400568if test -z "${CXX}${cross_prefix}"; then
569 cxx="c++"
570else
571 cxx="${CXX-${cross_prefix}g++}"
572fi
573
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500574ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700575as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700576ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000577cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500578objcopy="${OBJCOPY-${cross_prefix}objcopy}"
579ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800580ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200581nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500582strip="${STRIP-${cross_prefix}strip}"
583windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300584pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
585query_pkg_config() {
586 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
587}
588pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000589sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000590
Peter Maydell45d285a2013-10-21 21:03:06 +0100591# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
592ARFLAGS="${ARFLAGS-rv}"
593
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200594# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100595# We use -fwrapv to tell the compiler that we require a C dialect where
596# left shift of signed integers is well defined and has the expected
597# 2s-complement style results. (Both clang and gcc agree that it
598# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100599QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400600QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100601QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200602QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200603QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200604QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100605if test "$debug_info" = "yes"; then
606 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100607fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200608
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300609# running configure in the source tree?
610# we know that's the case if configure is there.
611if test -f "./configure"; then
612 pwd_is_source_path="y"
613else
614 pwd_is_source_path="n"
615fi
616
aliguoriac0df512008-12-29 17:14:15 +0000617check_define() {
618cat > $TMPC <<EOF
619#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000620#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000621#endif
622int main(void) { return 0; }
623EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200624 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000625}
626
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200627check_include() {
628cat > $TMPC <<EOF
629#include <$1>
630int main(void) { return 0; }
631EOF
632 compile_object
633}
634
John Snow93b25862015-03-25 18:57:37 -0400635write_c_skeleton() {
636 cat > $TMPC <<EOF
637int main(void) { return 0; }
638EOF
639}
640
Alexander Bulekovadc28022020-02-19 23:11:14 -0500641write_c_fuzzer_skeleton() {
642 cat > $TMPC <<EOF
643#include <stdint.h>
644#include <sys/types.h>
645int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
646int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
647EOF
648}
649
Peter Maydellbbea4052012-08-14 15:35:34 +0100650if check_define __linux__ ; then
651 targetos="Linux"
652elif check_define _WIN32 ; then
653 targetos='MINGW32'
654elif check_define __OpenBSD__ ; then
655 targetos='OpenBSD'
656elif check_define __sun__ ; then
657 targetos='SunOS'
658elif check_define __HAIKU__ ; then
659 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100660elif check_define __FreeBSD__ ; then
661 targetos='FreeBSD'
662elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
663 targetos='GNU/kFreeBSD'
664elif check_define __DragonFly__ ; then
665 targetos='DragonFly'
666elif check_define __NetBSD__; then
667 targetos='NetBSD'
668elif check_define __APPLE__; then
669 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100670else
Peter Maydell951fedf2017-07-13 16:15:32 +0100671 # This is a fatal error, but don't report it yet, because we
672 # might be going to just print the --help text, or it might
673 # be the result of a missing compiler.
674 targetos='bogus'
675 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100676fi
677
678# Some host OSes need non-standard checks for which CPU to use.
679# Note that these checks are broken for cross-compilation: if you're
680# cross-compiling to one of these OSes then you'll need to specify
681# the correct CPU with the --cpu option.
682case $targetos in
683Darwin)
684 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
685 # run 64-bit userspace code.
686 # If the user didn't specify a CPU explicitly and the kernel says this is
687 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
688 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
689 cpu="x86_64"
690 fi
691 ;;
692SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200693 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100694 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
695 cpu="x86_64"
696 fi
697esac
698
Juan Quintela2ff6b912009-08-03 14:45:55 +0200699if test ! -z "$cpu" ; then
700 # command line argument
701 :
702elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000703 cpu="i386"
704elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700705 if check_define __ILP32__ ; then
706 cpu="x32"
707 else
708 cpu="x86_64"
709 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000710elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000711 if check_define __arch64__ ; then
712 cpu="sparc64"
713 else
714 cpu="sparc"
715 fi
malcfdf7ed92009-01-14 18:39:52 +0000716elif check_define _ARCH_PPC ; then
717 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700718 if check_define _LITTLE_ENDIAN ; then
719 cpu="ppc64le"
720 else
721 cpu="ppc64"
722 fi
malcfdf7ed92009-01-14 18:39:52 +0000723 else
724 cpu="ppc"
725 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200726elif check_define __mips__ ; then
727 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200728elif check_define __s390__ ; then
729 if check_define __s390x__ ; then
730 cpu="s390x"
731 else
732 cpu="s390"
733 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000734elif check_define __riscv ; then
735 if check_define _LP64 ; then
736 cpu="riscv64"
737 else
738 cpu="riscv32"
739 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100740elif check_define __arm__ ; then
741 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100742elif check_define __aarch64__ ; then
743 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000744else
Stefan Weil89138852016-05-16 15:10:20 +0200745 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000746fi
747
Peter Maydell359bc952011-12-24 13:07:25 +0000748ARCH=
749# Normalise host CPU name and set ARCH.
750# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000751case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200752 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000753 supported_cpu="yes"
754 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700755 ppc64le)
756 ARCH="ppc64"
757 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700758 ;;
bellard7d132992003-03-06 23:23:54 +0000759 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000760 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000761 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000762 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000763 x86_64|amd64)
764 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000765 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000766 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100767 armv*b|armv*l|arm)
768 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000769 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000770 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100771 aarch64)
772 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000773 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100774 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200775 mips*)
776 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000777 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200778 ;;
blueswir131422552007-04-16 18:27:06 +0000779 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000780 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100781 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000782 ;;
bellard7d132992003-03-06 23:23:54 +0000783 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000784 # This will result in either an error or falling back to TCI later
785 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000786 ;;
787esac
Peter Maydell359bc952011-12-24 13:07:25 +0000788if test -z "$ARCH"; then
789 ARCH="$cpu"
790fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200791
bellard7d132992003-03-06 23:23:54 +0000792# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200793
Stacey Sonadfc3e92014-06-08 09:57:22 -0700794# host *BSD for user mode
795HOST_VARIANT_DIR=""
796
bellard7d132992003-03-06 23:23:54 +0000797case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000798MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200799 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100800 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100801 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200802 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200803 if check_include dsound.h; then
804 audio_drv_list="dsound"
805 else
806 audio_drv_list=""
807 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000808 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000809;;
ths5c40d2b2007-06-23 16:03:36 +0000810GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100811 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100812 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200813 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000814;;
bellard7d3505c2004-05-12 19:32:15 +0000815FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200816 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100817 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100818 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200819 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100820 # needed for kinfo_getvmmap(3) in libutil.h
821 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500822 # needed for kinfo_getproc
823 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100824 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700825 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000826 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000827;;
blueswir1c5e97232009-03-07 20:06:23 +0000828DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200829 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100830 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100831 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200832 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700833 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000834;;
bellard7d3505c2004-05-12 19:32:15 +0000835NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200836 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100837 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100838 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100839 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200840 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200841 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700842 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200843 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000844;;
845OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200846 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100847 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100848 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200849 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700850 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500851 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000852;;
bellard83fb7ad2004-07-05 21:25:26 +0000853Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200854 bsd="yes"
855 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100856 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500857 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800858 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200859 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200860 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100861 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200862 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200863 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100864 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200865 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100866 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200867 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100868 # Disable attempts to use ObjectiveC features in os/object.h since they
869 # won't work when we're compiling with gcc as a C compiler.
870 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700871 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000872 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000873;;
bellardec530c82006-04-25 22:36:06 +0000874SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200875 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100876 make="${MAKE-gmake}"
877 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400878 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200879 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100880 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200881 fi
882 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000883# needed for CMSG_ macros in sys/socket.h
884 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
885# needed for TIOCWIN* defines in termios.h
886 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200887 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200888 solarisnetlibs="-lsocket -lnsl -lresolv"
889 LIBS="$solarisnetlibs $LIBS"
890 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000891;;
Andreas Färber179cf402010-09-20 00:50:43 +0200892Haiku)
893 haiku="yes"
894 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
895 LIBS="-lposix_error_mapper -lnetwork $LIBS"
896;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000897Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100898 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200899 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200900 linux="yes"
901 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200902 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600903 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000904 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200905 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000906;;
bellard7d132992003-03-06 23:23:54 +0000907esac
908
bellard7d3505c2004-05-12 19:32:15 +0000909if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000910 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200911 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000912 fi
bellard7d3505c2004-05-12 19:32:15 +0000913fi
914
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100915: ${make=${MAKE-make}}
916: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000917# We prefer python 3.x. A bare 'python' is traditionally
918# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300919# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000920python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300921for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000922do
923 if has "$binary"
924 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200925 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000926 break
927 fi
928done
Markus Armbruster903458c2020-02-14 18:18:41 +0100929
930sphinx_build=
931for binary in sphinx-build-3 sphinx-build
932do
933 if has "$binary"
934 then
935 sphinx_build=$(command -v "$binary")
936 break
937 fi
938done
939
Alex Bennée39d87c82020-03-03 15:06:20 +0000940# Check for ancillary tools used in testing
941genisoimage=
942for binary in genisoimage
943do
944 if has $binary
945 then
946 genisoimage=$(command -v "$binary")
947 break
948 fi
949done
950
Brade2d88302011-09-02 16:53:28 -0400951: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100952
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100953# Default objcc to clang if available, otherwise use CC
954if has clang; then
955 objcc=clang
956else
957 objcc="$cc"
958fi
959
Juan Quintela3457a3f2009-08-03 14:46:07 +0200960if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200961 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800962 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100963 # MinGW needs -mthreads for TLS and macro _MT.
964 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100965 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400966 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100967 if compile_prog "" "-liberty" ; then
968 LIBS="-liberty $LIBS"
969 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200970 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200971 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300972 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300973 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200974 bindir="\${prefix}"
975 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200976 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200977 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300978 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200979fi
980
Anthony Liguori487fefd2009-06-11 13:28:25 -0500981werror=""
bellard85aa5182007-11-11 20:17:03 +0000982
bellard7d132992003-03-06 23:23:54 +0000983for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200984 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000985 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000986 --help|-h) show_help=yes
987 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400988 --version|-V) exec cat $source_path/VERSION
989 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000990 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000991 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000992 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000993 ;;
aliguoriac0df512008-12-29 17:14:15 +0000994 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000995 ;;
aliguoriac0df512008-12-29 17:14:15 +0000996 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000997 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000998 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000999 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04001000 --cxx=*)
1001 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +02001002 --iasl=*) iasl="$optarg"
1003 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +01001004 --objcc=*) objcc="$optarg"
1005 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001006 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +00001007 ;;
pbrook6a882642006-04-17 13:57:12 +00001008 --install=*) install="$optarg"
1009 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +00001010 --python=*) python="$optarg"
1011 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001012 --sphinx-build=*) sphinx_build="$optarg"
1013 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001014 --gcov=*) gcov_tool="$optarg"
1015 ;;
Brade2d88302011-09-02 16:53:28 -04001016 --smbd=*) smbd="$optarg"
1017 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001018 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001019 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001020 --extra-cxxflags=*)
1021 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001022 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001023 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001024 --enable-debug-info)
1025 ;;
1026 --disable-debug-info)
1027 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001028 --cross-cc-*)
1029 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001030 --enable-modules)
1031 modules="yes"
1032 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001033 --disable-modules)
1034 modules="no"
1035 ;;
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01001036 --disable-module-upgrades) module_upgrades="no"
1037 ;;
1038 --enable-module-upgrades) module_upgrades="yes"
1039 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001040 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001041 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001042 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001043 if test "$target_list_exclude"; then
1044 error_exit "Can't mix --target-list with --target-list-exclude"
1045 fi
1046 ;;
1047 --target-list-exclude=*) target_list_exclude="$optarg"
1048 if test "$target_list"; then
1049 error_exit "Can't mix --target-list-exclude with --target-list"
1050 fi
bellardde83cd02003-06-15 20:25:43 +00001051 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001052 --enable-trace-backends=*) trace_backends="$optarg"
1053 ;;
1054 # XXX: backwards compatibility
1055 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001056 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001057 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001058 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001059 --with-default-devices) default_devices="yes"
1060 ;;
1061 --without-default-devices) default_devices="no"
1062 ;;
bellard7d132992003-03-06 23:23:54 +00001063 --enable-gprof) gprof="yes"
1064 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001065 --enable-gcov) gcov="yes"
1066 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001067 --static)
1068 static="yes"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001069 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001070 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001071 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001072 --mandir=*) mandir="$optarg"
1073 ;;
1074 --bindir=*) bindir="$optarg"
1075 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001076 --libdir=*) libdir="$optarg"
1077 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001078 --libexecdir=*) libexecdir="$optarg"
1079 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001080 --includedir=*) includedir="$optarg"
1081 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001082 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001083 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001084 --with-confsuffix=*) confsuffix="$optarg"
1085 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001086 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001087 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001088 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001089 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001090 --localstatedir=*) local_statedir="$optarg"
1091 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001092 --firmwarepath=*) firmwarepath="$optarg"
1093 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001094 --host=*|--build=*|\
1095 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001096 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001097 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1098 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1099 # These switches are silently ignored, for compatibility with
1100 # autoconf-generated configure scripts. This allows QEMU's
1101 # configure to be used by RPM and similar macros that set
1102 # lots of directory switches by default.
1103 ;;
bellard97a847b2003-08-10 21:36:04 +00001104 --disable-sdl) sdl="no"
1105 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001106 --enable-sdl) sdl="yes"
1107 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001108 --disable-sdl-image) sdl_image="no"
1109 ;;
1110 --enable-sdl-image) sdl_image="yes"
1111 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001112 --disable-qom-cast-debug) qom_cast_debug="no"
1113 ;;
1114 --enable-qom-cast-debug) qom_cast_debug="yes"
1115 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301116 --disable-virtfs) virtfs="no"
1117 ;;
1118 --enable-virtfs) virtfs="yes"
1119 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001120 --disable-mpath) mpath="no"
1121 ;;
1122 --enable-mpath) mpath="yes"
1123 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001124 --disable-vnc) vnc="no"
1125 ;;
1126 --enable-vnc) vnc="yes"
1127 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001128 --oss-lib=*) oss_lib="$optarg"
1129 ;;
malc0c58ac12008-06-25 21:04:05 +00001130 --audio-drv-list=*) audio_drv_list="$optarg"
1131 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001132 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001133 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001134 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001135 ;;
aurel32f8393942009-04-13 18:45:38 +00001136 --enable-debug-tcg) debug_tcg="yes"
1137 ;;
1138 --disable-debug-tcg) debug_tcg="no"
1139 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001140 --enable-debug)
1141 # Enable debugging options that aren't excessively noisy
1142 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001143 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001144 debug="yes"
1145 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001146 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001147 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001148 --enable-sanitizers) sanitizers="yes"
1149 ;;
1150 --disable-sanitizers) sanitizers="no"
1151 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001152 --enable-sparse) sparse="yes"
1153 ;;
1154 --disable-sparse) sparse="no"
1155 ;;
aliguori1625af82009-04-05 17:41:02 +00001156 --disable-strip) strip_opt="no"
1157 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001158 --disable-vnc-sasl) vnc_sasl="no"
1159 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001160 --enable-vnc-sasl) vnc_sasl="yes"
1161 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001162 --disable-vnc-jpeg) vnc_jpeg="no"
1163 ;;
1164 --enable-vnc-jpeg) vnc_jpeg="yes"
1165 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001166 --disable-vnc-png) vnc_png="no"
1167 ;;
1168 --enable-vnc-png) vnc_png="yes"
1169 ;;
bellard443f1372004-06-04 11:13:20 +00001170 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001171 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001172 --enable-slirp=git) slirp="git"
1173 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001174 --enable-slirp=system) slirp="system"
1175 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001176 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001177 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001178 --enable-vde) vde="yes"
1179 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001180 --disable-netmap) netmap="no"
1181 ;;
1182 --enable-netmap) netmap="yes"
1183 ;;
aliguorie37630c2009-04-22 15:19:10 +00001184 --disable-xen) xen="no"
1185 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001186 --enable-xen) xen="yes"
1187 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001188 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1189 ;;
1190 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1191 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001192 --disable-brlapi) brlapi="no"
1193 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001194 --enable-brlapi) brlapi="yes"
1195 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001196 --disable-kvm) kvm="no"
1197 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001198 --enable-kvm) kvm="yes"
1199 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001200 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001201 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001202 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001203 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001204 --disable-hvf) hvf="no"
1205 ;;
1206 --enable-hvf) hvf="yes"
1207 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001208 --disable-whpx) whpx="no"
1209 ;;
1210 --enable-whpx) whpx="yes"
1211 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001212 --disable-tcg-interpreter) tcg_interpreter="no"
1213 ;;
1214 --enable-tcg-interpreter) tcg_interpreter="yes"
1215 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001216 --disable-cap-ng) cap_ng="no"
1217 ;;
1218 --enable-cap-ng) cap_ng="yes"
1219 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001220 --disable-tcg) tcg="no"
1221 ;;
1222 --enable-tcg) tcg="yes"
1223 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001224 --disable-malloc-trim) malloc_trim="no"
1225 ;;
1226 --enable-malloc-trim) malloc_trim="yes"
1227 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001228 --disable-spice) spice="no"
1229 ;;
1230 --enable-spice) spice="yes"
1231 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001232 --disable-libiscsi) libiscsi="no"
1233 ;;
1234 --enable-libiscsi) libiscsi="yes"
1235 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001236 --disable-libnfs) libnfs="no"
1237 ;;
1238 --enable-libnfs) libnfs="yes"
1239 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001240 --enable-profiler) profiler="yes"
1241 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001242 --disable-cocoa) cocoa="no"
1243 ;;
malcc2de5c92008-06-28 19:13:06 +00001244 --enable-cocoa)
1245 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001246 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001247 ;;
pbrookcad25d62006-03-19 16:31:11 +00001248 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001249 ;;
pbrookcad25d62006-03-19 16:31:11 +00001250 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001251 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001252 --disable-user)
1253 linux_user="no" ;
1254 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001255 ;;
1256 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001257 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001258 ;;
ths831b7822007-01-18 20:06:33 +00001259 --enable-linux-user) linux_user="yes"
1260 ;;
blueswir184778502008-10-26 20:33:16 +00001261 --disable-bsd-user) bsd_user="no"
1262 ;;
1263 --enable-bsd-user) bsd_user="yes"
1264 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001265 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001266 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001267 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001268 ;;
bellard85aa5182007-11-11 20:17:03 +00001269 --enable-werror) werror="yes"
1270 ;;
1271 --disable-werror) werror="no"
1272 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001273 --enable-stack-protector) stack_protector="yes"
1274 ;;
1275 --disable-stack-protector) stack_protector="no"
1276 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001277 --disable-curses) curses="no"
1278 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001279 --enable-curses) curses="yes"
1280 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001281 --disable-iconv) iconv="no"
1282 ;;
1283 --enable-iconv) iconv="yes"
1284 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001285 --disable-curl) curl="no"
1286 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001287 --enable-curl) curl="yes"
1288 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001289 --disable-fdt) fdt="no"
1290 ;;
1291 --enable-fdt) fdt="yes"
1292 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001293 --disable-linux-aio) linux_aio="no"
1294 ;;
1295 --enable-linux-aio) linux_aio="yes"
1296 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001297 --disable-linux-io-uring) linux_io_uring="no"
1298 ;;
1299 --enable-linux-io-uring) linux_io_uring="yes"
1300 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001301 --disable-attr) attr="no"
1302 ;;
1303 --enable-attr) attr="yes"
1304 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001305 --disable-membarrier) membarrier="no"
1306 ;;
1307 --enable-membarrier) membarrier="yes"
1308 ;;
ths77755342008-11-27 15:45:16 +00001309 --disable-blobs) blobs="no"
1310 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001311 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001312 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001313 --with-coroutine=*) coroutine="$optarg"
1314 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001315 --disable-coroutine-pool) coroutine_pool="no"
1316 ;;
1317 --enable-coroutine-pool) coroutine_pool="yes"
1318 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001319 --enable-debug-stack-usage) debug_stack_usage="yes"
1320 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001321 --enable-crypto-afalg) crypto_afalg="yes"
1322 ;;
1323 --disable-crypto-afalg) crypto_afalg="no"
1324 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001325 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001326 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001327 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001328 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001329 --disable-vhost-net) vhost_net="no"
1330 ;;
1331 --enable-vhost-net) vhost_net="yes"
1332 ;;
Gonglei042cea22018-03-01 21:46:28 +08001333 --disable-vhost-crypto) vhost_crypto="no"
1334 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001335 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001336 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001337 --disable-vhost-scsi) vhost_scsi="no"
1338 ;;
1339 --enable-vhost-scsi) vhost_scsi="yes"
1340 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001341 --disable-vhost-vsock) vhost_vsock="no"
1342 ;;
1343 --enable-vhost-vsock) vhost_vsock="yes"
1344 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001345 --disable-vhost-user-fs) vhost_user_fs="no"
1346 ;;
1347 --enable-vhost-user-fs) vhost_user_fs="yes"
1348 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001349 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001350 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001351 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001352 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001353 --disable-rbd) rbd="no"
1354 ;;
1355 --enable-rbd) rbd="yes"
1356 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001357 --disable-xfsctl) xfs="no"
1358 ;;
1359 --enable-xfsctl) xfs="yes"
1360 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001361 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001362 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001363 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001364 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001365 --disable-libusb) libusb="no"
1366 ;;
1367 --enable-libusb) libusb="yes"
1368 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001369 --disable-usb-redir) usb_redir="no"
1370 ;;
1371 --enable-usb-redir) usb_redir="yes"
1372 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001373 --disable-zlib-test) zlib="no"
1374 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001375 --disable-lzo) lzo="no"
1376 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001377 --enable-lzo) lzo="yes"
1378 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001379 --disable-snappy) snappy="no"
1380 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001381 --enable-snappy) snappy="yes"
1382 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001383 --disable-bzip2) bzip2="no"
1384 ;;
1385 --enable-bzip2) bzip2="yes"
1386 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001387 --enable-lzfse) lzfse="yes"
1388 ;;
1389 --disable-lzfse) lzfse="no"
1390 ;;
Juan Quintela3a678482019-12-17 21:15:24 +01001391 --disable-zstd) zstd="no"
1392 ;;
1393 --enable-zstd) zstd="yes"
1394 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001395 --enable-guest-agent) guest_agent="yes"
1396 ;;
1397 --disable-guest-agent) guest_agent="no"
1398 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001399 --enable-guest-agent-msi) guest_agent_msi="yes"
1400 ;;
1401 --disable-guest-agent-msi) guest_agent_msi="no"
1402 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001403 --with-vss-sdk) vss_win32_sdk=""
1404 ;;
1405 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1406 ;;
1407 --without-vss-sdk) vss_win32_sdk="no"
1408 ;;
1409 --with-win-sdk) win_sdk=""
1410 ;;
1411 --with-win-sdk=*) win_sdk="$optarg"
1412 ;;
1413 --without-win-sdk) win_sdk="no"
1414 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001415 --enable-tools) want_tools="yes"
1416 ;;
1417 --disable-tools) want_tools="no"
1418 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001419 --enable-seccomp) seccomp="yes"
1420 ;;
1421 --disable-seccomp) seccomp="no"
1422 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301423 --disable-glusterfs) glusterfs="no"
1424 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001425 --disable-avx2) avx2_opt="no"
1426 ;;
1427 --enable-avx2) avx2_opt="yes"
1428 ;;
Robert Hoo6b8cd442020-02-29 20:34:34 +08001429 --disable-avx512f) avx512f_opt="no"
1430 ;;
1431 --enable-avx512f) avx512f_opt="yes"
1432 ;;
1433
Bharata B Raoeb100392012-09-24 14:42:45 +05301434 --enable-glusterfs) glusterfs="yes"
1435 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001436 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1437 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001438 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001439 --enable-vhdx|--disable-vhdx)
1440 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1441 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001442 --enable-uuid|--disable-uuid)
1443 echo "$0: $opt is obsolete, UUID support is always built" >&2
1444 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001445 --disable-gtk) gtk="no"
1446 ;;
1447 --enable-gtk) gtk="yes"
1448 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001449 --tls-priority=*) tls_priority="$optarg"
1450 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001451 --disable-gnutls) gnutls="no"
1452 ;;
1453 --enable-gnutls) gnutls="yes"
1454 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001455 --disable-nettle) nettle="no"
1456 ;;
1457 --enable-nettle) nettle="yes"
1458 ;;
1459 --disable-gcrypt) gcrypt="no"
1460 ;;
1461 --enable-gcrypt) gcrypt="yes"
1462 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001463 --disable-auth-pam) auth_pam="no"
1464 ;;
1465 --enable-auth-pam) auth_pam="yes"
1466 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001467 --enable-rdma) rdma="yes"
1468 ;;
1469 --disable-rdma) rdma="no"
1470 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001471 --enable-pvrdma) pvrdma="yes"
1472 ;;
1473 --disable-pvrdma) pvrdma="no"
1474 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001475 --disable-vte) vte="no"
1476 ;;
1477 --enable-vte) vte="yes"
1478 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001479 --disable-virglrenderer) virglrenderer="no"
1480 ;;
1481 --enable-virglrenderer) virglrenderer="yes"
1482 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001483 --disable-tpm) tpm="no"
1484 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001485 --enable-tpm) tpm="yes"
1486 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001487 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001488 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001489 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001490 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001491 --disable-live-block-migration) live_block_migration="no"
1492 ;;
1493 --enable-live-block-migration) live_block_migration="yes"
1494 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001495 --disable-numa) numa="no"
1496 ;;
1497 --enable-numa) numa="yes"
1498 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001499 --disable-libxml2) libxml2="no"
1500 ;;
1501 --enable-libxml2) libxml2="yes"
1502 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001503 --disable-tcmalloc) tcmalloc="no"
1504 ;;
1505 --enable-tcmalloc) tcmalloc="yes"
1506 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001507 --disable-jemalloc) jemalloc="no"
1508 ;;
1509 --enable-jemalloc) jemalloc="yes"
1510 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001511 --disable-replication) replication="no"
1512 ;;
1513 --enable-replication) replication="yes"
1514 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001515 --disable-vxhs) vxhs="no"
1516 ;;
1517 --enable-vxhs) vxhs="yes"
1518 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001519 --disable-bochs) bochs="no"
1520 ;;
1521 --enable-bochs) bochs="yes"
1522 ;;
1523 --disable-cloop) cloop="no"
1524 ;;
1525 --enable-cloop) cloop="yes"
1526 ;;
1527 --disable-dmg) dmg="no"
1528 ;;
1529 --enable-dmg) dmg="yes"
1530 ;;
1531 --disable-qcow1) qcow1="no"
1532 ;;
1533 --enable-qcow1) qcow1="yes"
1534 ;;
1535 --disable-vdi) vdi="no"
1536 ;;
1537 --enable-vdi) vdi="yes"
1538 ;;
1539 --disable-vvfat) vvfat="no"
1540 ;;
1541 --enable-vvfat) vvfat="yes"
1542 ;;
1543 --disable-qed) qed="no"
1544 ;;
1545 --enable-qed) qed="yes"
1546 ;;
1547 --disable-parallels) parallels="no"
1548 ;;
1549 --enable-parallels) parallels="yes"
1550 ;;
1551 --disable-sheepdog) sheepdog="no"
1552 ;;
1553 --enable-sheepdog) sheepdog="yes"
1554 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001555 --disable-vhost-user) vhost_user="no"
1556 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001557 --enable-vhost-user) vhost_user="yes"
1558 ;;
1559 --disable-vhost-kernel) vhost_kernel="no"
1560 ;;
1561 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001562 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001563 --disable-capstone) capstone="no"
1564 ;;
1565 --enable-capstone) capstone="yes"
1566 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001567 --enable-capstone=git) capstone="git"
1568 ;;
1569 --enable-capstone=system) capstone="system"
1570 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001571 --with-git=*) git="$optarg"
1572 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001573 --enable-git-update) git_update=yes
1574 ;;
1575 --disable-git-update) git_update=no
1576 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001577 --enable-debug-mutex) debug_mutex=yes
1578 ;;
1579 --disable-debug-mutex) debug_mutex=no
1580 ;;
Junyan He17824402018-07-18 15:47:59 +08001581 --enable-libpmem) libpmem=yes
1582 ;;
1583 --disable-libpmem) libpmem=no
1584 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001585 --enable-xkbcommon) xkbcommon=yes
1586 ;;
1587 --disable-xkbcommon) xkbcommon=no
1588 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001589 --enable-plugins) plugins="yes"
1590 ;;
1591 --disable-plugins) plugins="no"
1592 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001593 --enable-containers) use_containers="yes"
1594 ;;
1595 --disable-containers) use_containers="no"
1596 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001597 --enable-fuzzing) fuzzing=yes
1598 ;;
1599 --disable-fuzzing) fuzzing=no
1600 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001601 *)
1602 echo "ERROR: unknown option $opt"
1603 echo "Try '$0 --help' for more information"
1604 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001605 ;;
bellard7d132992003-03-06 23:23:54 +00001606 esac
1607done
1608
bellard40293e52008-01-31 11:32:10 +00001609case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001610 ppc)
1611 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001612 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001613 ;;
1614 ppc64)
1615 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001616 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001617 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001618 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001619 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001620 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001621 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001622 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001623 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001624 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001625 ;;
ths76d83bd2007-11-18 21:22:10 +00001626 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001627 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001628 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001629 ;;
1630 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001631 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001632 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001633 ;;
bellard40293e52008-01-31 11:32:10 +00001634 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001635 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001636 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001637 ;;
1638 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001639 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1640 # If we truly care, we should simply detect this case at
1641 # runtime and generate the fallback to serial emulation.
1642 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001643 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001644 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001645 x32)
1646 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001647 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001648 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001649 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001650esac
1651
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001652eval "cross_cc_${cpu}=\$host_cc"
1653cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001654QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001655
Peter Maydellaffc88c2016-06-13 11:32:24 +01001656# For user-mode emulation the host arch has to be one we explicitly
1657# support, even if we're using TCI.
1658if [ "$ARCH" = "unknown" ]; then
1659 bsd_user="no"
1660 linux_user="no"
1661fi
1662
Peter Maydell60e0df22011-05-03 14:50:13 +01001663default_target_list=""
1664
Peter Maydell6e92f822013-05-20 16:16:15 +01001665mak_wilds=""
1666
1667if [ "$softmmu" = "yes" ]; then
1668 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001669fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001670if [ "$linux_user" = "yes" ]; then
1671 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001672fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001673if [ "$bsd_user" = "yes" ]; then
1674 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001675fi
1676
Alex Bennée447e1332019-03-19 11:59:12 +00001677if test -z "$target_list_exclude"; then
1678 for config in $mak_wilds; do
1679 default_target_list="${default_target_list} $(basename "$config" .mak)"
1680 done
1681else
1682 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1683 for config in $mak_wilds; do
1684 target="$(basename "$config" .mak)"
1685 exclude="no"
1686 for excl in $exclude_list; do
1687 if test "$excl" = "$target"; then
1688 exclude="yes"
1689 break;
1690 fi
1691 done
1692 if test "$exclude" = "no"; then
1693 default_target_list="${default_target_list} $target"
1694 fi
1695 done
1696fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001697
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001698# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001699trace_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 +01001700
pbrookaf5db582006-04-08 14:26:41 +00001701if test x"$show_help" = x"yes" ; then
1702cat << EOF
1703
1704Usage: configure [options]
1705Options: [defaults in brackets after descriptions]
1706
Stefan Weil08fb77e2013-12-18 22:09:39 +01001707Standard options:
1708 --help print this message
1709 --prefix=PREFIX install in PREFIX [$prefix]
1710 --interp-prefix=PREFIX where to find shared libraries, etc.
1711 use %M for cpu name [$interp_prefix]
1712 --target-list=LIST set target list (default: build everything)
1713$(echo Available targets: $default_target_list | \
1714 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001715 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001716
1717Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001718 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1719 --cc=CC use C compiler CC [$cc]
1720 --iasl=IASL use ACPI compiler IASL [$iasl]
1721 --host-cc=CC use C compiler CC [$host_cc] for code run at
1722 build time
1723 --cxx=CXX use C++ compiler CXX [$cxx]
1724 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1725 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001726 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001727 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001728 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001729 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001730 --make=MAKE use specified make [$make]
1731 --install=INSTALL use specified install [$install]
1732 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001733 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001734 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001735 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001736 --static enable static build [$static]
1737 --mandir=PATH install man pages in PATH
1738 --datadir=PATH install firmware in PATH$confsuffix
1739 --docdir=PATH install documentation in PATH$confsuffix
1740 --bindir=PATH install binaries in PATH
1741 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001742 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001743 --sysconfdir=PATH install config in PATH$confsuffix
1744 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001745 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001746 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001747 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001748 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001749 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001750 --disable-strip disable stripping binaries
1751 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001752 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001753 --audio-drv-list=LIST set audio drivers list:
1754 Available drivers: $audio_possible_drivers
1755 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1756 --block-drv-rw-whitelist=L
1757 set block driver read-write whitelist
1758 (affects only QEMU, not qemu-img)
1759 --block-drv-ro-whitelist=L
1760 set block driver read-only whitelist
1761 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001762 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001763 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001764 --with-trace-file=NAME Full PATH,NAME of file to store traces
1765 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001766 --disable-slirp disable SLIRP userspace network connectivity
1767 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001768 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001769 --oss-lib path to OSS library
1770 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001771 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001772 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001773 --enable-gcov enable test coverage analysis with gcov
1774 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001775 --disable-blobs disable installing provided firmware blobs
1776 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1777 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001778 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001779 --enable-gprof QEMU profiling with gprof
1780 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001781 --enable-debug-stack-usage
1782 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001783 --enable-plugins
1784 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001785 --disable-containers don't use containers for cross-building
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001786
1787Optional features, enabled with --enable-FEATURE and
1788disabled with --disable-FEATURE, default is enabled if available:
1789
1790 system all system emulation targets
1791 user supported user emulation targets
1792 linux-user all linux usermode emulation targets
1793 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001794 docs build documentation
1795 guest-agent build the QEMU Guest Agent
1796 guest-agent-msi build guest agent Windows MSI installation package
1797 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001798 modules modules support (non-Windows)
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01001799 module-upgrades try to load modules from alternate paths for upgrades
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001800 debug-tcg TCG debugging (default is disabled)
1801 debug-info debugging information
1802 sparse sparse checker
1803
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001804 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001805 nettle nettle cryptography support
1806 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001807 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001808 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001809 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001810 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001811 vte vte support for the gtk UI
1812 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001813 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001814 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001815 vnc-sasl SASL encryption for VNC server
1816 vnc-jpeg JPEG lossy compression for VNC server
1817 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001818 cocoa Cocoa UI (Mac OS X only)
1819 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001820 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001821 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001822 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001823 brlapi BrlAPI (Braile)
1824 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001825 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001826 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001827 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001828 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001829 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001830 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001831 rdma Enable RDMA-based migration
1832 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001833 vde support for vde network
1834 netmap support for netmap network
1835 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001836 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001837 cap-ng libcap-ng support
1838 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001839 vhost-net vhost-net kernel acceleration support
1840 vhost-vsock virtio sockets device support
1841 vhost-scsi vhost-scsi kernel target support
1842 vhost-crypto vhost-user-crypto backend support
1843 vhost-kernel vhost kernel backend support
1844 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001845 spice spice
1846 rbd rados block device (rbd)
1847 libiscsi iscsi support
1848 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001849 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001850 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001851 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001852 usb-redir usb network redirection support
1853 lzo support of lzo compression library
1854 snappy support of snappy compression library
1855 bzip2 support of bzip2 compression library
1856 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001857 lzfse support of lzfse compression library
1858 (for reading lzfse-compressed dmg images)
Juan Quintela3a678482019-12-17 21:15:24 +01001859 zstd support for zstd compression library
1860 (for migration compression)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001861 seccomp seccomp support
1862 coroutine-pool coroutine freelist (better performance)
1863 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001864 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001865 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001866 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001867 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001868 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001869 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001870 avx2 AVX2 optimization support
Robert Hoo6b8cd442020-02-29 20:34:34 +08001871 avx512f AVX512F optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001872 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001873 opengl opengl support
1874 virglrenderer virgl rendering support
1875 xfsctl xfsctl support
1876 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001877 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001878 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001879 bochs bochs image format support
1880 cloop cloop image format support
1881 dmg dmg image format support
1882 qcow1 qcow v1 image format support
1883 vdi vdi image format support
1884 vvfat vvfat image format support
1885 qed qed image format support
1886 parallels parallels image format support
1887 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001888 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001889 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001890 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001891 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001892 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001893
1894NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001895EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001896exit 0
pbrookaf5db582006-04-08 14:26:41 +00001897fi
1898
Thomas Huth9c790242019-03-11 11:20:34 +01001899# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001900rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001901
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
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01002064# module_upgrades is only reasonable if modules are enabled
2065if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2066 error_exit "Can't enable module-upgrades as Modules are not enabled"
2067fi
2068
Thomas Huthd376e9d2018-12-03 11:41:38 +01002069# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002070if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002071 if test "$modules" = "yes" ; then
2072 error_exit "static and modules are mutually incompatible"
2073 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002074 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002075 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002076 else
2077 pie="no"
2078 fi
2079fi
2080
Emilio G. Cota768b7852015-04-29 13:09:02 +02002081# Unconditional check for compiler __thread support
2082 cat > $TMPC << EOF
2083static __thread int tls_var;
2084int main(void) { return tls_var; }
2085EOF
2086
2087if ! compile_prog "-Werror" "" ; then
2088 error_exit "Your compiler does not support the __thread specifier for " \
2089 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2090fi
2091
Avi Kivity40d64442011-11-15 20:12:17 +02002092if test "$pie" = ""; then
2093 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002094 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002095 ;;
2096 *)
2097 pie="no"
2098 ;;
2099 esac
2100fi
2101
2102if test "$pie" != "no" ; then
2103 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002104
2105#ifdef __linux__
2106# define THREAD __thread
2107#else
2108# define THREAD
2109#endif
2110
2111static THREAD int tls_var;
2112
2113int main(void) { return tls_var; }
2114
Avi Kivity40d64442011-11-15 20:12:17 +02002115EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002116 # check we support --no-pie first...
2117 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2118 CFLAGS_NOPIE="-fno-pie"
2119 LDFLAGS_NOPIE="-nopie"
2120 fi
2121
Avi Kivity40d64442011-11-15 20:12:17 +02002122 if compile_prog "-fPIE -DPIE" "-pie"; then
2123 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002124 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002125 pie="yes"
2126 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002127 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002128 fi
2129 else
2130 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002131 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002132 else
2133 echo "Disabling PIE due to missing toolchain support"
2134 pie="no"
2135 fi
2136 fi
2137fi
2138
Paolo Bonzini09dada42013-04-17 16:26:47 +02002139##########################################
2140# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2141# use i686 as default anyway, but for those that don't, an explicit
2142# specification is necessary
2143
2144if test "$cpu" = "i386"; then
2145 cat > $TMPC << EOF
2146static int sfaa(int *ptr)
2147{
2148 return __sync_fetch_and_and(ptr, 0);
2149}
2150
2151int main(void)
2152{
2153 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002154 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002155 sfaa(&val);
2156 return val;
2157}
2158EOF
2159 if ! compile_prog "" "" ; then
2160 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2161 fi
2162fi
2163
2164#########################################
bellardec530c82006-04-25 22:36:06 +00002165# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002166
bellardec530c82006-04-25 22:36:06 +00002167if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002168 if has $install; then
2169 :
2170 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002171 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2172 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2173 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002174 fi
Stefan Weil89138852016-05-16 15:10:20 +02002175 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002176 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2177 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2178 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002179 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002180 if has ar; then
2181 :
2182 else
bellardec530c82006-04-25 22:36:06 +00002183 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002184 error_exit "No path includes ar" \
2185 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002186 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002187 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002188 fi
ths5fafdf22007-09-16 21:08:06 +00002189fi
bellardec530c82006-04-25 22:36:06 +00002190
Stefan Weilafb63eb2012-09-26 22:04:38 +02002191if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002192 for target in $default_target_list; do
2193 supported_target $target 2>/dev/null && \
2194 target_list="$target_list $target"
2195 done
2196 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002197else
Stefan Weil89138852016-05-16 15:10:20 +02002198 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002199 for target in $target_list; do
2200 # Check that we recognised the target name; this allows a more
2201 # friendly error message than if we let it fall through.
2202 case " $default_target_list " in
2203 *" $target "*)
2204 ;;
2205 *)
2206 error_exit "Unknown target name '$target'"
2207 ;;
2208 esac
2209 supported_target $target || exit 1
2210 done
bellard5327cf42005-01-10 23:18:50 +00002211fi
Peter Maydell25b48332013-05-20 16:16:16 +01002212
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002213# see if system emulation was really requested
2214case " $target_list " in
2215 *"-softmmu "*) softmmu=yes
2216 ;;
2217 *) softmmu=no
2218 ;;
2219esac
bellard5327cf42005-01-10 23:18:50 +00002220
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002221for target in $target_list; do
2222 case "$target" in
2223 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2224 edk2_blobs="yes"
2225 ;;
2226 esac
2227done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002228# The EDK2 binaries are compressed with bzip2
2229if test "$edk2_blobs" = "yes" && ! has bzip2; then
2230 error_exit "The bzip2 program is required for building QEMU"
2231fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002232
Juan Quintela249247c2009-08-12 18:20:25 +02002233feature_not_found() {
2234 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002235 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002236
Peter Maydell76ad07a2013-04-08 12:11:26 +01002237 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002238 "configure was not able to find it." \
2239 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002240}
2241
bellard7d132992003-03-06 23:23:54 +00002242# ---
2243# big/little endian test
2244cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002245short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2246short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2247extern int foo(short *, short *);
2248int main(int argc, char *argv[]) {
2249 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002250}
2251EOF
2252
Mike Frysinger61cc9192013-06-30 23:30:18 -04002253if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002254 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002255 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002256 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002257 bigendian="no"
2258 else
2259 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002260 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002261else
2262 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002263fi
2264
Juan Quintelab0a47e72009-08-12 18:29:49 +02002265##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002266# system tools
2267if test -z "$want_tools"; then
2268 if test "$softmmu" = "no"; then
2269 want_tools=no
2270 else
2271 want_tools=yes
2272 fi
2273fi
2274
2275##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002276# cocoa implies not SDL or GTK
2277# (the cocoa UI code currently assumes it is always the active UI
2278# and doesn't interact well with other UI frontend code)
2279if test "$cocoa" = "yes"; then
2280 if test "$sdl" = "yes"; then
2281 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2282 fi
2283 if test "$gtk" = "yes"; then
2284 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2285 fi
2286 gtk=no
2287 sdl=no
2288fi
2289
Eric Blake6b39b062016-10-11 10:46:23 -05002290# Some versions of Mac OS X incorrectly define SIZE_MAX
2291cat > $TMPC << EOF
2292#include <stdint.h>
2293#include <stdio.h>
2294int main(int argc, char *argv[]) {
2295 return printf("%zu", SIZE_MAX);
2296}
2297EOF
2298have_broken_size_max=no
2299if ! compile_object -Werror ; then
2300 have_broken_size_max=yes
2301fi
2302
Peter Maydella30878e2015-08-14 16:10:52 +01002303##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002304# L2TPV3 probe
2305
2306cat > $TMPC <<EOF
2307#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002308#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002309int main(void) { return sizeof(struct mmsghdr); }
2310EOF
2311if compile_prog "" "" ; then
2312 l2tpv3=yes
2313else
2314 l2tpv3=no
2315fi
2316
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002317#########################################
2318# vhost interdependencies and host support
2319
2320# vhost backends
2321test "$vhost_user" = "" && vhost_user=yes
2322if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2323 error_exit "vhost-user isn't available on win32"
2324fi
2325test "$vhost_kernel" = "" && vhost_kernel=$linux
2326if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2327 error_exit "vhost-kernel is only available on Linux"
2328fi
2329
2330# vhost-kernel devices
2331test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2332if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2333 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2334fi
2335test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2336if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2337 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2338fi
2339
2340# vhost-user backends
2341test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2342if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2343 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2344fi
2345test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2346if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2347 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2348fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002349test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2350if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2351 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2352fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002353
2354# OR the vhost-kernel and vhost-user values for simplicity
2355if test "$vhost_net" = ""; then
2356 test "$vhost_net_user" = "yes" && vhost_net=yes
2357 test "$vhost_kernel" = "yes" && vhost_net=yes
2358fi
2359
Gonglei015a33b2014-07-01 20:58:08 +08002360##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002361# MinGW / Mingw-w64 localtime_r/gmtime_r check
2362
2363if test "$mingw32" = "yes"; then
2364 # Some versions of MinGW / Mingw-w64 lack localtime_r
2365 # and gmtime_r entirely.
2366 #
2367 # Some versions of Mingw-w64 define a macro for
2368 # localtime_r/gmtime_r.
2369 #
2370 # Some versions of Mingw-w64 will define functions
2371 # for localtime_r/gmtime_r, but only if you have
2372 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2373 # though, unistd.h and pthread.h both define
2374 # that for you.
2375 #
2376 # So this #undef localtime_r and #include <unistd.h>
2377 # are not in fact redundant.
2378cat > $TMPC << EOF
2379#include <unistd.h>
2380#include <time.h>
2381#undef localtime_r
2382int main(void) { localtime_r(NULL, NULL); return 0; }
2383EOF
2384 if compile_prog "" "" ; then
2385 localtime_r="yes"
2386 else
2387 localtime_r="no"
2388 fi
2389fi
2390
2391##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002392# pkg-config probe
2393
2394if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002395 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002396fi
2397
2398##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002399# NPTL probe
2400
Peter Maydell24cb36a2013-07-16 18:45:00 +01002401if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002402 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002403#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002404#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002405int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002406#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2407#error bork
2408#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002409 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002410}
2411EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002412 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002413 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002414 fi
pbrookbd0c5662008-05-29 14:34:11 +00002415fi
2416
balrogac629222008-10-11 09:56:04 +00002417##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002418# lzo check
2419
2420if test "$lzo" != "no" ; then
2421 cat > $TMPC << EOF
2422#include <lzo/lzo1x.h>
2423int main(void) { lzo_version(); return 0; }
2424EOF
2425 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002426 libs_softmmu="$libs_softmmu -llzo2"
2427 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002428 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002429 if test "$lzo" = "yes"; then
2430 feature_not_found "liblzo2" "Install liblzo2 devel"
2431 fi
2432 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002433 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002434fi
2435
2436##########################################
2437# snappy check
2438
2439if test "$snappy" != "no" ; then
2440 cat > $TMPC << EOF
2441#include <snappy-c.h>
2442int main(void) { snappy_max_compressed_length(4096); return 0; }
2443EOF
2444 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002445 libs_softmmu="$libs_softmmu -lsnappy"
2446 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002447 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002448 if test "$snappy" = "yes"; then
2449 feature_not_found "libsnappy" "Install libsnappy devel"
2450 fi
2451 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002452 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002453fi
2454
2455##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002456# bzip2 check
2457
2458if test "$bzip2" != "no" ; then
2459 cat > $TMPC << EOF
2460#include <bzlib.h>
2461int main(void) { BZ2_bzlibVersion(); return 0; }
2462EOF
2463 if compile_prog "" "-lbz2" ; then
2464 bzip2="yes"
2465 else
2466 if test "$bzip2" = "yes"; then
2467 feature_not_found "libbzip2" "Install libbzip2 devel"
2468 fi
2469 bzip2="no"
2470 fi
2471fi
2472
2473##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002474# lzfse check
2475
2476if test "$lzfse" != "no" ; then
2477 cat > $TMPC << EOF
2478#include <lzfse.h>
2479int main(void) { lzfse_decode_scratch_size(); return 0; }
2480EOF
2481 if compile_prog "" "-llzfse" ; then
2482 lzfse="yes"
2483 else
2484 if test "$lzfse" = "yes"; then
2485 feature_not_found "lzfse" "Install lzfse devel"
2486 fi
2487 lzfse="no"
2488 fi
2489fi
2490
2491##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002492# zstd check
2493
2494if test "$zstd" != "no" ; then
Juan Quintela297254c2020-03-10 12:14:31 +01002495 libzstd_minver="1.4.0"
2496 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
Juan Quintela3a678482019-12-17 21:15:24 +01002497 zstd_cflags="$($pkg_config --cflags libzstd)"
2498 zstd_libs="$($pkg_config --libs libzstd)"
2499 LIBS="$zstd_libs $LIBS"
2500 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2501 zstd="yes"
2502 else
2503 if test "$zstd" = "yes" ; then
2504 feature_not_found "libzstd" "Install libzstd devel"
2505 fi
2506 zstd="no"
2507 fi
2508fi
2509
2510##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002511# libseccomp check
2512
2513if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002514 libseccomp_minver="2.3.0"
2515 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002516 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2517 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002518 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002519 else
Andrew Jones693e5912015-09-30 11:59:18 -04002520 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002521 feature_not_found "libseccomp" \
2522 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002523 fi
2524 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002525 fi
2526fi
2527##########################################
aliguorie37630c2009-04-22 15:19:10 +00002528# xen probe
2529
Juan Quintelafc321b42009-08-12 18:29:55 +02002530if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002531 # Check whether Xen library path is specified via --extra-ldflags to avoid
2532 # overriding this setting with pkg-config output. If not, try pkg-config
2533 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002534
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002535 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2536 $pkg_config --exists xencontrol ; then
2537 xen_ctrl_version="$(printf '%d%02d%02d' \
2538 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2539 xen=yes
2540 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2541 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002542 if $pkg_config --exists xentoolcore; then
2543 xen_pc="$xen_pc xentoolcore"
2544 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002545 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2546 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002547 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002548
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002549 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002550 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002551
2552 # First we test whether Xen headers and libraries are available.
2553 # If no, we are done and there is no Xen support.
2554 # If yes, more tests are run to detect the Xen version.
2555
2556 # Xen (any)
2557 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002558#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002559int main(void) {
2560 return 0;
2561}
2562EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002563 if ! compile_prog "" "$xen_libs" ; then
2564 # Xen not found
2565 if test "$xen" = "yes" ; then
2566 feature_not_found "xen" "Install xen devel"
2567 fi
2568 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002569
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002570 # Xen unstable
2571 elif
2572 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002573#undef XC_WANT_COMPAT_DEVICEMODEL_API
2574#define __XEN_TOOLS__
2575#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002576#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002577int main(void) {
2578 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002579 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002580
2581 xd = xendevicemodel_open(0, 0);
2582 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2583
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002584 xfmem = xenforeignmemory_open(0, 0);
2585 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2586
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002587 return 0;
2588}
2589EOF
2590 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2591 then
2592 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2593 xen_ctrl_version=41100
2594 xen=yes
2595 elif
2596 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002597#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2598#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002599#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002600int main(void) {
2601 xenforeignmemory_handle *xfmem;
2602
2603 xfmem = xenforeignmemory_open(0, 0);
2604 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002605 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002606
2607 return 0;
2608}
2609EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002610 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002611 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002612 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002613 xen_ctrl_version=41000
2614 xen=yes
2615 elif
2616 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002617#undef XC_WANT_COMPAT_DEVICEMODEL_API
2618#define __XEN_TOOLS__
2619#include <xendevicemodel.h>
2620int main(void) {
2621 xendevicemodel_handle *xd;
2622
2623 xd = xendevicemodel_open(0, 0);
2624 xendevicemodel_close(xd);
2625
2626 return 0;
2627}
2628EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002629 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2630 then
2631 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2632 xen_ctrl_version=40900
2633 xen=yes
2634 elif
2635 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002636/*
2637 * If we have stable libs the we don't want the libxc compat
2638 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002639 *
2640 * Also, check if xengnttab_grant_copy_segment_t is defined and
2641 * grant copy operation is implemented.
2642 */
2643#undef XC_WANT_COMPAT_EVTCHN_API
2644#undef XC_WANT_COMPAT_GNTTAB_API
2645#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2646#include <xenctrl.h>
2647#include <xenstore.h>
2648#include <xenevtchn.h>
2649#include <xengnttab.h>
2650#include <xenforeignmemory.h>
2651#include <stdint.h>
2652#include <xen/hvm/hvm_info_table.h>
2653#if !defined(HVM_MAX_VCPUS)
2654# error HVM_MAX_VCPUS not defined
2655#endif
2656int main(void) {
2657 xc_interface *xc = NULL;
2658 xenforeignmemory_handle *xfmem;
2659 xenevtchn_handle *xe;
2660 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002661 xengnttab_grant_copy_segment_t* seg = NULL;
2662
2663 xs_daemon_open();
2664
2665 xc = xc_interface_open(0, 0, 0);
2666 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2667 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2668 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2669 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002670
2671 xfmem = xenforeignmemory_open(0, 0);
2672 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2673
2674 xe = xenevtchn_open(0, 0);
2675 xenevtchn_fd(xe);
2676
2677 xg = xengnttab_open(0, 0);
2678 xengnttab_grant_copy(xg, 0, seg);
2679
2680 return 0;
2681}
2682EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002683 compile_prog "" "$xen_libs $xen_stable_libs"
2684 then
2685 xen_ctrl_version=40800
2686 xen=yes
2687 elif
2688 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002689/*
2690 * If we have stable libs the we don't want the libxc compat
2691 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002692 */
2693#undef XC_WANT_COMPAT_EVTCHN_API
2694#undef XC_WANT_COMPAT_GNTTAB_API
2695#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2696#include <xenctrl.h>
2697#include <xenstore.h>
2698#include <xenevtchn.h>
2699#include <xengnttab.h>
2700#include <xenforeignmemory.h>
2701#include <stdint.h>
2702#include <xen/hvm/hvm_info_table.h>
2703#if !defined(HVM_MAX_VCPUS)
2704# error HVM_MAX_VCPUS not defined
2705#endif
2706int main(void) {
2707 xc_interface *xc = NULL;
2708 xenforeignmemory_handle *xfmem;
2709 xenevtchn_handle *xe;
2710 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002711
2712 xs_daemon_open();
2713
2714 xc = xc_interface_open(0, 0, 0);
2715 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2716 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2717 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2718 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002719
2720 xfmem = xenforeignmemory_open(0, 0);
2721 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2722
2723 xe = xenevtchn_open(0, 0);
2724 xenevtchn_fd(xe);
2725
2726 xg = xengnttab_open(0, 0);
2727 xengnttab_map_grant_ref(xg, 0, 0, 0);
2728
2729 return 0;
2730}
2731EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002732 compile_prog "" "$xen_libs $xen_stable_libs"
2733 then
2734 xen_ctrl_version=40701
2735 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002736
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002737 # Xen 4.6
2738 elif
2739 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002740#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002741#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002742#include <stdint.h>
2743#include <xen/hvm/hvm_info_table.h>
2744#if !defined(HVM_MAX_VCPUS)
2745# error HVM_MAX_VCPUS not defined
2746#endif
2747int main(void) {
2748 xc_interface *xc;
2749 xs_daemon_open();
2750 xc = xc_interface_open(0, 0, 0);
2751 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2752 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002753 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002754 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002755 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002756 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002757 return 0;
2758}
2759EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002760 compile_prog "" "$xen_libs"
2761 then
2762 xen_ctrl_version=40600
2763 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002764
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002765 # Xen 4.5
2766 elif
2767 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002768#include <xenctrl.h>
2769#include <xenstore.h>
2770#include <stdint.h>
2771#include <xen/hvm/hvm_info_table.h>
2772#if !defined(HVM_MAX_VCPUS)
2773# error HVM_MAX_VCPUS not defined
2774#endif
2775int main(void) {
2776 xc_interface *xc;
2777 xs_daemon_open();
2778 xc = xc_interface_open(0, 0, 0);
2779 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2780 xc_gnttab_open(NULL, 0);
2781 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2782 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002783 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2784 return 0;
2785}
2786EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002787 compile_prog "" "$xen_libs"
2788 then
2789 xen_ctrl_version=40500
2790 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002791
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002792 elif
2793 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002794#include <xenctrl.h>
2795#include <xenstore.h>
2796#include <stdint.h>
2797#include <xen/hvm/hvm_info_table.h>
2798#if !defined(HVM_MAX_VCPUS)
2799# error HVM_MAX_VCPUS not defined
2800#endif
2801int main(void) {
2802 xc_interface *xc;
2803 xs_daemon_open();
2804 xc = xc_interface_open(0, 0, 0);
2805 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2806 xc_gnttab_open(NULL, 0);
2807 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2808 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002809 return 0;
2810}
2811EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002812 compile_prog "" "$xen_libs"
2813 then
2814 xen_ctrl_version=40200
2815 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002816
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002817 else
2818 if test "$xen" = "yes" ; then
2819 feature_not_found "xen (unsupported version)" \
2820 "Install a supported xen (xen 4.2 or newer)"
2821 fi
2822 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002823 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002824
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002825 if test "$xen" = yes; then
2826 if test $xen_ctrl_version -ge 40701 ; then
2827 libs_softmmu="$xen_stable_libs $libs_softmmu"
2828 fi
2829 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002830 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002831 fi
aliguorie37630c2009-04-22 15:19:10 +00002832fi
2833
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002834if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002835 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002836 xen_pci_passthrough=yes
2837 else
2838 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002839 error_exit "User requested feature Xen PCI Passthrough" \
2840 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002841 fi
2842 xen_pci_passthrough=no
2843 fi
2844fi
2845
aliguorie37630c2009-04-22 15:19:10 +00002846##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002847# Windows Hypervisor Platform accelerator (WHPX) check
2848if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002849 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002850 whpx="yes"
2851 else
2852 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002853 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002854 fi
2855 whpx="no"
2856 fi
2857fi
2858
2859##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002860# Sparse probe
2861if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002862 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002863 sparse=yes
2864 else
2865 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002866 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002867 fi
2868 sparse=no
2869 fi
2870fi
2871
2872##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002873# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002874if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002875 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002876 x11_cflags=$($pkg_config --cflags x11)
2877 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002878fi
2879
2880##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002881# GTK probe
2882
2883if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002884 gtkpackage="gtk+-3.0"
2885 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002886 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002887 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002888 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2889 gtk_libs=$($pkg_config --libs $gtkpackage)
2890 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002891 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002892 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002893 gtk_cflags="$gtk_cflags $x11_cflags"
2894 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002895 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002896 gtk="yes"
2897 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002898 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002899 else
2900 gtk="no"
2901 fi
2902fi
2903
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002904
2905##########################################
2906# GNUTLS probe
2907
2908if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002909 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002910 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002911 gnutls_cflags=$($pkg_config --cflags gnutls)
2912 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002913 # Packaging for the static libraries is not always correct.
2914 # At least ubuntu 18.04 ships only shared libraries.
2915 write_c_skeleton
2916 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002917 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002918 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2919 pass="yes"
2920 fi
2921 fi
2922 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002923 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002924 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002925 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002926 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002927fi
2928
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002929
2930# If user didn't give a --disable/enable-gcrypt flag,
2931# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002932# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002933if test -z "$gcrypt"
2934then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002935 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002936 then
2937 gcrypt="no"
2938 fi
2939fi
2940
2941# If user didn't give a --disable/enable-nettle flag,
2942# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002943# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002944if test -z "$nettle"
2945then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002946 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002947 then
2948 nettle="no"
2949 fi
2950fi
2951
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002952has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002953 if ! has "libgcrypt-config"
2954 then
2955 return 1
2956 fi
2957
2958 if test -n "$cross_prefix"
2959 then
Stefan Weil89138852016-05-16 15:10:20 +02002960 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002961 if test "$host-" != $cross_prefix
2962 then
2963 return 1
2964 fi
2965 fi
2966
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002967 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2968 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2969
2970 if test $maj != 1 || test $min -lt 5
2971 then
2972 return 1
2973 fi
2974
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002975 return 0
2976}
2977
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002978
2979if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002980 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002981 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002982 nettle_cflags=$($pkg_config --cflags nettle)
2983 nettle_libs=$($pkg_config --libs nettle)
2984 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002985 # Link test to make sure the given libraries work (e.g for static).
2986 write_c_skeleton
2987 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002988 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002989 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2990 if test -z "$gcrypt"; then
2991 gcrypt="no"
2992 fi
2993 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002994 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002995 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01002996 if test "$pass" = "yes"
2997 then
2998 cat > $TMPC << EOF
2999#include <nettle/xts.h>
3000int main(void) {
3001 return 0;
3002}
3003EOF
3004 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3005 nettle_xts=yes
3006 qemu_private_xts=no
3007 fi
3008 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003009 if test "$pass" = "no" && test "$nettle" = "yes"; then
3010 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003011 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003012 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003013 fi
3014fi
3015
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003016if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003017 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003018 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003019 gcrypt_cflags=$(libgcrypt-config --cflags)
3020 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003021 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003022 # as it "spreads unnecessary dependencies" which in
3023 # turn breaks static builds...
3024 if test "$static" = "yes"
3025 then
3026 gcrypt_libs="$gcrypt_libs -lgpg-error"
3027 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003028
Richard Hendersona73e82e2019-05-09 18:24:35 -07003029 # Link test to make sure the given libraries work (e.g for static).
3030 write_c_skeleton
3031 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003032 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003033 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3034 pass="yes"
3035 fi
3036 fi
3037 if test "$pass" = "yes"; then
3038 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003039 cat > $TMPC << EOF
3040#include <gcrypt.h>
3041int main(void) {
3042 gcry_mac_hd_t handle;
3043 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3044 GCRY_MAC_FLAG_SECURE, NULL);
3045 return 0;
3046}
3047EOF
3048 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3049 gcrypt_hmac=yes
3050 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003051 cat > $TMPC << EOF
3052#include <gcrypt.h>
3053int main(void) {
3054 gcry_cipher_hd_t handle;
3055 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3056 return 0;
3057}
3058EOF
3059 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3060 gcrypt_xts=yes
3061 qemu_private_xts=no
3062 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003063 elif test "$gcrypt" = "yes"; then
3064 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003065 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003066 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003067 fi
3068fi
3069
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003070
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003071if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3072then
3073 error_exit "Only one of gcrypt & nettle can be enabled"
3074fi
3075
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003076##########################################
3077# libtasn1 - only for the TLS creds/session test suite
3078
3079tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003080tasn1_cflags=""
3081tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003082if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003083 tasn1_cflags=$($pkg_config --cflags libtasn1)
3084 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003085else
3086 tasn1=no
3087fi
3088
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003089
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003090##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003091# PAM probe
3092
3093if test "$auth_pam" != "no"; then
3094 cat > $TMPC <<EOF
3095#include <security/pam_appl.h>
3096#include <stdio.h>
3097int main(void) {
3098 const char *service_name = "qemu";
3099 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003100 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003101 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003102 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003103 return 0;
3104}
3105EOF
3106 if compile_prog "" "-lpam" ; then
3107 auth_pam=yes
3108 else
3109 if test "$auth_pam" = "yes"; then
3110 feature_not_found "PAM" "Install PAM development package"
3111 else
3112 auth_pam=no
3113 fi
3114 fi
3115fi
3116
3117##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003118# getifaddrs (for tests/test-io-channel-socket )
3119
3120have_ifaddrs_h=yes
3121if ! check_include "ifaddrs.h" ; then
3122 have_ifaddrs_h=no
3123fi
3124
3125##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003126# VTE probe
3127
3128if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003129 vteminversion="0.32.0"
3130 if $pkg_config --exists "vte-2.91"; then
3131 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003132 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003133 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003134 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003135 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003136 vte_cflags=$($pkg_config --cflags $vtepackage)
3137 vte_libs=$($pkg_config --libs $vtepackage)
3138 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003139 vte="yes"
3140 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003141 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003142 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003143 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003144 fi
3145fi
3146
3147##########################################
bellard11d9f692004-04-02 20:55:59 +00003148# SDL probe
3149
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003150# Look for sdl configuration program (pkg-config or sdl2-config). Try
3151# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003152
Peter Xuc6093a02018-04-10 13:40:34 +08003153sdl_probe ()
3154{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003155 if $pkg_config sdl2 --exists; then
3156 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003157 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003158 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003159 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003160 sdlversion=$($sdlconfig --version)
3161 else
3162 if test "$sdl" = "yes" ; then
3163 feature_not_found "sdl" "Install SDL2-devel"
3164 fi
3165 sdl=no
3166 # no need to do the rest
3167 return
3168 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003169 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003170 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3171 fi
3172
Juan Quintelaac119f92009-07-27 16:13:15 +02003173 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003174#include <SDL.h>
3175#undef main /* We don't want SDL to override our main() */
3176int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3177EOF
Stefan Weil89138852016-05-16 15:10:20 +02003178 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003179 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003180 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003181 if $pkg_config sdl2 --exists; then
3182 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003183 else
3184 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3185 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003186 else
Stefan Weil89138852016-05-16 15:10:20 +02003187 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003188 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003189 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003190 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003191
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003192 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003193 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003194 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003195 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3196 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003197 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003198 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003199 :
3200 else
3201 sdl=no
3202 fi
3203 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003204 else # sdl not found
3205 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003206 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003207 fi
3208 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003209 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003210}
3211
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003212sdl_image_probe ()
3213{
3214 if test "$sdl_image" != "no" ; then
3215 if $pkg_config SDL2_image --exists; then
3216 if test "$static" = "yes"; then
3217 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3218 else
3219 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3220 fi
3221 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3222 sdl_image=yes
3223
3224 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3225 sdl_libs="$sdl_libs $sdl_image_libs"
3226 else
3227 if test "$sdl_image" = "yes" ; then
3228 feature_not_found "sdl_image" "Install SDL Image devel"
3229 else
3230 sdl_image=no
3231 fi
3232 fi
3233 fi
3234}
3235
Peter Xuc6093a02018-04-10 13:40:34 +08003236if test "$sdl" != "no" ; then
3237 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003238fi
bellard11d9f692004-04-02 20:55:59 +00003239
aliguori5368a422009-03-03 17:37:21 +00003240if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003241 sdl_image_probe
3242else
3243 if test "$sdl_image" = "yes"; then
3244 echo "warning: SDL Image requested, but SDL is not available, disabling"
3245 fi
3246 sdl_image=no
3247fi
3248
3249if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003250 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003251#include <SDL.h>
3252#if defined(SDL_VIDEO_DRIVER_X11)
3253#include <X11/XKBlib.h>
3254#else
3255#error No x11 support
3256#endif
3257int main(void) { return 0; }
3258EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003259 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003260 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003261 sdl_cflags="$sdl_cflags $x11_cflags"
3262 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003263 fi
aliguori5368a422009-03-03 17:37:21 +00003264fi
3265
ths8f28f3f2007-01-05 21:25:54 +00003266##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003267# RDMA needs OpenFabrics libraries
3268if test "$rdma" != "no" ; then
3269 cat > $TMPC <<EOF
3270#include <rdma/rdma_cma.h>
3271int main(void) { return 0; }
3272EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003273 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003274 if compile_prog "" "$rdma_libs" ; then
3275 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003276 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003277 else
3278 if test "$rdma" = "yes" ; then
3279 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003280 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003281 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003282 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003283 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3284 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3285 fi
3286 rdma="no"
3287 fi
3288fi
3289
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003290##########################################
3291# PVRDMA detection
3292
3293cat > $TMPC <<EOF &&
3294#include <sys/mman.h>
3295
3296int
3297main(void)
3298{
3299 char buf = 0;
3300 void *addr = &buf;
3301 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3302
3303 return 0;
3304}
3305EOF
3306
3307if test "$rdma" = "yes" ; then
3308 case "$pvrdma" in
3309 "")
3310 if compile_prog "" ""; then
3311 pvrdma="yes"
3312 else
3313 pvrdma="no"
3314 fi
3315 ;;
3316 "yes")
3317 if ! compile_prog "" ""; then
3318 error_exit "PVRDMA is not supported since mremap is not implemented"
3319 fi
3320 pvrdma="yes"
3321 ;;
3322 "no")
3323 pvrdma="no"
3324 ;;
3325 esac
3326else
3327 if test "$pvrdma" = "yes" ; then
3328 error_exit "PVRDMA requires rdma suppport"
3329 fi
3330 pvrdma="no"
3331fi
ths8d5d2d42007-08-25 01:37:51 +00003332
Yuval Shaiaee108582019-08-18 16:21:06 +03003333# Let's see if enhanced reg_mr is supported
3334if test "$pvrdma" = "yes" ; then
3335
3336cat > $TMPC <<EOF &&
3337#include <infiniband/verbs.h>
3338
3339int
3340main(void)
3341{
3342 struct ibv_mr *mr;
3343 struct ibv_pd *pd = NULL;
3344 size_t length = 10;
3345 uint64_t iova = 0;
3346 int access = 0;
3347 void *addr = NULL;
3348
3349 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3350
3351 ibv_dereg_mr(mr);
3352
3353 return 0;
3354}
3355EOF
3356 if ! compile_prog "" "-libverbs"; then
3357 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3358 fi
3359fi
3360
ths8d5d2d42007-08-25 01:37:51 +00003361##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003362# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003363if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003364 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003365#include <sasl/sasl.h>
3366#include <stdio.h>
3367int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3368EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003369 # Assuming Cyrus-SASL installed in /usr prefix
3370 vnc_sasl_cflags=""
3371 vnc_sasl_libs="-lsasl2"
3372 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3373 vnc_sasl=yes
3374 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003375 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003376 else
3377 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003378 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003379 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003380 vnc_sasl=no
3381 fi
aliguori2f9606b2009-03-06 20:27:28 +00003382fi
3383
3384##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003385# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003386if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003387cat > $TMPC <<EOF
3388#include <stdio.h>
3389#include <jpeglib.h>
3390int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3391EOF
3392 vnc_jpeg_cflags=""
3393 vnc_jpeg_libs="-ljpeg"
3394 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3395 vnc_jpeg=yes
3396 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003397 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003398 else
3399 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003400 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003401 fi
3402 vnc_jpeg=no
3403 fi
3404fi
3405
3406##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003407# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003408if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003409cat > $TMPC <<EOF
3410//#include <stdio.h>
3411#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003412#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003413int main(void) {
3414 png_structp png_ptr;
3415 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003416 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003417}
3418EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003419 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003420 vnc_png_cflags=$($pkg_config libpng --cflags)
3421 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003422 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003423 vnc_png_cflags=""
3424 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003425 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003426 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3427 vnc_png=yes
3428 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003429 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003430 else
3431 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003432 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003433 fi
3434 vnc_png=no
3435 fi
3436fi
3437
3438##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003439# xkbcommon probe
3440if test "$xkbcommon" != "no" ; then
3441 if $pkg_config xkbcommon --exists; then
3442 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3443 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3444 xkbcommon=yes
3445 else
3446 if test "$xkbcommon" = "yes" ; then
3447 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3448 fi
3449 xkbcommon=no
3450 fi
3451fi
3452
aliguori76655d62009-03-06 20:27:37 +00003453
3454##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003455# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003456if test "$xfs" != "no" ; then
3457 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003458#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003459#include <xfs/xfs.h>
3460int main(void)
3461{
3462 xfsctl(NULL, 0, 0, NULL);
3463 return 0;
3464}
3465EOF
3466 if compile_prog "" "" ; then
3467 xfs="yes"
3468 else
3469 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003470 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003471 fi
3472 xfs=no
3473 fi
3474fi
3475
3476##########################################
ths8a16d272008-07-19 09:56:24 +00003477# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003478if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003479 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003480 cat > $TMPC << EOF
3481#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003482int main(void)
3483{
3484 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003485 char s[] = "";
3486 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003487 return 0;
3488}
ths8a16d272008-07-19 09:56:24 +00003489EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003490 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003491 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003492 else
3493 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003494 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003495 fi
3496 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003497 fi
ths8a16d272008-07-19 09:56:24 +00003498fi
3499
3500##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003501# netmap support probe
3502# Apart from looking for netmap headers, we make sure that the host API version
3503# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3504# a minor/major version number. Minor new features will be marked with values up
3505# to 15, and if something happens that requires a change to the backend we will
3506# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003507if test "$netmap" != "no" ; then
3508 cat > $TMPC << EOF
3509#include <inttypes.h>
3510#include <net/if.h>
3511#include <net/netmap.h>
3512#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003513#if (NETMAP_API < 11) || (NETMAP_API > 15)
3514#error
3515#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003516int main(void) { return 0; }
3517EOF
3518 if compile_prog "" "" ; then
3519 netmap=yes
3520 else
3521 if test "$netmap" = "yes" ; then
3522 feature_not_found "netmap"
3523 fi
3524 netmap=no
3525 fi
3526fi
3527
3528##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003529# libcap-ng library probe
3530if test "$cap_ng" != "no" ; then
3531 cap_libs="-lcap-ng"
3532 cat > $TMPC << EOF
3533#include <cap-ng.h>
3534int main(void)
3535{
3536 capng_capability_to_name(CAPNG_EFFECTIVE);
3537 return 0;
3538}
3539EOF
3540 if compile_prog "" "$cap_libs" ; then
3541 cap_ng=yes
3542 libs_tools="$cap_libs $libs_tools"
3543 else
3544 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003545 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003546 fi
3547 cap_ng=no
3548 fi
3549fi
3550
3551##########################################
malcc2de5c92008-06-28 19:13:06 +00003552# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003553
Stefan Weil89138852016-05-16 15:10:20 +02003554audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003555for drv in $audio_drv_list; do
3556 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003557 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003558 if $pkg_config alsa --exists; then
3559 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003560 if test "$drv" = "try-alsa"; then
3561 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3562 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003563 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003564 if test "$drv" = "try-alsa"; then
3565 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3566 else
3567 error_exit "$drv check failed" \
3568 "Make sure to have the $drv libs and headers installed."
3569 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003570 fi
malcc2de5c92008-06-28 19:13:06 +00003571 ;;
3572
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003573 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003574 if $pkg_config libpulse --exists; then
3575 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003576 if test "$drv" = "try-pa"; then
3577 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3578 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003579 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003580 if test "$drv" = "try-pa"; then
3581 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3582 else
3583 error_exit "$drv check failed" \
3584 "Make sure to have the $drv libs and headers installed."
3585 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003586 fi
malcb8e59f12008-07-02 21:03:08 +00003587 ;;
3588
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003589 sdl)
3590 if test "$sdl" = "no"; then
3591 error_exit "sdl not found or disabled, can not use sdl audio driver"
3592 fi
3593 ;;
3594
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003595 try-sdl)
3596 if test "$sdl" = "no"; then
3597 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3598 else
3599 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3600 fi
3601 ;;
3602
Juan Quintela997e6902009-08-03 14:46:29 +02003603 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003604 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003605 ;;
3606
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003607 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003608 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003609 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003610 ;;
3611
3612 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003613 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003614 ;;
3615
malce4c63a62008-07-19 16:15:16 +00003616 *)
malc1c9b2a52008-07-19 16:57:30 +00003617 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003618 error_exit "Unknown driver '$drv' selected" \
3619 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003620 }
3621 ;;
malcc2de5c92008-06-28 19:13:06 +00003622 esac
3623done
ths8f28f3f2007-01-05 21:25:54 +00003624
balrog4d3b6f62008-02-10 16:33:14 +00003625##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003626# BrlAPI probe
3627
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003628if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003629 brlapi_libs="-lbrlapi"
3630 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003631#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003632#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003633int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3634EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003635 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003636 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003637 else
3638 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003639 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003640 fi
3641 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003642 fi
3643fi
aurel322e4d9fb2008-04-08 06:01:02 +00003644
3645##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003646# iconv probe
3647if test "$iconv" != "no" ; then
3648 cat > $TMPC << EOF
3649#include <iconv.h>
3650int main(void) {
3651 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3652 return conv != (iconv_t) -1;
3653}
3654EOF
3655 iconv_prefix_list="/usr/local:/usr"
3656 iconv_lib_list=":-liconv"
3657 IFS=:
3658 for iconv_prefix in $iconv_prefix_list; do
3659 IFS=:
3660 iconv_cflags="-I$iconv_prefix/include"
3661 iconv_ldflags="-L$iconv_prefix/lib"
3662 for iconv_link in $iconv_lib_list; do
3663 unset IFS
3664 iconv_lib="$iconv_ldflags $iconv_link"
3665 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3666 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3667 iconv_found=yes
3668 break
3669 fi
3670 done
3671 if test "$iconv_found" = yes ; then
3672 break
3673 fi
3674 done
3675 if test "$iconv_found" = "yes" ; then
3676 iconv=yes
3677 else
3678 if test "$iconv" = "yes" ; then
3679 feature_not_found "iconv" "Install iconv devel"
3680 fi
3681 iconv=no
3682 fi
3683fi
3684
3685##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003686# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003687if test "$iconv" = "no" ; then
3688 # curses will need iconv
3689 curses=no
3690fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003691if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003692 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003693 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3694 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003695 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003696 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003697 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003698 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003699 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003700 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003701#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003702#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003703#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003704#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003705int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003706 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003707 wchar_t wch = L'w';
3708 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003709 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003710 addwstr(L"wide chars\n");
3711 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003712 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003713 codeset = nl_langinfo(CODESET);
3714 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003715}
balrog4d3b6f62008-02-10 16:33:14 +00003716EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003717 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003718 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003719 # Make sure we get the wide character prototypes
3720 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003721 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003722 for curses_lib in $curses_lib_list; do
3723 unset IFS
3724 if compile_prog "$curses_inc" "$curses_lib" ; then
3725 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003726 break
3727 fi
3728 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003729 if test "$curses_found" = yes ; then
3730 break
3731 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003732 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003733 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003734 if test "$curses_found" = "yes" ; then
3735 curses=yes
3736 else
3737 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003738 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003739 fi
3740 curses=no
3741 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003742fi
balrog4d3b6f62008-02-10 16:33:14 +00003743
blueswir1414f0da2008-08-15 18:20:52 +00003744##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003745# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003746if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003747 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003748 curlconfig="$pkg_config libcurl"
3749 else
3750 curlconfig=curl-config
3751 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003752 cat > $TMPC << EOF
3753#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003754int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003755EOF
Stefan Weil89138852016-05-16 15:10:20 +02003756 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3757 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003758 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003759 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003760 else
3761 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003762 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003763 fi
3764 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003765 fi
3766fi # test "$curl"
3767
3768##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003769# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003770
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003771glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003772glib_modules=gthread-2.0
3773if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003774 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003775fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003776if test "$plugins" = yes; then
3777 glib_modules="$glib_modules gmodule-2.0"
3778fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003779
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003780# This workaround is required due to a bug in pkg-config file for glib as it
3781# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3782
Eric Blakee633a5c2019-02-04 20:39:37 -06003783if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003784 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3785fi
3786
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003787for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003788 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003789 glib_cflags=$($pkg_config --cflags $i)
3790 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003791 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003792 LIBS="$glib_libs $LIBS"
3793 libs_qga="$glib_libs $libs_qga"
3794 else
3795 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3796 fi
3797done
3798
Marc-André Lureauf876b762019-02-21 12:07:00 +01003799if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3800 gio=yes
3801 gio_cflags=$($pkg_config --cflags gio-2.0)
3802 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003803 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003804 if [ ! -x "$gdbus_codegen" ]; then
3805 gdbus_codegen=
3806 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003807else
3808 gio=no
3809fi
3810
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003811if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3812 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3813 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3814fi
3815
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003816# Sanity check that the current size_t matches the
3817# size that glib thinks it should be. This catches
3818# problems on multi-arch where people try to build
3819# 32-bit QEMU while pointing at 64-bit glib headers
3820cat > $TMPC <<EOF
3821#include <glib.h>
3822#include <unistd.h>
3823
3824#define QEMU_BUILD_BUG_ON(x) \
3825 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3826
3827int main(void) {
3828 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3829 return 0;
3830}
3831EOF
3832
Stefan Weil5919e032016-04-28 23:33:41 +02003833if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003834 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3835 "You probably need to set PKG_CONFIG_LIBDIR"\
3836 "to point to the right pkg-config files for your"\
3837 "build target"
3838fi
3839
John Snowbbbf2e02015-03-25 18:57:38 -04003840# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3841cat > $TMPC << EOF
3842#include <glib.h>
3843int main(void) { return 0; }
3844EOF
3845if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3846 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3847 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3848 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3849 fi
3850fi
3851
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003852#########################################
3853# zlib check
3854
3855if test "$zlib" != "no" ; then
3856 if $pkg_config --exists zlib; then
3857 zlib_cflags=$($pkg_config --cflags zlib)
3858 zlib_libs=$($pkg_config --libs zlib)
3859 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3860 LIBS="$zlib_libs $LIBS"
3861 else
3862 cat > $TMPC << EOF
3863#include <zlib.h>
3864int main(void) { zlibVersion(); return 0; }
3865EOF
3866 if compile_prog "" "-lz" ; then
3867 LIBS="$LIBS -lz"
3868 else
3869 error_exit "zlib check failed" \
3870 "Make sure to have the zlib libs and headers installed."
3871 fi
3872 fi
3873fi
3874
Fam Zhenge26110c2014-02-10 14:48:57 +08003875##########################################
3876# SHA command probe for modules
3877if test "$modules" = yes; then
3878 shacmd_probe="sha1sum sha1 shasum"
3879 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003880 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003881 shacmd="$c"
3882 break
3883 fi
3884 done
3885 if test "$shacmd" = ""; then
3886 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3887 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003888fi
3889
3890##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003891# pixman support probe
3892
Eric Blakee633a5c2019-02-04 20:39:37 -06003893if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003894 pixman_cflags=
3895 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003896elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003897 pixman_cflags=$($pkg_config --cflags pixman-1)
3898 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003899else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003900 error_exit "pixman >= 0.21.8 not present." \
3901 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003902fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003903
3904##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003905# libmpathpersist probe
3906
3907if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003908 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003909 cat > $TMPC <<EOF
3910#include <libudev.h>
3911#include <mpath_persist.h>
3912unsigned mpath_mx_alloc_len = 1024;
3913int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003914static struct config *multipath_conf;
3915extern struct udev *udev;
3916extern struct config *get_multipath_config(void);
3917extern void put_multipath_config(struct config *conf);
3918struct udev *udev;
3919struct config *get_multipath_config(void) { return multipath_conf; }
3920void put_multipath_config(struct config *conf) { }
3921
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003922int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003923 udev = udev_new();
3924 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003925 return 0;
3926}
3927EOF
3928 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3929 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003930 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003931 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003932 # probe for the old API
3933 cat > $TMPC <<EOF
3934#include <libudev.h>
3935#include <mpath_persist.h>
3936unsigned mpath_mx_alloc_len = 1024;
3937int logsink;
3938int main(void) {
3939 struct udev *udev = udev_new();
3940 mpath_lib_init(udev);
3941 return 0;
3942}
3943EOF
3944 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3945 mpathpersist=yes
3946 mpathpersist_new_api=no
3947 else
3948 mpathpersist=no
3949 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003950 fi
3951else
3952 mpathpersist=no
3953fi
3954
3955##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003956# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003957PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003958
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003959pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003960cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003961#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003962static void *f(void *p) { return NULL; }
3963int main(void) {
3964 pthread_t thread;
3965 pthread_create(&thread, 0, f, 0);
3966 return 0;
3967}
blueswir1414f0da2008-08-15 18:20:52 +00003968EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003969if compile_prog "" "" ; then
3970 pthread=yes
3971else
3972 for pthread_lib in $PTHREADLIBS_LIST; do
3973 if compile_prog "" "$pthread_lib" ; then
3974 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003975 found=no
3976 for lib_entry in $LIBS; do
3977 if test "$lib_entry" = "$pthread_lib"; then
3978 found=yes
3979 break
3980 fi
3981 done
3982 if test "$found" = "no"; then
3983 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003984 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003985 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003986 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003987 break
3988 fi
3989 done
3990fi
blueswir1414f0da2008-08-15 18:20:52 +00003991
Eric Blakee633a5c2019-02-04 20:39:37 -06003992if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003993 error_exit "pthread check failed" \
3994 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003995fi
3996
Roman Bolshakov479a5742018-12-17 23:26:01 +03003997# check for pthread_setname_np with thread id
3998pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003999cat > $TMPC << EOF
4000#include <pthread.h>
4001
4002static void *f(void *p) { return NULL; }
4003int main(void)
4004{
4005 pthread_t thread;
4006 pthread_create(&thread, 0, f, 0);
4007 pthread_setname_np(thread, "QEMU");
4008 return 0;
4009}
4010EOF
4011if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03004012 pthread_setname_np_w_tid=yes
4013fi
4014
4015# check for pthread_setname_np without thread id
4016pthread_setname_np_wo_tid=no
4017cat > $TMPC << EOF
4018#include <pthread.h>
4019
4020static void *f(void *p) { pthread_setname_np("QEMU"); }
4021int main(void)
4022{
4023 pthread_t thread;
4024 pthread_create(&thread, 0, f, 0);
4025 return 0;
4026}
4027EOF
4028if compile_prog "" "$pthread_lib" ; then
4029 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004030fi
4031
aliguoribf9298b2008-12-05 20:05:26 +00004032##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004033# rbd probe
4034if test "$rbd" != "no" ; then
4035 cat > $TMPC <<EOF
4036#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004037#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004038int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004039 rados_t cluster;
4040 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004041 return 0;
4042}
4043EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004044 rbd_libs="-lrbd -lrados"
4045 if compile_prog "" "$rbd_libs" ; then
4046 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004047 else
4048 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004049 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004050 fi
4051 rbd=no
4052 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004053fi
4054
4055##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004056# libssh probe
4057if test "$libssh" != "no" ; then
4058 if $pkg_config --exists libssh; then
4059 libssh_cflags=$($pkg_config libssh --cflags)
4060 libssh_libs=$($pkg_config libssh --libs)
4061 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004062 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004063 if test "$libssh" = "yes" ; then
4064 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004065 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004066 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004067 fi
4068fi
4069
4070##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004071# Check for libssh 0.8
4072# This is done like this instead of using the LIBSSH_VERSION_* and
4073# SSH_VERSION_* macros because some distributions in the past shipped
4074# snapshots of the future 0.8 from Git, and those snapshots did not
4075# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004076
Pino Toscanob10d49d2019-06-20 22:08:40 +02004077if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004078 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004079#include <libssh/libssh.h>
4080int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004081EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004082 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4083 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004084 fi
4085fi
4086
4087##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004088# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004089
4090if test "$linux_aio" != "no" ; then
4091 cat > $TMPC <<EOF
4092#include <libaio.h>
4093#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004094#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004095int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4096EOF
4097 if compile_prog "" "-laio" ; then
4098 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004099 else
4100 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004101 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004102 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004103 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004104 fi
4105fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004106##########################################
4107# linux-io-uring probe
4108
4109if test "$linux_io_uring" != "no" ; then
4110 if $pkg_config liburing; then
4111 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4112 linux_io_uring_libs=$($pkg_config --libs liburing)
4113 linux_io_uring=yes
Stefan Hajnoczi73fd2822020-03-05 17:08:04 +00004114
4115 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4116 # seen by programs linking the archive. It's not ideal, but just add the
4117 # library dependency globally.
4118 LIBS="$linux_io_uring_libs $LIBS"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004119 else
4120 if test "$linux_io_uring" = "yes" ; then
4121 feature_not_found "linux io_uring" "Install liburing devel"
4122 fi
4123 linux_io_uring=no
4124 fi
4125fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004126
4127##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004128# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004129
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004130if test "$tpm" = ""; then
4131 if test "$mingw32" = "yes"; then
4132 tpm=no
4133 else
4134 tpm=yes
4135 fi
4136elif test "$tpm" = "yes"; then
4137 if test "$mingw32" = "yes" ; then
4138 error_exit "TPM emulation only available on POSIX systems"
4139 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004140fi
4141
4142##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004143# attr probe
4144
4145if test "$attr" != "no" ; then
4146 cat > $TMPC <<EOF
4147#include <stdio.h>
4148#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004149#ifdef CONFIG_LIBATTR
4150#include <attr/xattr.h>
4151#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004152#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004153#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004154int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4155EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004156 if compile_prog "" "" ; then
4157 attr=yes
4158 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004159 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004160 attr=yes
4161 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004162 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004163 else
4164 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004165 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004166 fi
4167 attr=no
4168 fi
4169fi
4170
4171##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004172# iovec probe
4173cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004174#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004175#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004176#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004177int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004178EOF
4179iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004180if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004181 iovec=yes
4182fi
4183
aurel32f652e6a2008-12-16 10:43:48 +00004184##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004185# preadv probe
4186cat > $TMPC <<EOF
4187#include <sys/types.h>
4188#include <sys/uio.h>
4189#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004190int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004191EOF
4192preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004193if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004194 preadv=yes
4195fi
4196
4197##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004198# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004199# fdt support is mandatory for at least some target architectures,
4200# so insist on it if we're building those system emulators.
4201fdt_required=no
4202for target in $target_list; do
4203 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004204 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004205 fdt_required=yes
4206 ;;
4207 esac
4208done
4209
4210if test "$fdt_required" = "yes"; then
4211 if test "$fdt" = "no"; then
4212 error_exit "fdt disabled but some requested targets require it." \
4213 "You can turn off fdt only if you also disable all the system emulation" \
4214 "targets which need it (by specifying a cut down --target-list)."
4215 fi
4216 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004217elif test "$fdt" != "yes" ; then
4218 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004219fi
4220
Laurent Vivierd5999382019-06-21 15:05:44 +02004221# fdt is only required when building softmmu targets
4222if test -z "$fdt" -a "$softmmu" != "yes" ; then
4223 fdt="no"
4224fi
4225
Juan Quintela2df87df2009-08-12 18:29:54 +02004226if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004227 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004228 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004229 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004230 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004231#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004232#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004233int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004234EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004235 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004236 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004237 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004238 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004239 # have GIT checkout, so activate dtc submodule
4240 if test -e "${source_path}/.git" ; then
4241 git_submodules="${git_submodules} dtc"
4242 fi
4243 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004244 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004245 mkdir -p dtc
4246 if [ "$pwd_is_source_path" != "y" ] ; then
4247 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4248 symlink "$source_path/dtc/scripts" "dtc/scripts"
4249 fi
4250 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004251 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4252 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004253 elif test "$fdt" = "yes" ; then
4254 # Not a git build & no libfdt found, prompt for system install
4255 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4256 "Please install the DTC (libfdt) devel package"
4257 else
4258 # don't have and don't want
4259 fdt_libs=
4260 fdt=no
4261 fi
aurel32f652e6a2008-12-16 10:43:48 +00004262 fi
4263fi
4264
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004265libs_softmmu="$libs_softmmu $fdt_libs"
4266
Michael Walle20ff0752011-03-07 23:32:39 +01004267##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004268# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004269
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004270gbm="no"
4271if $pkg_config gbm; then
4272 gbm_cflags="$($pkg_config --cflags gbm)"
4273 gbm_libs="$($pkg_config --libs gbm)"
4274 gbm="yes"
4275fi
4276
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004277if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004278 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004279 if $pkg_config $opengl_pkgs; then
4280 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4281 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004282 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004283 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4284 gtk_gl="yes"
4285 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004286 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004287 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004288 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004289 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004290 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004291 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004292 opengl_libs=""
4293 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004294 fi
4295fi
4296
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004297if test "$opengl" = "yes"; then
4298 cat > $TMPC << EOF
4299#include <epoxy/egl.h>
4300#ifndef EGL_MESA_image_dma_buf_export
4301# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4302#endif
4303int main(void) { return 0; }
4304EOF
4305 if compile_prog "" "" ; then
4306 opengl_dmabuf=yes
4307 fi
4308fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004309
Eric Blakee633a5c2019-02-04 20:39:37 -06004310if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004311 for target in $target_list; do
4312 case $target in
4313 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4314 need_x11=yes
4315 ;;
4316 esac
4317 done
4318fi
4319
Klim Kireeved279a02018-01-12 12:01:19 +03004320##########################################
4321# libxml2 probe
4322if test "$libxml2" != "no" ; then
4323 if $pkg_config --exists libxml-2.0; then
4324 libxml2="yes"
4325 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4326 libxml2_libs=$($pkg_config --libs libxml-2.0)
4327 else
4328 if test "$libxml2" = "yes"; then
4329 feature_not_found "libxml2" "Install libxml2 devel"
4330 fi
4331 libxml2="no"
4332 fi
4333fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004334
Bharata B Raoeb100392012-09-24 14:42:45 +05304335##########################################
4336# glusterfs probe
4337if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004338 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304339 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004340 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4341 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004342 if $pkg_config --atleast-version=4 glusterfs-api; then
4343 glusterfs_xlator_opt="yes"
4344 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004345 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304346 glusterfs_discard="yes"
4347 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304348 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304349 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304350 glusterfs_zerofill="yes"
4351 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004352 cat > $TMPC << EOF
4353#include <glusterfs/api/glfs.h>
4354
4355int
4356main(void)
4357{
4358 /* new glfs_ftruncate() passes two additional args */
4359 return glfs_ftruncate(NULL, 0, NULL, NULL);
4360}
4361EOF
4362 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4363 glusterfs_ftruncate_has_stat="yes"
4364 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004365 cat > $TMPC << EOF
4366#include <glusterfs/api/glfs.h>
4367
4368/* new glfs_io_cbk() passes two additional glfs_stat structs */
4369static void
4370glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4371{}
4372
4373int
4374main(void)
4375{
4376 glfs_io_cbk iocb = &glusterfs_iocb;
4377 iocb(NULL, 0 , NULL, NULL, NULL);
4378 return 0;
4379}
4380EOF
4381 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4382 glusterfs_iocb_has_stat="yes"
4383 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304384 else
4385 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004386 feature_not_found "GlusterFS backend support" \
4387 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304388 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304389 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304390 fi
4391fi
4392
aurel3239386ac2009-04-15 19:48:17 +00004393# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004394# emulator. This is done because older glibc versions don't
4395# have syscall stubs for these implemented. In that case we
4396# don't provide them even if kernel supports them.
4397#
4398inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004399cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004400#include <sys/inotify.h>
4401
4402int
4403main(void)
4404{
4405 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004406 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004407}
4408EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004409if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004410 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004411fi
4412
Riku Voipioc05c7a72010-03-26 15:25:11 +00004413inotify1=no
4414cat > $TMPC << EOF
4415#include <sys/inotify.h>
4416
4417int
4418main(void)
4419{
4420 /* try to start inotify */
4421 return inotify_init1(0);
4422}
4423EOF
4424if compile_prog "" "" ; then
4425 inotify1=yes
4426fi
4427
Riku Voipio099d6b02009-05-05 12:10:04 +03004428# check if pipe2 is there
4429pipe2=no
4430cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004431#include <unistd.h>
4432#include <fcntl.h>
4433
4434int main(void)
4435{
4436 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004437 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004438}
4439EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004440if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004441 pipe2=yes
4442fi
4443
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004444# check if accept4 is there
4445accept4=no
4446cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004447#include <sys/socket.h>
4448#include <stddef.h>
4449
4450int main(void)
4451{
4452 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4453 return 0;
4454}
4455EOF
4456if compile_prog "" "" ; then
4457 accept4=yes
4458fi
4459
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304460# check if tee/splice is there. vmsplice was added same time.
4461splice=no
4462cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304463#include <unistd.h>
4464#include <fcntl.h>
4465#include <limits.h>
4466
4467int main(void)
4468{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004469 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304470 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4471 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4472 return 0;
4473}
4474EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004475if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304476 splice=yes
4477fi
4478
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004479##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004480# libnuma probe
4481
4482if test "$numa" != "no" ; then
4483 cat > $TMPC << EOF
4484#include <numa.h>
4485int main(void) { return numa_available(); }
4486EOF
4487
4488 if compile_prog "" "-lnuma" ; then
4489 numa=yes
4490 libs_softmmu="-lnuma $libs_softmmu"
4491 else
4492 if test "$numa" = "yes" ; then
4493 feature_not_found "numa" "install numactl devel"
4494 fi
4495 numa=no
4496 fi
4497fi
4498
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004499if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4500 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4501 exit 1
4502fi
4503
Yang Zhong5a22ab72017-12-20 21:16:46 +08004504# Even if malloc_trim() is available, these non-libc memory allocators
4505# do not support it.
4506if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4507 if test "$malloc_trim" = "yes" ; then
4508 echo "Disabling malloc_trim with non-libc memory allocator"
4509 fi
4510 malloc_trim="no"
4511fi
4512
4513#######################################
4514# malloc_trim
4515
4516if test "$malloc_trim" != "no" ; then
4517 cat > $TMPC << EOF
4518#include <malloc.h>
4519int main(void) { malloc_trim(0); return 0; }
4520EOF
4521 if compile_prog "" "" ; then
4522 malloc_trim="yes"
4523 else
4524 malloc_trim="no"
4525 fi
4526fi
4527
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004528##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004529# tcmalloc probe
4530
4531if test "$tcmalloc" = "yes" ; then
4532 cat > $TMPC << EOF
4533#include <stdlib.h>
4534int main(void) { malloc(1); return 0; }
4535EOF
4536
4537 if compile_prog "" "-ltcmalloc" ; then
4538 LIBS="-ltcmalloc $LIBS"
4539 else
4540 feature_not_found "tcmalloc" "install gperftools devel"
4541 fi
4542fi
4543
4544##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004545# jemalloc probe
4546
4547if test "$jemalloc" = "yes" ; then
4548 cat > $TMPC << EOF
4549#include <stdlib.h>
4550int main(void) { malloc(1); return 0; }
4551EOF
4552
4553 if compile_prog "" "-ljemalloc" ; then
4554 LIBS="-ljemalloc $LIBS"
4555 else
4556 feature_not_found "jemalloc" "install jemalloc devel"
4557 fi
4558fi
4559
4560##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004561# signalfd probe
4562signalfd="no"
4563cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004564#include <unistd.h>
4565#include <sys/syscall.h>
4566#include <signal.h>
4567int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4568EOF
4569
4570if compile_prog "" "" ; then
4571 signalfd=yes
4572fi
4573
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004574# check if optreset global is declared by <getopt.h>
4575optreset="no"
4576cat > $TMPC << EOF
4577#include <getopt.h>
4578int main(void) { return optreset; }
4579EOF
4580
4581if compile_prog "" "" ; then
4582 optreset=yes
4583fi
4584
Riku Voipioc2882b92009-08-12 15:08:24 +03004585# check if eventfd is supported
4586eventfd=no
4587cat > $TMPC << EOF
4588#include <sys/eventfd.h>
4589
4590int main(void)
4591{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004592 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004593}
4594EOF
4595if compile_prog "" "" ; then
4596 eventfd=yes
4597fi
4598
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004599# check if memfd is supported
4600memfd=no
4601cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004602#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004603
4604int main(void)
4605{
4606 return memfd_create("foo", MFD_ALLOW_SEALING);
4607}
4608EOF
4609if compile_prog "" "" ; then
4610 memfd=yes
4611fi
4612
Cortland Tölva955727d2018-10-08 09:35:19 -07004613# check for usbfs
4614have_usbfs=no
4615if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004616 cat > $TMPC << EOF
4617#include <linux/usbdevice_fs.h>
4618
4619#ifndef USBDEVFS_GET_CAPABILITIES
4620#error "USBDEVFS_GET_CAPABILITIES undefined"
4621#endif
4622
4623#ifndef USBDEVFS_DISCONNECT_CLAIM
4624#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4625#endif
4626
4627int main(void)
4628{
4629 return 0;
4630}
4631EOF
4632 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004633 have_usbfs=yes
4634 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004635fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004636
Ulrich Hechtd0927932009-09-17 20:22:14 +03004637# check for fallocate
4638fallocate=no
4639cat > $TMPC << EOF
4640#include <fcntl.h>
4641
4642int main(void)
4643{
4644 fallocate(0, 0, 0, 0);
4645 return 0;
4646}
4647EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004648if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004649 fallocate=yes
4650fi
4651
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004652# check for fallocate hole punching
4653fallocate_punch_hole=no
4654cat > $TMPC << EOF
4655#include <fcntl.h>
4656#include <linux/falloc.h>
4657
4658int main(void)
4659{
4660 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4661 return 0;
4662}
4663EOF
4664if compile_prog "" "" ; then
4665 fallocate_punch_hole=yes
4666fi
4667
Denis V. Lunevb953f072015-01-30 11:42:14 +03004668# check that fallocate supports range zeroing inside the file
4669fallocate_zero_range=no
4670cat > $TMPC << EOF
4671#include <fcntl.h>
4672#include <linux/falloc.h>
4673
4674int main(void)
4675{
4676 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4677 return 0;
4678}
4679EOF
4680if compile_prog "" "" ; then
4681 fallocate_zero_range=yes
4682fi
4683
Kevin Wolfed911432014-09-29 17:12:59 +02004684# check for posix_fallocate
4685posix_fallocate=no
4686cat > $TMPC << EOF
4687#include <fcntl.h>
4688
4689int main(void)
4690{
4691 posix_fallocate(0, 0, 0);
4692 return 0;
4693}
4694EOF
4695if compile_prog "" "" ; then
4696 posix_fallocate=yes
4697fi
4698
Peter Maydellc727f472011-01-06 11:05:10 +00004699# check for sync_file_range
4700sync_file_range=no
4701cat > $TMPC << EOF
4702#include <fcntl.h>
4703
4704int main(void)
4705{
4706 sync_file_range(0, 0, 0, 0);
4707 return 0;
4708}
4709EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004710if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004711 sync_file_range=yes
4712fi
4713
Peter Maydelldace20d2011-01-10 13:11:24 +00004714# check for linux/fiemap.h and FS_IOC_FIEMAP
4715fiemap=no
4716cat > $TMPC << EOF
4717#include <sys/ioctl.h>
4718#include <linux/fs.h>
4719#include <linux/fiemap.h>
4720
4721int main(void)
4722{
4723 ioctl(0, FS_IOC_FIEMAP, 0);
4724 return 0;
4725}
4726EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004727if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004728 fiemap=yes
4729fi
4730
Ulrich Hechtd0927932009-09-17 20:22:14 +03004731# check for dup3
4732dup3=no
4733cat > $TMPC << EOF
4734#include <unistd.h>
4735
4736int main(void)
4737{
4738 dup3(0, 0, 0);
4739 return 0;
4740}
4741EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004742if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004743 dup3=yes
4744fi
4745
Alex Bligh4e0c6522013-08-21 16:02:43 +01004746# check for ppoll support
4747ppoll=no
4748cat > $TMPC << EOF
4749#include <poll.h>
4750
4751int main(void)
4752{
4753 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4754 ppoll(&pfd, 1, 0, 0);
4755 return 0;
4756}
4757EOF
4758if compile_prog "" "" ; then
4759 ppoll=yes
4760fi
4761
Alex Blighcd758dd2013-08-21 16:02:44 +01004762# check for prctl(PR_SET_TIMERSLACK , ... ) support
4763prctl_pr_set_timerslack=no
4764cat > $TMPC << EOF
4765#include <sys/prctl.h>
4766
4767int main(void)
4768{
4769 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4770 return 0;
4771}
4772EOF
4773if compile_prog "" "" ; then
4774 prctl_pr_set_timerslack=yes
4775fi
4776
Peter Maydell3b6edd12011-02-15 18:35:05 +00004777# check for epoll support
4778epoll=no
4779cat > $TMPC << EOF
4780#include <sys/epoll.h>
4781
4782int main(void)
4783{
4784 epoll_create(0);
4785 return 0;
4786}
4787EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004788if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004789 epoll=yes
4790fi
4791
Peter Maydell227f0212016-06-06 19:58:11 +01004792# epoll_create1 is a later addition
4793# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004794epoll_create1=no
4795cat > $TMPC << EOF
4796#include <sys/epoll.h>
4797
4798int main(void)
4799{
Peter Maydell19e83f62011-04-26 16:56:40 +01004800 /* Note that we use epoll_create1 as a value, not as
4801 * a function being called. This is necessary so that on
4802 * old SPARC glibc versions where the function was present in
4803 * the library but not declared in the header file we will
4804 * fail the configure check. (Otherwise we will get a compiler
4805 * warning but not an error, and will proceed to fail the
4806 * qemu compile where we compile with -Werror.)
4807 */
Blue Swirlc075a722012-08-09 20:21:25 +00004808 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004809}
4810EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004811if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004812 epoll_create1=yes
4813fi
4814
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004815# check for sendfile support
4816sendfile=no
4817cat > $TMPC << EOF
4818#include <sys/sendfile.h>
4819
4820int main(void)
4821{
4822 return sendfile(0, 0, 0, 0);
4823}
4824EOF
4825if compile_prog "" "" ; then
4826 sendfile=yes
4827fi
4828
Riku Voipio51834342014-06-22 11:25:42 +01004829# check for timerfd support (glibc 2.8 and newer)
4830timerfd=no
4831cat > $TMPC << EOF
4832#include <sys/timerfd.h>
4833
4834int main(void)
4835{
4836 return(timerfd_create(CLOCK_REALTIME, 0));
4837}
4838EOF
4839if compile_prog "" "" ; then
4840 timerfd=yes
4841fi
4842
Riku Voipio9af5c902014-08-12 15:58:57 +03004843# check for setns and unshare support
4844setns=no
4845cat > $TMPC << EOF
4846#include <sched.h>
4847
4848int main(void)
4849{
4850 int ret;
4851 ret = setns(0, 0);
4852 ret = unshare(0);
4853 return ret;
4854}
4855EOF
4856if compile_prog "" "" ; then
4857 setns=yes
4858fi
4859
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004860# clock_adjtime probe
4861clock_adjtime=no
4862cat > $TMPC <<EOF
4863#include <time.h>
4864
4865int main(void)
4866{
4867 return clock_adjtime(0, 0);
4868}
4869EOF
4870clock_adjtime=no
4871if compile_prog "" "" ; then
4872 clock_adjtime=yes
4873fi
4874
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004875# syncfs probe
4876syncfs=no
4877cat > $TMPC <<EOF
4878#include <unistd.h>
4879
4880int main(void)
4881{
4882 return syncfs(0);
4883}
4884EOF
4885syncfs=no
4886if compile_prog "" "" ; then
4887 syncfs=yes
4888fi
4889
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004890# check for kcov support (kernel must be 4.4+, compiled with certain options)
4891kcov=no
4892if check_include sys/kcov.h ; then
4893 kcov=yes
4894fi
4895
Peter Maydell5f71eac2019-03-07 14:26:46 +00004896# Check we have a new enough version of sphinx-build
4897has_sphinx_build() {
4898 # This is a bit awkward but works: create a trivial document and
4899 # try to run it with our configuration file (which enforces a
4900 # version requirement). This will fail if either
4901 # sphinx-build doesn't exist at all or if it is too old.
4902 mkdir -p "$TMPDIR1/sphinx"
4903 touch "$TMPDIR1/sphinx/index.rst"
Markus Armbruster903458c2020-02-14 18:18:41 +01004904 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004905}
4906
pbrookcc8ae6d2006-04-23 17:57:59 +00004907# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004908if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004909 if has_sphinx_build; then
4910 sphinx_ok=yes
4911 else
4912 sphinx_ok=no
4913 fi
4914 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004915 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004916 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004917 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004918 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4919 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4920 fi
4921 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004922 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004923 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004924 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004925fi
4926
Stefan Weilf514f412009-10-11 12:44:07 +02004927# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004928byteswap_h=no
4929cat > $TMPC << EOF
4930#include <byteswap.h>
4931int main(void) { return bswap_32(0); }
4932EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004933if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004934 byteswap_h=yes
4935fi
4936
Stefan Weil75f13592013-01-05 12:17:38 +01004937# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004938bswap_h=no
4939cat > $TMPC << EOF
4940#include <sys/endian.h>
4941#include <sys/types.h>
4942#include <machine/bswap.h>
4943int main(void) { return bswap32(0); }
4944EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004945if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004946 bswap_h=yes
4947fi
4948
aliguorida93a1f2008-12-12 20:02:52 +00004949##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004950# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004951if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004952 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004953 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004954 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4955 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004956 else
4957 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004958 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004959 fi
4960 libiscsi="no"
4961 fi
4962fi
4963
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004964##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004965# Do we need libm
4966cat > $TMPC << EOF
4967#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004968int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004969EOF
4970if compile_prog "" "" ; then
4971 :
4972elif compile_prog "" "-lm" ; then
4973 LIBS="-lm $LIBS"
4974 libs_qga="-lm $libs_qga"
4975else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004976 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004977fi
4978
4979##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004980# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004981# uClibc provides 2 versions of clock_gettime(), one with realtime
4982# support and one without. This means that the clock_gettime() don't
4983# need -lrt. We still need it for timer_create() so we check for this
4984# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004985cat > $TMPC <<EOF
4986#include <signal.h>
4987#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004988int main(void) {
4989 timer_create(CLOCK_REALTIME, NULL, NULL);
4990 return clock_gettime(CLOCK_REALTIME, NULL);
4991}
aliguorida93a1f2008-12-12 20:02:52 +00004992EOF
4993
Juan Quintela52166aa2009-08-03 14:46:03 +02004994if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004995 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004996# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004997elif compile_prog "" "$pthread_lib -lrt" ; then
4998 LIBS="$LIBS -lrt"
4999 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00005000fi
5001
Thomas Huthd99e97e2019-01-17 18:14:08 +01005002# Check whether we need to link libutil for openpty()
5003cat > $TMPC << EOF
5004extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5005int main(void) { return openpty(0, 0, 0, 0, 0); }
5006EOF
5007
5008if ! compile_prog "" "" ; then
5009 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02005010 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01005011 libs_tools="-lutil $libs_tools"
5012 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005013fi
5014
Blue Swirlde5071c2009-09-12 09:58:46 +00005015##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005016# spice probe
5017if test "$spice" != "no" ; then
5018 cat > $TMPC << EOF
5019#include <spice.h>
5020int main(void) { spice_server_new(); return 0; }
5021EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005022 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5023 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005024 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005025 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005026 compile_prog "$spice_cflags" "$spice_libs" ; then
5027 spice="yes"
5028 libs_softmmu="$libs_softmmu $spice_libs"
5029 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005030 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5031 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005032 else
5033 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005034 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005035 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005036 fi
5037 spice="no"
5038 fi
5039fi
5040
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005041# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005042if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005043 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005044 libcacard_cflags=$($pkg_config --cflags libcacard)
5045 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005046 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005047 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005048 if test "$smartcard" = "yes"; then
5049 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005050 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005051 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005052 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005053fi
5054
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005055# check for libusb
5056if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005057 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005058 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005059 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5060 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005061 else
5062 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005063 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005064 fi
5065 libusb="no"
5066 fi
5067fi
5068
Hans de Goede69354a82011-07-19 11:04:10 +02005069# check for usbredirparser for usb network redirection support
5070if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005071 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005072 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005073 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5074 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005075 else
5076 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005077 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005078 fi
5079 usb_redir="no"
5080 fi
5081fi
5082
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005083##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005084# check if we have VSS SDK headers for win
5085
Eric Blakee633a5c2019-02-04 20:39:37 -06005086if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5087 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005088 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005089 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005090 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5091 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005092 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005093 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5094 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005095 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005096 esac
5097 cat > $TMPC << EOF
5098#define __MIDL_user_allocate_free_DEFINED__
5099#include <inc/win2003/vss.h>
5100int main(void) { return VSS_CTX_BACKUP; }
5101EOF
5102 if compile_prog "$vss_win32_include" "" ; then
5103 guest_agent_with_vss="yes"
5104 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005105 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005106 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005107 else
5108 if test "$vss_win32_sdk" != "" ; then
5109 echo "ERROR: Please download and install Microsoft VSS SDK:"
5110 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5111 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5112 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5113 echo "ERROR: The headers are extracted in the directory \`inc'."
5114 feature_not_found "VSS support"
5115 fi
5116 guest_agent_with_vss="no"
5117 fi
5118fi
5119
5120##########################################
5121# lookup Windows platform SDK (if not specified)
5122# The SDK is needed only to build .tlb (type library) file of guest agent
5123# VSS provider from the source. It is usually unnecessary because the
5124# pre-compiled .tlb file is included.
5125
Eric Blakee633a5c2019-02-04 20:39:37 -06005126if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5127 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005128 if test -z "$win_sdk"; then
5129 programfiles="$PROGRAMFILES"
5130 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5131 if test -n "$programfiles"; then
5132 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5133 else
5134 feature_not_found "Windows SDK"
5135 fi
5136 elif test "$win_sdk" = "no"; then
5137 win_sdk=""
5138 fi
5139fi
5140
5141##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005142# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005143if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005144 cat > $TMPC << EOF
5145#include <windows.h>
5146#include <ntddscsi.h>
5147int main(void) {
5148#if !defined(IOCTL_SCSI_GET_ADDRESS)
5149#error Missing required ioctl definitions
5150#endif
5151 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5152 return addr.Lun;
5153}
5154EOF
5155 if compile_prog "" "" ; then
5156 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005157 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005158 fi
5159fi
5160
5161##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005162# virgl renderer probe
5163
5164if test "$virglrenderer" != "no" ; then
5165 cat > $TMPC << EOF
5166#include <virglrenderer.h>
5167int main(void) { virgl_renderer_poll(); return 0; }
5168EOF
5169 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5170 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005171 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005172 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5173 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5174 virglrenderer="yes"
5175 else
5176 if test "$virglrenderer" = "yes" ; then
5177 feature_not_found "virglrenderer"
5178 fi
5179 virglrenderer="no"
5180 fi
5181fi
5182
5183##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005184# capstone
5185
Richard Hendersone219c492017-09-28 09:01:23 -07005186case "$capstone" in
5187 "" | yes)
5188 if $pkg_config capstone; then
5189 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005190 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005191 capstone=git
5192 elif test -e "${source_path}/capstone/Makefile" ; then
5193 capstone=internal
5194 elif test -z "$capstone" ; then
5195 capstone=no
5196 else
5197 feature_not_found "capstone" "Install capstone devel or git submodule"
5198 fi
5199 ;;
5200
5201 system)
5202 if ! $pkg_config capstone; then
5203 feature_not_found "capstone" "Install capstone devel"
5204 fi
5205 ;;
5206esac
5207
5208case "$capstone" in
5209 git | internal)
5210 if test "$capstone" = git; then
5211 git_submodules="${git_submodules} capstone"
5212 fi
5213 mkdir -p capstone
5214 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5215 if test "$mingw32" = "yes"; then
5216 LIBCAPSTONE=capstone.lib
5217 else
5218 LIBCAPSTONE=libcapstone.a
5219 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005220 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005221 ;;
5222
5223 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005224 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005225 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005226 ;;
5227
5228 no)
5229 ;;
5230 *)
5231 error_exit "Unknown state for capstone: $capstone"
5232 ;;
5233esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005234
5235##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005236# check if we have fdatasync
5237
5238fdatasync=no
5239cat > $TMPC << EOF
5240#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005241int main(void) {
5242#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5243return fdatasync(0);
5244#else
Stefan Weile172fe12012-04-06 21:33:20 +02005245#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005246#endif
5247}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005248EOF
5249if compile_prog "" "" ; then
5250 fdatasync=yes
5251fi
5252
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005253##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005254# check if we have madvise
5255
5256madvise=no
5257cat > $TMPC << EOF
5258#include <sys/types.h>
5259#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005260#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005261int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5262EOF
5263if compile_prog "" "" ; then
5264 madvise=yes
5265fi
5266
5267##########################################
5268# check if we have posix_madvise
5269
5270posix_madvise=no
5271cat > $TMPC << EOF
5272#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005273#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005274int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5275EOF
5276if compile_prog "" "" ; then
5277 posix_madvise=yes
5278fi
5279
5280##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005281# check if we have posix_memalign()
5282
5283posix_memalign=no
5284cat > $TMPC << EOF
5285#include <stdlib.h>
5286int main(void) {
5287 void *p;
5288 return posix_memalign(&p, 8, 8);
5289}
5290EOF
5291if compile_prog "" "" ; then
5292 posix_memalign=yes
5293fi
5294
5295##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005296# check if we have posix_syslog
5297
5298posix_syslog=no
5299cat > $TMPC << EOF
5300#include <syslog.h>
5301int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5302EOF
5303if compile_prog "" "" ; then
5304 posix_syslog=yes
5305fi
5306
5307##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005308# check if we have sem_timedwait
5309
5310sem_timedwait=no
5311cat > $TMPC << EOF
5312#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005313int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005314EOF
5315if compile_prog "" "" ; then
5316 sem_timedwait=yes
5317fi
5318
5319##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005320# check if we have strchrnul
5321
5322strchrnul=no
5323cat > $TMPC << EOF
5324#include <string.h>
5325int main(void);
5326// Use a haystack that the compiler shouldn't be able to constant fold
5327char *haystack = (char*)&main;
5328int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5329EOF
5330if compile_prog "" "" ; then
5331 strchrnul=yes
5332fi
5333
Jiufei Xue8a792b02019-04-17 03:08:56 +08005334#########################################
5335# check if we have st_atim
5336
5337st_atim=no
5338cat > $TMPC << EOF
5339#include <sys/stat.h>
5340#include <stddef.h>
5341int main(void) { return offsetof(struct stat, st_atim); }
5342EOF
5343if compile_prog "" "" ; then
5344 st_atim=yes
5345fi
5346
Keno Fischer5c99fa32018-06-29 12:32:10 +02005347##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005348# check if trace backend exists
5349
Lluís Vilanova5b808272014-05-27 15:02:14 +02005350$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005351if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005352 error_exit "invalid trace backends" \
5353 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005354fi
5355
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005356##########################################
5357# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005358if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005359 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005360#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005361int main(void) { return 0; }
5362EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005363 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005364 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005365 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005366 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005367 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005368 fi
5369 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005370 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005371 else
5372 urcu_bp_libs="-lurcu-bp"
5373 fi
5374
5375 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5376 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005377 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005378 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005379 fi
5380fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005381
5382##########################################
5383# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005384if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005385 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005386 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005387 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005388 trace_backend_stap="no"
5389 if has 'stap' ; then
5390 trace_backend_stap="yes"
5391 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005392fi
5393
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005394##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005395# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305396
Peter Maydell7c2acc72013-04-08 12:11:27 +01005397# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005398# is sigcontext. On Windows the only valid backend is the Windows
5399# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005400
5401ucontext_works=no
5402if test "$darwin" != "yes"; then
5403 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305404#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005405#ifdef __stub_makecontext
5406#error Ignoring glibc stub makecontext which will always fail
5407#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005408int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305409EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005410 if compile_prog "" "" ; then
5411 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305412 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005413fi
5414
5415if test "$coroutine" = ""; then
5416 if test "$mingw32" = "yes"; then
5417 coroutine=win32
5418 elif test "$ucontext_works" = "yes"; then
5419 coroutine=ucontext
5420 else
5421 coroutine=sigaltstack
5422 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005423else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005424 case $coroutine in
5425 windows)
5426 if test "$mingw32" != "yes"; then
5427 error_exit "'windows' coroutine backend only valid for Windows"
5428 fi
5429 # Unfortunately the user visible backend name doesn't match the
5430 # coroutine-*.c filename for this case, so we have to adjust it here.
5431 coroutine=win32
5432 ;;
5433 ucontext)
5434 if test "$ucontext_works" != "yes"; then
5435 feature_not_found "ucontext"
5436 fi
5437 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005438 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005439 if test "$mingw32" = "yes"; then
5440 error_exit "only the 'windows' coroutine backend is valid for Windows"
5441 fi
5442 ;;
5443 *)
5444 error_exit "unknown coroutine backend $coroutine"
5445 ;;
5446 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305447fi
5448
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005449if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005450 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005451fi
5452
Peter Lieven7d992e42016-09-27 11:58:45 +02005453if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005454 if test "$coroutine_pool" = "yes"; then
5455 echo "WARN: disabling coroutine pool for stack usage debugging"
5456 coroutine_pool=no
5457 fi
5458fi
5459
5460
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305461##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305462# check if we have open_by_handle_at
5463
Stefan Weil4e1797f2012-06-18 22:11:06 +02005464open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305465cat > $TMPC << EOF
5466#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005467#if !defined(AT_EMPTY_PATH)
5468# error missing definition
5469#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005470int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005471#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305472EOF
5473if compile_prog "" "" ; then
5474 open_by_handle_at=yes
5475fi
5476
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305477########################################
5478# check if we have linux/magic.h
5479
5480linux_magic_h=no
5481cat > $TMPC << EOF
5482#include <linux/magic.h>
5483int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005484 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305485}
5486EOF
5487if compile_prog "" "" ; then
5488 linux_magic_h=yes
5489fi
5490
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005491########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005492# check whether we can disable warning option with a pragma (this is needed
5493# to silence warnings in the headers of some versions of external libraries).
5494# This test has to be compiled with -Werror as otherwise an unknown pragma is
5495# only a warning.
5496#
5497# If we can't selectively disable warning in the code, disable -Werror so that
5498# the build doesn't fail anyway.
5499
Peter Maydell06d71fa2012-07-30 16:13:07 +01005500pragma_disable_unused_but_set=no
5501cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005502#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005503#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005504#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005505
Peter Maydell06d71fa2012-07-30 16:13:07 +01005506int main(void) {
5507 return 0;
5508}
5509EOF
5510if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005511 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005512else
5513 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005514fi
5515
5516########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005517# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005518
5519valgrind_h=no
5520cat > $TMPC << EOF
5521#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005522int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005523 return 0;
5524}
5525EOF
5526if compile_prog "" "" ; then
5527 valgrind_h=yes
5528fi
5529
5530########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005531# check if environ is declared
5532
5533has_environ=no
5534cat > $TMPC << EOF
5535#include <unistd.h>
5536int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005537 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005538 return 0;
5539}
5540EOF
5541if compile_prog "" "" ; then
5542 has_environ=yes
5543fi
5544
Richard Henderson76a347e2012-12-28 14:17:02 -08005545########################################
5546# check if cpuid.h is usable.
5547
Richard Henderson76a347e2012-12-28 14:17:02 -08005548cat > $TMPC << EOF
5549#include <cpuid.h>
5550int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005551 unsigned a, b, c, d;
5552 int max = __get_cpuid_max(0, 0);
5553
5554 if (max >= 1) {
5555 __cpuid(1, a, b, c, d);
5556 }
5557
5558 if (max >= 7) {
5559 __cpuid_count(7, 0, a, b, c, d);
5560 }
5561
5562 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005563}
5564EOF
5565if compile_prog "" "" ; then
5566 cpuid_h=yes
5567fi
5568
Richard Henderson5dd89902017-07-18 18:40:18 -10005569##########################################
5570# avx2 optimization requirement check
5571#
5572# There is no point enabling this if cpuid.h is not usable,
5573# since we won't be able to select the new routines.
5574
Eric Blakee633a5c2019-02-04 20:39:37 -06005575if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005576 cat > $TMPC << EOF
5577#pragma GCC push_options
5578#pragma GCC target("avx2")
5579#include <cpuid.h>
5580#include <immintrin.h>
5581static int bar(void *a) {
5582 __m256i x = *(__m256i *)a;
5583 return _mm256_testz_si256(x, x);
5584}
5585int main(int argc, char *argv[]) { return bar(argv[0]); }
5586EOF
5587 if compile_object "" ; then
5588 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005589 else
5590 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005591 fi
5592fi
5593
Robert Hoo6b8cd442020-02-29 20:34:34 +08005594##########################################
5595# avx512f optimization requirement check
5596#
5597# There is no point enabling this if cpuid.h is not usable,
5598# since we won't be able to select the new routines.
5599# by default, it is turned off.
5600# if user explicitly want to enable it, check environment
5601
5602if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5603 cat > $TMPC << EOF
5604#pragma GCC push_options
5605#pragma GCC target("avx512f")
5606#include <cpuid.h>
5607#include <immintrin.h>
5608static int bar(void *a) {
5609 __m512i x = *(__m512i *)a;
5610 return _mm512_test_epi64_mask(x, x);
5611}
5612int main(int argc, char *argv[])
5613{
5614 return bar(argv[0]);
5615}
5616EOF
5617 if ! compile_object "" ; then
5618 avx512f_opt="no"
5619 fi
5620else
5621 avx512f_opt="no"
5622fi
5623
Richard Hendersonf5401662013-02-16 12:46:59 -08005624########################################
5625# check if __[u]int128_t is usable.
5626
5627int128=no
5628cat > $TMPC << EOF
5629__int128_t a;
5630__uint128_t b;
5631int main (void) {
5632 a = a + b;
5633 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005634 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005635 return 0;
5636}
5637EOF
5638if compile_prog "" "" ; then
5639 int128=yes
5640fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005641
Richard Henderson7ebee432016-06-29 21:10:59 -07005642#########################################
5643# See if 128-bit atomic operations are supported.
5644
5645atomic128=no
5646if test "$int128" = "yes"; then
5647 cat > $TMPC << EOF
5648int main(void)
5649{
5650 unsigned __int128 x = 0, y = 0;
5651 y = __atomic_load_16(&x, 0);
5652 __atomic_store_16(&x, y, 0);
5653 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5654 return 0;
5655}
5656EOF
5657 if compile_prog "" "" ; then
5658 atomic128=yes
5659 fi
5660fi
5661
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005662cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005663if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005664 cat > $TMPC << EOF
5665int main(void)
5666{
5667 unsigned __int128 x = 0, y = 0;
5668 __sync_val_compare_and_swap_16(&x, y, x);
5669 return 0;
5670}
5671EOF
5672 if compile_prog "" "" ; then
5673 cmpxchg128=yes
5674 fi
5675fi
5676
Richard Hendersondf79b992016-09-02 12:23:57 -07005677#########################################
5678# See if 64-bit atomic operations are supported.
5679# Note that without __atomic builtins, we can only
5680# assume atomic loads/stores max at pointer size.
5681
5682cat > $TMPC << EOF
5683#include <stdint.h>
5684int main(void)
5685{
5686 uint64_t x = 0, y = 0;
5687#ifdef __ATOMIC_RELAXED
5688 y = __atomic_load_8(&x, 0);
5689 __atomic_store_8(&x, y, 0);
5690 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5691 __atomic_exchange_8(&x, y, 0);
5692 __atomic_fetch_add_8(&x, y, 0);
5693#else
5694 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5695 __sync_lock_test_and_set(&x, y);
5696 __sync_val_compare_and_swap(&x, y, 0);
5697 __sync_fetch_and_add(&x, y);
5698#endif
5699 return 0;
5700}
5701EOF
5702if compile_prog "" "" ; then
5703 atomic64=yes
5704fi
5705
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005706#########################################
5707# See if --dynamic-list is supported by the linker
5708ld_dynamic_list="no"
5709if test "$static" = "no" ; then
5710 cat > $TMPTXT <<EOF
5711{
5712 foo;
5713};
5714EOF
5715
5716 cat > $TMPC <<EOF
5717#include <stdio.h>
5718void foo(void);
5719
5720void foo(void)
5721{
5722 printf("foo\n");
5723}
5724
5725int main(void)
5726{
5727 foo();
5728 return 0;
5729}
5730EOF
5731
5732 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5733 ld_dynamic_list="yes"
5734 fi
5735fi
5736
5737#########################################
5738# See if -exported_symbols_list is supported by the linker
5739
5740ld_exported_symbols_list="no"
5741if test "$static" = "no" ; then
5742 cat > $TMPTXT <<EOF
5743 _foo
5744EOF
5745
5746 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5747 ld_exported_symbols_list="yes"
5748 fi
5749fi
5750
5751if test "$plugins" = "yes" &&
5752 test "$ld_dynamic_list" = "no" &&
5753 test "$ld_exported_symbols_list" = "no" ; then
5754 error_exit \
5755 "Plugin support requires dynamic linking and specifying a set of symbols " \
5756 "that are exported to plugins. Unfortunately your linker doesn't " \
5757 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5758 "for this purpose. You can't build with --static."
5759fi
5760
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005761########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005762# See if 16-byte vector operations are supported.
5763# Even without a vector unit the compiler may expand these.
5764# There is a bug in old GCC for PPC that crashes here.
5765# Unfortunately it's the system compiler for Centos 7.
5766
5767cat > $TMPC << EOF
5768typedef unsigned char U1 __attribute__((vector_size(16)));
5769typedef unsigned short U2 __attribute__((vector_size(16)));
5770typedef unsigned int U4 __attribute__((vector_size(16)));
5771typedef unsigned long long U8 __attribute__((vector_size(16)));
5772typedef signed char S1 __attribute__((vector_size(16)));
5773typedef signed short S2 __attribute__((vector_size(16)));
5774typedef signed int S4 __attribute__((vector_size(16)));
5775typedef signed long long S8 __attribute__((vector_size(16)));
5776static U1 a1, b1;
5777static U2 a2, b2;
5778static U4 a4, b4;
5779static U8 a8, b8;
5780static S1 c1;
5781static S2 c2;
5782static S4 c4;
5783static S8 c8;
5784static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005785void helper(void *d, void *a, int shift, int i);
5786void helper(void *d, void *a, int shift, int i)
5787{
5788 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5789 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5790 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5791 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5792}
Richard Hendersondb432672017-09-15 14:11:45 -07005793int main(void)
5794{
5795 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5796 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5797 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5798 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5799 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5800 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5801 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5802 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5803 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5804 return 0;
5805}
5806EOF
5807
5808vector16=no
5809if compile_prog "" "" ; then
5810 vector16=yes
5811fi
5812
5813########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005814# See if __attribute__((alias)) is supported.
5815# This false for Xcode 9, but has been remedied for Xcode 10.
5816# Unfortunately, travis uses Xcode 9 by default.
5817
5818attralias=no
5819cat > $TMPC << EOF
5820int x = 1;
5821extern const int y __attribute__((alias("x")));
5822int main(void) { return 0; }
5823EOF
5824if compile_prog "" "" ; then
5825 attralias=yes
5826fi
5827
5828########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005829# check if getauxval is available.
5830
5831getauxval=no
5832cat > $TMPC << EOF
5833#include <sys/auxv.h>
5834int main(void) {
5835 return getauxval(AT_HWCAP) == 0;
5836}
5837EOF
5838if compile_prog "" "" ; then
5839 getauxval=yes
5840fi
5841
John Snowfd0e6052015-03-25 18:57:39 -04005842########################################
5843# check if ccache is interfering with
5844# semantic analysis of macros
5845
John Snow5e4dfd32015-10-28 13:56:40 -04005846unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005847ccache_cpp2=no
5848cat > $TMPC << EOF
5849static const int Z = 1;
5850#define fn() ({ Z; })
5851#define TAUT(X) ((X) == Z)
5852#define PAREN(X, Y) (X == Y)
5853#define ID(X) (X)
5854int main(int argc, char *argv[])
5855{
5856 int x = 0, y = 0;
5857 x = ID(x);
5858 x = fn();
5859 fn();
5860 if (PAREN(x, y)) return 0;
5861 if (TAUT(Z)) return 0;
5862 return 0;
5863}
5864EOF
5865
5866if ! compile_object "-Werror"; then
5867 ccache_cpp2=yes
5868fi
5869
John Snowb553a042015-11-03 15:43:42 -05005870#################################################
5871# clang does not support glibc + FORTIFY_SOURCE.
5872
5873if test "$fortify_source" != "no"; then
5874 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5875 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005876 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005877 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005878 fortify_source="no";
5879 else
5880 fortify_source="yes"
5881 fi
5882fi
5883
Fam Zheng1efad062018-06-01 17:26:43 +08005884###############################################
5885# Check if copy_file_range is provided by glibc
5886have_copy_file_range=no
5887cat > $TMPC << EOF
5888#include <unistd.h>
5889int main(void) {
5890 copy_file_range(0, NULL, 0, NULL, 0, 0);
5891 return 0;
5892}
5893EOF
5894if compile_prog "" "" ; then
5895 have_copy_file_range=yes
5896fi
5897
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305898##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005899# check if struct fsxattr is available via linux/fs.h
5900
5901have_fsxattr=no
5902cat > $TMPC << EOF
5903#include <linux/fs.h>
5904struct fsxattr foo;
5905int main(void) {
5906 return 0;
5907}
5908EOF
5909if compile_prog "" "" ; then
5910 have_fsxattr=yes
5911fi
5912
Peter Maydellb66e10e2016-06-08 18:34:32 +01005913##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005914# check for usable membarrier system call
5915if test "$membarrier" = "yes"; then
5916 have_membarrier=no
5917 if test "$mingw32" = "yes" ; then
5918 have_membarrier=yes
5919 elif test "$linux" = "yes" ; then
5920 cat > $TMPC << EOF
5921 #include <linux/membarrier.h>
5922 #include <sys/syscall.h>
5923 #include <unistd.h>
5924 #include <stdlib.h>
5925 int main(void) {
5926 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5927 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5928 exit(0);
5929 }
5930EOF
5931 if compile_prog "" "" ; then
5932 have_membarrier=yes
5933 fi
5934 fi
5935 if test "$have_membarrier" = "no"; then
5936 feature_not_found "membarrier" "membarrier system call not available"
5937 fi
5938else
5939 # Do not enable it by default even for Mingw32, because it doesn't
5940 # work on Wine.
5941 membarrier=no
5942fi
5943
5944##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005945# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005946have_rtnetlink=no
5947cat > $TMPC << EOF
5948#include <linux/rtnetlink.h>
5949int main(void) {
5950 return IFLA_PROTO_DOWN;
5951}
5952EOF
5953if compile_prog "" "" ; then
5954 have_rtnetlink=yes
5955fi
5956
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005957##########################################
5958# check for usable AF_VSOCK environment
5959have_af_vsock=no
5960cat > $TMPC << EOF
5961#include <errno.h>
5962#include <sys/types.h>
5963#include <sys/socket.h>
5964#if !defined(AF_VSOCK)
5965# error missing AF_VSOCK flag
5966#endif
5967#include <linux/vm_sockets.h>
5968int main(void) {
5969 int sock, ret;
5970 struct sockaddr_vm svm;
5971 socklen_t len = sizeof(svm);
5972 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5973 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5974 if ((ret == -1) && (errno == ENOTCONN)) {
5975 return 0;
5976 }
5977 return -1;
5978}
5979EOF
5980if compile_prog "" "" ; then
5981 have_af_vsock=yes
5982fi
5983
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005984##########################################
5985# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005986have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005987cat > $TMPC << EOF
5988#include <errno.h>
5989#include <sys/types.h>
5990#include <sys/socket.h>
5991#include <linux/if_alg.h>
5992int main(void) {
5993 int sock;
5994 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5995 return sock;
5996}
5997EOF
5998if compile_prog "" "" ; then
5999 have_afalg=yes
6000fi
6001if test "$crypto_afalg" = "yes"
6002then
6003 if test "$have_afalg" != "yes"
6004 then
6005 error_exit "AF_ALG requested but could not be detected"
6006 fi
6007fi
6008
6009
James Clarke6969ec62016-06-06 12:02:50 +01006010#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006011# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00006012if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006013 cat > $TMPC << EOF
6014#include <Hypervisor/hv.h>
6015int main() { return 0;}
6016EOF
6017 if ! compile_object ""; then
6018 hvf='no'
6019 else
6020 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006021 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006022 fi
6023fi
6024
6025#################################################
James Clarke6969ec62016-06-06 12:02:50 +01006026# Sparc implicitly links with --relax, which is
6027# incompatible with -r, so --no-relax should be
6028# given. It does no harm to give it on other
6029# platforms too.
6030
6031# Note: the prototype is needed since QEMU_CFLAGS
6032# contains -Wmissing-prototypes
6033cat > $TMPC << EOF
6034extern int foo(void);
6035int foo(void) { return 0; }
6036EOF
6037if ! compile_object ""; then
6038 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6039fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01006040for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6041 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6042 LD_REL_FLAGS=$i
6043 break
6044 fi
6045done
6046if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6047 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006048fi
6049
Jan Vesely277abf12016-04-29 13:15:23 -04006050##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006051# check for sysmacros.h
6052
6053have_sysmacros=no
6054cat > $TMPC << EOF
6055#include <sys/sysmacros.h>
6056int main(void) {
6057 return makedev(0, 0);
6058}
6059EOF
6060if compile_prog "" "" ; then
6061 have_sysmacros=yes
6062fi
6063
6064##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006065# Veritas HyperScale block driver VxHS
6066# Check if libvxhs is installed
6067
6068if test "$vxhs" != "no" ; then
6069 cat > $TMPC <<EOF
6070#include <stdint.h>
6071#include <qnio/qnio_api.h>
6072
6073void *vxhs_callback;
6074
6075int main(void) {
6076 iio_init(QNIO_VERSION, vxhs_callback);
6077 return 0;
6078}
6079EOF
6080 vxhs_libs="-lvxhs -lssl"
6081 if compile_prog "" "$vxhs_libs" ; then
6082 vxhs=yes
6083 else
6084 if test "$vxhs" = "yes" ; then
6085 feature_not_found "vxhs block device" "Install libvxhs See github"
6086 fi
6087 vxhs=no
6088 fi
6089fi
6090
6091##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006092# check for _Static_assert()
6093
6094have_static_assert=no
6095cat > $TMPC << EOF
6096_Static_assert(1, "success");
6097int main(void) {
6098 return 0;
6099}
6100EOF
6101if compile_prog "" "" ; then
6102 have_static_assert=yes
6103fi
6104
6105##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006106# check for utmpx.h, it is missing e.g. on OpenBSD
6107
6108have_utmpx=no
6109cat > $TMPC << EOF
6110#include <utmpx.h>
6111struct utmpx user_info;
6112int main(void) {
6113 return 0;
6114}
6115EOF
6116if compile_prog "" "" ; then
6117 have_utmpx=yes
6118fi
6119
6120##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006121# check for getrandom()
6122
6123have_getrandom=no
6124cat > $TMPC << EOF
6125#include <sys/random.h>
6126int main(void) {
6127 return getrandom(0, 0, GRND_NONBLOCK);
6128}
6129EOF
6130if compile_prog "" "" ; then
6131 have_getrandom=yes
6132fi
6133
6134##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006135# checks for sanitizers
6136
Marc-André Lureau247724c2018-01-16 16:11:51 +01006137have_asan=no
6138have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006139have_asan_iface_h=no
6140have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006141
6142if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006143 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006144 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6145 have_asan=yes
6146 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006147
6148 # we could use a simple skeleton for flags checks, but this also
6149 # detect the static linking issue of ubsan, see also:
6150 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6151 cat > $TMPC << EOF
6152#include <stdlib.h>
6153int main(void) {
6154 void *tmp = malloc(10);
6155 return *(int *)(tmp + 2);
6156}
6157EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006158 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6159 have_ubsan=yes
6160 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006161
6162 if check_include "sanitizer/asan_interface.h" ; then
6163 have_asan_iface_h=yes
6164 fi
6165
6166 cat > $TMPC << EOF
6167#include <sanitizer/asan_interface.h>
6168int main(void) {
6169 __sanitizer_start_switch_fiber(0, 0, 0);
6170 return 0;
6171}
6172EOF
6173 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6174 have_asan_iface_fiber=yes
6175 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006176fi
6177
6178##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006179# checks for fuzzer
6180if test "$fuzzing" = "yes" ; then
6181 write_c_fuzzer_skeleton
6182 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6183 have_fuzzer=yes
6184 fi
6185fi
6186
6187##########################################
Junyan He17824402018-07-18 15:47:59 +08006188# check for libpmem
6189
6190if test "$libpmem" != "no"; then
6191 if $pkg_config --exists "libpmem"; then
6192 libpmem="yes"
6193 libpmem_libs=$($pkg_config --libs libpmem)
6194 libpmem_cflags=$($pkg_config --cflags libpmem)
6195 libs_softmmu="$libs_softmmu $libpmem_libs"
6196 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6197 else
6198 if test "$libpmem" = "yes" ; then
6199 feature_not_found "libpmem" "Install nvml or pmdk"
6200 fi
6201 libpmem="no"
6202 fi
6203fi
6204
6205##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006206# check for slirp
6207
Laurent Vivierd5999382019-06-21 15:05:44 +02006208# slirp is only required when building softmmu targets
6209if test -z "$slirp" -a "$softmmu" != "yes" ; then
6210 slirp="no"
6211fi
6212
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006213case "$slirp" in
6214 "" | yes)
6215 if $pkg_config slirp; then
6216 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006217 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6218 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006219 elif test -e "${source_path}/slirp/Makefile" ; then
6220 slirp=internal
6221 elif test -z "$slirp" ; then
6222 slirp=no
6223 else
6224 feature_not_found "slirp" "Install slirp devel or git submodule"
6225 fi
6226 ;;
6227
6228 system)
6229 if ! $pkg_config slirp; then
6230 feature_not_found "slirp" "Install slirp devel"
6231 fi
6232 ;;
6233esac
6234
6235case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006236 git | internal)
6237 if test "$slirp" = git; then
6238 git_submodules="${git_submodules} slirp"
6239 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006240 mkdir -p slirp
6241 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6242 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006243 if test "$mingw32" = "yes" ; then
6244 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6245 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006246 ;;
6247
6248 system)
6249 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6250 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6251 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6252 ;;
6253
6254 no)
6255 ;;
6256 *)
6257 error_exit "Unknown state for slirp: $slirp"
6258 ;;
6259esac
6260
6261
6262##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006263# End of CC checks
6264# After here, no more $cc or $ld runs
6265
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006266write_c_skeleton
6267
Blue Swirl1d728c32012-05-01 18:45:39 +00006268if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006269 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6270 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006271elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006272 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006273elif test "$debug" = "no"; then
6274 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006275fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006276
Marc-André Lureau247724c2018-01-16 16:11:51 +01006277if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006278 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6279 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006280 if test "$have_asan_iface_h" = "no" ; then
6281 echo "ASAN build enabled, but ASAN header missing." \
6282 "Without code annotation, the report may be inferior."
6283 elif test "$have_asan_iface_fiber" = "no" ; then
6284 echo "ASAN build enabled, but ASAN header is too old." \
6285 "Without code annotation, the report may be inferior."
6286 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006287fi
6288if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006289 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6290 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006291fi
6292
Peter Lieven6542aa92014-02-03 10:26:13 +01006293##########################################
6294# Do we have libnfs
6295if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006296 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006297 libnfs="yes"
6298 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006299 else
6300 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006301 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006302 fi
6303 libnfs="no"
6304 fi
6305fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006306
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006307##########################################
6308# Do we have libudev
6309if test "$libudev" != "no" ; then
6310 if $pkg_config libudev && test "$static" != "yes"; then
6311 libudev="yes"
6312 libudev_libs=$($pkg_config --libs libudev)
6313 else
6314 libudev="no"
6315 fi
6316fi
6317
Peter Maydell6ca026c2012-07-18 15:10:18 +01006318# Now we've finished running tests it's OK to add -Werror to the compiler flags
6319if test "$werror" = "yes"; then
6320 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6321fi
6322
Juan Quintelae86ecd42009-08-03 14:45:59 +02006323if test "$solaris" = "no" ; then
6324 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006325 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006326 fi
6327fi
6328
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006329# test if pod2man has --utf8 option
6330if pod2man --help | grep -q utf8; then
6331 POD2MAN="pod2man --utf8"
6332else
6333 POD2MAN="pod2man"
6334fi
6335
Blue Swirl952afb72010-09-19 08:36:34 +00006336# Use ASLR, no-SEH and DEP if available
6337if test "$mingw32" = "yes" ; then
6338 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006339 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006340 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006341 fi
6342 done
6343fi
6344
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006345# Disable OpenBSD W^X if available
6346if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6347 cat > $TMPC <<EOF
6348 int main(void) { return 0; }
6349EOF
6350 wx_ldflags="-Wl,-z,wxneeded"
6351 if compile_prog "" "$wx_ldflags"; then
6352 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6353 fi
6354fi
6355
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006356qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006357qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006358qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006359qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006360qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006361qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006362
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006363# We can only support ivshmem if we have eventfd
6364if [ "$eventfd" = "yes" ]; then
6365 ivshmem=yes
6366fi
6367
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006368tools=""
6369if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006370 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006371 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006372 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006373 fi
6374 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006375 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006376 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006377 if [ "$curl" = "yes" ]; then
6378 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006379 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006380fi
6381if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006382 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006383 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006384 virtfs=yes
6385 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6386 else
6387 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006388 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306389 fi
Andreas Färber17500372012-05-01 01:12:03 +02006390 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006391 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006392 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6393 mpath=yes
6394 else
6395 if test "$mpath" = yes; then
6396 error_exit "Multipath requires libmpathpersist devel"
6397 fi
6398 mpath=no
6399 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006400 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6401 else
6402 if test "$virtfs" = yes; then
6403 error_exit "VirtFS is supported only on Linux"
6404 fi
6405 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006406 if test "$mpath" = yes; then
6407 error_exit "Multipath is supported only on Linux"
6408 fi
6409 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306410 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006411 if test "$xkbcommon" = "yes"; then
6412 tools="qemu-keymap\$(EXESUF) $tools"
6413 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006414fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006415
6416# Probe for guest agent support/options
6417
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006418if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006419 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6420 guest_agent=no
6421 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006422 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006423 guest_agent=yes
6424 elif [ "$guest_agent" != yes ]; then
6425 guest_agent=no
6426 else
6427 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006428 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006429fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006430
Michael Roth9d6bc272015-08-26 10:49:13 -05006431# Guest agent Window MSI package
6432
6433if test "$guest_agent" != yes; then
6434 if test "$guest_agent_msi" = yes; then
6435 error_exit "MSI guest agent package requires guest agent enabled"
6436 fi
6437 guest_agent_msi=no
6438elif test "$mingw32" != "yes"; then
6439 if test "$guest_agent_msi" = "yes"; then
6440 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6441 fi
6442 guest_agent_msi=no
6443elif ! has wixl; then
6444 if test "$guest_agent_msi" = "yes"; then
6445 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6446 fi
6447 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006448else
6449 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6450 # disabled explicitly
6451 if test "$guest_agent_msi" != "no"; then
6452 guest_agent_msi=yes
6453 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006454fi
6455
Michael Roth1a349042015-08-26 11:14:31 -05006456if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006457 if test "$guest_agent_with_vss" = "yes"; then
6458 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6459 fi
6460
6461 if test "$QEMU_GA_MANUFACTURER" = ""; then
6462 QEMU_GA_MANUFACTURER=QEMU
6463 fi
6464
6465 if test "$QEMU_GA_DISTRO" = ""; then
6466 QEMU_GA_DISTRO=Linux
6467 fi
6468
6469 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006470 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006471 fi
6472
Stefan Weil89138852016-05-16 15:10:20 +02006473 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006474
6475 case "$cpu" in
6476 x86_64)
6477 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6478 ;;
6479 i386)
6480 QEMU_GA_MSI_ARCH="-D Arch=32"
6481 ;;
6482 *)
6483 error_exit "CPU $cpu not supported for building installation package"
6484 ;;
6485 esac
6486fi
6487
Paolo Bonzinica35f782010-05-26 16:08:29 +02006488# Mac OS X ships with a broken assembler
6489roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006490if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6491 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6492 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006493 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006494 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6495 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6496 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006497 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6498 ld_i386_emulation="$emu"
6499 roms="optionrom"
6500 break
6501 fi
6502 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006503fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006504
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006505# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006506if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006507 write_c_skeleton
6508 if compile_prog "-march=z900" ""; then
6509 roms="$roms s390-ccw"
6510 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006511fi
6512
Richard Henderson964c6fa2013-06-21 19:10:16 -07006513# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006514if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006515 textseg_addr=
6516 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006517 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6518 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006519 textseg_addr=0x60000000
6520 ;;
6521 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006522 # A 256M aligned address, high in the address space, with enough
6523 # room for the code_gen_buffer above it before the stack.
6524 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006525 ;;
6526 esac
6527 if [ -n "$textseg_addr" ]; then
6528 cat > $TMPC <<EOF
6529 int main(void) { return 0; }
6530EOF
6531 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6532 if ! compile_prog "" "$textseg_ldflags"; then
6533 # In case ld does not support -Ttext-segment, edit the default linker
6534 # script via sed to set the .text start addr. This is needed on FreeBSD
6535 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006536 if ! $ld --verbose >/dev/null 2>&1; then
6537 error_exit \
6538 "We need to link the QEMU user mode binaries at a" \
6539 "specific text address. Unfortunately your linker" \
6540 "doesn't support either the -Ttext-segment option or" \
6541 "printing the default linker script with --verbose." \
6542 "If you don't want the user mode binaries, pass the" \
6543 "--disable-user option to configure."
6544 fi
6545
Richard Henderson964c6fa2013-06-21 19:10:16 -07006546 $ld --verbose | sed \
6547 -e '1,/==================================================/d' \
6548 -e '/==================================================/,$d' \
6549 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6550 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6551 textseg_ldflags="-Wl,-T../config-host.ld"
6552 fi
6553 fi
6554fi
6555
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006556# Check that the C++ compiler exists and works with the C compiler.
6557# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6558if has $cxx; then
6559 cat > $TMPC <<EOF
6560int c_function(void);
6561int main(void) { return c_function(); }
6562EOF
6563
6564 compile_object
6565
6566 cat > $TMPCXX <<EOF
6567extern "C" {
6568 int c_function(void);
6569}
6570int c_function(void) { return 42; }
6571EOF
6572
6573 update_cxxflags
6574
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006575 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006576 # C++ compiler $cxx works ok with C compiler $cc
6577 :
6578 else
6579 echo "C++ compiler $cxx does not work with C compiler $cc"
6580 echo "Disabling C++ specific optional code"
6581 cxx=
6582 fi
6583else
6584 echo "No C++ compiler available; disabling C++ specific optional code"
6585 cxx=
6586fi
6587
Cole Robinson02d34f62016-05-06 14:03:09 -04006588echo_version() {
6589 if test "$1" = "yes" ; then
6590 echo "($2)"
6591 fi
6592}
6593
Jan Kiszka50e12062014-10-02 10:03:55 +02006594# prepend pixman and ftd flags after all config tests are done
6595QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006596QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006597libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006598
bellard43ce4df2003-06-09 19:53:12 +00006599echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006600echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006601echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006602echo "binary directory $(eval echo $bindir)"
6603echo "library directory $(eval echo $libdir)"
6604echo "module directory $(eval echo $qemu_moddir)"
6605echo "libexec directory $(eval echo $libexecdir)"
6606echo "include directory $(eval echo $includedir)"
6607echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006608if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006609echo "local state directory $(eval echo $local_statedir)"
6610echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006611echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006612else
6613echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006614echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006615fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006616echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006617echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006618echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006619echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006620echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006621echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006622echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006623echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006624echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006625echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006626echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006627echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006628echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006629echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006630echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006631if test "$docs" != "no"; then
6632 echo "sphinx-build $sphinx_build"
6633fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006634echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006635echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6636if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006637 echo "smbd $smbd"
6638fi
Fam Zheng17969262014-02-10 14:48:56 +08006639echo "module support $modules"
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006640echo "alt path mod load $module_upgrades"
bellard43ce4df2003-06-09 19:53:12 +00006641echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006642echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006643echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006644echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006645echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006646echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006647echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006648echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006649if test "$darwin" = "yes" ; then
6650 echo "Cocoa support $cocoa"
6651fi
Stefan Weil89138852016-05-16 15:10:20 +02006652echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006653echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006654echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006655echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006656echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006657echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006658echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006659echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006660if test "$gcrypt" = "yes"
6661then
6662 echo " hmac $gcrypt_hmac"
6663 echo " XTS $gcrypt_xts"
6664fi
Stefan Weil89138852016-05-16 15:10:20 +02006665echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006666if test "$nettle" = "yes"
6667then
6668 echo " XTS $nettle_xts"
6669fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006670echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006671echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006672echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006673echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006674echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006675echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006676echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006677echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006678echo "Block whitelist (rw) $block_drv_rw_whitelist"
6679echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306680echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006681echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006682echo "VNC support $vnc"
6683if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006684 echo "VNC SASL support $vnc_sasl"
6685 echo "VNC JPEG support $vnc_jpeg"
6686 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006687fi
aliguorie37630c2009-04-22 15:19:10 +00006688echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006689if test "$xen" = "yes" ; then
6690 echo "xen ctrl version $xen_ctrl_version"
6691fi
aurel322e4d9fb2008-04-08 06:01:02 +00006692echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006693echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006694echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006695echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006696echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006697echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006698echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006699echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006700echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006701echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006702echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006703echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006704echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006705echo "TCG support $tcg"
6706if test "$tcg" = "yes" ; then
6707 echo "TCG debug enabled $debug_tcg"
6708 echo "TCG interpreter $tcg_interpreter"
6709fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006710echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006711echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006712echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006713echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006714echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006715echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006716echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006717echo "madvise $madvise"
6718echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006719echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006720echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006721echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006722echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006723echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006724echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006725echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006726echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006727echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006728if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006729echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006730fi
Stefan Weil89138852016-05-16 15:10:20 +02006731echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006732echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006733echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006734echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006735echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006736echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006737echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006738echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006739echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006740echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006741echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006742echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006743echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006744echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006745echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006746echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006747echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006748echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006749echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006750echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306751echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006752echo "gcov $gcov_tool"
6753echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006754echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006755echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006756echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006757echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006758echo "lzo support $lzo"
6759echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006760echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006761echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006762echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006763echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006764echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006765echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006766echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006767echo "avx2 optimization $avx2_opt"
Robert Hoo6b8cd442020-02-29 20:34:34 +08006768echo "avx512f optimization $avx512f_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006769echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006770echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006771echo "bochs support $bochs"
6772echo "cloop support $cloop"
6773echo "dmg support $dmg"
6774echo "qcow v1 support $qcow1"
6775echo "vdi support $vdi"
6776echo "vvfat support $vvfat"
6777echo "qed support $qed"
6778echo "parallels support $parallels"
6779echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006780echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006781echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006782echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006783echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006784echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006785echo "fuzzing support $fuzzing"
bellard67b915a2004-03-31 23:37:16 +00006786
Peter Maydell898be3e2017-03-21 14:31:57 +00006787if test "$supported_cpu" = "no"; then
6788 echo
6789 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6790 echo
6791 echo "CPU host architecture $cpu support is not currently maintained."
6792 echo "The QEMU project intends to remove support for this host CPU in"
6793 echo "a future release if nobody volunteers to maintain it and to"
6794 echo "provide a build host for our continuous integration setup."
6795 echo "configure has succeeded and you can continue to build, but"
6796 echo "if you care about QEMU on this platform you should contact"
6797 echo "us upstream at qemu-devel@nongnu.org."
6798fi
6799
6800if test "$supported_os" = "no"; then
6801 echo
6802 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6803 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006804 echo "Host OS $targetos support is not currently maintained."
6805 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006806 echo "a future release if nobody volunteers to maintain it and to"
6807 echo "provide a build host for our continuous integration setup."
6808 echo "configure has succeeded and you can continue to build, but"
6809 echo "if you care about QEMU on this platform you should contact"
6810 echo "us upstream at qemu-devel@nongnu.org."
6811fi
6812
Juan Quintela98ec69a2009-07-16 18:34:18 +02006813config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006814
Stefan Weildbd99ae2013-01-01 18:33:44 +01006815echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6816
Juan Quintela98ec69a2009-07-16 18:34:18 +02006817echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006818echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006819
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006820echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006821echo "prefix=$prefix" >> $config_host_mak
6822echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006823echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006824echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006825echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006826echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006827echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006828echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006829echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006830echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006831echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006832echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006833if test "$mingw32" = "no" ; then
6834 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6835fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006836echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006837echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006838echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006839echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006840echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006841echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006842echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006843echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006844echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006845
Juan Quintela98ec69a2009-07-16 18:34:18 +02006846echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006847
Paolo Bonzinif3494742019-01-23 14:56:17 +08006848if test "$default_devices" = "yes" ; then
6849 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6850else
6851 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6852fi
aurel32f8393942009-04-13 18:45:38 +00006853if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006854 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006855fi
aliguori1625af82009-04-05 17:41:02 +00006856if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006857 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006858fi
bellard7d132992003-03-06 23:23:54 +00006859if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006860 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006861fi
bellard67b915a2004-03-31 23:37:16 +00006862if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006863 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006864 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006865 version_major=${rc_version%%.*}
6866 rc_version=${rc_version#*.}
6867 version_minor=${rc_version%%.*}
6868 rc_version=${rc_version#*.}
6869 version_subminor=${rc_version%%.*}
6870 version_micro=0
6871 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6872 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006873 if test "$guest_agent_with_vss" = "yes" ; then
6874 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006875 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006876 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6877 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006878 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006879 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006880 fi
Michael Roth1a349042015-08-26 11:14:31 -05006881 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006882 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006883 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6884 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6885 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6886 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6887 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6888 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6889 fi
pbrook210fa552007-02-27 21:04:49 +00006890else
Juan Quintela35f4df22009-07-27 16:13:07 +02006891 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006892fi
blueswir1128ab2f2008-08-15 18:33:42 +00006893
Mark McLoughlindffcb712009-10-22 17:49:11 +01006894if test "$linux" = "yes" ; then
6895 echo "CONFIG_LINUX=y" >> $config_host_mak
6896fi
6897
bellard83fb7ad2004-07-05 21:25:26 +00006898if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006899 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006900fi
malcb29fe3e2008-11-18 01:42:22 +00006901
bellardec530c82006-04-25 22:36:06 +00006902if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006903 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006904fi
Andreas Färber179cf402010-09-20 00:50:43 +02006905if test "$haiku" = "yes" ; then
6906 echo "CONFIG_HAIKU=y" >> $config_host_mak
6907fi
bellard97a847b2003-08-10 21:36:04 +00006908if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006909 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006910fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006911if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006912 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006913fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006914if test "$want_tools" = "yes" ; then
6915 echo "CONFIG_TOOLS=y" >> $config_host_mak
6916fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006917if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006918 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006919 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006920 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6921 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6922fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006923if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006924 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006925fi
ths8a16d272008-07-19 09:56:24 +00006926if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006927 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006928 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006929fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006930if test "$netmap" = "yes" ; then
6931 echo "CONFIG_NETMAP=y" >> $config_host_mak
6932fi
Gonglei015a33b2014-07-01 20:58:08 +08006933if test "$l2tpv3" = "yes" ; then
6934 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6935fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006936if test "$gprof" = "yes" ; then
6937 echo "CONFIG_GPROF=y" >> $config_host_mak
6938fi
Corey Bryant47e98652012-01-26 09:42:26 -05006939if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006940 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006941fi
Juan Quintela2358a492009-07-27 16:13:25 +02006942echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006943for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006944 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006945 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006946 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006947 echo "$def=m" >> $config_host_mak ;;
6948 *)
6949 echo "$def=y" >> $config_host_mak ;;
6950 esac
malc0c58ac12008-06-25 21:04:05 +00006951done
Fam Zhengb1149912017-09-07 16:29:13 +08006952echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6953echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6954echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6955echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6956echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006957if test "$audio_win_int" = "yes" ; then
6958 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6959fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006960echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6961echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006962if test "$vnc" = "yes" ; then
6963 echo "CONFIG_VNC=y" >> $config_host_mak
6964fi
aliguori2f9606b2009-03-06 20:27:28 +00006965if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006966 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006967fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006968if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006969 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006970fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006971if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006972 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006973fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006974if test "$xkbcommon" = "yes" ; then
6975 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6976 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6977fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006978if test "$xfs" = "yes" ; then
6979 echo "CONFIG_XFS=y" >> $config_host_mak
6980fi
Stefan Weil89138852016-05-16 15:10:20 +02006981qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006982echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006983echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006984echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006985echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006986if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006987 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006988fi
Fam Zheng17969262014-02-10 14:48:56 +08006989if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006990 # $shacmd can generate a hash started with digit, which the compiler doesn't
6991 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006992 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006993 echo "CONFIG_MODULES=y" >> $config_host_mak
6994fi
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006995if test "$module_upgrades" = "yes"; then
6996 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6997fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006998if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006999 echo "CONFIG_X11=y" >> $config_host_mak
7000 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
7001 echo "X11_LIBS=$x11_libs" >> $config_host_mak
7002fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02007003if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01007004 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02007005 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08007006 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00007007 if test "$sdl_image" = "yes" ; then
7008 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
7009 fi
bellard49ecc3f2007-11-07 19:25:15 +00007010fi
7011if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007012 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00007013fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01007014if test "$iconv" = "yes" ; then
7015 echo "CONFIG_ICONV=y" >> $config_host_mak
7016 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7017 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7018fi
balrog4d3b6f62008-02-10 16:33:14 +00007019if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01007020 echo "CONFIG_CURSES=m" >> $config_host_mak
7021 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7022 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00007023fi
Riku Voipio099d6b02009-05-05 12:10:04 +03007024if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007025 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03007026fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01007027if test "$accept4" = "yes" ; then
7028 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7029fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05307030if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007031 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05307032fi
Riku Voipioc2882b92009-08-12 15:08:24 +03007033if test "$eventfd" = "yes" ; then
7034 echo "CONFIG_EVENTFD=y" >> $config_host_mak
7035fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02007036if test "$memfd" = "yes" ; then
7037 echo "CONFIG_MEMFD=y" >> $config_host_mak
7038fi
Cortland Tölva955727d2018-10-08 09:35:19 -07007039if test "$have_usbfs" = "yes" ; then
7040 echo "CONFIG_USBFS=y" >> $config_host_mak
7041fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007042if test "$fallocate" = "yes" ; then
7043 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7044fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01007045if test "$fallocate_punch_hole" = "yes" ; then
7046 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7047fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03007048if test "$fallocate_zero_range" = "yes" ; then
7049 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7050fi
Kevin Wolfed911432014-09-29 17:12:59 +02007051if test "$posix_fallocate" = "yes" ; then
7052 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7053fi
Peter Maydellc727f472011-01-06 11:05:10 +00007054if test "$sync_file_range" = "yes" ; then
7055 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7056fi
Peter Maydelldace20d2011-01-10 13:11:24 +00007057if test "$fiemap" = "yes" ; then
7058 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7059fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007060if test "$dup3" = "yes" ; then
7061 echo "CONFIG_DUP3=y" >> $config_host_mak
7062fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01007063if test "$ppoll" = "yes" ; then
7064 echo "CONFIG_PPOLL=y" >> $config_host_mak
7065fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007066if test "$prctl_pr_set_timerslack" = "yes" ; then
7067 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7068fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007069if test "$epoll" = "yes" ; then
7070 echo "CONFIG_EPOLL=y" >> $config_host_mak
7071fi
7072if test "$epoll_create1" = "yes" ; then
7073 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7074fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007075if test "$sendfile" = "yes" ; then
7076 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7077fi
Riku Voipio51834342014-06-22 11:25:42 +01007078if test "$timerfd" = "yes" ; then
7079 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7080fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007081if test "$setns" = "yes" ; then
7082 echo "CONFIG_SETNS=y" >> $config_host_mak
7083fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007084if test "$clock_adjtime" = "yes" ; then
7085 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7086fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007087if test "$syncfs" = "yes" ; then
7088 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7089fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007090if test "$kcov" = "yes" ; then
7091 echo "CONFIG_KCOV=y" >> $config_host_mak
7092fi
aurel323b3f24a2009-04-15 16:12:13 +00007093if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007094 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007095fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007096if test "$inotify1" = "yes" ; then
7097 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7098fi
Peter Maydell401bc052017-09-05 13:19:32 +01007099if test "$sem_timedwait" = "yes" ; then
7100 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7101fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007102if test "$strchrnul" = "yes" ; then
7103 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7104fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007105if test "$st_atim" = "yes" ; then
7106 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7107fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007108if test "$byteswap_h" = "yes" ; then
7109 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7110fi
7111if test "$bswap_h" = "yes" ; then
7112 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7113fi
Alexander Graf769ce762009-05-11 17:41:42 +02007114if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007115 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007116 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007117 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007118fi
aurel322e4d9fb2008-04-08 06:01:02 +00007119if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007120 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007121 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007122fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007123if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007124 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007125 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007126 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007127 if test "$gtk_gl" = "yes" ; then
7128 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7129 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007130fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007131if test "$gio" = "yes" ; then
7132 echo "CONFIG_GIO=y" >> $config_host_mak
7133 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7134 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007135 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007136fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007137echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007138if test "$gnutls" = "yes" ; then
7139 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7140fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007141if test "$gcrypt" = "yes" ; then
7142 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007143 if test "$gcrypt_hmac" = "yes" ; then
7144 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7145 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007146fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007147if test "$nettle" = "yes" ; then
7148 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007149 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007150fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007151if test "$qemu_private_xts" = "yes" ; then
7152 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7153fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007154if test "$tasn1" = "yes" ; then
7155 echo "CONFIG_TASN1=y" >> $config_host_mak
7156fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007157if test "$auth_pam" = "yes" ; then
7158 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7159fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007160if test "$have_ifaddrs_h" = "yes" ; then
7161 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7162fi
Eric Blake6b39b062016-10-11 10:46:23 -05007163if test "$have_broken_size_max" = "yes" ; then
7164 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7165fi
Jan Vesely277abf12016-04-29 13:15:23 -04007166
7167# Work around a system header bug with some kernel/XFS header
7168# versions where they both try to define 'struct fsxattr':
7169# xfs headers will not try to redefine structs from linux headers
7170# if this macro is set.
7171if test "$have_fsxattr" = "yes" ; then
7172 echo "HAVE_FSXATTR=y" >> $config_host_mak
7173fi
Fam Zheng1efad062018-06-01 17:26:43 +08007174if test "$have_copy_file_range" = "yes" ; then
7175 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7176fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007177if test "$vte" = "yes" ; then
7178 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007179 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007180 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007181fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007182if test "$virglrenderer" = "yes" ; then
7183 echo "CONFIG_VIRGL=y" >> $config_host_mak
7184 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7185 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7186fi
aliguorie37630c2009-04-22 15:19:10 +00007187if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007188 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007189 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007190fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007191if test "$linux_aio" = "yes" ; then
7192 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7193fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007194if test "$linux_io_uring" = "yes" ; then
7195 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7196 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7197 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7198fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007199if test "$attr" = "yes" ; then
7200 echo "CONFIG_ATTR=y" >> $config_host_mak
7201fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007202if test "$libattr" = "yes" ; then
7203 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7204fi
Meador Inge983eef52012-02-24 14:00:42 +05307205if test "$virtfs" = "yes" ; then
7206 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007207fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007208if test "$mpath" = "yes" ; then
7209 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007210 if test "$mpathpersist_new_api" = "yes"; then
7211 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7212 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007213fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007214if test "$vhost_scsi" = "yes" ; then
7215 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7216fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007217if test "$vhost_net" = "yes" ; then
7218 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7219fi
7220if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007221 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007222fi
Gonglei042cea22018-03-01 21:46:28 +08007223if test "$vhost_crypto" = "yes" ; then
7224 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7225fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007226if test "$vhost_vsock" = "yes" ; then
7227 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7228fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007229if test "$vhost_kernel" = "yes" ; then
7230 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7231fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007232if test "$vhost_user" = "yes" ; then
7233 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7234fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007235if test "$vhost_user_fs" = "yes" ; then
7236 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7237fi
ths77755342008-11-27 15:45:16 +00007238if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007239 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007240fi
aliguoribf9298b2008-12-05 20:05:26 +00007241if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007242 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007243fi
aliguoriceb42de2009-04-07 18:43:28 +00007244if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007245 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007246fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007247if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007248 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007249fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007250if test "$membarrier" = "yes" ; then
7251 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7252fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007253if test "$signalfd" = "yes" ; then
7254 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7255fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007256if test "$optreset" = "yes" ; then
7257 echo "HAVE_OPTRESET=y" >> $config_host_mak
7258fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007259if test "$tcg" = "yes"; then
7260 echo "CONFIG_TCG=y" >> $config_host_mak
7261 if test "$tcg_interpreter" = "yes" ; then
7262 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7263 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007264fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007265if test "$fdatasync" = "yes" ; then
7266 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7267fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007268if test "$madvise" = "yes" ; then
7269 echo "CONFIG_MADVISE=y" >> $config_host_mak
7270fi
7271if test "$posix_madvise" = "yes" ; then
7272 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7273fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007274if test "$posix_memalign" = "yes" ; then
7275 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7276fi
bellard97a847b2003-08-10 21:36:04 +00007277
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007278if test "$spice" = "yes" ; then
7279 echo "CONFIG_SPICE=y" >> $config_host_mak
7280fi
7281
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007282if test "$smartcard" = "yes" ; then
7283 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007284 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7285 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007286fi
7287
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007288if test "$libusb" = "yes" ; then
7289 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007290 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7291 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007292fi
7293
Hans de Goede69354a82011-07-19 11:04:10 +02007294if test "$usb_redir" = "yes" ; then
7295 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007296 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7297 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007298fi
7299
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007300if test "$opengl" = "yes" ; then
7301 echo "CONFIG_OPENGL=y" >> $config_host_mak
7302 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007303 if test "$opengl_dmabuf" = "yes" ; then
7304 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7305 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007306fi
7307
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007308if test "$gbm" = "yes" ; then
7309 echo "CONFIG_GBM=y" >> $config_host_mak
7310 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7311 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7312fi
7313
7314
Yang Zhong5a22ab72017-12-20 21:16:46 +08007315if test "$malloc_trim" = "yes" ; then
7316 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7317fi
7318
Liang Li99f2dbd2016-03-08 13:53:16 +08007319if test "$avx2_opt" = "yes" ; then
7320 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7321fi
7322
Robert Hoo6b8cd442020-02-29 20:34:34 +08007323if test "$avx512f_opt" = "yes" ; then
7324 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7325fi
7326
qiaonuohan607dacd2014-02-18 14:11:30 +08007327if test "$lzo" = "yes" ; then
7328 echo "CONFIG_LZO=y" >> $config_host_mak
7329fi
7330
7331if test "$snappy" = "yes" ; then
7332 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7333fi
7334
Peter Wu6b383c02015-01-06 18:48:14 +01007335if test "$bzip2" = "yes" ; then
7336 echo "CONFIG_BZIP2=y" >> $config_host_mak
7337 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7338fi
7339
Julio Faracco83bc1f92018-11-05 13:08:04 -02007340if test "$lzfse" = "yes" ; then
7341 echo "CONFIG_LZFSE=y" >> $config_host_mak
7342 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7343fi
7344
Juan Quintela3a678482019-12-17 21:15:24 +01007345if test "$zstd" = "yes" ; then
7346 echo "CONFIG_ZSTD=y" >> $config_host_mak
7347fi
7348
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007349if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007350 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007351 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7352 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007353fi
7354
Peter Lieven6542aa92014-02-03 10:26:13 +01007355if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007356 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7357 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007358fi
7359
Eduardo Otubof7945732012-08-14 18:44:05 -03007360if test "$seccomp" = "yes"; then
7361 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007362 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7363 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007364fi
7365
bellard83fb7ad2004-07-05 21:25:26 +00007366# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007367if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007368 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007369fi
7370
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007371if test "$localtime_r" = "yes" ; then
7372 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7373fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007374if test "$qom_cast_debug" = "yes" ; then
7375 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7376fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007377if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007378 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007379 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7380 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007381fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007382
Peter Maydell7c2acc72013-04-08 12:11:27 +01007383echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007384if test "$coroutine_pool" = "yes" ; then
7385 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7386else
7387 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7388fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307389
Peter Lieven7d992e42016-09-27 11:58:45 +02007390if test "$debug_stack_usage" = "yes" ; then
7391 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7392fi
7393
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007394if test "$crypto_afalg" = "yes" ; then
7395 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7396fi
7397
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307398if test "$open_by_handle_at" = "yes" ; then
7399 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7400fi
7401
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307402if test "$linux_magic_h" = "yes" ; then
7403 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7404fi
7405
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007406if test "$pragma_diagnostic_available" = "yes" ; then
7407 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007408fi
7409
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007410if test "$valgrind_h" = "yes" ; then
7411 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7412fi
7413
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007414if test "$have_asan_iface_fiber" = "yes" ; then
7415 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7416fi
7417
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007418if test "$has_environ" = "yes" ; then
7419 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7420fi
7421
Richard Henderson76a347e2012-12-28 14:17:02 -08007422if test "$cpuid_h" = "yes" ; then
7423 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7424fi
7425
Richard Hendersonf5401662013-02-16 12:46:59 -08007426if test "$int128" = "yes" ; then
7427 echo "CONFIG_INT128=y" >> $config_host_mak
7428fi
7429
Richard Henderson7ebee432016-06-29 21:10:59 -07007430if test "$atomic128" = "yes" ; then
7431 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7432fi
7433
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007434if test "$cmpxchg128" = "yes" ; then
7435 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7436fi
7437
Richard Hendersondf79b992016-09-02 12:23:57 -07007438if test "$atomic64" = "yes" ; then
7439 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7440fi
7441
Richard Hendersondb432672017-09-15 14:11:45 -07007442if test "$vector16" = "yes" ; then
7443 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7444fi
7445
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007446if test "$attralias" = "yes" ; then
7447 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7448fi
7449
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007450if test "$getauxval" = "yes" ; then
7451 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7452fi
7453
Bharata B Raoeb100392012-09-24 14:42:45 +05307454if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007455 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007456 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7457 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307458fi
7459
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007460if test "$glusterfs_xlator_opt" = "yes" ; then
7461 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7462fi
7463
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307464if test "$glusterfs_discard" = "yes" ; then
7465 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7466fi
7467
Niels de Vosdf3a4292017-05-28 12:01:14 +05307468if test "$glusterfs_fallocate" = "yes" ; then
7469 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7470fi
7471
Bharata B Rao7c815372013-12-21 14:51:25 +05307472if test "$glusterfs_zerofill" = "yes" ; then
7473 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7474fi
7475
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007476if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7477 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7478fi
7479
Niels de Vos0e3b8912019-03-05 16:46:34 +01007480if test "$glusterfs_iocb_has_stat" = "yes" ; then
7481 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7482fi
7483
Pino Toscanob10d49d2019-06-20 22:08:40 +02007484if test "$libssh" = "yes" ; then
7485 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7486 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7487 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007488fi
7489
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007490if test "$live_block_migration" = "yes" ; then
7491 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7492fi
7493
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007494if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007495 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007496fi
7497
Lluís Vilanova5b808272014-05-27 15:02:14 +02007498echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7499if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007500 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307501fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007502if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007503 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7504 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007505 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007506fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007507if have_backend "log"; then
7508 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007509fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007510if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007511 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7512fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007513if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007514 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7515 if test "$trace_backend_stap" = "yes" ; then
7516 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7517 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007518fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007519if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007520 if test "$linux" = "yes" ; then
7521 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007522 else
Stewart Smith21684af2014-01-24 12:39:10 +11007523 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007524 fi
7525fi
Paul Durrant0a852412016-08-04 14:44:14 +01007526if have_backend "syslog"; then
7527 if test "$posix_syslog" = "yes" ; then
7528 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7529 else
7530 feature_not_found "syslog(trace backend)" "syslog not available"
7531 fi
7532fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007533echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7534
Michael R. Hines2da776d2013-07-22 10:01:54 -04007535if test "$rdma" = "yes" ; then
7536 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007537 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007538fi
7539
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007540if test "$pvrdma" = "yes" ; then
7541 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7542fi
7543
Laurent Vivier575b22b2016-06-02 22:14:15 +02007544if test "$have_rtnetlink" = "yes" ; then
7545 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7546fi
7547
Klim Kireeved279a02018-01-12 12:01:19 +03007548if test "$libxml2" = "yes" ; then
7549 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7550 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7551 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7552fi
7553
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007554if test "$replication" = "yes" ; then
7555 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7556fi
7557
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007558if test "$have_af_vsock" = "yes" ; then
7559 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7560fi
7561
Christopher Covington4d043512016-12-28 15:04:33 -05007562if test "$have_sysmacros" = "yes" ; then
7563 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7564fi
7565
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007566if test "$have_static_assert" = "yes" ; then
7567 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7568fi
7569
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007570if test "$have_utmpx" = "yes" ; then
7571 echo "HAVE_UTMPX=y" >> $config_host_mak
7572fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007573if test "$have_getrandom" = "yes" ; then
7574 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7575fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007576if test "$ivshmem" = "yes" ; then
7577 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7578fi
Richard Hendersone219c492017-09-28 09:01:23 -07007579if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007580 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7581fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007582if test "$debug_mutex" = "yes" ; then
7583 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7584fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007585
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007586# Hold two types of flag:
7587# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7588# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007589# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007590# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007591if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007592 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007593 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7594elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7595 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7596 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007597fi
7598
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007599if test "$vxhs" = "yes" ; then
7600 echo "CONFIG_VXHS=y" >> $config_host_mak
7601 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7602fi
7603
Junyan He17824402018-07-18 15:47:59 +08007604if test "$libpmem" = "yes" ; then
7605 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7606fi
7607
Jeff Cody2f740132018-11-07 07:36:44 +01007608if test "$bochs" = "yes" ; then
7609 echo "CONFIG_BOCHS=y" >> $config_host_mak
7610fi
7611if test "$cloop" = "yes" ; then
7612 echo "CONFIG_CLOOP=y" >> $config_host_mak
7613fi
7614if test "$dmg" = "yes" ; then
7615 echo "CONFIG_DMG=y" >> $config_host_mak
7616fi
7617if test "$qcow1" = "yes" ; then
7618 echo "CONFIG_QCOW1=y" >> $config_host_mak
7619fi
7620if test "$vdi" = "yes" ; then
7621 echo "CONFIG_VDI=y" >> $config_host_mak
7622fi
7623if test "$vvfat" = "yes" ; then
7624 echo "CONFIG_VVFAT=y" >> $config_host_mak
7625fi
7626if test "$qed" = "yes" ; then
7627 echo "CONFIG_QED=y" >> $config_host_mak
7628fi
7629if test "$parallels" = "yes" ; then
7630 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7631fi
7632if test "$sheepdog" = "yes" ; then
7633 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7634fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007635if test "$fuzzing" = "yes" ; then
7636 if test "$have_fuzzer" = "yes"; then
7637 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7638 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7639 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7640 else
7641 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7642 exit 1
7643 fi
7644fi
Jeff Cody2f740132018-11-07 07:36:44 +01007645
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007646if test "$plugins" = "yes" ; then
7647 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7648 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007649 # Copy the export object list to the build dir
7650 if test "$ld_dynamic_list" = "yes" ; then
7651 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7652 ld_symbols=qemu-plugins-ld.symbols
7653 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7654 elif test "$ld_exported_symbols_list" = "yes" ; then
7655 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7656 ld64_symbols=qemu-plugins-ld64.symbols
7657 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7658 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7659 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7660 else
7661 error_exit \
7662 "If \$plugins=yes, either \$ld_dynamic_list or " \
7663 "\$ld_exported_symbols_list should have been set to 'yes'."
7664 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007665fi
7666
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007667if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007668 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007669elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007670 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007671elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007672 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007673elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007674 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007675elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007676 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007677elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007678 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007679else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007680 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007681fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007682
Juan Quintela98ec69a2009-07-16 18:34:18 +02007683echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007684echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007685echo "MAKE=$make" >> $config_host_mak
7686echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007687echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7688echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007689echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7690echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007691echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007692echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007693echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007694echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007695if $iasl -h > /dev/null 2>&1; then
7696 echo "IASL=$iasl" >> $config_host_mak
7697fi
Juan Quintela804edf22009-07-27 16:12:49 +02007698echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007699echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007700echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007701echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007702echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007703echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007704echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007705echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007706echo "OBJCOPY=$objcopy" >> $config_host_mak
7707echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007708echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007709echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007710echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007711echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007712echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007713echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007714echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007715echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007716echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007717if test "$sparse" = "yes" ; then
7718 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007719 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007720 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007721 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7722 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7723fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007724echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007725echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007726echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007727echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007728echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007729echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007730echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007731echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007732echo "DSOSUF=$DSOSUF" >> $config_host_mak
7733echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007734echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007735echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7736echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007737echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007738if test "$gcov" = "yes" ; then
7739 echo "CONFIG_GCOV=y" >> $config_host_mak
7740 echo "GCOV=$gcov_tool" >> $config_host_mak
7741fi
Juan Quintela804edf22009-07-27 16:12:49 +02007742
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007743if test "$libudev" != "no"; then
7744 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7745 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7746fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007747if test "$fuzzing" != "no"; then
7748 echo "CONFIG_FUZZ=y" >> $config_host_mak
7749 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7750 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7751fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007752
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007753if test "$edk2_blobs" = "yes" ; then
7754 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7755fi
7756
Peter Maydell6efd7512011-11-30 11:59:04 +00007757# use included Linux headers
7758if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007759 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007760 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007761 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007762 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007763 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007764 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007765 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007766 ;;
7767 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007768 linux_arch=s390
7769 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007770 aarch64)
7771 linux_arch=arm64
7772 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007773 mips64)
7774 linux_arch=mips
7775 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007776 *)
7777 # For most CPUs the kernel architecture name and QEMU CPU name match.
7778 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007779 ;;
7780 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007781 # For non-KVM architectures we will not have asm headers
7782 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7783 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7784 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007785fi
7786
bellard1d14ffa2005-10-30 18:58:22 +00007787for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007788target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007789config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007790target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007791target_aligned_only="no"
7792case "$target_name" in
7793 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7794 target_aligned_only="yes"
7795 ;;
7796esac
bellard97a847b2003-08-10 21:36:04 +00007797target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007798case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007799 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 +00007800 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007801 ;;
7802esac
bellard97a847b2003-08-10 21:36:04 +00007803target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007804target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007805target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007806target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007807case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007808 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007809 target_softmmu="yes"
7810 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007811 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007812 target_user_only="yes"
7813 target_linux_user="yes"
7814 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007815 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007816 target_user_only="yes"
7817 target_bsd_user="yes"
7818 ;;
pbrook9e407a82007-05-26 16:38:53 +00007819 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007820 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007821 exit 1
7822 ;;
7823esac
ths831b7822007-01-18 20:06:33 +00007824
bellard97a847b2003-08-10 21:36:04 +00007825mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007826echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007827
pbrooke5fe0c52006-06-11 13:32:59 +00007828bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007829mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007830interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007831gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007832
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007833TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007834TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007835TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007836
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007837case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007838 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007839 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307840 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007841 ;;
7842 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007843 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007844 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307845 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007846 ;;
7847 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007848 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00007849 ;;
7850 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007851 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007852 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007853 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007854 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007855 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007856 aarch64|aarch64_be)
7857 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007858 TARGET_BASE_ARCH=arm
7859 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007860 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007861 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 +01007862 ;;
aurel322408a522008-04-20 20:19:44 +00007863 cris)
aurel322408a522008-04-20 20:19:44 +00007864 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007865 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007866 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08007867 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007868 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007869 ;;
aurel322408a522008-04-20 20:19:44 +00007870 m68k)
aurel322408a522008-04-20 20:19:44 +00007871 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007872 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00007873 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007874 microblaze|microblazeel)
7875 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007876 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007877 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007878 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007879 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007880 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007881 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007882 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007883 ;;
7884 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007885 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007886 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007887 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007888 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007889 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007890 ;;
7891 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007892 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007893 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007894 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007895 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007896 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007897 moxie)
7898 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007899 nios2)
7900 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007901 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007902 TARGET_ARCH=openrisc
7903 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007904 ;;
aurel322408a522008-04-20 20:19:44 +00007905 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007906 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007907 ;;
aurel322408a522008-04-20 20:19:44 +00007908 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007909 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007910 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307911 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007912 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007913 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007914 ppc64le)
7915 TARGET_ARCH=ppc64
7916 TARGET_BASE_ARCH=ppc
7917 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307918 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007919 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Doug Kwan9c351262014-05-29 09:12:21 -05007920 ;;
aurel322408a522008-04-20 20:19:44 +00007921 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007922 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007923 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007924 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007925 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007926 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007927 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007928 riscv32)
7929 TARGET_BASE_ARCH=riscv
7930 TARGET_ABI_DIR=riscv
7931 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007932 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 +13007933 ;;
7934 riscv64)
7935 TARGET_BASE_ARCH=riscv
7936 TARGET_ABI_DIR=riscv
7937 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007938 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 +13007939 ;;
aurel322408a522008-04-20 20:19:44 +00007940 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007941 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007942 bflt="yes"
7943 ;;
7944 sparc)
aurel322408a522008-04-20 20:19:44 +00007945 ;;
7946 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007947 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007948 ;;
7949 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007950 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007951 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007952 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02007953 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007954 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007955 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007956 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007957 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 +01007958 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007959 tilegx)
7960 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007961 tricore)
7962 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007963 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007964 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007965 xtensa|xtensaeb)
7966 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007967 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007968 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007969 ;;
aurel322408a522008-04-20 20:19:44 +00007970 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007971 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007972 ;;
7973esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007974# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7975if [ "$TARGET_BASE_ARCH" = "" ]; then
7976 TARGET_BASE_ARCH=$TARGET_ARCH
7977fi
7978
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007979symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7980
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007981upper() {
7982 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7983}
7984
Stefan Weil89138852016-05-16 15:10:20 +02007985target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007986echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007987echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007988echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007989if [ "$TARGET_ABI_DIR" = "" ]; then
7990 TARGET_ABI_DIR=$TARGET_ARCH
7991fi
Juan Quintela25be2102009-10-07 02:41:00 +02007992echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007993if [ "$HOST_VARIANT_DIR" != "" ]; then
7994 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7995fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007996
7997if supported_xen_target $target; then
7998 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007999 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008000 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00008001 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02008002 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08008003else
8004 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008005fi
8006if supported_kvm_target $target; then
8007 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08008008 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
8009else
8010 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02008011fi
8012if supported_hax_target $target; then
8013 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01008014fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05008015if supported_hvf_target $target; then
8016 echo "CONFIG_HVF=y" >> $config_target_mak
8017fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08008018if supported_whpx_target $target; then
8019 echo "CONFIG_WHPX=y" >> $config_target_mak
8020fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00008021if test "$target_aligned_only" = "yes" ; then
8022 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8023fi
bellardde83cd02003-06-15 20:25:43 +00008024if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008025 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00008026fi
8027if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008028 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00008029 if test "$mttcg" = "yes" ; then
8030 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8031 fi
bellardde83cd02003-06-15 20:25:43 +00008032fi
bellard997344f2003-10-27 21:10:39 +00008033if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008034 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01008035 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00008036fi
ths831b7822007-01-18 20:06:33 +00008037if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008038 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00008039fi
pbrook56aebc82008-10-11 17:55:29 +00008040list=""
8041if test ! -z "$gdb_xml_files" ; then
8042 for x in $gdb_xml_files; do
8043 list="$list $source_path/gdb-xml/$x"
8044 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02008045 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00008046fi
bellardde83cd02003-06-15 20:25:43 +00008047
Eric Blakee633a5c2019-02-04 20:39:37 -06008048if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02008049 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008050fi
blueswir184778502008-10-26 20:33:16 +00008051if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008052 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008053fi
bellard5b0753e2005-03-01 21:37:28 +00008054
Alex Bennée716a5072018-04-10 12:19:40 +01008055
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008056# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008057
Juan Quintela4afddb52009-08-03 14:46:45 +02008058cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008059ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008060
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008061disas_config() {
8062 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8063 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8064}
8065
Juan Quintela64656022009-08-03 14:46:53 +02008066for i in $ARCH $TARGET_BASE_ARCH ; do
8067 case "$i" in
8068 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008069 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008070 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008071 aarch64)
8072 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008073 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008074 fi
8075 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008076 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008077 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008078 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008079 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008080 fi
Juan Quintela64656022009-08-03 14:46:53 +02008081 ;;
8082 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008083 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008084 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008085 hppa)
8086 disas_config "HPPA"
8087 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008088 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008089 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008090 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008091 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008092 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008093 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008094 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008095 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008096 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008097 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008098 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008099 ;;
8100 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008101 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008102 if test -n "${cxx}"; then
8103 disas_config "NANOMIPS"
8104 fi
Juan Quintela64656022009-08-03 14:46:53 +02008105 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008106 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008107 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008108 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008109 nios2)
8110 disas_config "NIOS2"
8111 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008112 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008113 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008114 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008115 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008116 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008117 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008118 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008119 disas_config "RISCV"
8120 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008121 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008122 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008123 ;;
8124 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008125 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008126 ;;
8127 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008128 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008129 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008130 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008131 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008132 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008133 esac
8134done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008135if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008136 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008137fi
Juan Quintela64656022009-08-03 14:46:53 +02008138
Juan Quintela6ee71262009-08-03 14:46:47 +02008139case "$ARCH" in
8140alpha)
8141 # Ensure there's only a single GP
8142 cflags="-msmall-data $cflags"
8143;;
8144esac
8145
Juan Quintelad02c1db2009-08-03 14:46:50 +02008146if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008147 if test "$target_linux_user" = "yes" ; then
8148 cflags="-p $cflags"
8149 ldflags="-p $ldflags"
8150 fi
8151 if test "$target_softmmu" = "yes" ; then
8152 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02008153 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008154 fi
8155fi
8156
Eric Blakee633a5c2019-02-04 20:39:37 -06008157if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07008158 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02008159fi
Juan Quintelafa282482009-07-22 22:37:39 +02008160
Christian Borntraegere9a35912017-08-23 12:16:23 +02008161# Newer kernels on s390 check for an S390_PGSTE program header and
8162# enable the pgste page table extensions in that case. This makes
8163# the vm.allocate_pgste sysctl unnecessary. We enable this program
8164# header if
8165# - we build on s390x
8166# - we build the system emulation for s390x (qemu-system-s390x)
8167# - KVM is enabled
8168# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008169if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8170 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008171 if ld_has --s390-pgste ; then
8172 ldflags="-Wl,--s390-pgste $ldflags"
8173 fi
8174fi
8175
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008176echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02008177echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008178
bellard97a847b2003-08-10 21:36:04 +00008179done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008180
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008181echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8182echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8183
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008184if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008185 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008186fi
Richard Hendersone219c492017-09-28 09:01:23 -07008187if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008188 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008189fi
8190if test -n "$LIBCAPSTONE"; then
8191 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8192fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008193
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008194if test "$numa" = "yes"; then
8195 echo "CONFIG_NUMA=y" >> $config_host_mak
8196fi
8197
John Snowfd0e6052015-03-25 18:57:39 -04008198if test "$ccache_cpp2" = "yes"; then
8199 echo "export CCACHE_CPP2=y" >> $config_host_mak
8200fi
8201
Peter Maydelle29e5c62018-11-02 11:52:38 +00008202# If we're using a separate build tree, set it up now.
8203# DIRS are directories which we simply mkdir in the build tree;
8204# LINKS are things to symlink back into the source tree
8205# (these can be both files and directories).
8206# Caution: do not add files or directories here using wildcards. This
8207# will result in problems later if a new file matching the wildcard is
8208# added to the source tree -- nothing will cause configure to be rerun
8209# so the build tree will be missing the link back to the new file, and
8210# tests might fail. Prefer to keep the relevant files in their own
8211# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008212DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8213DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008214DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008215DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008216DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008217LINKS="Makefile"
8218LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8219LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008220LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008221LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008222LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8223LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8224LINKS="$LINKS pc-bios/qemu-icon.bmp"
8225LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008226LINKS="$LINKS tests/acceptance tests/data"
8227LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008228LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008229for bios_file in \
8230 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008231 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008232 $source_path/pc-bios/*.rom \
8233 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008234 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008235 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008236 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008237 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008238 $source_path/pc-bios/palcode-*
8239do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008240 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008241done
8242mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008243for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008244 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008245 symlink "$source_path/$f" "$f"
8246 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008247done
Paul Brook1ad21342009-05-19 16:17:58 +01008248
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008249(for i in $cross_cc_vars; do
8250 export $i
8251done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008252export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008253$source_path/tests/tcg/configure.sh)
8254
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008255# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008256for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008257 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008258 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008259 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008260 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008261 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008262 echo "CC=$cc" >> $config_mak
8263 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008264 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008265 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008266 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008267 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008268 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008269done
8270
Max Reitz76c75602014-05-24 23:24:56 +02008271# set up qemu-iotests in this build directory
8272iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008273
8274echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8275echo >> "$iotests_common_env"
8276echo "export PYTHON='$python'" >> "$iotests_common_env"
8277
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008278# Save the configure command line for later reuse.
8279cat <<EOD >config.status
8280#!/bin/sh
8281# Generated by configure.
8282# Run this file to recreate the current configuration.
8283# Compiler output produced by configure, useful for debugging
8284# configure, is in config.log if it exists.
8285EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008286
8287preserve_env() {
8288 envname=$1
8289
8290 eval envval=\$$envname
8291
8292 if test -n "$envval"
8293 then
8294 echo "$envname='$envval'" >> config.status
8295 echo "export $envname" >> config.status
8296 else
8297 echo "unset $envname" >> config.status
8298 fi
8299}
8300
8301# Preserve various env variables that influence what
8302# features/build target configure will detect
8303preserve_env AR
8304preserve_env AS
8305preserve_env CC
8306preserve_env CPP
8307preserve_env CXX
8308preserve_env INSTALL
8309preserve_env LD
8310preserve_env LD_LIBRARY_PATH
8311preserve_env LIBTOOL
8312preserve_env MAKE
8313preserve_env NM
8314preserve_env OBJCOPY
8315preserve_env PATH
8316preserve_env PKG_CONFIG
8317preserve_env PKG_CONFIG_LIBDIR
8318preserve_env PKG_CONFIG_PATH
8319preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008320preserve_env SDL2_CONFIG
8321preserve_env SMBD
8322preserve_env STRIP
8323preserve_env WINDRES
8324
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008325printf "exec" >>config.status
8326printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008327echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008328chmod +x config.status
8329
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008330rm -r "$TMPDIR1"