blob: 480e1d9af5f1f2420362d1accab7fca3bcaa10f5 [file] [log] [blame]
bellard7d132992003-03-06 23:23:54 +00001#!/bin/sh
2#
bellard3ef693a2003-03-23 20:17:16 +00003# qemu configure script (c) 2003 Fabrice Bellard
bellard7d132992003-03-06 23:23:54 +00004#
Peter Maydell8cd05ab2014-05-23 17:07:24 +01005
Cornelia Huck99519e62014-05-28 12:39:17 +02006# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
John Snow5e4dfd32015-10-28 13:56:40 -040011# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
Peter Maydell8cd05ab2014-05-23 17:07:24 +010014# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
bellard7d132992003-03-06 23:23:54 +000025fi
26
Peter Maydell8cd05ab2014-05-23 17:07:24 +010027TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
Don Slutz66518bf2014-01-02 21:12:46 -050029TMPO="${TMPDIR1}/${TMPB}.o"
Peter Maydell9c83ffd2014-02-25 18:27:49 +000030TMPCXX="${TMPDIR1}/${TMPB}.cxx"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010031TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010032TMPMO="${TMPDIR1}/${TMPB}.mo"
Emilio G. Cota26fffe22018-10-21 13:56:29 -040033TMPTXT="${TMPDIR1}/${TMPB}.txt"
bellard7d132992003-03-06 23:23:54 +000034
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020035rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000036
Peter Maydellb48e3612011-11-23 17:26:44 +000037# Print a helpful header at the top of config.log
38echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000039printf "# Configured with:" >> config.log
40printf " '%s'" "$0" "$@" >> config.log
41echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000042echo "#" >> config.log
43
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020044print_error() {
45 (echo
Peter Maydell76ad07a2013-04-08 12:11:26 +010046 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020051 echo) >&2
52}
53
54error_exit() {
55 print_error "$@"
Peter Maydell76ad07a2013-04-08 12:11:26 +010056 exit 1
57}
58
Peter Maydell9c83ffd2014-02-25 18:27:49 +000059do_compiler() {
60 # Run the compiler, capturing its output to the log. First argument
61 # is compiler binary to execute.
62 local compiler="$1"
63 shift
Ian Jackson8bbe05d2017-09-25 16:41:03 +010064 if test -n "$BASH_VERSION"; then eval '
65 echo >>config.log "
66funcs: ${FUNCNAME[*]}
67lines: ${BASH_LINENO[*]}"
68 '; fi
Peter Maydell9c83ffd2014-02-25 18:27:49 +000069 echo $compiler "$@" >> config.log
70 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010071 # Test passed. If this is an --enable-werror build, rerun
72 # the test with -Werror and bail out if it fails. This
73 # makes warning-generating-errors in configure test code
74 # obvious to developers.
75 if test "$werror" != "yes"; then
76 return 0
77 fi
78 # Don't bother rerunning the compile if we were already using -Werror
79 case "$*" in
80 *-Werror*)
81 return 0
82 ;;
83 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000084 echo $compiler -Werror "$@" >> config.log
85 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010086 error_exit "configure test passed without -Werror but failed with -Werror." \
87 "This is probably a bug in the configure script. The failing command" \
88 "will be at the bottom of config.log." \
89 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010090}
91
Peter Maydell9c83ffd2014-02-25 18:27:49 +000092do_cc() {
93 do_compiler "$cc" "$@"
94}
95
96do_cxx() {
97 do_compiler "$cxx" "$@"
98}
99
100update_cxxflags() {
101 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
102 # options which some versions of GCC's C++ compiler complain about
103 # because they only make sense for C programs.
Paolo Bonzini53422042019-07-29 12:50:04 +0200104 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100105
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000106 for arg in $QEMU_CFLAGS; do
107 case $arg in
108 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
110 ;;
Thomas Huth7be41672019-01-07 11:25:22 +0100111 -std=gnu99)
112 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
113 ;;
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000114 *)
115 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
116 ;;
117 esac
118 done
119}
120
Juan Quintela52166aa2009-08-03 14:46:03 +0200121compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400122 local_cflags="$1"
123 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200124}
125
126compile_prog() {
127 local_cflags="$1"
128 local_ldflags="$2"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100129 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200130}
131
Paolo Bonzini11568d62010-12-23 11:43:58 +0100132# symbolically link $1 to $2. Portable version of "ln -sf".
133symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100134 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800135 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100136 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100137}
138
Loïc Minier0dba6192010-01-28 21:26:51 +0000139# check whether a command is available to this shell (may be either an
140# executable or a builtin)
141has() {
142 type "$1" >/dev/null 2>&1
143}
144
145# search for an executable in PATH
146path_of() {
147 local_command="$1"
148 local_ifs="$IFS"
149 local_dir=""
150
151 # pathname has a dir component?
152 if [ "${local_command#*/}" != "$local_command" ]; then
153 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
154 echo "$local_command"
155 return 0
156 fi
157 fi
158 if [ -z "$local_command" ]; then
159 return 1
160 fi
161
162 IFS=:
163 for local_dir in $PATH; do
164 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
165 echo "$local_dir/$local_command"
166 IFS="${local_ifs:-$(printf ' \t\n')}"
167 return 0
168 fi
169 done
170 # not found
171 IFS="${local_ifs:-$(printf ' \t\n')}"
172 return 1
173}
174
Lluís Vilanova5b808272014-05-27 15:02:14 +0200175have_backend () {
176 echo "$trace_backends" | grep "$1" >/dev/null
177}
178
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200179glob() {
180 eval test -z '"${1#'"$2"'}"'
181}
182
183supported_hax_target() {
184 test "$hax" = "yes" || return 1
185 glob "$1" "*-softmmu" || return 1
186 case "${1%-softmmu}" in
187 i386|x86_64)
188 return 0
189 ;;
190 esac
191 return 1
192}
193
194supported_kvm_target() {
195 test "$kvm" = "yes" || return 1
196 glob "$1" "*-softmmu" || return 1
197 case "${1%-softmmu}:$cpu" in
198 arm:arm | aarch64:aarch64 | \
199 i386:i386 | i386:x86_64 | i386:x32 | \
200 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
201 mips:mips | mipsel:mips | \
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700202 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200203 s390x:s390x)
204 return 0
205 ;;
206 esac
207 return 1
208}
209
210supported_xen_target() {
211 test "$xen" = "yes" || return 1
212 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200213 # Only i386 and x86_64 provide the xenpv machine.
214 case "${1%-softmmu}" in
215 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200216 return 0
217 ;;
218 esac
219 return 1
220}
221
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500222supported_hvf_target() {
223 test "$hvf" = "yes" || return 1
224 glob "$1" "*-softmmu" || return 1
225 case "${1%-softmmu}" in
226 x86_64)
227 return 0
228 ;;
229 esac
230 return 1
231}
232
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800233supported_whpx_target() {
234 test "$whpx" = "yes" || return 1
235 glob "$1" "*-softmmu" || return 1
236 case "${1%-softmmu}" in
237 i386|x86_64)
238 return 0
239 ;;
240 esac
241 return 1
242}
243
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200244supported_target() {
245 case "$1" in
246 *-softmmu)
247 ;;
248 *-linux-user)
249 if test "$linux" != "yes"; then
250 print_error "Target '$target' is only available on a Linux host"
251 return 1
252 fi
253 ;;
254 *-bsd-user)
255 if test "$bsd" != "yes"; then
256 print_error "Target '$target' is only available on a BSD host"
257 return 1
258 fi
259 ;;
260 *)
261 print_error "Invalid target name '$target'"
262 return 1
263 ;;
264 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200265 test "$tcg" = "yes" && return 0
266 supported_kvm_target "$1" && return 0
267 supported_xen_target "$1" && return 0
268 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500269 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800270 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200271 print_error "TCG disabled, but hardware accelerator not available for '$target'"
272 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200273}
274
Christian Borntraegere9a35912017-08-23 12:16:23 +0200275
276ld_has() {
277 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
278}
279
Peter Maydell79d77bc2019-04-29 17:35:57 +0100280# make source path absolute
Antonio Ospite14211822019-05-26 16:47:46 +0200281source_path=$(cd "$(dirname -- "$0")"; pwd)
282
Antonio Ospite4ace32e2019-05-26 16:47:47 +0200283if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
284then
285 error_exit "main directory cannot contain spaces nor colons"
286fi
287
Antonio Ospite14211822019-05-26 16:47:46 +0200288# default parameters
Juan Quintela2ff6b912009-08-03 14:45:55 +0200289cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300290iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000291interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000292static="no"
bellard7d132992003-03-06 23:23:54 +0000293cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000294audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800295block_drv_rw_whitelist=""
296block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000297host_cc="cc"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +0100298libs_cpu=""
Juan Quintela73da3752009-08-03 14:46:26 +0200299libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200300libs_tools=""
malcd5631632009-10-10 01:13:41 +0400301audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500302libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100303debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100304stack_protector=""
Alex Bennéeafc3a8f2019-11-28 16:35:24 +0100305use_containers="yes"
aliguoriac0df512008-12-29 17:14:15 +0000306
Daniel P. Berrange92712822017-09-29 11:11:58 +0100307if test -e "$source_path/.git"
308then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100309 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100310 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500311 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
312 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100313else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100314 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100315 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100316
317 if ! test -f "$source_path/ui/keycodemapdb/README"
318 then
319 echo
320 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
321 echo
322 echo "This is not a GIT checkout but module content appears to"
323 echo "be missing. Do not use 'git archive' or GitHub download links"
324 echo "to acquire QEMU source archives. Non-GIT builds are only"
325 echo "supported with source archives linked from:"
326 echo
Peter Maydella3e3b522019-07-22 14:07:39 +0100327 echo " https://www.qemu.org/download/#source"
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100328 echo
329 echo "Developers working with GIT can use scripts/archive-source.sh"
330 echo "if they need to create valid source archives."
331 echo
332 exit 1
333 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100334fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100335git="git"
aliguoriac0df512008-12-29 17:14:15 +0000336
Stefan Weilafb63eb2012-09-26 22:04:38 +0200337# Don't accept a target_list environment variable.
338unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000339unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100340
341# Default value for a variable defining feature "foo".
342# * foo="no" feature will only be used if --enable-foo arg is given
343# * foo="" feature will be searched for, and if found, will be used
344# unless --disable-foo is given
345# * foo="yes" this value will only be set by --enable-foo flag.
346# feature will searched for,
347# if not found, configure exits with error
348#
349# Always add --enable-foo and --disable-foo command line args.
350# Distributions want to ensure that several features are compiled in, and it
351# is impossible without a --enable-foo that exits if a feature is not found.
352
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353brlapi=""
354curl=""
355curses=""
356docs=""
357fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100358netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100359sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000360sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530361virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200362mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100363vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366vnc_sasl=""
367vnc_jpeg=""
368vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200369xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100370xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000371xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000372xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100373linux_aio=""
Aarushi Mehtac10dd852020-01-20 14:18:44 +0000374linux_io_uring=""
Corey Bryant47e98652012-01-26 09:42:26 -0500375cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100376attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200377libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100378xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200379tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100380membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100381vhost_net=""
382vhost_crypto=""
383vhost_scsi=""
384vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200385vhost_user=""
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +0100386vhost_user_fs=""
Bradd41a75a2011-07-26 23:11:26 -0400387kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100388hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500389hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800390whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400391rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300392pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100393gprof="no"
394debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100395debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100396sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500397fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100398strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200399tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100400bigendian="no"
401mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000402gcov="no"
403gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100404EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800405DSOSUF=".so"
406LDFLAGS_SHARED="-shared"
407modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100408prefix="/usr/local"
409mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300410datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200411firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300412qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100413bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300414libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400415libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200416includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100417sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300418local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100419confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100420slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100421oss_lib=""
422bsd="no"
423linux="no"
424solaris="no"
425profiler="no"
426cocoa="no"
427softmmu="yes"
428linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100429bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100430blobs="yes"
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +0100431edk2_blobs="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100432pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200433pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200434qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300435trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100436trace_file="trace"
437spice=""
438rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200439smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100440libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200441usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100442opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100443opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000444cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100445avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300446zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700447capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200448lzo=""
449snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100450bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200451lzfse=""
Juan Quintela3a678482019-12-17 21:15:24 +0100452zstd=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400453guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400454guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500455guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300456guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400457vss_win32_sdk=""
458win_sdk="no"
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +0100459want_tools=""
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100460libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100461libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100462coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200463coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200464debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400465crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300466seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530467glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400468glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530469glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530470glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530471glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100472glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100473glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600474gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200475gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100476tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100477gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100478nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100479nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100480gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800481gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100482gcrypt_xts="no"
483qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100484auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100485vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200486virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800487tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200488libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100489live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800490numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800491tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200492jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800493replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700494vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100495bochs="yes"
496cloop="yes"
497dmg="yes"
498qcow1="yes"
499vdi="yes"
500vvfat="yes"
501qed="yes"
502parallels="yes"
503sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300504libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200505debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800506libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800507default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100508plugins="no"
Alexander Bulekovadc28022020-02-19 23:11:14 -0500509fuzzing="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100510
Peter Maydell898be3e2017-03-21 14:31:57 +0000511supported_cpu="no"
512supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100513bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800514malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000515
aliguoriac0df512008-12-29 17:14:15 +0000516# parse CC options first
517for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200518 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000519 case "$opt" in
520 --cross-prefix=*) cross_prefix="$optarg"
521 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100522 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000523 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400524 --cxx=*) CXX="$optarg"
525 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200526 --cpu=*) cpu="$optarg"
527 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100528 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100529 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200530 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100531 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100532 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100533 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100534 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200535 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100536 --enable-debug-info) debug_info="yes"
537 ;;
538 --disable-debug-info) debug_info="no"
539 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100540 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
541 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100542 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
543 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200544 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100545 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100546 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200547 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100548 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200549 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100550 ;;
aliguoriac0df512008-12-29 17:14:15 +0000551 esac
552done
aliguoriac0df512008-12-29 17:14:15 +0000553# OS specific
554# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100555# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000556
Peter Maydelle49d0212012-12-07 15:39:13 +0000557# Preferred compiler:
558# ${CC} (if set)
559# ${cross_prefix}gcc (if cross-prefix specified)
560# system compiler
561if test -z "${CC}${cross_prefix}"; then
562 cc="$host_cc"
563else
564 cc="${CC-${cross_prefix}gcc}"
565fi
566
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400567if test -z "${CXX}${cross_prefix}"; then
568 cxx="c++"
569else
570 cxx="${CXX-${cross_prefix}g++}"
571fi
572
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500573ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700574as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700575ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000576cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500577objcopy="${OBJCOPY-${cross_prefix}objcopy}"
578ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800579ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200580nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500581strip="${STRIP-${cross_prefix}strip}"
582windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300583pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
584query_pkg_config() {
585 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
586}
587pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000588sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000589
Peter Maydell45d285a2013-10-21 21:03:06 +0100590# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
591ARFLAGS="${ARFLAGS-rv}"
592
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200593# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100594# We use -fwrapv to tell the compiler that we require a C dialect where
595# left shift of signed integers is well defined and has the expected
596# 2s-complement style results. (Both clang and gcc agree that it
597# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100598QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400599QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100600QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200601QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200602QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200603QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100604if test "$debug_info" = "yes"; then
605 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100606fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200607
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300608# running configure in the source tree?
609# we know that's the case if configure is there.
610if test -f "./configure"; then
611 pwd_is_source_path="y"
612else
613 pwd_is_source_path="n"
614fi
615
aliguoriac0df512008-12-29 17:14:15 +0000616check_define() {
617cat > $TMPC <<EOF
618#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000619#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000620#endif
621int main(void) { return 0; }
622EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200623 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000624}
625
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200626check_include() {
627cat > $TMPC <<EOF
628#include <$1>
629int main(void) { return 0; }
630EOF
631 compile_object
632}
633
John Snow93b25862015-03-25 18:57:37 -0400634write_c_skeleton() {
635 cat > $TMPC <<EOF
636int main(void) { return 0; }
637EOF
638}
639
Alexander Bulekovadc28022020-02-19 23:11:14 -0500640write_c_fuzzer_skeleton() {
641 cat > $TMPC <<EOF
642#include <stdint.h>
643#include <sys/types.h>
644int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
645int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
646EOF
647}
648
Peter Maydellbbea4052012-08-14 15:35:34 +0100649if check_define __linux__ ; then
650 targetos="Linux"
651elif check_define _WIN32 ; then
652 targetos='MINGW32'
653elif check_define __OpenBSD__ ; then
654 targetos='OpenBSD'
655elif check_define __sun__ ; then
656 targetos='SunOS'
657elif check_define __HAIKU__ ; then
658 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100659elif check_define __FreeBSD__ ; then
660 targetos='FreeBSD'
661elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
662 targetos='GNU/kFreeBSD'
663elif check_define __DragonFly__ ; then
664 targetos='DragonFly'
665elif check_define __NetBSD__; then
666 targetos='NetBSD'
667elif check_define __APPLE__; then
668 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100669else
Peter Maydell951fedf2017-07-13 16:15:32 +0100670 # This is a fatal error, but don't report it yet, because we
671 # might be going to just print the --help text, or it might
672 # be the result of a missing compiler.
673 targetos='bogus'
674 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100675fi
676
677# Some host OSes need non-standard checks for which CPU to use.
678# Note that these checks are broken for cross-compilation: if you're
679# cross-compiling to one of these OSes then you'll need to specify
680# the correct CPU with the --cpu option.
681case $targetos in
682Darwin)
683 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
684 # run 64-bit userspace code.
685 # If the user didn't specify a CPU explicitly and the kernel says this is
686 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
687 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
688 cpu="x86_64"
689 fi
690 ;;
691SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200692 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100693 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
694 cpu="x86_64"
695 fi
696esac
697
Juan Quintela2ff6b912009-08-03 14:45:55 +0200698if test ! -z "$cpu" ; then
699 # command line argument
700 :
701elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000702 cpu="i386"
703elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700704 if check_define __ILP32__ ; then
705 cpu="x32"
706 else
707 cpu="x86_64"
708 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000709elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000710 if check_define __arch64__ ; then
711 cpu="sparc64"
712 else
713 cpu="sparc"
714 fi
malcfdf7ed92009-01-14 18:39:52 +0000715elif check_define _ARCH_PPC ; then
716 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700717 if check_define _LITTLE_ENDIAN ; then
718 cpu="ppc64le"
719 else
720 cpu="ppc64"
721 fi
malcfdf7ed92009-01-14 18:39:52 +0000722 else
723 cpu="ppc"
724 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200725elif check_define __mips__ ; then
726 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200727elif check_define __s390__ ; then
728 if check_define __s390x__ ; then
729 cpu="s390x"
730 else
731 cpu="s390"
732 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000733elif check_define __riscv ; then
734 if check_define _LP64 ; then
735 cpu="riscv64"
736 else
737 cpu="riscv32"
738 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100739elif check_define __arm__ ; then
740 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100741elif check_define __aarch64__ ; then
742 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000743else
Stefan Weil89138852016-05-16 15:10:20 +0200744 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000745fi
746
Peter Maydell359bc952011-12-24 13:07:25 +0000747ARCH=
748# Normalise host CPU name and set ARCH.
749# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000750case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200751 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000752 supported_cpu="yes"
753 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700754 ppc64le)
755 ARCH="ppc64"
756 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700757 ;;
bellard7d132992003-03-06 23:23:54 +0000758 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000759 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000760 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000761 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000762 x86_64|amd64)
763 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000764 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000765 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100766 armv*b|armv*l|arm)
767 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000768 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000769 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100770 aarch64)
771 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000772 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100773 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200774 mips*)
775 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000776 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200777 ;;
blueswir131422552007-04-16 18:27:06 +0000778 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000779 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100780 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000781 ;;
bellard7d132992003-03-06 23:23:54 +0000782 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000783 # This will result in either an error or falling back to TCI later
784 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000785 ;;
786esac
Peter Maydell359bc952011-12-24 13:07:25 +0000787if test -z "$ARCH"; then
788 ARCH="$cpu"
789fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200790
bellard7d132992003-03-06 23:23:54 +0000791# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200792
Stacey Sonadfc3e92014-06-08 09:57:22 -0700793# host *BSD for user mode
794HOST_VARIANT_DIR=""
795
bellard7d132992003-03-06 23:23:54 +0000796case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000797MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200798 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100799 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100800 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200801 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200802 if check_include dsound.h; then
803 audio_drv_list="dsound"
804 else
805 audio_drv_list=""
806 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000807 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000808;;
ths5c40d2b2007-06-23 16:03:36 +0000809GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100810 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100811 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200812 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000813;;
bellard7d3505c2004-05-12 19:32:15 +0000814FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200815 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100816 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100817 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200818 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100819 # needed for kinfo_getvmmap(3) in libutil.h
820 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500821 # needed for kinfo_getproc
822 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100823 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700824 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000825 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000826;;
blueswir1c5e97232009-03-07 20:06:23 +0000827DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200828 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100829 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100830 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200831 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700832 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000833;;
bellard7d3505c2004-05-12 19:32:15 +0000834NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200835 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100836 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100837 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100838 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200839 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200840 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700841 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200842 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000843;;
844OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200845 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100846 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100847 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200848 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700849 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500850 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000851;;
bellard83fb7ad2004-07-05 21:25:26 +0000852Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200853 bsd="yes"
854 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100855 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500856 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800857 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200858 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200859 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100860 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200861 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200862 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100863 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200864 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100865 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200866 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100867 # Disable attempts to use ObjectiveC features in os/object.h since they
868 # won't work when we're compiling with gcc as a C compiler.
869 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700870 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000871 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000872;;
bellardec530c82006-04-25 22:36:06 +0000873SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200874 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100875 make="${MAKE-gmake}"
876 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400877 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200878 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100879 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200880 fi
881 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000882# needed for CMSG_ macros in sys/socket.h
883 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
884# needed for TIOCWIN* defines in termios.h
885 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200886 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200887 solarisnetlibs="-lsocket -lnsl -lresolv"
888 LIBS="$solarisnetlibs $LIBS"
889 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000890;;
Andreas Färber179cf402010-09-20 00:50:43 +0200891Haiku)
892 haiku="yes"
893 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
894 LIBS="-lposix_error_mapper -lnetwork $LIBS"
895;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000896Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100897 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200898 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200899 linux="yes"
900 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200901 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600902 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000903 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200904 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000905;;
bellard7d132992003-03-06 23:23:54 +0000906esac
907
bellard7d3505c2004-05-12 19:32:15 +0000908if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000909 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200910 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000911 fi
bellard7d3505c2004-05-12 19:32:15 +0000912fi
913
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100914: ${make=${MAKE-make}}
915: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000916# We prefer python 3.x. A bare 'python' is traditionally
917# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300918# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000919python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300920for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000921do
922 if has "$binary"
923 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200924 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000925 break
926 fi
927done
Markus Armbruster903458c2020-02-14 18:18:41 +0100928
929sphinx_build=
930for binary in sphinx-build-3 sphinx-build
931do
932 if has "$binary"
933 then
934 sphinx_build=$(command -v "$binary")
935 break
936 fi
937done
938
Alex Bennée39d87c82020-03-03 15:06:20 +0000939# Check for ancillary tools used in testing
940genisoimage=
941for binary in genisoimage
942do
943 if has $binary
944 then
945 genisoimage=$(command -v "$binary")
946 break
947 fi
948done
949
Brade2d88302011-09-02 16:53:28 -0400950: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100951
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100952# Default objcc to clang if available, otherwise use CC
953if has clang; then
954 objcc=clang
955else
956 objcc="$cc"
957fi
958
Juan Quintela3457a3f2009-08-03 14:46:07 +0200959if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200960 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800961 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100962 # MinGW needs -mthreads for TLS and macro _MT.
963 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100964 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400965 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100966 if compile_prog "" "-liberty" ; then
967 LIBS="-liberty $LIBS"
968 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200969 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200970 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300971 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300972 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200973 bindir="\${prefix}"
974 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200975 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200976 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300977 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200978fi
979
Anthony Liguori487fefd2009-06-11 13:28:25 -0500980werror=""
bellard85aa5182007-11-11 20:17:03 +0000981
bellard7d132992003-03-06 23:23:54 +0000982for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200983 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000984 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000985 --help|-h) show_help=yes
986 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400987 --version|-V) exec cat $source_path/VERSION
988 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000989 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000990 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000991 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000992 ;;
aliguoriac0df512008-12-29 17:14:15 +0000993 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000994 ;;
aliguoriac0df512008-12-29 17:14:15 +0000995 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000996 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000997 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000998 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400999 --cxx=*)
1000 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +02001001 --iasl=*) iasl="$optarg"
1002 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +01001003 --objcc=*) objcc="$optarg"
1004 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001005 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +00001006 ;;
pbrook6a882642006-04-17 13:57:12 +00001007 --install=*) install="$optarg"
1008 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +00001009 --python=*) python="$optarg"
1010 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001011 --sphinx-build=*) sphinx_build="$optarg"
1012 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001013 --gcov=*) gcov_tool="$optarg"
1014 ;;
Brade2d88302011-09-02 16:53:28 -04001015 --smbd=*) smbd="$optarg"
1016 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001017 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001018 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001019 --extra-cxxflags=*)
1020 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001021 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001022 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001023 --enable-debug-info)
1024 ;;
1025 --disable-debug-info)
1026 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001027 --cross-cc-*)
1028 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001029 --enable-modules)
1030 modules="yes"
1031 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001032 --disable-modules)
1033 modules="no"
1034 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001035 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001036 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001037 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001038 if test "$target_list_exclude"; then
1039 error_exit "Can't mix --target-list with --target-list-exclude"
1040 fi
1041 ;;
1042 --target-list-exclude=*) target_list_exclude="$optarg"
1043 if test "$target_list"; then
1044 error_exit "Can't mix --target-list-exclude with --target-list"
1045 fi
bellardde83cd02003-06-15 20:25:43 +00001046 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001047 --enable-trace-backends=*) trace_backends="$optarg"
1048 ;;
1049 # XXX: backwards compatibility
1050 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001051 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001052 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001053 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001054 --with-default-devices) default_devices="yes"
1055 ;;
1056 --without-default-devices) default_devices="no"
1057 ;;
bellard7d132992003-03-06 23:23:54 +00001058 --enable-gprof) gprof="yes"
1059 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001060 --enable-gcov) gcov="yes"
1061 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001062 --static)
1063 static="yes"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001064 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001065 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001066 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001067 --mandir=*) mandir="$optarg"
1068 ;;
1069 --bindir=*) bindir="$optarg"
1070 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001071 --libdir=*) libdir="$optarg"
1072 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001073 --libexecdir=*) libexecdir="$optarg"
1074 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001075 --includedir=*) includedir="$optarg"
1076 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001077 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001078 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001079 --with-confsuffix=*) confsuffix="$optarg"
1080 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001081 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001082 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001083 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001084 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001085 --localstatedir=*) local_statedir="$optarg"
1086 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001087 --firmwarepath=*) firmwarepath="$optarg"
1088 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001089 --host=*|--build=*|\
1090 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001091 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001092 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1093 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1094 # These switches are silently ignored, for compatibility with
1095 # autoconf-generated configure scripts. This allows QEMU's
1096 # configure to be used by RPM and similar macros that set
1097 # lots of directory switches by default.
1098 ;;
bellard97a847b2003-08-10 21:36:04 +00001099 --disable-sdl) sdl="no"
1100 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001101 --enable-sdl) sdl="yes"
1102 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001103 --disable-sdl-image) sdl_image="no"
1104 ;;
1105 --enable-sdl-image) sdl_image="yes"
1106 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001107 --disable-qom-cast-debug) qom_cast_debug="no"
1108 ;;
1109 --enable-qom-cast-debug) qom_cast_debug="yes"
1110 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301111 --disable-virtfs) virtfs="no"
1112 ;;
1113 --enable-virtfs) virtfs="yes"
1114 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001115 --disable-mpath) mpath="no"
1116 ;;
1117 --enable-mpath) mpath="yes"
1118 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001119 --disable-vnc) vnc="no"
1120 ;;
1121 --enable-vnc) vnc="yes"
1122 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001123 --oss-lib=*) oss_lib="$optarg"
1124 ;;
malc0c58ac12008-06-25 21:04:05 +00001125 --audio-drv-list=*) audio_drv_list="$optarg"
1126 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001127 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001128 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001129 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001130 ;;
aurel32f8393942009-04-13 18:45:38 +00001131 --enable-debug-tcg) debug_tcg="yes"
1132 ;;
1133 --disable-debug-tcg) debug_tcg="no"
1134 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001135 --enable-debug)
1136 # Enable debugging options that aren't excessively noisy
1137 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001138 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001139 debug="yes"
1140 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001141 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001142 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001143 --enable-sanitizers) sanitizers="yes"
1144 ;;
1145 --disable-sanitizers) sanitizers="no"
1146 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001147 --enable-sparse) sparse="yes"
1148 ;;
1149 --disable-sparse) sparse="no"
1150 ;;
aliguori1625af82009-04-05 17:41:02 +00001151 --disable-strip) strip_opt="no"
1152 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001153 --disable-vnc-sasl) vnc_sasl="no"
1154 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001155 --enable-vnc-sasl) vnc_sasl="yes"
1156 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001157 --disable-vnc-jpeg) vnc_jpeg="no"
1158 ;;
1159 --enable-vnc-jpeg) vnc_jpeg="yes"
1160 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001161 --disable-vnc-png) vnc_png="no"
1162 ;;
1163 --enable-vnc-png) vnc_png="yes"
1164 ;;
bellard443f1372004-06-04 11:13:20 +00001165 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001166 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001167 --enable-slirp=git) slirp="git"
1168 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001169 --enable-slirp=system) slirp="system"
1170 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001171 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001172 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001173 --enable-vde) vde="yes"
1174 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001175 --disable-netmap) netmap="no"
1176 ;;
1177 --enable-netmap) netmap="yes"
1178 ;;
aliguorie37630c2009-04-22 15:19:10 +00001179 --disable-xen) xen="no"
1180 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001181 --enable-xen) xen="yes"
1182 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001183 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1184 ;;
1185 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1186 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001187 --disable-brlapi) brlapi="no"
1188 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001189 --enable-brlapi) brlapi="yes"
1190 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001191 --disable-kvm) kvm="no"
1192 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001193 --enable-kvm) kvm="yes"
1194 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001195 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001196 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001197 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001198 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001199 --disable-hvf) hvf="no"
1200 ;;
1201 --enable-hvf) hvf="yes"
1202 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001203 --disable-whpx) whpx="no"
1204 ;;
1205 --enable-whpx) whpx="yes"
1206 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001207 --disable-tcg-interpreter) tcg_interpreter="no"
1208 ;;
1209 --enable-tcg-interpreter) tcg_interpreter="yes"
1210 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001211 --disable-cap-ng) cap_ng="no"
1212 ;;
1213 --enable-cap-ng) cap_ng="yes"
1214 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001215 --disable-tcg) tcg="no"
1216 ;;
1217 --enable-tcg) tcg="yes"
1218 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001219 --disable-malloc-trim) malloc_trim="no"
1220 ;;
1221 --enable-malloc-trim) malloc_trim="yes"
1222 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001223 --disable-spice) spice="no"
1224 ;;
1225 --enable-spice) spice="yes"
1226 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001227 --disable-libiscsi) libiscsi="no"
1228 ;;
1229 --enable-libiscsi) libiscsi="yes"
1230 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001231 --disable-libnfs) libnfs="no"
1232 ;;
1233 --enable-libnfs) libnfs="yes"
1234 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001235 --enable-profiler) profiler="yes"
1236 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001237 --disable-cocoa) cocoa="no"
1238 ;;
malcc2de5c92008-06-28 19:13:06 +00001239 --enable-cocoa)
1240 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001241 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001242 ;;
pbrookcad25d62006-03-19 16:31:11 +00001243 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001244 ;;
pbrookcad25d62006-03-19 16:31:11 +00001245 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001246 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001247 --disable-user)
1248 linux_user="no" ;
1249 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001250 ;;
1251 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001252 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001253 ;;
ths831b7822007-01-18 20:06:33 +00001254 --enable-linux-user) linux_user="yes"
1255 ;;
blueswir184778502008-10-26 20:33:16 +00001256 --disable-bsd-user) bsd_user="no"
1257 ;;
1258 --enable-bsd-user) bsd_user="yes"
1259 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001260 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001261 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001262 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001263 ;;
bellard85aa5182007-11-11 20:17:03 +00001264 --enable-werror) werror="yes"
1265 ;;
1266 --disable-werror) werror="no"
1267 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001268 --enable-stack-protector) stack_protector="yes"
1269 ;;
1270 --disable-stack-protector) stack_protector="no"
1271 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001272 --disable-curses) curses="no"
1273 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001274 --enable-curses) curses="yes"
1275 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001276 --disable-iconv) iconv="no"
1277 ;;
1278 --enable-iconv) iconv="yes"
1279 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001280 --disable-curl) curl="no"
1281 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001282 --enable-curl) curl="yes"
1283 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001284 --disable-fdt) fdt="no"
1285 ;;
1286 --enable-fdt) fdt="yes"
1287 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001288 --disable-linux-aio) linux_aio="no"
1289 ;;
1290 --enable-linux-aio) linux_aio="yes"
1291 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001292 --disable-linux-io-uring) linux_io_uring="no"
1293 ;;
1294 --enable-linux-io-uring) linux_io_uring="yes"
1295 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001296 --disable-attr) attr="no"
1297 ;;
1298 --enable-attr) attr="yes"
1299 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001300 --disable-membarrier) membarrier="no"
1301 ;;
1302 --enable-membarrier) membarrier="yes"
1303 ;;
ths77755342008-11-27 15:45:16 +00001304 --disable-blobs) blobs="no"
1305 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001306 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001307 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001308 --with-coroutine=*) coroutine="$optarg"
1309 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001310 --disable-coroutine-pool) coroutine_pool="no"
1311 ;;
1312 --enable-coroutine-pool) coroutine_pool="yes"
1313 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001314 --enable-debug-stack-usage) debug_stack_usage="yes"
1315 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001316 --enable-crypto-afalg) crypto_afalg="yes"
1317 ;;
1318 --disable-crypto-afalg) crypto_afalg="no"
1319 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001320 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001321 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001322 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001323 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001324 --disable-vhost-net) vhost_net="no"
1325 ;;
1326 --enable-vhost-net) vhost_net="yes"
1327 ;;
Gonglei042cea22018-03-01 21:46:28 +08001328 --disable-vhost-crypto) vhost_crypto="no"
1329 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001330 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001331 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001332 --disable-vhost-scsi) vhost_scsi="no"
1333 ;;
1334 --enable-vhost-scsi) vhost_scsi="yes"
1335 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001336 --disable-vhost-vsock) vhost_vsock="no"
1337 ;;
1338 --enable-vhost-vsock) vhost_vsock="yes"
1339 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001340 --disable-vhost-user-fs) vhost_user_fs="no"
1341 ;;
1342 --enable-vhost-user-fs) vhost_user_fs="yes"
1343 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001344 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001345 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001346 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001347 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001348 --disable-rbd) rbd="no"
1349 ;;
1350 --enable-rbd) rbd="yes"
1351 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001352 --disable-xfsctl) xfs="no"
1353 ;;
1354 --enable-xfsctl) xfs="yes"
1355 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001356 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001357 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001358 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001359 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001360 --disable-libusb) libusb="no"
1361 ;;
1362 --enable-libusb) libusb="yes"
1363 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001364 --disable-usb-redir) usb_redir="no"
1365 ;;
1366 --enable-usb-redir) usb_redir="yes"
1367 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001368 --disable-zlib-test) zlib="no"
1369 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001370 --disable-lzo) lzo="no"
1371 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001372 --enable-lzo) lzo="yes"
1373 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001374 --disable-snappy) snappy="no"
1375 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001376 --enable-snappy) snappy="yes"
1377 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001378 --disable-bzip2) bzip2="no"
1379 ;;
1380 --enable-bzip2) bzip2="yes"
1381 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001382 --enable-lzfse) lzfse="yes"
1383 ;;
1384 --disable-lzfse) lzfse="no"
1385 ;;
Juan Quintela3a678482019-12-17 21:15:24 +01001386 --disable-zstd) zstd="no"
1387 ;;
1388 --enable-zstd) zstd="yes"
1389 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001390 --enable-guest-agent) guest_agent="yes"
1391 ;;
1392 --disable-guest-agent) guest_agent="no"
1393 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001394 --enable-guest-agent-msi) guest_agent_msi="yes"
1395 ;;
1396 --disable-guest-agent-msi) guest_agent_msi="no"
1397 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001398 --with-vss-sdk) vss_win32_sdk=""
1399 ;;
1400 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1401 ;;
1402 --without-vss-sdk) vss_win32_sdk="no"
1403 ;;
1404 --with-win-sdk) win_sdk=""
1405 ;;
1406 --with-win-sdk=*) win_sdk="$optarg"
1407 ;;
1408 --without-win-sdk) win_sdk="no"
1409 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001410 --enable-tools) want_tools="yes"
1411 ;;
1412 --disable-tools) want_tools="no"
1413 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001414 --enable-seccomp) seccomp="yes"
1415 ;;
1416 --disable-seccomp) seccomp="no"
1417 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301418 --disable-glusterfs) glusterfs="no"
1419 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001420 --disable-avx2) avx2_opt="no"
1421 ;;
1422 --enable-avx2) avx2_opt="yes"
1423 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301424 --enable-glusterfs) glusterfs="yes"
1425 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001426 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1427 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001428 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001429 --enable-vhdx|--disable-vhdx)
1430 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1431 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001432 --enable-uuid|--disable-uuid)
1433 echo "$0: $opt is obsolete, UUID support is always built" >&2
1434 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001435 --disable-gtk) gtk="no"
1436 ;;
1437 --enable-gtk) gtk="yes"
1438 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001439 --tls-priority=*) tls_priority="$optarg"
1440 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001441 --disable-gnutls) gnutls="no"
1442 ;;
1443 --enable-gnutls) gnutls="yes"
1444 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001445 --disable-nettle) nettle="no"
1446 ;;
1447 --enable-nettle) nettle="yes"
1448 ;;
1449 --disable-gcrypt) gcrypt="no"
1450 ;;
1451 --enable-gcrypt) gcrypt="yes"
1452 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001453 --disable-auth-pam) auth_pam="no"
1454 ;;
1455 --enable-auth-pam) auth_pam="yes"
1456 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001457 --enable-rdma) rdma="yes"
1458 ;;
1459 --disable-rdma) rdma="no"
1460 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001461 --enable-pvrdma) pvrdma="yes"
1462 ;;
1463 --disable-pvrdma) pvrdma="no"
1464 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001465 --disable-vte) vte="no"
1466 ;;
1467 --enable-vte) vte="yes"
1468 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001469 --disable-virglrenderer) virglrenderer="no"
1470 ;;
1471 --enable-virglrenderer) virglrenderer="yes"
1472 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001473 --disable-tpm) tpm="no"
1474 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001475 --enable-tpm) tpm="yes"
1476 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001477 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001478 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001479 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001480 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001481 --disable-live-block-migration) live_block_migration="no"
1482 ;;
1483 --enable-live-block-migration) live_block_migration="yes"
1484 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001485 --disable-numa) numa="no"
1486 ;;
1487 --enable-numa) numa="yes"
1488 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001489 --disable-libxml2) libxml2="no"
1490 ;;
1491 --enable-libxml2) libxml2="yes"
1492 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001493 --disable-tcmalloc) tcmalloc="no"
1494 ;;
1495 --enable-tcmalloc) tcmalloc="yes"
1496 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001497 --disable-jemalloc) jemalloc="no"
1498 ;;
1499 --enable-jemalloc) jemalloc="yes"
1500 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001501 --disable-replication) replication="no"
1502 ;;
1503 --enable-replication) replication="yes"
1504 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001505 --disable-vxhs) vxhs="no"
1506 ;;
1507 --enable-vxhs) vxhs="yes"
1508 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001509 --disable-bochs) bochs="no"
1510 ;;
1511 --enable-bochs) bochs="yes"
1512 ;;
1513 --disable-cloop) cloop="no"
1514 ;;
1515 --enable-cloop) cloop="yes"
1516 ;;
1517 --disable-dmg) dmg="no"
1518 ;;
1519 --enable-dmg) dmg="yes"
1520 ;;
1521 --disable-qcow1) qcow1="no"
1522 ;;
1523 --enable-qcow1) qcow1="yes"
1524 ;;
1525 --disable-vdi) vdi="no"
1526 ;;
1527 --enable-vdi) vdi="yes"
1528 ;;
1529 --disable-vvfat) vvfat="no"
1530 ;;
1531 --enable-vvfat) vvfat="yes"
1532 ;;
1533 --disable-qed) qed="no"
1534 ;;
1535 --enable-qed) qed="yes"
1536 ;;
1537 --disable-parallels) parallels="no"
1538 ;;
1539 --enable-parallels) parallels="yes"
1540 ;;
1541 --disable-sheepdog) sheepdog="no"
1542 ;;
1543 --enable-sheepdog) sheepdog="yes"
1544 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001545 --disable-vhost-user) vhost_user="no"
1546 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001547 --enable-vhost-user) vhost_user="yes"
1548 ;;
1549 --disable-vhost-kernel) vhost_kernel="no"
1550 ;;
1551 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001552 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001553 --disable-capstone) capstone="no"
1554 ;;
1555 --enable-capstone) capstone="yes"
1556 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001557 --enable-capstone=git) capstone="git"
1558 ;;
1559 --enable-capstone=system) capstone="system"
1560 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001561 --with-git=*) git="$optarg"
1562 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001563 --enable-git-update) git_update=yes
1564 ;;
1565 --disable-git-update) git_update=no
1566 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001567 --enable-debug-mutex) debug_mutex=yes
1568 ;;
1569 --disable-debug-mutex) debug_mutex=no
1570 ;;
Junyan He17824402018-07-18 15:47:59 +08001571 --enable-libpmem) libpmem=yes
1572 ;;
1573 --disable-libpmem) libpmem=no
1574 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001575 --enable-xkbcommon) xkbcommon=yes
1576 ;;
1577 --disable-xkbcommon) xkbcommon=no
1578 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001579 --enable-plugins) plugins="yes"
1580 ;;
1581 --disable-plugins) plugins="no"
1582 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001583 --enable-containers) use_containers="yes"
1584 ;;
1585 --disable-containers) use_containers="no"
1586 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001587 --enable-fuzzing) fuzzing=yes
1588 ;;
1589 --disable-fuzzing) fuzzing=no
1590 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001591 *)
1592 echo "ERROR: unknown option $opt"
1593 echo "Try '$0 --help' for more information"
1594 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001595 ;;
bellard7d132992003-03-06 23:23:54 +00001596 esac
1597done
1598
bellard40293e52008-01-31 11:32:10 +00001599case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001600 ppc)
1601 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001602 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001603 ;;
1604 ppc64)
1605 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001606 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001607 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001608 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001609 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001610 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001611 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001612 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001613 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001614 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001615 ;;
ths76d83bd2007-11-18 21:22:10 +00001616 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001617 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001618 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001619 ;;
1620 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001621 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001622 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001623 ;;
bellard40293e52008-01-31 11:32:10 +00001624 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001625 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001626 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001627 ;;
1628 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001629 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1630 # If we truly care, we should simply detect this case at
1631 # runtime and generate the fallback to serial emulation.
1632 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001633 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001634 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001635 x32)
1636 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001637 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001638 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001639 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001640esac
1641
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001642eval "cross_cc_${cpu}=\$host_cc"
1643cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001644QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001645
Peter Maydellaffc88c2016-06-13 11:32:24 +01001646# For user-mode emulation the host arch has to be one we explicitly
1647# support, even if we're using TCI.
1648if [ "$ARCH" = "unknown" ]; then
1649 bsd_user="no"
1650 linux_user="no"
1651fi
1652
Peter Maydell60e0df22011-05-03 14:50:13 +01001653default_target_list=""
1654
Peter Maydell6e92f822013-05-20 16:16:15 +01001655mak_wilds=""
1656
1657if [ "$softmmu" = "yes" ]; then
1658 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001659fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001660if [ "$linux_user" = "yes" ]; then
1661 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001662fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001663if [ "$bsd_user" = "yes" ]; then
1664 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001665fi
1666
Alex Bennée447e1332019-03-19 11:59:12 +00001667if test -z "$target_list_exclude"; then
1668 for config in $mak_wilds; do
1669 default_target_list="${default_target_list} $(basename "$config" .mak)"
1670 done
1671else
1672 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1673 for config in $mak_wilds; do
1674 target="$(basename "$config" .mak)"
1675 exclude="no"
1676 for excl in $exclude_list; do
1677 if test "$excl" = "$target"; then
1678 exclude="yes"
1679 break;
1680 fi
1681 done
1682 if test "$exclude" = "no"; then
1683 default_target_list="${default_target_list} $target"
1684 fi
1685 done
1686fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001687
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001688# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001689trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001690
pbrookaf5db582006-04-08 14:26:41 +00001691if test x"$show_help" = x"yes" ; then
1692cat << EOF
1693
1694Usage: configure [options]
1695Options: [defaults in brackets after descriptions]
1696
Stefan Weil08fb77e2013-12-18 22:09:39 +01001697Standard options:
1698 --help print this message
1699 --prefix=PREFIX install in PREFIX [$prefix]
1700 --interp-prefix=PREFIX where to find shared libraries, etc.
1701 use %M for cpu name [$interp_prefix]
1702 --target-list=LIST set target list (default: build everything)
1703$(echo Available targets: $default_target_list | \
1704 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001705 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001706
1707Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001708 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1709 --cc=CC use C compiler CC [$cc]
1710 --iasl=IASL use ACPI compiler IASL [$iasl]
1711 --host-cc=CC use C compiler CC [$host_cc] for code run at
1712 build time
1713 --cxx=CXX use C++ compiler CXX [$cxx]
1714 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1715 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001716 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001717 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001718 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001719 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001720 --make=MAKE use specified make [$make]
1721 --install=INSTALL use specified install [$install]
1722 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001723 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001724 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001725 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001726 --static enable static build [$static]
1727 --mandir=PATH install man pages in PATH
1728 --datadir=PATH install firmware in PATH$confsuffix
1729 --docdir=PATH install documentation in PATH$confsuffix
1730 --bindir=PATH install binaries in PATH
1731 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001732 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001733 --sysconfdir=PATH install config in PATH$confsuffix
1734 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001735 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001736 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001737 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001738 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001739 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001740 --disable-strip disable stripping binaries
1741 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001742 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001743 --audio-drv-list=LIST set audio drivers list:
1744 Available drivers: $audio_possible_drivers
1745 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1746 --block-drv-rw-whitelist=L
1747 set block driver read-write whitelist
1748 (affects only QEMU, not qemu-img)
1749 --block-drv-ro-whitelist=L
1750 set block driver read-only whitelist
1751 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001752 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001753 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001754 --with-trace-file=NAME Full PATH,NAME of file to store traces
1755 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001756 --disable-slirp disable SLIRP userspace network connectivity
1757 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001758 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001759 --oss-lib path to OSS library
1760 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001761 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001762 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001763 --enable-gcov enable test coverage analysis with gcov
1764 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001765 --disable-blobs disable installing provided firmware blobs
1766 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1767 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001768 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001769 --enable-gprof QEMU profiling with gprof
1770 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001771 --enable-debug-stack-usage
1772 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001773 --enable-plugins
1774 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001775 --disable-containers don't use containers for cross-building
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001776
1777Optional features, enabled with --enable-FEATURE and
1778disabled with --disable-FEATURE, default is enabled if available:
1779
1780 system all system emulation targets
1781 user supported user emulation targets
1782 linux-user all linux usermode emulation targets
1783 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001784 docs build documentation
1785 guest-agent build the QEMU Guest Agent
1786 guest-agent-msi build guest agent Windows MSI installation package
1787 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001788 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001789 debug-tcg TCG debugging (default is disabled)
1790 debug-info debugging information
1791 sparse sparse checker
1792
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001793 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001794 nettle nettle cryptography support
1795 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001796 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001797 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001798 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001799 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001800 vte vte support for the gtk UI
1801 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001802 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001803 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001804 vnc-sasl SASL encryption for VNC server
1805 vnc-jpeg JPEG lossy compression for VNC server
1806 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001807 cocoa Cocoa UI (Mac OS X only)
1808 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001809 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001810 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001811 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001812 brlapi BrlAPI (Braile)
1813 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001814 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001815 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001816 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001817 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001818 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001819 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001820 rdma Enable RDMA-based migration
1821 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001822 vde support for vde network
1823 netmap support for netmap network
1824 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001825 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001826 cap-ng libcap-ng support
1827 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001828 vhost-net vhost-net kernel acceleration support
1829 vhost-vsock virtio sockets device support
1830 vhost-scsi vhost-scsi kernel target support
1831 vhost-crypto vhost-user-crypto backend support
1832 vhost-kernel vhost kernel backend support
1833 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001834 spice spice
1835 rbd rados block device (rbd)
1836 libiscsi iscsi support
1837 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001838 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001839 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001840 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001841 usb-redir usb network redirection support
1842 lzo support of lzo compression library
1843 snappy support of snappy compression library
1844 bzip2 support of bzip2 compression library
1845 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001846 lzfse support of lzfse compression library
1847 (for reading lzfse-compressed dmg images)
Juan Quintela3a678482019-12-17 21:15:24 +01001848 zstd support for zstd compression library
1849 (for migration compression)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001850 seccomp seccomp support
1851 coroutine-pool coroutine freelist (better performance)
1852 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001853 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001854 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001855 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001856 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001857 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001858 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001859 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001860 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001861 opengl opengl support
1862 virglrenderer virgl rendering support
1863 xfsctl xfsctl support
1864 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001865 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001866 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001867 bochs bochs image format support
1868 cloop cloop image format support
1869 dmg dmg image format support
1870 qcow1 qcow v1 image format support
1871 vdi vdi image format support
1872 vvfat vvfat image format support
1873 qed qed image format support
1874 parallels parallels image format support
1875 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001876 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001877 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001878 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001879 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001880 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001881
1882NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001883EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001884exit 0
pbrookaf5db582006-04-08 14:26:41 +00001885fi
1886
Thomas Huth9c790242019-03-11 11:20:34 +01001887# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001888rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001889
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001890# Remove syscall_nr.h to be sure they will be regenerated in the build
1891# directory, not in the source directory
Laurent Vivier5b85cae2020-03-10 11:33:46 +01001892for arch in alpha hppa m68k ; do
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001893 # remove the file if it has been generated in the source directory
1894 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1895 # remove the dependency files
1896 find . -name "*.d" \
1897 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1898 -exec rm {} \;
1899done
1900
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001901if test -z "$python"
1902then
1903 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001904fi
1905
1906# Note that if the Python conditional here evaluates True we will exit
1907# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001908if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1909 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001910 "Use --python=/path/to/python to specify a supported Python."
1911fi
1912
Cleber Rosa755ee702018-11-09 10:07:07 -05001913# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001914python_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 -05001915
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001916# Suppress writing compiled files
1917python="$python -B"
1918
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001919# Check that the C compiler works. Doing this here before testing
1920# the host CPU ensures that we had a valid CC to autodetect the
1921# $cpu var (and we should bail right here if that's not the case).
1922# It also allows the help message to be printed without a CC.
1923write_c_skeleton;
1924if compile_object ; then
1925 : C compiler works ok
1926else
1927 error_exit "\"$cc\" either does not exist or does not work"
1928fi
1929if ! compile_prog ; then
1930 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1931fi
1932
Peter Maydell359bc952011-12-24 13:07:25 +00001933# Now we have handled --enable-tcg-interpreter and know we're not just
1934# printing the help message, bail out if the host CPU isn't supported.
1935if test "$ARCH" = "unknown"; then
1936 if test "$tcg_interpreter" = "yes" ; then
1937 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001938 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001939 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001940 fi
1941fi
1942
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001943# Consult white-list to determine whether to enable werror
1944# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001945if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001946 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001947 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001948 werror="yes"
1949 else
1950 werror="no"
1951 fi
1952fi
1953
Peter Maydellfb59dab2017-03-28 14:01:52 +01001954if test "$bogus_os" = "yes"; then
1955 # Now that we know that we're not printing the help and that
1956 # the compiler works (so the results of the check_defines we used
1957 # to identify the OS are reliable), if we didn't recognize the
1958 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001959 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001960fi
1961
Thomas Huthefc6c072018-12-03 10:12:32 +01001962# Check whether the compiler matches our minimum requirements:
1963cat > $TMPC << EOF
1964#if defined(__clang_major__) && defined(__clang_minor__)
1965# ifdef __apple_build_version__
1966# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1967# error You need at least XCode Clang v5.1 to compile QEMU
1968# endif
1969# else
1970# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1971# error You need at least Clang v3.4 to compile QEMU
1972# endif
1973# endif
1974#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1975# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1976# error You need at least GCC v4.8 to compile QEMU
1977# endif
1978#else
1979# error You either need GCC or Clang to compiler QEMU
1980#endif
1981int main (void) { return 0; }
1982EOF
1983if ! compile_prog "" "" ; then
1984 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1985fi
1986
Paolo Bonzini8d050952010-12-23 11:43:52 +01001987gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1988gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001989gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001990gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001991gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001992gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001993# Note that we do not add -Werror to gcc_flags here, because that would
1994# enable it for all configure tests. If a configure test failed due
1995# to -Werror this would just silently disable some features,
1996# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001997
1998cc_has_warning_flag() {
1999 write_c_skeleton;
2000
Peter Maydella1d29d62012-10-27 22:19:07 +01002001 # Use the positive sense of the flag when testing for -Wno-wombat
2002 # support (gcc will happily accept the -Wno- form of unknown
2003 # warning options).
John Snow93b25862015-03-25 18:57:37 -04002004 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2005 compile_prog "-Werror $optflag" ""
2006}
2007
2008for flag in $gcc_flags; do
2009 if cc_has_warning_flag $flag ; then
2010 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01002011 fi
2012done
2013
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002014if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02002015 cat > $TMPC << EOF
2016int main(int argc, char *argv[])
2017{
2018 char arr[64], *p = arr, *c = argv[0];
2019 while (*c) {
2020 *p++ = *c++;
2021 }
2022 return 0;
2023}
2024EOF
Steven Noonan63678e12014-03-28 17:19:02 +01002025 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002026 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01002027 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01002028 # We need to check both a compile and a link, since some compiler
2029 # setups fail only on a .c->.o compile and some only at link time
2030 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2031 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01002032 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002033 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002034 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01002035 break
2036 fi
2037 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002038 if test "$stack_protector" = yes; then
2039 if test $sp_on = 0; then
2040 error_exit "Stack protector not supported"
2041 fi
2042 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01002043fi
2044
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02002045# Disable -Wmissing-braces on older compilers that warn even for
2046# the "universal" C zero initializer {0}.
2047cat > $TMPC << EOF
2048struct {
2049 int a[2];
2050} x = {0};
2051EOF
2052if compile_object "-Werror" "" ; then
2053 :
2054else
2055 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2056fi
2057
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002058# Our module code doesn't support Windows
2059if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2060 error_exit "Modules are not available for Windows"
2061fi
2062
Thomas Huthd376e9d2018-12-03 11:41:38 +01002063# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002064if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002065 if test "$modules" = "yes" ; then
2066 error_exit "static and modules are mutually incompatible"
2067 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002068 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002069 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002070 else
2071 pie="no"
2072 fi
2073fi
2074
Emilio G. Cota768b7852015-04-29 13:09:02 +02002075# Unconditional check for compiler __thread support
2076 cat > $TMPC << EOF
2077static __thread int tls_var;
2078int main(void) { return tls_var; }
2079EOF
2080
2081if ! compile_prog "-Werror" "" ; then
2082 error_exit "Your compiler does not support the __thread specifier for " \
2083 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2084fi
2085
Avi Kivity40d64442011-11-15 20:12:17 +02002086if test "$pie" = ""; then
2087 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002088 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002089 ;;
2090 *)
2091 pie="no"
2092 ;;
2093 esac
2094fi
2095
2096if test "$pie" != "no" ; then
2097 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002098
2099#ifdef __linux__
2100# define THREAD __thread
2101#else
2102# define THREAD
2103#endif
2104
2105static THREAD int tls_var;
2106
2107int main(void) { return tls_var; }
2108
Avi Kivity40d64442011-11-15 20:12:17 +02002109EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002110 # check we support --no-pie first...
2111 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2112 CFLAGS_NOPIE="-fno-pie"
2113 LDFLAGS_NOPIE="-nopie"
2114 fi
2115
Avi Kivity40d64442011-11-15 20:12:17 +02002116 if compile_prog "-fPIE -DPIE" "-pie"; then
2117 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002118 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002119 pie="yes"
2120 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002121 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002122 fi
2123 else
2124 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002125 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002126 else
2127 echo "Disabling PIE due to missing toolchain support"
2128 pie="no"
2129 fi
2130 fi
2131fi
2132
Paolo Bonzini09dada42013-04-17 16:26:47 +02002133##########################################
2134# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2135# use i686 as default anyway, but for those that don't, an explicit
2136# specification is necessary
2137
2138if test "$cpu" = "i386"; then
2139 cat > $TMPC << EOF
2140static int sfaa(int *ptr)
2141{
2142 return __sync_fetch_and_and(ptr, 0);
2143}
2144
2145int main(void)
2146{
2147 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002148 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002149 sfaa(&val);
2150 return val;
2151}
2152EOF
2153 if ! compile_prog "" "" ; then
2154 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2155 fi
2156fi
2157
2158#########################################
bellardec530c82006-04-25 22:36:06 +00002159# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002160
bellardec530c82006-04-25 22:36:06 +00002161if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002162 if has $install; then
2163 :
2164 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002165 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2166 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2167 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002168 fi
Stefan Weil89138852016-05-16 15:10:20 +02002169 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002170 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2171 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2172 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002173 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002174 if has ar; then
2175 :
2176 else
bellardec530c82006-04-25 22:36:06 +00002177 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002178 error_exit "No path includes ar" \
2179 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002180 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002181 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002182 fi
ths5fafdf22007-09-16 21:08:06 +00002183fi
bellardec530c82006-04-25 22:36:06 +00002184
Stefan Weilafb63eb2012-09-26 22:04:38 +02002185if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002186 for target in $default_target_list; do
2187 supported_target $target 2>/dev/null && \
2188 target_list="$target_list $target"
2189 done
2190 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002191else
Stefan Weil89138852016-05-16 15:10:20 +02002192 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002193 for target in $target_list; do
2194 # Check that we recognised the target name; this allows a more
2195 # friendly error message than if we let it fall through.
2196 case " $default_target_list " in
2197 *" $target "*)
2198 ;;
2199 *)
2200 error_exit "Unknown target name '$target'"
2201 ;;
2202 esac
2203 supported_target $target || exit 1
2204 done
bellard5327cf42005-01-10 23:18:50 +00002205fi
Peter Maydell25b48332013-05-20 16:16:16 +01002206
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002207# see if system emulation was really requested
2208case " $target_list " in
2209 *"-softmmu "*) softmmu=yes
2210 ;;
2211 *) softmmu=no
2212 ;;
2213esac
bellard5327cf42005-01-10 23:18:50 +00002214
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002215for target in $target_list; do
2216 case "$target" in
2217 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2218 edk2_blobs="yes"
2219 ;;
2220 esac
2221done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002222# The EDK2 binaries are compressed with bzip2
2223if test "$edk2_blobs" = "yes" && ! has bzip2; then
2224 error_exit "The bzip2 program is required for building QEMU"
2225fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002226
Juan Quintela249247c2009-08-12 18:20:25 +02002227feature_not_found() {
2228 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002229 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002230
Peter Maydell76ad07a2013-04-08 12:11:26 +01002231 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002232 "configure was not able to find it." \
2233 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002234}
2235
bellard7d132992003-03-06 23:23:54 +00002236# ---
2237# big/little endian test
2238cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002239short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2240short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2241extern int foo(short *, short *);
2242int main(int argc, char *argv[]) {
2243 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002244}
2245EOF
2246
Mike Frysinger61cc9192013-06-30 23:30:18 -04002247if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002248 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002249 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002250 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002251 bigendian="no"
2252 else
2253 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002254 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002255else
2256 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002257fi
2258
Juan Quintelab0a47e72009-08-12 18:29:49 +02002259##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002260# system tools
2261if test -z "$want_tools"; then
2262 if test "$softmmu" = "no"; then
2263 want_tools=no
2264 else
2265 want_tools=yes
2266 fi
2267fi
2268
2269##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002270# cocoa implies not SDL or GTK
2271# (the cocoa UI code currently assumes it is always the active UI
2272# and doesn't interact well with other UI frontend code)
2273if test "$cocoa" = "yes"; then
2274 if test "$sdl" = "yes"; then
2275 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2276 fi
2277 if test "$gtk" = "yes"; then
2278 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2279 fi
2280 gtk=no
2281 sdl=no
2282fi
2283
Eric Blake6b39b062016-10-11 10:46:23 -05002284# Some versions of Mac OS X incorrectly define SIZE_MAX
2285cat > $TMPC << EOF
2286#include <stdint.h>
2287#include <stdio.h>
2288int main(int argc, char *argv[]) {
2289 return printf("%zu", SIZE_MAX);
2290}
2291EOF
2292have_broken_size_max=no
2293if ! compile_object -Werror ; then
2294 have_broken_size_max=yes
2295fi
2296
Peter Maydella30878e2015-08-14 16:10:52 +01002297##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002298# L2TPV3 probe
2299
2300cat > $TMPC <<EOF
2301#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002302#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002303int main(void) { return sizeof(struct mmsghdr); }
2304EOF
2305if compile_prog "" "" ; then
2306 l2tpv3=yes
2307else
2308 l2tpv3=no
2309fi
2310
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002311#########################################
2312# vhost interdependencies and host support
2313
2314# vhost backends
2315test "$vhost_user" = "" && vhost_user=yes
2316if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2317 error_exit "vhost-user isn't available on win32"
2318fi
2319test "$vhost_kernel" = "" && vhost_kernel=$linux
2320if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2321 error_exit "vhost-kernel is only available on Linux"
2322fi
2323
2324# vhost-kernel devices
2325test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2326if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2327 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2328fi
2329test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2330if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2331 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2332fi
2333
2334# vhost-user backends
2335test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2336if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2337 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2338fi
2339test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2340if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2341 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2342fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002343test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2344if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2345 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2346fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002347
2348# OR the vhost-kernel and vhost-user values for simplicity
2349if test "$vhost_net" = ""; then
2350 test "$vhost_net_user" = "yes" && vhost_net=yes
2351 test "$vhost_kernel" = "yes" && vhost_net=yes
2352fi
2353
Gonglei015a33b2014-07-01 20:58:08 +08002354##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002355# MinGW / Mingw-w64 localtime_r/gmtime_r check
2356
2357if test "$mingw32" = "yes"; then
2358 # Some versions of MinGW / Mingw-w64 lack localtime_r
2359 # and gmtime_r entirely.
2360 #
2361 # Some versions of Mingw-w64 define a macro for
2362 # localtime_r/gmtime_r.
2363 #
2364 # Some versions of Mingw-w64 will define functions
2365 # for localtime_r/gmtime_r, but only if you have
2366 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2367 # though, unistd.h and pthread.h both define
2368 # that for you.
2369 #
2370 # So this #undef localtime_r and #include <unistd.h>
2371 # are not in fact redundant.
2372cat > $TMPC << EOF
2373#include <unistd.h>
2374#include <time.h>
2375#undef localtime_r
2376int main(void) { localtime_r(NULL, NULL); return 0; }
2377EOF
2378 if compile_prog "" "" ; then
2379 localtime_r="yes"
2380 else
2381 localtime_r="no"
2382 fi
2383fi
2384
2385##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002386# pkg-config probe
2387
2388if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002389 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002390fi
2391
2392##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002393# NPTL probe
2394
Peter Maydell24cb36a2013-07-16 18:45:00 +01002395if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002396 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002397#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002398#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002399int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002400#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2401#error bork
2402#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002403 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002404}
2405EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002406 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002407 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002408 fi
pbrookbd0c5662008-05-29 14:34:11 +00002409fi
2410
balrogac629222008-10-11 09:56:04 +00002411##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002412# lzo check
2413
2414if test "$lzo" != "no" ; then
2415 cat > $TMPC << EOF
2416#include <lzo/lzo1x.h>
2417int main(void) { lzo_version(); return 0; }
2418EOF
2419 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002420 libs_softmmu="$libs_softmmu -llzo2"
2421 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002422 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002423 if test "$lzo" = "yes"; then
2424 feature_not_found "liblzo2" "Install liblzo2 devel"
2425 fi
2426 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002427 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002428fi
2429
2430##########################################
2431# snappy check
2432
2433if test "$snappy" != "no" ; then
2434 cat > $TMPC << EOF
2435#include <snappy-c.h>
2436int main(void) { snappy_max_compressed_length(4096); return 0; }
2437EOF
2438 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002439 libs_softmmu="$libs_softmmu -lsnappy"
2440 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002441 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002442 if test "$snappy" = "yes"; then
2443 feature_not_found "libsnappy" "Install libsnappy devel"
2444 fi
2445 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002446 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002447fi
2448
2449##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002450# bzip2 check
2451
2452if test "$bzip2" != "no" ; then
2453 cat > $TMPC << EOF
2454#include <bzlib.h>
2455int main(void) { BZ2_bzlibVersion(); return 0; }
2456EOF
2457 if compile_prog "" "-lbz2" ; then
2458 bzip2="yes"
2459 else
2460 if test "$bzip2" = "yes"; then
2461 feature_not_found "libbzip2" "Install libbzip2 devel"
2462 fi
2463 bzip2="no"
2464 fi
2465fi
2466
2467##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002468# lzfse check
2469
2470if test "$lzfse" != "no" ; then
2471 cat > $TMPC << EOF
2472#include <lzfse.h>
2473int main(void) { lzfse_decode_scratch_size(); return 0; }
2474EOF
2475 if compile_prog "" "-llzfse" ; then
2476 lzfse="yes"
2477 else
2478 if test "$lzfse" = "yes"; then
2479 feature_not_found "lzfse" "Install lzfse devel"
2480 fi
2481 lzfse="no"
2482 fi
2483fi
2484
2485##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002486# zstd check
2487
2488if test "$zstd" != "no" ; then
2489 if $pkg_config --exist libzstd ; then
2490 zstd_cflags="$($pkg_config --cflags libzstd)"
2491 zstd_libs="$($pkg_config --libs libzstd)"
2492 LIBS="$zstd_libs $LIBS"
2493 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2494 zstd="yes"
2495 else
2496 if test "$zstd" = "yes" ; then
2497 feature_not_found "libzstd" "Install libzstd devel"
2498 fi
2499 zstd="no"
2500 fi
2501fi
2502
2503##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002504# libseccomp check
2505
2506if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002507 libseccomp_minver="2.3.0"
2508 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002509 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2510 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002511 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002512 else
Andrew Jones693e5912015-09-30 11:59:18 -04002513 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002514 feature_not_found "libseccomp" \
2515 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002516 fi
2517 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002518 fi
2519fi
2520##########################################
aliguorie37630c2009-04-22 15:19:10 +00002521# xen probe
2522
Juan Quintelafc321b42009-08-12 18:29:55 +02002523if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002524 # Check whether Xen library path is specified via --extra-ldflags to avoid
2525 # overriding this setting with pkg-config output. If not, try pkg-config
2526 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002527
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002528 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2529 $pkg_config --exists xencontrol ; then
2530 xen_ctrl_version="$(printf '%d%02d%02d' \
2531 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2532 xen=yes
2533 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2534 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002535 if $pkg_config --exists xentoolcore; then
2536 xen_pc="$xen_pc xentoolcore"
2537 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002538 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2539 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002540 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002541
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002542 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002543 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002544
2545 # First we test whether Xen headers and libraries are available.
2546 # If no, we are done and there is no Xen support.
2547 # If yes, more tests are run to detect the Xen version.
2548
2549 # Xen (any)
2550 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002551#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002552int main(void) {
2553 return 0;
2554}
2555EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002556 if ! compile_prog "" "$xen_libs" ; then
2557 # Xen not found
2558 if test "$xen" = "yes" ; then
2559 feature_not_found "xen" "Install xen devel"
2560 fi
2561 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002562
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002563 # Xen unstable
2564 elif
2565 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002566#undef XC_WANT_COMPAT_DEVICEMODEL_API
2567#define __XEN_TOOLS__
2568#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002569#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002570int main(void) {
2571 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002572 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002573
2574 xd = xendevicemodel_open(0, 0);
2575 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2576
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002577 xfmem = xenforeignmemory_open(0, 0);
2578 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2579
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002580 return 0;
2581}
2582EOF
2583 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2584 then
2585 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2586 xen_ctrl_version=41100
2587 xen=yes
2588 elif
2589 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002590#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2591#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002592#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002593int main(void) {
2594 xenforeignmemory_handle *xfmem;
2595
2596 xfmem = xenforeignmemory_open(0, 0);
2597 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002598 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002599
2600 return 0;
2601}
2602EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002603 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002604 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002605 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002606 xen_ctrl_version=41000
2607 xen=yes
2608 elif
2609 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002610#undef XC_WANT_COMPAT_DEVICEMODEL_API
2611#define __XEN_TOOLS__
2612#include <xendevicemodel.h>
2613int main(void) {
2614 xendevicemodel_handle *xd;
2615
2616 xd = xendevicemodel_open(0, 0);
2617 xendevicemodel_close(xd);
2618
2619 return 0;
2620}
2621EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002622 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2623 then
2624 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2625 xen_ctrl_version=40900
2626 xen=yes
2627 elif
2628 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002629/*
2630 * If we have stable libs the we don't want the libxc compat
2631 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002632 *
2633 * Also, check if xengnttab_grant_copy_segment_t is defined and
2634 * grant copy operation is implemented.
2635 */
2636#undef XC_WANT_COMPAT_EVTCHN_API
2637#undef XC_WANT_COMPAT_GNTTAB_API
2638#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2639#include <xenctrl.h>
2640#include <xenstore.h>
2641#include <xenevtchn.h>
2642#include <xengnttab.h>
2643#include <xenforeignmemory.h>
2644#include <stdint.h>
2645#include <xen/hvm/hvm_info_table.h>
2646#if !defined(HVM_MAX_VCPUS)
2647# error HVM_MAX_VCPUS not defined
2648#endif
2649int main(void) {
2650 xc_interface *xc = NULL;
2651 xenforeignmemory_handle *xfmem;
2652 xenevtchn_handle *xe;
2653 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002654 xengnttab_grant_copy_segment_t* seg = NULL;
2655
2656 xs_daemon_open();
2657
2658 xc = xc_interface_open(0, 0, 0);
2659 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2660 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2661 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2662 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002663
2664 xfmem = xenforeignmemory_open(0, 0);
2665 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2666
2667 xe = xenevtchn_open(0, 0);
2668 xenevtchn_fd(xe);
2669
2670 xg = xengnttab_open(0, 0);
2671 xengnttab_grant_copy(xg, 0, seg);
2672
2673 return 0;
2674}
2675EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002676 compile_prog "" "$xen_libs $xen_stable_libs"
2677 then
2678 xen_ctrl_version=40800
2679 xen=yes
2680 elif
2681 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002682/*
2683 * If we have stable libs the we don't want the libxc compat
2684 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002685 */
2686#undef XC_WANT_COMPAT_EVTCHN_API
2687#undef XC_WANT_COMPAT_GNTTAB_API
2688#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2689#include <xenctrl.h>
2690#include <xenstore.h>
2691#include <xenevtchn.h>
2692#include <xengnttab.h>
2693#include <xenforeignmemory.h>
2694#include <stdint.h>
2695#include <xen/hvm/hvm_info_table.h>
2696#if !defined(HVM_MAX_VCPUS)
2697# error HVM_MAX_VCPUS not defined
2698#endif
2699int main(void) {
2700 xc_interface *xc = NULL;
2701 xenforeignmemory_handle *xfmem;
2702 xenevtchn_handle *xe;
2703 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002704
2705 xs_daemon_open();
2706
2707 xc = xc_interface_open(0, 0, 0);
2708 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2709 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2710 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2711 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002712
2713 xfmem = xenforeignmemory_open(0, 0);
2714 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2715
2716 xe = xenevtchn_open(0, 0);
2717 xenevtchn_fd(xe);
2718
2719 xg = xengnttab_open(0, 0);
2720 xengnttab_map_grant_ref(xg, 0, 0, 0);
2721
2722 return 0;
2723}
2724EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002725 compile_prog "" "$xen_libs $xen_stable_libs"
2726 then
2727 xen_ctrl_version=40701
2728 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002729
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002730 # Xen 4.6
2731 elif
2732 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002733#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002734#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002735#include <stdint.h>
2736#include <xen/hvm/hvm_info_table.h>
2737#if !defined(HVM_MAX_VCPUS)
2738# error HVM_MAX_VCPUS not defined
2739#endif
2740int main(void) {
2741 xc_interface *xc;
2742 xs_daemon_open();
2743 xc = xc_interface_open(0, 0, 0);
2744 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2745 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002746 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002747 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002748 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002749 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002750 return 0;
2751}
2752EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002753 compile_prog "" "$xen_libs"
2754 then
2755 xen_ctrl_version=40600
2756 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002757
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002758 # Xen 4.5
2759 elif
2760 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002761#include <xenctrl.h>
2762#include <xenstore.h>
2763#include <stdint.h>
2764#include <xen/hvm/hvm_info_table.h>
2765#if !defined(HVM_MAX_VCPUS)
2766# error HVM_MAX_VCPUS not defined
2767#endif
2768int main(void) {
2769 xc_interface *xc;
2770 xs_daemon_open();
2771 xc = xc_interface_open(0, 0, 0);
2772 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2773 xc_gnttab_open(NULL, 0);
2774 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2775 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002776 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2777 return 0;
2778}
2779EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002780 compile_prog "" "$xen_libs"
2781 then
2782 xen_ctrl_version=40500
2783 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002784
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002785 elif
2786 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002787#include <xenctrl.h>
2788#include <xenstore.h>
2789#include <stdint.h>
2790#include <xen/hvm/hvm_info_table.h>
2791#if !defined(HVM_MAX_VCPUS)
2792# error HVM_MAX_VCPUS not defined
2793#endif
2794int main(void) {
2795 xc_interface *xc;
2796 xs_daemon_open();
2797 xc = xc_interface_open(0, 0, 0);
2798 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2799 xc_gnttab_open(NULL, 0);
2800 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2801 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002802 return 0;
2803}
2804EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002805 compile_prog "" "$xen_libs"
2806 then
2807 xen_ctrl_version=40200
2808 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002809
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002810 else
2811 if test "$xen" = "yes" ; then
2812 feature_not_found "xen (unsupported version)" \
2813 "Install a supported xen (xen 4.2 or newer)"
2814 fi
2815 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002816 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002817
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002818 if test "$xen" = yes; then
2819 if test $xen_ctrl_version -ge 40701 ; then
2820 libs_softmmu="$xen_stable_libs $libs_softmmu"
2821 fi
2822 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002823 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002824 fi
aliguorie37630c2009-04-22 15:19:10 +00002825fi
2826
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002827if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002828 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002829 xen_pci_passthrough=yes
2830 else
2831 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002832 error_exit "User requested feature Xen PCI Passthrough" \
2833 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002834 fi
2835 xen_pci_passthrough=no
2836 fi
2837fi
2838
aliguorie37630c2009-04-22 15:19:10 +00002839##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002840# Windows Hypervisor Platform accelerator (WHPX) check
2841if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002842 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002843 whpx="yes"
2844 else
2845 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002846 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002847 fi
2848 whpx="no"
2849 fi
2850fi
2851
2852##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002853# Sparse probe
2854if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002855 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002856 sparse=yes
2857 else
2858 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002859 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002860 fi
2861 sparse=no
2862 fi
2863fi
2864
2865##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002866# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002867if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002868 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002869 x11_cflags=$($pkg_config --cflags x11)
2870 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002871fi
2872
2873##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002874# GTK probe
2875
2876if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002877 gtkpackage="gtk+-3.0"
2878 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002879 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002880 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002881 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2882 gtk_libs=$($pkg_config --libs $gtkpackage)
2883 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002884 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002885 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002886 gtk_cflags="$gtk_cflags $x11_cflags"
2887 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002888 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002889 gtk="yes"
2890 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002891 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002892 else
2893 gtk="no"
2894 fi
2895fi
2896
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002897
2898##########################################
2899# GNUTLS probe
2900
2901if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002902 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002903 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002904 gnutls_cflags=$($pkg_config --cflags gnutls)
2905 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002906 # Packaging for the static libraries is not always correct.
2907 # At least ubuntu 18.04 ships only shared libraries.
2908 write_c_skeleton
2909 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002910 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002911 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2912 pass="yes"
2913 fi
2914 fi
2915 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002916 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002917 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002918 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002919 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002920fi
2921
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002922
2923# If user didn't give a --disable/enable-gcrypt flag,
2924# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002925# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002926if test -z "$gcrypt"
2927then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002928 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002929 then
2930 gcrypt="no"
2931 fi
2932fi
2933
2934# If user didn't give a --disable/enable-nettle flag,
2935# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002936# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002937if test -z "$nettle"
2938then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002939 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002940 then
2941 nettle="no"
2942 fi
2943fi
2944
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002945has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002946 if ! has "libgcrypt-config"
2947 then
2948 return 1
2949 fi
2950
2951 if test -n "$cross_prefix"
2952 then
Stefan Weil89138852016-05-16 15:10:20 +02002953 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002954 if test "$host-" != $cross_prefix
2955 then
2956 return 1
2957 fi
2958 fi
2959
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002960 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2961 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2962
2963 if test $maj != 1 || test $min -lt 5
2964 then
2965 return 1
2966 fi
2967
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002968 return 0
2969}
2970
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002971
2972if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002973 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002974 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002975 nettle_cflags=$($pkg_config --cflags nettle)
2976 nettle_libs=$($pkg_config --libs nettle)
2977 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002978 # Link test to make sure the given libraries work (e.g for static).
2979 write_c_skeleton
2980 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002981 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002982 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2983 if test -z "$gcrypt"; then
2984 gcrypt="no"
2985 fi
2986 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002987 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002988 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01002989 if test "$pass" = "yes"
2990 then
2991 cat > $TMPC << EOF
2992#include <nettle/xts.h>
2993int main(void) {
2994 return 0;
2995}
2996EOF
2997 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2998 nettle_xts=yes
2999 qemu_private_xts=no
3000 fi
3001 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003002 if test "$pass" = "no" && test "$nettle" = "yes"; then
3003 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003004 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003005 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003006 fi
3007fi
3008
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003009if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003010 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003011 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003012 gcrypt_cflags=$(libgcrypt-config --cflags)
3013 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003014 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003015 # as it "spreads unnecessary dependencies" which in
3016 # turn breaks static builds...
3017 if test "$static" = "yes"
3018 then
3019 gcrypt_libs="$gcrypt_libs -lgpg-error"
3020 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003021
Richard Hendersona73e82e2019-05-09 18:24:35 -07003022 # Link test to make sure the given libraries work (e.g for static).
3023 write_c_skeleton
3024 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003025 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003026 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3027 pass="yes"
3028 fi
3029 fi
3030 if test "$pass" = "yes"; then
3031 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003032 cat > $TMPC << EOF
3033#include <gcrypt.h>
3034int main(void) {
3035 gcry_mac_hd_t handle;
3036 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3037 GCRY_MAC_FLAG_SECURE, NULL);
3038 return 0;
3039}
3040EOF
3041 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3042 gcrypt_hmac=yes
3043 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003044 cat > $TMPC << EOF
3045#include <gcrypt.h>
3046int main(void) {
3047 gcry_cipher_hd_t handle;
3048 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3049 return 0;
3050}
3051EOF
3052 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3053 gcrypt_xts=yes
3054 qemu_private_xts=no
3055 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003056 elif test "$gcrypt" = "yes"; then
3057 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003058 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003059 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003060 fi
3061fi
3062
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003063
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003064if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3065then
3066 error_exit "Only one of gcrypt & nettle can be enabled"
3067fi
3068
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003069##########################################
3070# libtasn1 - only for the TLS creds/session test suite
3071
3072tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003073tasn1_cflags=""
3074tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003075if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003076 tasn1_cflags=$($pkg_config --cflags libtasn1)
3077 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003078else
3079 tasn1=no
3080fi
3081
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003082
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003083##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003084# PAM probe
3085
3086if test "$auth_pam" != "no"; then
3087 cat > $TMPC <<EOF
3088#include <security/pam_appl.h>
3089#include <stdio.h>
3090int main(void) {
3091 const char *service_name = "qemu";
3092 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003093 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003094 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003095 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003096 return 0;
3097}
3098EOF
3099 if compile_prog "" "-lpam" ; then
3100 auth_pam=yes
3101 else
3102 if test "$auth_pam" = "yes"; then
3103 feature_not_found "PAM" "Install PAM development package"
3104 else
3105 auth_pam=no
3106 fi
3107 fi
3108fi
3109
3110##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003111# getifaddrs (for tests/test-io-channel-socket )
3112
3113have_ifaddrs_h=yes
3114if ! check_include "ifaddrs.h" ; then
3115 have_ifaddrs_h=no
3116fi
3117
3118##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003119# VTE probe
3120
3121if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003122 vteminversion="0.32.0"
3123 if $pkg_config --exists "vte-2.91"; then
3124 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003125 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003126 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003127 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003128 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003129 vte_cflags=$($pkg_config --cflags $vtepackage)
3130 vte_libs=$($pkg_config --libs $vtepackage)
3131 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003132 vte="yes"
3133 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003134 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003135 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003136 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003137 fi
3138fi
3139
3140##########################################
bellard11d9f692004-04-02 20:55:59 +00003141# SDL probe
3142
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003143# Look for sdl configuration program (pkg-config or sdl2-config). Try
3144# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003145
Peter Xuc6093a02018-04-10 13:40:34 +08003146sdl_probe ()
3147{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003148 if $pkg_config sdl2 --exists; then
3149 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003150 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003151 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003152 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003153 sdlversion=$($sdlconfig --version)
3154 else
3155 if test "$sdl" = "yes" ; then
3156 feature_not_found "sdl" "Install SDL2-devel"
3157 fi
3158 sdl=no
3159 # no need to do the rest
3160 return
3161 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003162 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003163 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3164 fi
3165
Juan Quintelaac119f92009-07-27 16:13:15 +02003166 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003167#include <SDL.h>
3168#undef main /* We don't want SDL to override our main() */
3169int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3170EOF
Stefan Weil89138852016-05-16 15:10:20 +02003171 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003172 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003173 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003174 if $pkg_config sdl2 --exists; then
3175 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003176 else
3177 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3178 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003179 else
Stefan Weil89138852016-05-16 15:10:20 +02003180 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003181 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003182 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003183 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003184
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003185 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003186 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003187 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003188 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3189 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003190 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003191 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003192 :
3193 else
3194 sdl=no
3195 fi
3196 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003197 else # sdl not found
3198 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003199 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003200 fi
3201 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003202 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003203}
3204
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003205sdl_image_probe ()
3206{
3207 if test "$sdl_image" != "no" ; then
3208 if $pkg_config SDL2_image --exists; then
3209 if test "$static" = "yes"; then
3210 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3211 else
3212 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3213 fi
3214 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3215 sdl_image=yes
3216
3217 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3218 sdl_libs="$sdl_libs $sdl_image_libs"
3219 else
3220 if test "$sdl_image" = "yes" ; then
3221 feature_not_found "sdl_image" "Install SDL Image devel"
3222 else
3223 sdl_image=no
3224 fi
3225 fi
3226 fi
3227}
3228
Peter Xuc6093a02018-04-10 13:40:34 +08003229if test "$sdl" != "no" ; then
3230 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003231fi
bellard11d9f692004-04-02 20:55:59 +00003232
aliguori5368a422009-03-03 17:37:21 +00003233if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003234 sdl_image_probe
3235else
3236 if test "$sdl_image" = "yes"; then
3237 echo "warning: SDL Image requested, but SDL is not available, disabling"
3238 fi
3239 sdl_image=no
3240fi
3241
3242if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003243 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003244#include <SDL.h>
3245#if defined(SDL_VIDEO_DRIVER_X11)
3246#include <X11/XKBlib.h>
3247#else
3248#error No x11 support
3249#endif
3250int main(void) { return 0; }
3251EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003252 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003253 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003254 sdl_cflags="$sdl_cflags $x11_cflags"
3255 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003256 fi
aliguori5368a422009-03-03 17:37:21 +00003257fi
3258
ths8f28f3f2007-01-05 21:25:54 +00003259##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003260# RDMA needs OpenFabrics libraries
3261if test "$rdma" != "no" ; then
3262 cat > $TMPC <<EOF
3263#include <rdma/rdma_cma.h>
3264int main(void) { return 0; }
3265EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003266 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003267 if compile_prog "" "$rdma_libs" ; then
3268 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003269 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003270 else
3271 if test "$rdma" = "yes" ; then
3272 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003273 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003274 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003275 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003276 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3277 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3278 fi
3279 rdma="no"
3280 fi
3281fi
3282
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003283##########################################
3284# PVRDMA detection
3285
3286cat > $TMPC <<EOF &&
3287#include <sys/mman.h>
3288
3289int
3290main(void)
3291{
3292 char buf = 0;
3293 void *addr = &buf;
3294 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3295
3296 return 0;
3297}
3298EOF
3299
3300if test "$rdma" = "yes" ; then
3301 case "$pvrdma" in
3302 "")
3303 if compile_prog "" ""; then
3304 pvrdma="yes"
3305 else
3306 pvrdma="no"
3307 fi
3308 ;;
3309 "yes")
3310 if ! compile_prog "" ""; then
3311 error_exit "PVRDMA is not supported since mremap is not implemented"
3312 fi
3313 pvrdma="yes"
3314 ;;
3315 "no")
3316 pvrdma="no"
3317 ;;
3318 esac
3319else
3320 if test "$pvrdma" = "yes" ; then
3321 error_exit "PVRDMA requires rdma suppport"
3322 fi
3323 pvrdma="no"
3324fi
ths8d5d2d42007-08-25 01:37:51 +00003325
Yuval Shaiaee108582019-08-18 16:21:06 +03003326# Let's see if enhanced reg_mr is supported
3327if test "$pvrdma" = "yes" ; then
3328
3329cat > $TMPC <<EOF &&
3330#include <infiniband/verbs.h>
3331
3332int
3333main(void)
3334{
3335 struct ibv_mr *mr;
3336 struct ibv_pd *pd = NULL;
3337 size_t length = 10;
3338 uint64_t iova = 0;
3339 int access = 0;
3340 void *addr = NULL;
3341
3342 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3343
3344 ibv_dereg_mr(mr);
3345
3346 return 0;
3347}
3348EOF
3349 if ! compile_prog "" "-libverbs"; then
3350 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3351 fi
3352fi
3353
ths8d5d2d42007-08-25 01:37:51 +00003354##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003355# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003356if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003357 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003358#include <sasl/sasl.h>
3359#include <stdio.h>
3360int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3361EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003362 # Assuming Cyrus-SASL installed in /usr prefix
3363 vnc_sasl_cflags=""
3364 vnc_sasl_libs="-lsasl2"
3365 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3366 vnc_sasl=yes
3367 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003368 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003369 else
3370 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003371 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003372 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003373 vnc_sasl=no
3374 fi
aliguori2f9606b2009-03-06 20:27:28 +00003375fi
3376
3377##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003378# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003379if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003380cat > $TMPC <<EOF
3381#include <stdio.h>
3382#include <jpeglib.h>
3383int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3384EOF
3385 vnc_jpeg_cflags=""
3386 vnc_jpeg_libs="-ljpeg"
3387 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3388 vnc_jpeg=yes
3389 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003390 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003391 else
3392 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003393 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003394 fi
3395 vnc_jpeg=no
3396 fi
3397fi
3398
3399##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003400# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003401if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003402cat > $TMPC <<EOF
3403//#include <stdio.h>
3404#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003405#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003406int main(void) {
3407 png_structp png_ptr;
3408 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003409 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003410}
3411EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003412 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003413 vnc_png_cflags=$($pkg_config libpng --cflags)
3414 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003415 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003416 vnc_png_cflags=""
3417 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003418 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003419 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3420 vnc_png=yes
3421 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003422 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003423 else
3424 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003425 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003426 fi
3427 vnc_png=no
3428 fi
3429fi
3430
3431##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003432# xkbcommon probe
3433if test "$xkbcommon" != "no" ; then
3434 if $pkg_config xkbcommon --exists; then
3435 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3436 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3437 xkbcommon=yes
3438 else
3439 if test "$xkbcommon" = "yes" ; then
3440 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3441 fi
3442 xkbcommon=no
3443 fi
3444fi
3445
aliguori76655d62009-03-06 20:27:37 +00003446
3447##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003448# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003449if test "$xfs" != "no" ; then
3450 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003451#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003452#include <xfs/xfs.h>
3453int main(void)
3454{
3455 xfsctl(NULL, 0, 0, NULL);
3456 return 0;
3457}
3458EOF
3459 if compile_prog "" "" ; then
3460 xfs="yes"
3461 else
3462 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003463 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003464 fi
3465 xfs=no
3466 fi
3467fi
3468
3469##########################################
ths8a16d272008-07-19 09:56:24 +00003470# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003471if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003472 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003473 cat > $TMPC << EOF
3474#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003475int main(void)
3476{
3477 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003478 char s[] = "";
3479 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003480 return 0;
3481}
ths8a16d272008-07-19 09:56:24 +00003482EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003483 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003484 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003485 else
3486 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003487 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003488 fi
3489 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003490 fi
ths8a16d272008-07-19 09:56:24 +00003491fi
3492
3493##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003494# netmap support probe
3495# Apart from looking for netmap headers, we make sure that the host API version
3496# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3497# a minor/major version number. Minor new features will be marked with values up
3498# to 15, and if something happens that requires a change to the backend we will
3499# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003500if test "$netmap" != "no" ; then
3501 cat > $TMPC << EOF
3502#include <inttypes.h>
3503#include <net/if.h>
3504#include <net/netmap.h>
3505#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003506#if (NETMAP_API < 11) || (NETMAP_API > 15)
3507#error
3508#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003509int main(void) { return 0; }
3510EOF
3511 if compile_prog "" "" ; then
3512 netmap=yes
3513 else
3514 if test "$netmap" = "yes" ; then
3515 feature_not_found "netmap"
3516 fi
3517 netmap=no
3518 fi
3519fi
3520
3521##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003522# libcap-ng library probe
3523if test "$cap_ng" != "no" ; then
3524 cap_libs="-lcap-ng"
3525 cat > $TMPC << EOF
3526#include <cap-ng.h>
3527int main(void)
3528{
3529 capng_capability_to_name(CAPNG_EFFECTIVE);
3530 return 0;
3531}
3532EOF
3533 if compile_prog "" "$cap_libs" ; then
3534 cap_ng=yes
3535 libs_tools="$cap_libs $libs_tools"
3536 else
3537 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003538 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003539 fi
3540 cap_ng=no
3541 fi
3542fi
3543
3544##########################################
malcc2de5c92008-06-28 19:13:06 +00003545# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003546
Stefan Weil89138852016-05-16 15:10:20 +02003547audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003548for drv in $audio_drv_list; do
3549 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003550 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003551 if $pkg_config alsa --exists; then
3552 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003553 if test "$drv" = "try-alsa"; then
3554 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3555 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003556 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003557 if test "$drv" = "try-alsa"; then
3558 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3559 else
3560 error_exit "$drv check failed" \
3561 "Make sure to have the $drv libs and headers installed."
3562 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003563 fi
malcc2de5c92008-06-28 19:13:06 +00003564 ;;
3565
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003566 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003567 if $pkg_config libpulse --exists; then
3568 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003569 if test "$drv" = "try-pa"; then
3570 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3571 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003572 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003573 if test "$drv" = "try-pa"; then
3574 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3575 else
3576 error_exit "$drv check failed" \
3577 "Make sure to have the $drv libs and headers installed."
3578 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003579 fi
malcb8e59f12008-07-02 21:03:08 +00003580 ;;
3581
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003582 sdl)
3583 if test "$sdl" = "no"; then
3584 error_exit "sdl not found or disabled, can not use sdl audio driver"
3585 fi
3586 ;;
3587
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003588 try-sdl)
3589 if test "$sdl" = "no"; then
3590 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3591 else
3592 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3593 fi
3594 ;;
3595
Juan Quintela997e6902009-08-03 14:46:29 +02003596 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003597 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003598 ;;
3599
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003600 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003601 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003602 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003603 ;;
3604
3605 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003606 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003607 ;;
3608
malce4c63a62008-07-19 16:15:16 +00003609 *)
malc1c9b2a52008-07-19 16:57:30 +00003610 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003611 error_exit "Unknown driver '$drv' selected" \
3612 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003613 }
3614 ;;
malcc2de5c92008-06-28 19:13:06 +00003615 esac
3616done
ths8f28f3f2007-01-05 21:25:54 +00003617
balrog4d3b6f62008-02-10 16:33:14 +00003618##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003619# BrlAPI probe
3620
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003621if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003622 brlapi_libs="-lbrlapi"
3623 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003624#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003625#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003626int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3627EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003628 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003629 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003630 else
3631 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003632 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003633 fi
3634 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003635 fi
3636fi
aurel322e4d9fb2008-04-08 06:01:02 +00003637
3638##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003639# iconv probe
3640if test "$iconv" != "no" ; then
3641 cat > $TMPC << EOF
3642#include <iconv.h>
3643int main(void) {
3644 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3645 return conv != (iconv_t) -1;
3646}
3647EOF
3648 iconv_prefix_list="/usr/local:/usr"
3649 iconv_lib_list=":-liconv"
3650 IFS=:
3651 for iconv_prefix in $iconv_prefix_list; do
3652 IFS=:
3653 iconv_cflags="-I$iconv_prefix/include"
3654 iconv_ldflags="-L$iconv_prefix/lib"
3655 for iconv_link in $iconv_lib_list; do
3656 unset IFS
3657 iconv_lib="$iconv_ldflags $iconv_link"
3658 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3659 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3660 iconv_found=yes
3661 break
3662 fi
3663 done
3664 if test "$iconv_found" = yes ; then
3665 break
3666 fi
3667 done
3668 if test "$iconv_found" = "yes" ; then
3669 iconv=yes
3670 else
3671 if test "$iconv" = "yes" ; then
3672 feature_not_found "iconv" "Install iconv devel"
3673 fi
3674 iconv=no
3675 fi
3676fi
3677
3678##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003679# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003680if test "$iconv" = "no" ; then
3681 # curses will need iconv
3682 curses=no
3683fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003684if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003685 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003686 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3687 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003688 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003689 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003690 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003691 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003692 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003693 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003694#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003695#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003696#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003697#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003698int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003699 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003700 wchar_t wch = L'w';
3701 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003702 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003703 addwstr(L"wide chars\n");
3704 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003705 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003706 codeset = nl_langinfo(CODESET);
3707 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003708}
balrog4d3b6f62008-02-10 16:33:14 +00003709EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003710 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003711 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003712 # Make sure we get the wide character prototypes
3713 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003714 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003715 for curses_lib in $curses_lib_list; do
3716 unset IFS
3717 if compile_prog "$curses_inc" "$curses_lib" ; then
3718 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003719 break
3720 fi
3721 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003722 if test "$curses_found" = yes ; then
3723 break
3724 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003725 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003726 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003727 if test "$curses_found" = "yes" ; then
3728 curses=yes
3729 else
3730 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003731 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003732 fi
3733 curses=no
3734 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003735fi
balrog4d3b6f62008-02-10 16:33:14 +00003736
blueswir1414f0da2008-08-15 18:20:52 +00003737##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003738# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003739if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003740 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003741 curlconfig="$pkg_config libcurl"
3742 else
3743 curlconfig=curl-config
3744 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003745 cat > $TMPC << EOF
3746#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003747int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003748EOF
Stefan Weil89138852016-05-16 15:10:20 +02003749 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3750 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003751 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003752 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003753 else
3754 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003755 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003756 fi
3757 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003758 fi
3759fi # test "$curl"
3760
3761##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003762# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003763
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003764glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003765glib_modules=gthread-2.0
3766if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003767 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003768fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003769if test "$plugins" = yes; then
3770 glib_modules="$glib_modules gmodule-2.0"
3771fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003772
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003773# This workaround is required due to a bug in pkg-config file for glib as it
3774# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3775
Eric Blakee633a5c2019-02-04 20:39:37 -06003776if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003777 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3778fi
3779
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003780for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003781 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003782 glib_cflags=$($pkg_config --cflags $i)
3783 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003784 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003785 LIBS="$glib_libs $LIBS"
3786 libs_qga="$glib_libs $libs_qga"
3787 else
3788 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3789 fi
3790done
3791
Marc-André Lureauf876b762019-02-21 12:07:00 +01003792if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3793 gio=yes
3794 gio_cflags=$($pkg_config --cflags gio-2.0)
3795 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003796 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003797 if [ ! -x "$gdbus_codegen" ]; then
3798 gdbus_codegen=
3799 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003800else
3801 gio=no
3802fi
3803
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003804if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3805 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3806 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3807fi
3808
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003809# Sanity check that the current size_t matches the
3810# size that glib thinks it should be. This catches
3811# problems on multi-arch where people try to build
3812# 32-bit QEMU while pointing at 64-bit glib headers
3813cat > $TMPC <<EOF
3814#include <glib.h>
3815#include <unistd.h>
3816
3817#define QEMU_BUILD_BUG_ON(x) \
3818 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3819
3820int main(void) {
3821 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3822 return 0;
3823}
3824EOF
3825
Stefan Weil5919e032016-04-28 23:33:41 +02003826if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003827 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3828 "You probably need to set PKG_CONFIG_LIBDIR"\
3829 "to point to the right pkg-config files for your"\
3830 "build target"
3831fi
3832
John Snowbbbf2e02015-03-25 18:57:38 -04003833# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3834cat > $TMPC << EOF
3835#include <glib.h>
3836int main(void) { return 0; }
3837EOF
3838if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3839 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3840 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3841 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3842 fi
3843fi
3844
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003845#########################################
3846# zlib check
3847
3848if test "$zlib" != "no" ; then
3849 if $pkg_config --exists zlib; then
3850 zlib_cflags=$($pkg_config --cflags zlib)
3851 zlib_libs=$($pkg_config --libs zlib)
3852 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3853 LIBS="$zlib_libs $LIBS"
3854 else
3855 cat > $TMPC << EOF
3856#include <zlib.h>
3857int main(void) { zlibVersion(); return 0; }
3858EOF
3859 if compile_prog "" "-lz" ; then
3860 LIBS="$LIBS -lz"
3861 else
3862 error_exit "zlib check failed" \
3863 "Make sure to have the zlib libs and headers installed."
3864 fi
3865 fi
3866fi
3867
Fam Zhenge26110c2014-02-10 14:48:57 +08003868##########################################
3869# SHA command probe for modules
3870if test "$modules" = yes; then
3871 shacmd_probe="sha1sum sha1 shasum"
3872 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003873 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003874 shacmd="$c"
3875 break
3876 fi
3877 done
3878 if test "$shacmd" = ""; then
3879 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3880 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003881fi
3882
3883##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003884# pixman support probe
3885
Eric Blakee633a5c2019-02-04 20:39:37 -06003886if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003887 pixman_cflags=
3888 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003889elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003890 pixman_cflags=$($pkg_config --cflags pixman-1)
3891 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003892else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003893 error_exit "pixman >= 0.21.8 not present." \
3894 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003895fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003896
3897##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003898# libmpathpersist probe
3899
3900if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003901 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003902 cat > $TMPC <<EOF
3903#include <libudev.h>
3904#include <mpath_persist.h>
3905unsigned mpath_mx_alloc_len = 1024;
3906int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003907static struct config *multipath_conf;
3908extern struct udev *udev;
3909extern struct config *get_multipath_config(void);
3910extern void put_multipath_config(struct config *conf);
3911struct udev *udev;
3912struct config *get_multipath_config(void) { return multipath_conf; }
3913void put_multipath_config(struct config *conf) { }
3914
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003915int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003916 udev = udev_new();
3917 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003918 return 0;
3919}
3920EOF
3921 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3922 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003923 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003924 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003925 # probe for the old API
3926 cat > $TMPC <<EOF
3927#include <libudev.h>
3928#include <mpath_persist.h>
3929unsigned mpath_mx_alloc_len = 1024;
3930int logsink;
3931int main(void) {
3932 struct udev *udev = udev_new();
3933 mpath_lib_init(udev);
3934 return 0;
3935}
3936EOF
3937 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3938 mpathpersist=yes
3939 mpathpersist_new_api=no
3940 else
3941 mpathpersist=no
3942 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003943 fi
3944else
3945 mpathpersist=no
3946fi
3947
3948##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003949# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003950PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003951
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003952pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003953cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003954#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003955static void *f(void *p) { return NULL; }
3956int main(void) {
3957 pthread_t thread;
3958 pthread_create(&thread, 0, f, 0);
3959 return 0;
3960}
blueswir1414f0da2008-08-15 18:20:52 +00003961EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003962if compile_prog "" "" ; then
3963 pthread=yes
3964else
3965 for pthread_lib in $PTHREADLIBS_LIST; do
3966 if compile_prog "" "$pthread_lib" ; then
3967 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003968 found=no
3969 for lib_entry in $LIBS; do
3970 if test "$lib_entry" = "$pthread_lib"; then
3971 found=yes
3972 break
3973 fi
3974 done
3975 if test "$found" = "no"; then
3976 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003977 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003978 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003979 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003980 break
3981 fi
3982 done
3983fi
blueswir1414f0da2008-08-15 18:20:52 +00003984
Eric Blakee633a5c2019-02-04 20:39:37 -06003985if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003986 error_exit "pthread check failed" \
3987 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003988fi
3989
Roman Bolshakov479a5742018-12-17 23:26:01 +03003990# check for pthread_setname_np with thread id
3991pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003992cat > $TMPC << EOF
3993#include <pthread.h>
3994
3995static void *f(void *p) { return NULL; }
3996int main(void)
3997{
3998 pthread_t thread;
3999 pthread_create(&thread, 0, f, 0);
4000 pthread_setname_np(thread, "QEMU");
4001 return 0;
4002}
4003EOF
4004if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03004005 pthread_setname_np_w_tid=yes
4006fi
4007
4008# check for pthread_setname_np without thread id
4009pthread_setname_np_wo_tid=no
4010cat > $TMPC << EOF
4011#include <pthread.h>
4012
4013static void *f(void *p) { pthread_setname_np("QEMU"); }
4014int main(void)
4015{
4016 pthread_t thread;
4017 pthread_create(&thread, 0, f, 0);
4018 return 0;
4019}
4020EOF
4021if compile_prog "" "$pthread_lib" ; then
4022 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004023fi
4024
aliguoribf9298b2008-12-05 20:05:26 +00004025##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004026# rbd probe
4027if test "$rbd" != "no" ; then
4028 cat > $TMPC <<EOF
4029#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004030#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004031int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004032 rados_t cluster;
4033 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004034 return 0;
4035}
4036EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004037 rbd_libs="-lrbd -lrados"
4038 if compile_prog "" "$rbd_libs" ; then
4039 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004040 else
4041 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004042 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004043 fi
4044 rbd=no
4045 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004046fi
4047
4048##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004049# libssh probe
4050if test "$libssh" != "no" ; then
4051 if $pkg_config --exists libssh; then
4052 libssh_cflags=$($pkg_config libssh --cflags)
4053 libssh_libs=$($pkg_config libssh --libs)
4054 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004055 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004056 if test "$libssh" = "yes" ; then
4057 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004058 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004059 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004060 fi
4061fi
4062
4063##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004064# Check for libssh 0.8
4065# This is done like this instead of using the LIBSSH_VERSION_* and
4066# SSH_VERSION_* macros because some distributions in the past shipped
4067# snapshots of the future 0.8 from Git, and those snapshots did not
4068# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004069
Pino Toscanob10d49d2019-06-20 22:08:40 +02004070if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004071 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004072#include <libssh/libssh.h>
4073int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004074EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004075 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4076 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004077 fi
4078fi
4079
4080##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004081# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004082
4083if test "$linux_aio" != "no" ; then
4084 cat > $TMPC <<EOF
4085#include <libaio.h>
4086#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004087#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004088int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4089EOF
4090 if compile_prog "" "-laio" ; then
4091 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004092 else
4093 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004094 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004095 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004096 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004097 fi
4098fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004099##########################################
4100# linux-io-uring probe
4101
4102if test "$linux_io_uring" != "no" ; then
4103 if $pkg_config liburing; then
4104 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4105 linux_io_uring_libs=$($pkg_config --libs liburing)
4106 linux_io_uring=yes
4107 else
4108 if test "$linux_io_uring" = "yes" ; then
4109 feature_not_found "linux io_uring" "Install liburing devel"
4110 fi
4111 linux_io_uring=no
4112 fi
4113fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004114
4115##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004116# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004117
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004118if test "$tpm" = ""; then
4119 if test "$mingw32" = "yes"; then
4120 tpm=no
4121 else
4122 tpm=yes
4123 fi
4124elif test "$tpm" = "yes"; then
4125 if test "$mingw32" = "yes" ; then
4126 error_exit "TPM emulation only available on POSIX systems"
4127 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004128fi
4129
4130##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004131# attr probe
4132
4133if test "$attr" != "no" ; then
4134 cat > $TMPC <<EOF
4135#include <stdio.h>
4136#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004137#ifdef CONFIG_LIBATTR
4138#include <attr/xattr.h>
4139#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004140#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004141#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004142int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4143EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004144 if compile_prog "" "" ; then
4145 attr=yes
4146 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004147 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004148 attr=yes
4149 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004150 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004151 else
4152 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004153 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004154 fi
4155 attr=no
4156 fi
4157fi
4158
4159##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004160# iovec probe
4161cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004162#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004163#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004164#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004165int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004166EOF
4167iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004168if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004169 iovec=yes
4170fi
4171
aurel32f652e6a2008-12-16 10:43:48 +00004172##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004173# preadv probe
4174cat > $TMPC <<EOF
4175#include <sys/types.h>
4176#include <sys/uio.h>
4177#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004178int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004179EOF
4180preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004181if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004182 preadv=yes
4183fi
4184
4185##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004186# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004187# fdt support is mandatory for at least some target architectures,
4188# so insist on it if we're building those system emulators.
4189fdt_required=no
4190for target in $target_list; do
4191 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004192 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004193 fdt_required=yes
4194 ;;
4195 esac
4196done
4197
4198if test "$fdt_required" = "yes"; then
4199 if test "$fdt" = "no"; then
4200 error_exit "fdt disabled but some requested targets require it." \
4201 "You can turn off fdt only if you also disable all the system emulation" \
4202 "targets which need it (by specifying a cut down --target-list)."
4203 fi
4204 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004205elif test "$fdt" != "yes" ; then
4206 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004207fi
4208
Laurent Vivierd5999382019-06-21 15:05:44 +02004209# fdt is only required when building softmmu targets
4210if test -z "$fdt" -a "$softmmu" != "yes" ; then
4211 fdt="no"
4212fi
4213
Juan Quintela2df87df2009-08-12 18:29:54 +02004214if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004215 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004216 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004217 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004218 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004219#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004220#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004221int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004222EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004223 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004224 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004225 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004226 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004227 # have GIT checkout, so activate dtc submodule
4228 if test -e "${source_path}/.git" ; then
4229 git_submodules="${git_submodules} dtc"
4230 fi
4231 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004232 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004233 mkdir -p dtc
4234 if [ "$pwd_is_source_path" != "y" ] ; then
4235 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4236 symlink "$source_path/dtc/scripts" "dtc/scripts"
4237 fi
4238 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004239 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4240 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004241 elif test "$fdt" = "yes" ; then
4242 # Not a git build & no libfdt found, prompt for system install
4243 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4244 "Please install the DTC (libfdt) devel package"
4245 else
4246 # don't have and don't want
4247 fdt_libs=
4248 fdt=no
4249 fi
aurel32f652e6a2008-12-16 10:43:48 +00004250 fi
4251fi
4252
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004253libs_softmmu="$libs_softmmu $fdt_libs"
4254
Michael Walle20ff0752011-03-07 23:32:39 +01004255##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004256# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004257
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004258gbm="no"
4259if $pkg_config gbm; then
4260 gbm_cflags="$($pkg_config --cflags gbm)"
4261 gbm_libs="$($pkg_config --libs gbm)"
4262 gbm="yes"
4263fi
4264
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004265if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004266 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004267 if $pkg_config $opengl_pkgs; then
4268 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4269 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004270 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004271 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4272 gtk_gl="yes"
4273 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004274 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004275 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004276 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004277 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004278 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004279 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004280 opengl_libs=""
4281 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004282 fi
4283fi
4284
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004285if test "$opengl" = "yes"; then
4286 cat > $TMPC << EOF
4287#include <epoxy/egl.h>
4288#ifndef EGL_MESA_image_dma_buf_export
4289# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4290#endif
4291int main(void) { return 0; }
4292EOF
4293 if compile_prog "" "" ; then
4294 opengl_dmabuf=yes
4295 fi
4296fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004297
Eric Blakee633a5c2019-02-04 20:39:37 -06004298if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004299 for target in $target_list; do
4300 case $target in
4301 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4302 need_x11=yes
4303 ;;
4304 esac
4305 done
4306fi
4307
Klim Kireeved279a02018-01-12 12:01:19 +03004308##########################################
4309# libxml2 probe
4310if test "$libxml2" != "no" ; then
4311 if $pkg_config --exists libxml-2.0; then
4312 libxml2="yes"
4313 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4314 libxml2_libs=$($pkg_config --libs libxml-2.0)
4315 else
4316 if test "$libxml2" = "yes"; then
4317 feature_not_found "libxml2" "Install libxml2 devel"
4318 fi
4319 libxml2="no"
4320 fi
4321fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004322
Bharata B Raoeb100392012-09-24 14:42:45 +05304323##########################################
4324# glusterfs probe
4325if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004326 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304327 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004328 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4329 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004330 if $pkg_config --atleast-version=4 glusterfs-api; then
4331 glusterfs_xlator_opt="yes"
4332 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004333 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304334 glusterfs_discard="yes"
4335 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304336 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304337 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304338 glusterfs_zerofill="yes"
4339 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004340 cat > $TMPC << EOF
4341#include <glusterfs/api/glfs.h>
4342
4343int
4344main(void)
4345{
4346 /* new glfs_ftruncate() passes two additional args */
4347 return glfs_ftruncate(NULL, 0, NULL, NULL);
4348}
4349EOF
4350 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4351 glusterfs_ftruncate_has_stat="yes"
4352 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004353 cat > $TMPC << EOF
4354#include <glusterfs/api/glfs.h>
4355
4356/* new glfs_io_cbk() passes two additional glfs_stat structs */
4357static void
4358glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4359{}
4360
4361int
4362main(void)
4363{
4364 glfs_io_cbk iocb = &glusterfs_iocb;
4365 iocb(NULL, 0 , NULL, NULL, NULL);
4366 return 0;
4367}
4368EOF
4369 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4370 glusterfs_iocb_has_stat="yes"
4371 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304372 else
4373 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004374 feature_not_found "GlusterFS backend support" \
4375 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304376 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304377 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304378 fi
4379fi
4380
aurel3239386ac2009-04-15 19:48:17 +00004381# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004382# emulator. This is done because older glibc versions don't
4383# have syscall stubs for these implemented. In that case we
4384# don't provide them even if kernel supports them.
4385#
4386inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004387cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004388#include <sys/inotify.h>
4389
4390int
4391main(void)
4392{
4393 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004394 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004395}
4396EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004397if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004398 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004399fi
4400
Riku Voipioc05c7a72010-03-26 15:25:11 +00004401inotify1=no
4402cat > $TMPC << EOF
4403#include <sys/inotify.h>
4404
4405int
4406main(void)
4407{
4408 /* try to start inotify */
4409 return inotify_init1(0);
4410}
4411EOF
4412if compile_prog "" "" ; then
4413 inotify1=yes
4414fi
4415
Riku Voipio099d6b02009-05-05 12:10:04 +03004416# check if pipe2 is there
4417pipe2=no
4418cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004419#include <unistd.h>
4420#include <fcntl.h>
4421
4422int main(void)
4423{
4424 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004425 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004426}
4427EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004428if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004429 pipe2=yes
4430fi
4431
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004432# check if accept4 is there
4433accept4=no
4434cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004435#include <sys/socket.h>
4436#include <stddef.h>
4437
4438int main(void)
4439{
4440 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4441 return 0;
4442}
4443EOF
4444if compile_prog "" "" ; then
4445 accept4=yes
4446fi
4447
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304448# check if tee/splice is there. vmsplice was added same time.
4449splice=no
4450cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304451#include <unistd.h>
4452#include <fcntl.h>
4453#include <limits.h>
4454
4455int main(void)
4456{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004457 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304458 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4459 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4460 return 0;
4461}
4462EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004463if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304464 splice=yes
4465fi
4466
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004467##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004468# libnuma probe
4469
4470if test "$numa" != "no" ; then
4471 cat > $TMPC << EOF
4472#include <numa.h>
4473int main(void) { return numa_available(); }
4474EOF
4475
4476 if compile_prog "" "-lnuma" ; then
4477 numa=yes
4478 libs_softmmu="-lnuma $libs_softmmu"
4479 else
4480 if test "$numa" = "yes" ; then
4481 feature_not_found "numa" "install numactl devel"
4482 fi
4483 numa=no
4484 fi
4485fi
4486
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004487if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4488 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4489 exit 1
4490fi
4491
Yang Zhong5a22ab72017-12-20 21:16:46 +08004492# Even if malloc_trim() is available, these non-libc memory allocators
4493# do not support it.
4494if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4495 if test "$malloc_trim" = "yes" ; then
4496 echo "Disabling malloc_trim with non-libc memory allocator"
4497 fi
4498 malloc_trim="no"
4499fi
4500
4501#######################################
4502# malloc_trim
4503
4504if test "$malloc_trim" != "no" ; then
4505 cat > $TMPC << EOF
4506#include <malloc.h>
4507int main(void) { malloc_trim(0); return 0; }
4508EOF
4509 if compile_prog "" "" ; then
4510 malloc_trim="yes"
4511 else
4512 malloc_trim="no"
4513 fi
4514fi
4515
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004516##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004517# tcmalloc probe
4518
4519if test "$tcmalloc" = "yes" ; then
4520 cat > $TMPC << EOF
4521#include <stdlib.h>
4522int main(void) { malloc(1); return 0; }
4523EOF
4524
4525 if compile_prog "" "-ltcmalloc" ; then
4526 LIBS="-ltcmalloc $LIBS"
4527 else
4528 feature_not_found "tcmalloc" "install gperftools devel"
4529 fi
4530fi
4531
4532##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004533# jemalloc probe
4534
4535if test "$jemalloc" = "yes" ; then
4536 cat > $TMPC << EOF
4537#include <stdlib.h>
4538int main(void) { malloc(1); return 0; }
4539EOF
4540
4541 if compile_prog "" "-ljemalloc" ; then
4542 LIBS="-ljemalloc $LIBS"
4543 else
4544 feature_not_found "jemalloc" "install jemalloc devel"
4545 fi
4546fi
4547
4548##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004549# signalfd probe
4550signalfd="no"
4551cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004552#include <unistd.h>
4553#include <sys/syscall.h>
4554#include <signal.h>
4555int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4556EOF
4557
4558if compile_prog "" "" ; then
4559 signalfd=yes
4560fi
4561
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004562# check if optreset global is declared by <getopt.h>
4563optreset="no"
4564cat > $TMPC << EOF
4565#include <getopt.h>
4566int main(void) { return optreset; }
4567EOF
4568
4569if compile_prog "" "" ; then
4570 optreset=yes
4571fi
4572
Riku Voipioc2882b92009-08-12 15:08:24 +03004573# check if eventfd is supported
4574eventfd=no
4575cat > $TMPC << EOF
4576#include <sys/eventfd.h>
4577
4578int main(void)
4579{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004580 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004581}
4582EOF
4583if compile_prog "" "" ; then
4584 eventfd=yes
4585fi
4586
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004587# check if memfd is supported
4588memfd=no
4589cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004590#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004591
4592int main(void)
4593{
4594 return memfd_create("foo", MFD_ALLOW_SEALING);
4595}
4596EOF
4597if compile_prog "" "" ; then
4598 memfd=yes
4599fi
4600
Cortland Tölva955727d2018-10-08 09:35:19 -07004601# check for usbfs
4602have_usbfs=no
4603if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004604 cat > $TMPC << EOF
4605#include <linux/usbdevice_fs.h>
4606
4607#ifndef USBDEVFS_GET_CAPABILITIES
4608#error "USBDEVFS_GET_CAPABILITIES undefined"
4609#endif
4610
4611#ifndef USBDEVFS_DISCONNECT_CLAIM
4612#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4613#endif
4614
4615int main(void)
4616{
4617 return 0;
4618}
4619EOF
4620 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004621 have_usbfs=yes
4622 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004623fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004624
Ulrich Hechtd0927932009-09-17 20:22:14 +03004625# check for fallocate
4626fallocate=no
4627cat > $TMPC << EOF
4628#include <fcntl.h>
4629
4630int main(void)
4631{
4632 fallocate(0, 0, 0, 0);
4633 return 0;
4634}
4635EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004636if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004637 fallocate=yes
4638fi
4639
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004640# check for fallocate hole punching
4641fallocate_punch_hole=no
4642cat > $TMPC << EOF
4643#include <fcntl.h>
4644#include <linux/falloc.h>
4645
4646int main(void)
4647{
4648 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4649 return 0;
4650}
4651EOF
4652if compile_prog "" "" ; then
4653 fallocate_punch_hole=yes
4654fi
4655
Denis V. Lunevb953f072015-01-30 11:42:14 +03004656# check that fallocate supports range zeroing inside the file
4657fallocate_zero_range=no
4658cat > $TMPC << EOF
4659#include <fcntl.h>
4660#include <linux/falloc.h>
4661
4662int main(void)
4663{
4664 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4665 return 0;
4666}
4667EOF
4668if compile_prog "" "" ; then
4669 fallocate_zero_range=yes
4670fi
4671
Kevin Wolfed911432014-09-29 17:12:59 +02004672# check for posix_fallocate
4673posix_fallocate=no
4674cat > $TMPC << EOF
4675#include <fcntl.h>
4676
4677int main(void)
4678{
4679 posix_fallocate(0, 0, 0);
4680 return 0;
4681}
4682EOF
4683if compile_prog "" "" ; then
4684 posix_fallocate=yes
4685fi
4686
Peter Maydellc727f472011-01-06 11:05:10 +00004687# check for sync_file_range
4688sync_file_range=no
4689cat > $TMPC << EOF
4690#include <fcntl.h>
4691
4692int main(void)
4693{
4694 sync_file_range(0, 0, 0, 0);
4695 return 0;
4696}
4697EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004698if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004699 sync_file_range=yes
4700fi
4701
Peter Maydelldace20d2011-01-10 13:11:24 +00004702# check for linux/fiemap.h and FS_IOC_FIEMAP
4703fiemap=no
4704cat > $TMPC << EOF
4705#include <sys/ioctl.h>
4706#include <linux/fs.h>
4707#include <linux/fiemap.h>
4708
4709int main(void)
4710{
4711 ioctl(0, FS_IOC_FIEMAP, 0);
4712 return 0;
4713}
4714EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004715if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004716 fiemap=yes
4717fi
4718
Ulrich Hechtd0927932009-09-17 20:22:14 +03004719# check for dup3
4720dup3=no
4721cat > $TMPC << EOF
4722#include <unistd.h>
4723
4724int main(void)
4725{
4726 dup3(0, 0, 0);
4727 return 0;
4728}
4729EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004730if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004731 dup3=yes
4732fi
4733
Alex Bligh4e0c6522013-08-21 16:02:43 +01004734# check for ppoll support
4735ppoll=no
4736cat > $TMPC << EOF
4737#include <poll.h>
4738
4739int main(void)
4740{
4741 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4742 ppoll(&pfd, 1, 0, 0);
4743 return 0;
4744}
4745EOF
4746if compile_prog "" "" ; then
4747 ppoll=yes
4748fi
4749
Alex Blighcd758dd2013-08-21 16:02:44 +01004750# check for prctl(PR_SET_TIMERSLACK , ... ) support
4751prctl_pr_set_timerslack=no
4752cat > $TMPC << EOF
4753#include <sys/prctl.h>
4754
4755int main(void)
4756{
4757 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4758 return 0;
4759}
4760EOF
4761if compile_prog "" "" ; then
4762 prctl_pr_set_timerslack=yes
4763fi
4764
Peter Maydell3b6edd12011-02-15 18:35:05 +00004765# check for epoll support
4766epoll=no
4767cat > $TMPC << EOF
4768#include <sys/epoll.h>
4769
4770int main(void)
4771{
4772 epoll_create(0);
4773 return 0;
4774}
4775EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004776if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004777 epoll=yes
4778fi
4779
Peter Maydell227f0212016-06-06 19:58:11 +01004780# epoll_create1 is a later addition
4781# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004782epoll_create1=no
4783cat > $TMPC << EOF
4784#include <sys/epoll.h>
4785
4786int main(void)
4787{
Peter Maydell19e83f62011-04-26 16:56:40 +01004788 /* Note that we use epoll_create1 as a value, not as
4789 * a function being called. This is necessary so that on
4790 * old SPARC glibc versions where the function was present in
4791 * the library but not declared in the header file we will
4792 * fail the configure check. (Otherwise we will get a compiler
4793 * warning but not an error, and will proceed to fail the
4794 * qemu compile where we compile with -Werror.)
4795 */
Blue Swirlc075a722012-08-09 20:21:25 +00004796 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004797}
4798EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004799if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004800 epoll_create1=yes
4801fi
4802
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004803# check for sendfile support
4804sendfile=no
4805cat > $TMPC << EOF
4806#include <sys/sendfile.h>
4807
4808int main(void)
4809{
4810 return sendfile(0, 0, 0, 0);
4811}
4812EOF
4813if compile_prog "" "" ; then
4814 sendfile=yes
4815fi
4816
Riku Voipio51834342014-06-22 11:25:42 +01004817# check for timerfd support (glibc 2.8 and newer)
4818timerfd=no
4819cat > $TMPC << EOF
4820#include <sys/timerfd.h>
4821
4822int main(void)
4823{
4824 return(timerfd_create(CLOCK_REALTIME, 0));
4825}
4826EOF
4827if compile_prog "" "" ; then
4828 timerfd=yes
4829fi
4830
Riku Voipio9af5c902014-08-12 15:58:57 +03004831# check for setns and unshare support
4832setns=no
4833cat > $TMPC << EOF
4834#include <sched.h>
4835
4836int main(void)
4837{
4838 int ret;
4839 ret = setns(0, 0);
4840 ret = unshare(0);
4841 return ret;
4842}
4843EOF
4844if compile_prog "" "" ; then
4845 setns=yes
4846fi
4847
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004848# clock_adjtime probe
4849clock_adjtime=no
4850cat > $TMPC <<EOF
4851#include <time.h>
4852
4853int main(void)
4854{
4855 return clock_adjtime(0, 0);
4856}
4857EOF
4858clock_adjtime=no
4859if compile_prog "" "" ; then
4860 clock_adjtime=yes
4861fi
4862
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004863# syncfs probe
4864syncfs=no
4865cat > $TMPC <<EOF
4866#include <unistd.h>
4867
4868int main(void)
4869{
4870 return syncfs(0);
4871}
4872EOF
4873syncfs=no
4874if compile_prog "" "" ; then
4875 syncfs=yes
4876fi
4877
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004878# check for kcov support (kernel must be 4.4+, compiled with certain options)
4879kcov=no
4880if check_include sys/kcov.h ; then
4881 kcov=yes
4882fi
4883
Peter Maydell5f71eac2019-03-07 14:26:46 +00004884# Check we have a new enough version of sphinx-build
4885has_sphinx_build() {
4886 # This is a bit awkward but works: create a trivial document and
4887 # try to run it with our configuration file (which enforces a
4888 # version requirement). This will fail if either
4889 # sphinx-build doesn't exist at all or if it is too old.
4890 mkdir -p "$TMPDIR1/sphinx"
4891 touch "$TMPDIR1/sphinx/index.rst"
Markus Armbruster903458c2020-02-14 18:18:41 +01004892 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004893}
4894
pbrookcc8ae6d2006-04-23 17:57:59 +00004895# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004896if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004897 if has_sphinx_build; then
4898 sphinx_ok=yes
4899 else
4900 sphinx_ok=no
4901 fi
4902 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004903 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004904 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004905 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004906 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4907 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4908 fi
4909 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004910 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004911 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004912 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004913fi
4914
Stefan Weilf514f412009-10-11 12:44:07 +02004915# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004916byteswap_h=no
4917cat > $TMPC << EOF
4918#include <byteswap.h>
4919int main(void) { return bswap_32(0); }
4920EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004921if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004922 byteswap_h=yes
4923fi
4924
Stefan Weil75f13592013-01-05 12:17:38 +01004925# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004926bswap_h=no
4927cat > $TMPC << EOF
4928#include <sys/endian.h>
4929#include <sys/types.h>
4930#include <machine/bswap.h>
4931int main(void) { return bswap32(0); }
4932EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004933if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004934 bswap_h=yes
4935fi
4936
aliguorida93a1f2008-12-12 20:02:52 +00004937##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004938# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004939if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004940 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004941 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004942 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4943 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004944 else
4945 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004946 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004947 fi
4948 libiscsi="no"
4949 fi
4950fi
4951
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004952##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004953# Do we need libm
4954cat > $TMPC << EOF
4955#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004956int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004957EOF
4958if compile_prog "" "" ; then
4959 :
4960elif compile_prog "" "-lm" ; then
4961 LIBS="-lm $LIBS"
4962 libs_qga="-lm $libs_qga"
4963else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004964 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004965fi
4966
4967##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004968# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004969# uClibc provides 2 versions of clock_gettime(), one with realtime
4970# support and one without. This means that the clock_gettime() don't
4971# need -lrt. We still need it for timer_create() so we check for this
4972# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004973cat > $TMPC <<EOF
4974#include <signal.h>
4975#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004976int main(void) {
4977 timer_create(CLOCK_REALTIME, NULL, NULL);
4978 return clock_gettime(CLOCK_REALTIME, NULL);
4979}
aliguorida93a1f2008-12-12 20:02:52 +00004980EOF
4981
Juan Quintela52166aa2009-08-03 14:46:03 +02004982if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004983 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004984# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004985elif compile_prog "" "$pthread_lib -lrt" ; then
4986 LIBS="$LIBS -lrt"
4987 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004988fi
4989
Thomas Huthd99e97e2019-01-17 18:14:08 +01004990# Check whether we need to link libutil for openpty()
4991cat > $TMPC << EOF
4992extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4993int main(void) { return openpty(0, 0, 0, 0, 0); }
4994EOF
4995
4996if ! compile_prog "" "" ; then
4997 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004998 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004999 libs_tools="-lutil $libs_tools"
5000 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005001fi
5002
Blue Swirlde5071c2009-09-12 09:58:46 +00005003##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005004# spice probe
5005if test "$spice" != "no" ; then
5006 cat > $TMPC << EOF
5007#include <spice.h>
5008int main(void) { spice_server_new(); return 0; }
5009EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005010 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5011 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005012 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005013 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005014 compile_prog "$spice_cflags" "$spice_libs" ; then
5015 spice="yes"
5016 libs_softmmu="$libs_softmmu $spice_libs"
5017 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005018 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5019 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005020 else
5021 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005022 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005023 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005024 fi
5025 spice="no"
5026 fi
5027fi
5028
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005029# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005030if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005031 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005032 libcacard_cflags=$($pkg_config --cflags libcacard)
5033 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005034 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005035 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005036 if test "$smartcard" = "yes"; then
5037 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005038 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005039 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005040 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005041fi
5042
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005043# check for libusb
5044if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005045 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005046 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005047 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5048 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005049 else
5050 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005051 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005052 fi
5053 libusb="no"
5054 fi
5055fi
5056
Hans de Goede69354a82011-07-19 11:04:10 +02005057# check for usbredirparser for usb network redirection support
5058if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005059 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005060 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005061 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5062 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005063 else
5064 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005065 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005066 fi
5067 usb_redir="no"
5068 fi
5069fi
5070
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005071##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005072# check if we have VSS SDK headers for win
5073
Eric Blakee633a5c2019-02-04 20:39:37 -06005074if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5075 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005076 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005077 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005078 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5079 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005080 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005081 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5082 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005083 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005084 esac
5085 cat > $TMPC << EOF
5086#define __MIDL_user_allocate_free_DEFINED__
5087#include <inc/win2003/vss.h>
5088int main(void) { return VSS_CTX_BACKUP; }
5089EOF
5090 if compile_prog "$vss_win32_include" "" ; then
5091 guest_agent_with_vss="yes"
5092 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005093 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005094 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005095 else
5096 if test "$vss_win32_sdk" != "" ; then
5097 echo "ERROR: Please download and install Microsoft VSS SDK:"
5098 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5099 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5100 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5101 echo "ERROR: The headers are extracted in the directory \`inc'."
5102 feature_not_found "VSS support"
5103 fi
5104 guest_agent_with_vss="no"
5105 fi
5106fi
5107
5108##########################################
5109# lookup Windows platform SDK (if not specified)
5110# The SDK is needed only to build .tlb (type library) file of guest agent
5111# VSS provider from the source. It is usually unnecessary because the
5112# pre-compiled .tlb file is included.
5113
Eric Blakee633a5c2019-02-04 20:39:37 -06005114if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5115 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005116 if test -z "$win_sdk"; then
5117 programfiles="$PROGRAMFILES"
5118 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5119 if test -n "$programfiles"; then
5120 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5121 else
5122 feature_not_found "Windows SDK"
5123 fi
5124 elif test "$win_sdk" = "no"; then
5125 win_sdk=""
5126 fi
5127fi
5128
5129##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005130# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005131if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005132 cat > $TMPC << EOF
5133#include <windows.h>
5134#include <ntddscsi.h>
5135int main(void) {
5136#if !defined(IOCTL_SCSI_GET_ADDRESS)
5137#error Missing required ioctl definitions
5138#endif
5139 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5140 return addr.Lun;
5141}
5142EOF
5143 if compile_prog "" "" ; then
5144 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005145 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005146 fi
5147fi
5148
5149##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005150# virgl renderer probe
5151
5152if test "$virglrenderer" != "no" ; then
5153 cat > $TMPC << EOF
5154#include <virglrenderer.h>
5155int main(void) { virgl_renderer_poll(); return 0; }
5156EOF
5157 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5158 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005159 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005160 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5161 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5162 virglrenderer="yes"
5163 else
5164 if test "$virglrenderer" = "yes" ; then
5165 feature_not_found "virglrenderer"
5166 fi
5167 virglrenderer="no"
5168 fi
5169fi
5170
5171##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005172# capstone
5173
Richard Hendersone219c492017-09-28 09:01:23 -07005174case "$capstone" in
5175 "" | yes)
5176 if $pkg_config capstone; then
5177 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005178 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005179 capstone=git
5180 elif test -e "${source_path}/capstone/Makefile" ; then
5181 capstone=internal
5182 elif test -z "$capstone" ; then
5183 capstone=no
5184 else
5185 feature_not_found "capstone" "Install capstone devel or git submodule"
5186 fi
5187 ;;
5188
5189 system)
5190 if ! $pkg_config capstone; then
5191 feature_not_found "capstone" "Install capstone devel"
5192 fi
5193 ;;
5194esac
5195
5196case "$capstone" in
5197 git | internal)
5198 if test "$capstone" = git; then
5199 git_submodules="${git_submodules} capstone"
5200 fi
5201 mkdir -p capstone
5202 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5203 if test "$mingw32" = "yes"; then
5204 LIBCAPSTONE=capstone.lib
5205 else
5206 LIBCAPSTONE=libcapstone.a
5207 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005208 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005209 ;;
5210
5211 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005212 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005213 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005214 ;;
5215
5216 no)
5217 ;;
5218 *)
5219 error_exit "Unknown state for capstone: $capstone"
5220 ;;
5221esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005222
5223##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005224# check if we have fdatasync
5225
5226fdatasync=no
5227cat > $TMPC << EOF
5228#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005229int main(void) {
5230#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5231return fdatasync(0);
5232#else
Stefan Weile172fe12012-04-06 21:33:20 +02005233#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005234#endif
5235}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005236EOF
5237if compile_prog "" "" ; then
5238 fdatasync=yes
5239fi
5240
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005241##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005242# check if we have madvise
5243
5244madvise=no
5245cat > $TMPC << EOF
5246#include <sys/types.h>
5247#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005248#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005249int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5250EOF
5251if compile_prog "" "" ; then
5252 madvise=yes
5253fi
5254
5255##########################################
5256# check if we have posix_madvise
5257
5258posix_madvise=no
5259cat > $TMPC << EOF
5260#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005261#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005262int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5263EOF
5264if compile_prog "" "" ; then
5265 posix_madvise=yes
5266fi
5267
5268##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005269# check if we have posix_memalign()
5270
5271posix_memalign=no
5272cat > $TMPC << EOF
5273#include <stdlib.h>
5274int main(void) {
5275 void *p;
5276 return posix_memalign(&p, 8, 8);
5277}
5278EOF
5279if compile_prog "" "" ; then
5280 posix_memalign=yes
5281fi
5282
5283##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005284# check if we have posix_syslog
5285
5286posix_syslog=no
5287cat > $TMPC << EOF
5288#include <syslog.h>
5289int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5290EOF
5291if compile_prog "" "" ; then
5292 posix_syslog=yes
5293fi
5294
5295##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005296# check if we have sem_timedwait
5297
5298sem_timedwait=no
5299cat > $TMPC << EOF
5300#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005301int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005302EOF
5303if compile_prog "" "" ; then
5304 sem_timedwait=yes
5305fi
5306
5307##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005308# check if we have strchrnul
5309
5310strchrnul=no
5311cat > $TMPC << EOF
5312#include <string.h>
5313int main(void);
5314// Use a haystack that the compiler shouldn't be able to constant fold
5315char *haystack = (char*)&main;
5316int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5317EOF
5318if compile_prog "" "" ; then
5319 strchrnul=yes
5320fi
5321
Jiufei Xue8a792b02019-04-17 03:08:56 +08005322#########################################
5323# check if we have st_atim
5324
5325st_atim=no
5326cat > $TMPC << EOF
5327#include <sys/stat.h>
5328#include <stddef.h>
5329int main(void) { return offsetof(struct stat, st_atim); }
5330EOF
5331if compile_prog "" "" ; then
5332 st_atim=yes
5333fi
5334
Keno Fischer5c99fa32018-06-29 12:32:10 +02005335##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005336# check if trace backend exists
5337
Lluís Vilanova5b808272014-05-27 15:02:14 +02005338$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005339if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005340 error_exit "invalid trace backends" \
5341 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005342fi
5343
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005344##########################################
5345# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005346if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005347 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005348#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005349int main(void) { return 0; }
5350EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005351 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005352 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005353 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005354 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005355 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005356 fi
5357 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005358 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005359 else
5360 urcu_bp_libs="-lurcu-bp"
5361 fi
5362
5363 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5364 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005365 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005366 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005367 fi
5368fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005369
5370##########################################
5371# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005372if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005373 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005374 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005375 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005376 trace_backend_stap="no"
5377 if has 'stap' ; then
5378 trace_backend_stap="yes"
5379 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005380fi
5381
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005382##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005383# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305384
Peter Maydell7c2acc72013-04-08 12:11:27 +01005385# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005386# is sigcontext. On Windows the only valid backend is the Windows
5387# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005388
5389ucontext_works=no
5390if test "$darwin" != "yes"; then
5391 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305392#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005393#ifdef __stub_makecontext
5394#error Ignoring glibc stub makecontext which will always fail
5395#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005396int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305397EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005398 if compile_prog "" "" ; then
5399 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305400 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005401fi
5402
5403if test "$coroutine" = ""; then
5404 if test "$mingw32" = "yes"; then
5405 coroutine=win32
5406 elif test "$ucontext_works" = "yes"; then
5407 coroutine=ucontext
5408 else
5409 coroutine=sigaltstack
5410 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005411else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005412 case $coroutine in
5413 windows)
5414 if test "$mingw32" != "yes"; then
5415 error_exit "'windows' coroutine backend only valid for Windows"
5416 fi
5417 # Unfortunately the user visible backend name doesn't match the
5418 # coroutine-*.c filename for this case, so we have to adjust it here.
5419 coroutine=win32
5420 ;;
5421 ucontext)
5422 if test "$ucontext_works" != "yes"; then
5423 feature_not_found "ucontext"
5424 fi
5425 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005426 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005427 if test "$mingw32" = "yes"; then
5428 error_exit "only the 'windows' coroutine backend is valid for Windows"
5429 fi
5430 ;;
5431 *)
5432 error_exit "unknown coroutine backend $coroutine"
5433 ;;
5434 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305435fi
5436
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005437if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005438 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005439fi
5440
Peter Lieven7d992e42016-09-27 11:58:45 +02005441if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005442 if test "$coroutine_pool" = "yes"; then
5443 echo "WARN: disabling coroutine pool for stack usage debugging"
5444 coroutine_pool=no
5445 fi
5446fi
5447
5448
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305449##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305450# check if we have open_by_handle_at
5451
Stefan Weil4e1797f2012-06-18 22:11:06 +02005452open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305453cat > $TMPC << EOF
5454#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005455#if !defined(AT_EMPTY_PATH)
5456# error missing definition
5457#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005458int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005459#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305460EOF
5461if compile_prog "" "" ; then
5462 open_by_handle_at=yes
5463fi
5464
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305465########################################
5466# check if we have linux/magic.h
5467
5468linux_magic_h=no
5469cat > $TMPC << EOF
5470#include <linux/magic.h>
5471int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005472 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305473}
5474EOF
5475if compile_prog "" "" ; then
5476 linux_magic_h=yes
5477fi
5478
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005479########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005480# check whether we can disable warning option with a pragma (this is needed
5481# to silence warnings in the headers of some versions of external libraries).
5482# This test has to be compiled with -Werror as otherwise an unknown pragma is
5483# only a warning.
5484#
5485# If we can't selectively disable warning in the code, disable -Werror so that
5486# the build doesn't fail anyway.
5487
Peter Maydell06d71fa2012-07-30 16:13:07 +01005488pragma_disable_unused_but_set=no
5489cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005490#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005491#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005492#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005493
Peter Maydell06d71fa2012-07-30 16:13:07 +01005494int main(void) {
5495 return 0;
5496}
5497EOF
5498if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005499 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005500else
5501 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005502fi
5503
5504########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005505# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005506
5507valgrind_h=no
5508cat > $TMPC << EOF
5509#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005510int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005511 return 0;
5512}
5513EOF
5514if compile_prog "" "" ; then
5515 valgrind_h=yes
5516fi
5517
5518########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005519# check if environ is declared
5520
5521has_environ=no
5522cat > $TMPC << EOF
5523#include <unistd.h>
5524int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005525 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005526 return 0;
5527}
5528EOF
5529if compile_prog "" "" ; then
5530 has_environ=yes
5531fi
5532
Richard Henderson76a347e2012-12-28 14:17:02 -08005533########################################
5534# check if cpuid.h is usable.
5535
Richard Henderson76a347e2012-12-28 14:17:02 -08005536cat > $TMPC << EOF
5537#include <cpuid.h>
5538int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005539 unsigned a, b, c, d;
5540 int max = __get_cpuid_max(0, 0);
5541
5542 if (max >= 1) {
5543 __cpuid(1, a, b, c, d);
5544 }
5545
5546 if (max >= 7) {
5547 __cpuid_count(7, 0, a, b, c, d);
5548 }
5549
5550 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005551}
5552EOF
5553if compile_prog "" "" ; then
5554 cpuid_h=yes
5555fi
5556
Richard Henderson5dd89902017-07-18 18:40:18 -10005557##########################################
5558# avx2 optimization requirement check
5559#
5560# There is no point enabling this if cpuid.h is not usable,
5561# since we won't be able to select the new routines.
5562
Eric Blakee633a5c2019-02-04 20:39:37 -06005563if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005564 cat > $TMPC << EOF
5565#pragma GCC push_options
5566#pragma GCC target("avx2")
5567#include <cpuid.h>
5568#include <immintrin.h>
5569static int bar(void *a) {
5570 __m256i x = *(__m256i *)a;
5571 return _mm256_testz_si256(x, x);
5572}
5573int main(int argc, char *argv[]) { return bar(argv[0]); }
5574EOF
5575 if compile_object "" ; then
5576 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005577 else
5578 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005579 fi
5580fi
5581
Richard Hendersonf5401662013-02-16 12:46:59 -08005582########################################
5583# check if __[u]int128_t is usable.
5584
5585int128=no
5586cat > $TMPC << EOF
5587__int128_t a;
5588__uint128_t b;
5589int main (void) {
5590 a = a + b;
5591 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005592 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005593 return 0;
5594}
5595EOF
5596if compile_prog "" "" ; then
5597 int128=yes
5598fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005599
Richard Henderson7ebee432016-06-29 21:10:59 -07005600#########################################
5601# See if 128-bit atomic operations are supported.
5602
5603atomic128=no
5604if test "$int128" = "yes"; then
5605 cat > $TMPC << EOF
5606int main(void)
5607{
5608 unsigned __int128 x = 0, y = 0;
5609 y = __atomic_load_16(&x, 0);
5610 __atomic_store_16(&x, y, 0);
5611 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5612 return 0;
5613}
5614EOF
5615 if compile_prog "" "" ; then
5616 atomic128=yes
5617 fi
5618fi
5619
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005620cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005621if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005622 cat > $TMPC << EOF
5623int main(void)
5624{
5625 unsigned __int128 x = 0, y = 0;
5626 __sync_val_compare_and_swap_16(&x, y, x);
5627 return 0;
5628}
5629EOF
5630 if compile_prog "" "" ; then
5631 cmpxchg128=yes
5632 fi
5633fi
5634
Richard Hendersondf79b992016-09-02 12:23:57 -07005635#########################################
5636# See if 64-bit atomic operations are supported.
5637# Note that without __atomic builtins, we can only
5638# assume atomic loads/stores max at pointer size.
5639
5640cat > $TMPC << EOF
5641#include <stdint.h>
5642int main(void)
5643{
5644 uint64_t x = 0, y = 0;
5645#ifdef __ATOMIC_RELAXED
5646 y = __atomic_load_8(&x, 0);
5647 __atomic_store_8(&x, y, 0);
5648 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5649 __atomic_exchange_8(&x, y, 0);
5650 __atomic_fetch_add_8(&x, y, 0);
5651#else
5652 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5653 __sync_lock_test_and_set(&x, y);
5654 __sync_val_compare_and_swap(&x, y, 0);
5655 __sync_fetch_and_add(&x, y);
5656#endif
5657 return 0;
5658}
5659EOF
5660if compile_prog "" "" ; then
5661 atomic64=yes
5662fi
5663
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005664#########################################
5665# See if --dynamic-list is supported by the linker
5666ld_dynamic_list="no"
5667if test "$static" = "no" ; then
5668 cat > $TMPTXT <<EOF
5669{
5670 foo;
5671};
5672EOF
5673
5674 cat > $TMPC <<EOF
5675#include <stdio.h>
5676void foo(void);
5677
5678void foo(void)
5679{
5680 printf("foo\n");
5681}
5682
5683int main(void)
5684{
5685 foo();
5686 return 0;
5687}
5688EOF
5689
5690 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5691 ld_dynamic_list="yes"
5692 fi
5693fi
5694
5695#########################################
5696# See if -exported_symbols_list is supported by the linker
5697
5698ld_exported_symbols_list="no"
5699if test "$static" = "no" ; then
5700 cat > $TMPTXT <<EOF
5701 _foo
5702EOF
5703
5704 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5705 ld_exported_symbols_list="yes"
5706 fi
5707fi
5708
5709if test "$plugins" = "yes" &&
5710 test "$ld_dynamic_list" = "no" &&
5711 test "$ld_exported_symbols_list" = "no" ; then
5712 error_exit \
5713 "Plugin support requires dynamic linking and specifying a set of symbols " \
5714 "that are exported to plugins. Unfortunately your linker doesn't " \
5715 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5716 "for this purpose. You can't build with --static."
5717fi
5718
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005719########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005720# See if 16-byte vector operations are supported.
5721# Even without a vector unit the compiler may expand these.
5722# There is a bug in old GCC for PPC that crashes here.
5723# Unfortunately it's the system compiler for Centos 7.
5724
5725cat > $TMPC << EOF
5726typedef unsigned char U1 __attribute__((vector_size(16)));
5727typedef unsigned short U2 __attribute__((vector_size(16)));
5728typedef unsigned int U4 __attribute__((vector_size(16)));
5729typedef unsigned long long U8 __attribute__((vector_size(16)));
5730typedef signed char S1 __attribute__((vector_size(16)));
5731typedef signed short S2 __attribute__((vector_size(16)));
5732typedef signed int S4 __attribute__((vector_size(16)));
5733typedef signed long long S8 __attribute__((vector_size(16)));
5734static U1 a1, b1;
5735static U2 a2, b2;
5736static U4 a4, b4;
5737static U8 a8, b8;
5738static S1 c1;
5739static S2 c2;
5740static S4 c4;
5741static S8 c8;
5742static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005743void helper(void *d, void *a, int shift, int i);
5744void helper(void *d, void *a, int shift, int i)
5745{
5746 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5747 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5748 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5749 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5750}
Richard Hendersondb432672017-09-15 14:11:45 -07005751int main(void)
5752{
5753 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5754 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5755 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5756 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5757 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5758 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5759 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5760 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5761 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5762 return 0;
5763}
5764EOF
5765
5766vector16=no
5767if compile_prog "" "" ; then
5768 vector16=yes
5769fi
5770
5771########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005772# See if __attribute__((alias)) is supported.
5773# This false for Xcode 9, but has been remedied for Xcode 10.
5774# Unfortunately, travis uses Xcode 9 by default.
5775
5776attralias=no
5777cat > $TMPC << EOF
5778int x = 1;
5779extern const int y __attribute__((alias("x")));
5780int main(void) { return 0; }
5781EOF
5782if compile_prog "" "" ; then
5783 attralias=yes
5784fi
5785
5786########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005787# check if getauxval is available.
5788
5789getauxval=no
5790cat > $TMPC << EOF
5791#include <sys/auxv.h>
5792int main(void) {
5793 return getauxval(AT_HWCAP) == 0;
5794}
5795EOF
5796if compile_prog "" "" ; then
5797 getauxval=yes
5798fi
5799
John Snowfd0e6052015-03-25 18:57:39 -04005800########################################
5801# check if ccache is interfering with
5802# semantic analysis of macros
5803
John Snow5e4dfd32015-10-28 13:56:40 -04005804unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005805ccache_cpp2=no
5806cat > $TMPC << EOF
5807static const int Z = 1;
5808#define fn() ({ Z; })
5809#define TAUT(X) ((X) == Z)
5810#define PAREN(X, Y) (X == Y)
5811#define ID(X) (X)
5812int main(int argc, char *argv[])
5813{
5814 int x = 0, y = 0;
5815 x = ID(x);
5816 x = fn();
5817 fn();
5818 if (PAREN(x, y)) return 0;
5819 if (TAUT(Z)) return 0;
5820 return 0;
5821}
5822EOF
5823
5824if ! compile_object "-Werror"; then
5825 ccache_cpp2=yes
5826fi
5827
John Snowb553a042015-11-03 15:43:42 -05005828#################################################
5829# clang does not support glibc + FORTIFY_SOURCE.
5830
5831if test "$fortify_source" != "no"; then
5832 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5833 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005834 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005835 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005836 fortify_source="no";
5837 else
5838 fortify_source="yes"
5839 fi
5840fi
5841
Fam Zheng1efad062018-06-01 17:26:43 +08005842###############################################
5843# Check if copy_file_range is provided by glibc
5844have_copy_file_range=no
5845cat > $TMPC << EOF
5846#include <unistd.h>
5847int main(void) {
5848 copy_file_range(0, NULL, 0, NULL, 0, 0);
5849 return 0;
5850}
5851EOF
5852if compile_prog "" "" ; then
5853 have_copy_file_range=yes
5854fi
5855
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305856##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005857# check if struct fsxattr is available via linux/fs.h
5858
5859have_fsxattr=no
5860cat > $TMPC << EOF
5861#include <linux/fs.h>
5862struct fsxattr foo;
5863int main(void) {
5864 return 0;
5865}
5866EOF
5867if compile_prog "" "" ; then
5868 have_fsxattr=yes
5869fi
5870
Peter Maydellb66e10e2016-06-08 18:34:32 +01005871##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005872# check for usable membarrier system call
5873if test "$membarrier" = "yes"; then
5874 have_membarrier=no
5875 if test "$mingw32" = "yes" ; then
5876 have_membarrier=yes
5877 elif test "$linux" = "yes" ; then
5878 cat > $TMPC << EOF
5879 #include <linux/membarrier.h>
5880 #include <sys/syscall.h>
5881 #include <unistd.h>
5882 #include <stdlib.h>
5883 int main(void) {
5884 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5885 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5886 exit(0);
5887 }
5888EOF
5889 if compile_prog "" "" ; then
5890 have_membarrier=yes
5891 fi
5892 fi
5893 if test "$have_membarrier" = "no"; then
5894 feature_not_found "membarrier" "membarrier system call not available"
5895 fi
5896else
5897 # Do not enable it by default even for Mingw32, because it doesn't
5898 # work on Wine.
5899 membarrier=no
5900fi
5901
5902##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005903# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005904have_rtnetlink=no
5905cat > $TMPC << EOF
5906#include <linux/rtnetlink.h>
5907int main(void) {
5908 return IFLA_PROTO_DOWN;
5909}
5910EOF
5911if compile_prog "" "" ; then
5912 have_rtnetlink=yes
5913fi
5914
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005915##########################################
5916# check for usable AF_VSOCK environment
5917have_af_vsock=no
5918cat > $TMPC << EOF
5919#include <errno.h>
5920#include <sys/types.h>
5921#include <sys/socket.h>
5922#if !defined(AF_VSOCK)
5923# error missing AF_VSOCK flag
5924#endif
5925#include <linux/vm_sockets.h>
5926int main(void) {
5927 int sock, ret;
5928 struct sockaddr_vm svm;
5929 socklen_t len = sizeof(svm);
5930 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5931 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5932 if ((ret == -1) && (errno == ENOTCONN)) {
5933 return 0;
5934 }
5935 return -1;
5936}
5937EOF
5938if compile_prog "" "" ; then
5939 have_af_vsock=yes
5940fi
5941
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005942##########################################
5943# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005944have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005945cat > $TMPC << EOF
5946#include <errno.h>
5947#include <sys/types.h>
5948#include <sys/socket.h>
5949#include <linux/if_alg.h>
5950int main(void) {
5951 int sock;
5952 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5953 return sock;
5954}
5955EOF
5956if compile_prog "" "" ; then
5957 have_afalg=yes
5958fi
5959if test "$crypto_afalg" = "yes"
5960then
5961 if test "$have_afalg" != "yes"
5962 then
5963 error_exit "AF_ALG requested but could not be detected"
5964 fi
5965fi
5966
5967
James Clarke6969ec62016-06-06 12:02:50 +01005968#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005969# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005970if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005971 cat > $TMPC << EOF
5972#include <Hypervisor/hv.h>
5973int main() { return 0;}
5974EOF
5975 if ! compile_object ""; then
5976 hvf='no'
5977 else
5978 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01005979 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005980 fi
5981fi
5982
5983#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005984# Sparc implicitly links with --relax, which is
5985# incompatible with -r, so --no-relax should be
5986# given. It does no harm to give it on other
5987# platforms too.
5988
5989# Note: the prototype is needed since QEMU_CFLAGS
5990# contains -Wmissing-prototypes
5991cat > $TMPC << EOF
5992extern int foo(void);
5993int foo(void) { return 0; }
5994EOF
5995if ! compile_object ""; then
5996 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5997fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005998for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5999 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6000 LD_REL_FLAGS=$i
6001 break
6002 fi
6003done
6004if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6005 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006006fi
6007
Jan Vesely277abf12016-04-29 13:15:23 -04006008##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006009# check for sysmacros.h
6010
6011have_sysmacros=no
6012cat > $TMPC << EOF
6013#include <sys/sysmacros.h>
6014int main(void) {
6015 return makedev(0, 0);
6016}
6017EOF
6018if compile_prog "" "" ; then
6019 have_sysmacros=yes
6020fi
6021
6022##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006023# Veritas HyperScale block driver VxHS
6024# Check if libvxhs is installed
6025
6026if test "$vxhs" != "no" ; then
6027 cat > $TMPC <<EOF
6028#include <stdint.h>
6029#include <qnio/qnio_api.h>
6030
6031void *vxhs_callback;
6032
6033int main(void) {
6034 iio_init(QNIO_VERSION, vxhs_callback);
6035 return 0;
6036}
6037EOF
6038 vxhs_libs="-lvxhs -lssl"
6039 if compile_prog "" "$vxhs_libs" ; then
6040 vxhs=yes
6041 else
6042 if test "$vxhs" = "yes" ; then
6043 feature_not_found "vxhs block device" "Install libvxhs See github"
6044 fi
6045 vxhs=no
6046 fi
6047fi
6048
6049##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006050# check for _Static_assert()
6051
6052have_static_assert=no
6053cat > $TMPC << EOF
6054_Static_assert(1, "success");
6055int main(void) {
6056 return 0;
6057}
6058EOF
6059if compile_prog "" "" ; then
6060 have_static_assert=yes
6061fi
6062
6063##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006064# check for utmpx.h, it is missing e.g. on OpenBSD
6065
6066have_utmpx=no
6067cat > $TMPC << EOF
6068#include <utmpx.h>
6069struct utmpx user_info;
6070int main(void) {
6071 return 0;
6072}
6073EOF
6074if compile_prog "" "" ; then
6075 have_utmpx=yes
6076fi
6077
6078##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006079# check for getrandom()
6080
6081have_getrandom=no
6082cat > $TMPC << EOF
6083#include <sys/random.h>
6084int main(void) {
6085 return getrandom(0, 0, GRND_NONBLOCK);
6086}
6087EOF
6088if compile_prog "" "" ; then
6089 have_getrandom=yes
6090fi
6091
6092##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006093# checks for sanitizers
6094
Marc-André Lureau247724c2018-01-16 16:11:51 +01006095have_asan=no
6096have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006097have_asan_iface_h=no
6098have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006099
6100if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006101 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006102 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6103 have_asan=yes
6104 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006105
6106 # we could use a simple skeleton for flags checks, but this also
6107 # detect the static linking issue of ubsan, see also:
6108 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6109 cat > $TMPC << EOF
6110#include <stdlib.h>
6111int main(void) {
6112 void *tmp = malloc(10);
6113 return *(int *)(tmp + 2);
6114}
6115EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006116 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6117 have_ubsan=yes
6118 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006119
6120 if check_include "sanitizer/asan_interface.h" ; then
6121 have_asan_iface_h=yes
6122 fi
6123
6124 cat > $TMPC << EOF
6125#include <sanitizer/asan_interface.h>
6126int main(void) {
6127 __sanitizer_start_switch_fiber(0, 0, 0);
6128 return 0;
6129}
6130EOF
6131 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6132 have_asan_iface_fiber=yes
6133 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006134fi
6135
6136##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006137# checks for fuzzer
6138if test "$fuzzing" = "yes" ; then
6139 write_c_fuzzer_skeleton
6140 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6141 have_fuzzer=yes
6142 fi
6143fi
6144
6145##########################################
Junyan He17824402018-07-18 15:47:59 +08006146# check for libpmem
6147
6148if test "$libpmem" != "no"; then
6149 if $pkg_config --exists "libpmem"; then
6150 libpmem="yes"
6151 libpmem_libs=$($pkg_config --libs libpmem)
6152 libpmem_cflags=$($pkg_config --cflags libpmem)
6153 libs_softmmu="$libs_softmmu $libpmem_libs"
6154 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6155 else
6156 if test "$libpmem" = "yes" ; then
6157 feature_not_found "libpmem" "Install nvml or pmdk"
6158 fi
6159 libpmem="no"
6160 fi
6161fi
6162
6163##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006164# check for slirp
6165
Laurent Vivierd5999382019-06-21 15:05:44 +02006166# slirp is only required when building softmmu targets
6167if test -z "$slirp" -a "$softmmu" != "yes" ; then
6168 slirp="no"
6169fi
6170
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006171case "$slirp" in
6172 "" | yes)
6173 if $pkg_config slirp; then
6174 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006175 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6176 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006177 elif test -e "${source_path}/slirp/Makefile" ; then
6178 slirp=internal
6179 elif test -z "$slirp" ; then
6180 slirp=no
6181 else
6182 feature_not_found "slirp" "Install slirp devel or git submodule"
6183 fi
6184 ;;
6185
6186 system)
6187 if ! $pkg_config slirp; then
6188 feature_not_found "slirp" "Install slirp devel"
6189 fi
6190 ;;
6191esac
6192
6193case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006194 git | internal)
6195 if test "$slirp" = git; then
6196 git_submodules="${git_submodules} slirp"
6197 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006198 mkdir -p slirp
6199 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6200 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006201 if test "$mingw32" = "yes" ; then
6202 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6203 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006204 ;;
6205
6206 system)
6207 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6208 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6209 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6210 ;;
6211
6212 no)
6213 ;;
6214 *)
6215 error_exit "Unknown state for slirp: $slirp"
6216 ;;
6217esac
6218
6219
6220##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006221# End of CC checks
6222# After here, no more $cc or $ld runs
6223
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006224write_c_skeleton
6225
Blue Swirl1d728c32012-05-01 18:45:39 +00006226if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006227 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6228 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006229elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006230 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006231elif test "$debug" = "no"; then
6232 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006233fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006234
Marc-André Lureau247724c2018-01-16 16:11:51 +01006235if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006236 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6237 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006238 if test "$have_asan_iface_h" = "no" ; then
6239 echo "ASAN build enabled, but ASAN header missing." \
6240 "Without code annotation, the report may be inferior."
6241 elif test "$have_asan_iface_fiber" = "no" ; then
6242 echo "ASAN build enabled, but ASAN header is too old." \
6243 "Without code annotation, the report may be inferior."
6244 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006245fi
6246if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006247 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6248 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006249fi
6250
Peter Lieven6542aa92014-02-03 10:26:13 +01006251##########################################
6252# Do we have libnfs
6253if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006254 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006255 libnfs="yes"
6256 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006257 else
6258 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006259 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006260 fi
6261 libnfs="no"
6262 fi
6263fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006264
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006265##########################################
6266# Do we have libudev
6267if test "$libudev" != "no" ; then
6268 if $pkg_config libudev && test "$static" != "yes"; then
6269 libudev="yes"
6270 libudev_libs=$($pkg_config --libs libudev)
6271 else
6272 libudev="no"
6273 fi
6274fi
6275
Peter Maydell6ca026c2012-07-18 15:10:18 +01006276# Now we've finished running tests it's OK to add -Werror to the compiler flags
6277if test "$werror" = "yes"; then
6278 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6279fi
6280
Juan Quintelae86ecd42009-08-03 14:45:59 +02006281if test "$solaris" = "no" ; then
6282 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006283 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006284 fi
6285fi
6286
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006287# test if pod2man has --utf8 option
6288if pod2man --help | grep -q utf8; then
6289 POD2MAN="pod2man --utf8"
6290else
6291 POD2MAN="pod2man"
6292fi
6293
Blue Swirl952afb72010-09-19 08:36:34 +00006294# Use ASLR, no-SEH and DEP if available
6295if test "$mingw32" = "yes" ; then
6296 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006297 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006298 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006299 fi
6300 done
6301fi
6302
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006303# Disable OpenBSD W^X if available
6304if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6305 cat > $TMPC <<EOF
6306 int main(void) { return 0; }
6307EOF
6308 wx_ldflags="-Wl,-z,wxneeded"
6309 if compile_prog "" "$wx_ldflags"; then
6310 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6311 fi
6312fi
6313
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006314qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006315qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006316qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006317qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006318qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006319qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006320
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006321# We can only support ivshmem if we have eventfd
6322if [ "$eventfd" = "yes" ]; then
6323 ivshmem=yes
6324fi
6325
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006326tools=""
6327if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006328 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006329 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006330 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006331 fi
6332 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006333 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006334 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006335 if [ "$curl" = "yes" ]; then
6336 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006337 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006338fi
6339if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006340 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006341 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006342 virtfs=yes
6343 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6344 else
6345 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006346 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306347 fi
Andreas Färber17500372012-05-01 01:12:03 +02006348 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006349 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006350 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6351 mpath=yes
6352 else
6353 if test "$mpath" = yes; then
6354 error_exit "Multipath requires libmpathpersist devel"
6355 fi
6356 mpath=no
6357 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006358 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6359 else
6360 if test "$virtfs" = yes; then
6361 error_exit "VirtFS is supported only on Linux"
6362 fi
6363 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006364 if test "$mpath" = yes; then
6365 error_exit "Multipath is supported only on Linux"
6366 fi
6367 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306368 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006369 if test "$xkbcommon" = "yes"; then
6370 tools="qemu-keymap\$(EXESUF) $tools"
6371 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006372fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006373
6374# Probe for guest agent support/options
6375
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006376if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006377 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6378 guest_agent=no
6379 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006380 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006381 guest_agent=yes
6382 elif [ "$guest_agent" != yes ]; then
6383 guest_agent=no
6384 else
6385 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006386 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006387fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006388
Michael Roth9d6bc272015-08-26 10:49:13 -05006389# Guest agent Window MSI package
6390
6391if test "$guest_agent" != yes; then
6392 if test "$guest_agent_msi" = yes; then
6393 error_exit "MSI guest agent package requires guest agent enabled"
6394 fi
6395 guest_agent_msi=no
6396elif test "$mingw32" != "yes"; then
6397 if test "$guest_agent_msi" = "yes"; then
6398 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6399 fi
6400 guest_agent_msi=no
6401elif ! has wixl; then
6402 if test "$guest_agent_msi" = "yes"; then
6403 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6404 fi
6405 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006406else
6407 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6408 # disabled explicitly
6409 if test "$guest_agent_msi" != "no"; then
6410 guest_agent_msi=yes
6411 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006412fi
6413
Michael Roth1a349042015-08-26 11:14:31 -05006414if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006415 if test "$guest_agent_with_vss" = "yes"; then
6416 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6417 fi
6418
6419 if test "$QEMU_GA_MANUFACTURER" = ""; then
6420 QEMU_GA_MANUFACTURER=QEMU
6421 fi
6422
6423 if test "$QEMU_GA_DISTRO" = ""; then
6424 QEMU_GA_DISTRO=Linux
6425 fi
6426
6427 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006428 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006429 fi
6430
Stefan Weil89138852016-05-16 15:10:20 +02006431 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006432
6433 case "$cpu" in
6434 x86_64)
6435 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6436 ;;
6437 i386)
6438 QEMU_GA_MSI_ARCH="-D Arch=32"
6439 ;;
6440 *)
6441 error_exit "CPU $cpu not supported for building installation package"
6442 ;;
6443 esac
6444fi
6445
Paolo Bonzinica35f782010-05-26 16:08:29 +02006446# Mac OS X ships with a broken assembler
6447roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006448if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6449 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6450 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006451 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006452 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6453 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6454 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006455 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6456 ld_i386_emulation="$emu"
6457 roms="optionrom"
6458 break
6459 fi
6460 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006461fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006462
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006463# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006464if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006465 write_c_skeleton
6466 if compile_prog "-march=z900" ""; then
6467 roms="$roms s390-ccw"
6468 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006469fi
6470
Richard Henderson964c6fa2013-06-21 19:10:16 -07006471# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006472if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006473 textseg_addr=
6474 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006475 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6476 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006477 textseg_addr=0x60000000
6478 ;;
6479 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006480 # A 256M aligned address, high in the address space, with enough
6481 # room for the code_gen_buffer above it before the stack.
6482 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006483 ;;
6484 esac
6485 if [ -n "$textseg_addr" ]; then
6486 cat > $TMPC <<EOF
6487 int main(void) { return 0; }
6488EOF
6489 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6490 if ! compile_prog "" "$textseg_ldflags"; then
6491 # In case ld does not support -Ttext-segment, edit the default linker
6492 # script via sed to set the .text start addr. This is needed on FreeBSD
6493 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006494 if ! $ld --verbose >/dev/null 2>&1; then
6495 error_exit \
6496 "We need to link the QEMU user mode binaries at a" \
6497 "specific text address. Unfortunately your linker" \
6498 "doesn't support either the -Ttext-segment option or" \
6499 "printing the default linker script with --verbose." \
6500 "If you don't want the user mode binaries, pass the" \
6501 "--disable-user option to configure."
6502 fi
6503
Richard Henderson964c6fa2013-06-21 19:10:16 -07006504 $ld --verbose | sed \
6505 -e '1,/==================================================/d' \
6506 -e '/==================================================/,$d' \
6507 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6508 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6509 textseg_ldflags="-Wl,-T../config-host.ld"
6510 fi
6511 fi
6512fi
6513
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006514# Check that the C++ compiler exists and works with the C compiler.
6515# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6516if has $cxx; then
6517 cat > $TMPC <<EOF
6518int c_function(void);
6519int main(void) { return c_function(); }
6520EOF
6521
6522 compile_object
6523
6524 cat > $TMPCXX <<EOF
6525extern "C" {
6526 int c_function(void);
6527}
6528int c_function(void) { return 42; }
6529EOF
6530
6531 update_cxxflags
6532
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006533 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006534 # C++ compiler $cxx works ok with C compiler $cc
6535 :
6536 else
6537 echo "C++ compiler $cxx does not work with C compiler $cc"
6538 echo "Disabling C++ specific optional code"
6539 cxx=
6540 fi
6541else
6542 echo "No C++ compiler available; disabling C++ specific optional code"
6543 cxx=
6544fi
6545
Cole Robinson02d34f62016-05-06 14:03:09 -04006546echo_version() {
6547 if test "$1" = "yes" ; then
6548 echo "($2)"
6549 fi
6550}
6551
Jan Kiszka50e12062014-10-02 10:03:55 +02006552# prepend pixman and ftd flags after all config tests are done
6553QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006554QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006555libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006556
bellard43ce4df2003-06-09 19:53:12 +00006557echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006558echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006559echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006560echo "binary directory $(eval echo $bindir)"
6561echo "library directory $(eval echo $libdir)"
6562echo "module directory $(eval echo $qemu_moddir)"
6563echo "libexec directory $(eval echo $libexecdir)"
6564echo "include directory $(eval echo $includedir)"
6565echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006566if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006567echo "local state directory $(eval echo $local_statedir)"
6568echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006569echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006570else
6571echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006572echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006573fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006574echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006575echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006576echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006577echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006578echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006579echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006580echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006581echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006582echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006583echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006584echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006585echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006586echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006587echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006588echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006589if test "$docs" != "no"; then
6590 echo "sphinx-build $sphinx_build"
6591fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006592echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006593echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6594if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006595 echo "smbd $smbd"
6596fi
Fam Zheng17969262014-02-10 14:48:56 +08006597echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006598echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006599echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006600echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006601echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006602echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006603echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006604echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006605echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006606if test "$darwin" = "yes" ; then
6607 echo "Cocoa support $cocoa"
6608fi
Stefan Weil89138852016-05-16 15:10:20 +02006609echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006610echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006611echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006612echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006613echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006614echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006615echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006616echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006617if test "$gcrypt" = "yes"
6618then
6619 echo " hmac $gcrypt_hmac"
6620 echo " XTS $gcrypt_xts"
6621fi
Stefan Weil89138852016-05-16 15:10:20 +02006622echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006623if test "$nettle" = "yes"
6624then
6625 echo " XTS $nettle_xts"
6626fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006627echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006628echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006629echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006630echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006631echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006632echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006633echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006634echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006635echo "Block whitelist (rw) $block_drv_rw_whitelist"
6636echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306637echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006638echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006639echo "VNC support $vnc"
6640if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006641 echo "VNC SASL support $vnc_sasl"
6642 echo "VNC JPEG support $vnc_jpeg"
6643 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006644fi
aliguorie37630c2009-04-22 15:19:10 +00006645echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006646if test "$xen" = "yes" ; then
6647 echo "xen ctrl version $xen_ctrl_version"
6648fi
aurel322e4d9fb2008-04-08 06:01:02 +00006649echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006650echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006651echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006652echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006653echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006654echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006655echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006656echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006657echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006658echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006659echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006660echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006661echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006662echo "TCG support $tcg"
6663if test "$tcg" = "yes" ; then
6664 echo "TCG debug enabled $debug_tcg"
6665 echo "TCG interpreter $tcg_interpreter"
6666fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006667echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006668echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006669echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006670echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006671echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006672echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006673echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006674echo "madvise $madvise"
6675echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006676echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006677echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006678echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006679echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006680echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006681echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006682echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006683echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006684echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006685if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006686echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006687fi
Stefan Weil89138852016-05-16 15:10:20 +02006688echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006689echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006690echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006691echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006692echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006693echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006694echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006695echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006696echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006697echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006698echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006699echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006700echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006701echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006702echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006703echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006704echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006705echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006706echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006707echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306708echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006709echo "gcov $gcov_tool"
6710echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006711echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006712echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006713echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006714echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006715echo "lzo support $lzo"
6716echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006717echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006718echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006719echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006720echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006721echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006722echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006723echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006724echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006725echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006726echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006727echo "bochs support $bochs"
6728echo "cloop support $cloop"
6729echo "dmg support $dmg"
6730echo "qcow v1 support $qcow1"
6731echo "vdi support $vdi"
6732echo "vvfat support $vvfat"
6733echo "qed support $qed"
6734echo "parallels support $parallels"
6735echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006736echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006737echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006738echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006739echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006740echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006741echo "fuzzing support $fuzzing"
bellard67b915a2004-03-31 23:37:16 +00006742
Peter Maydell898be3e2017-03-21 14:31:57 +00006743if test "$supported_cpu" = "no"; then
6744 echo
6745 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6746 echo
6747 echo "CPU host architecture $cpu support is not currently maintained."
6748 echo "The QEMU project intends to remove support for this host CPU in"
6749 echo "a future release if nobody volunteers to maintain it and to"
6750 echo "provide a build host for our continuous integration setup."
6751 echo "configure has succeeded and you can continue to build, but"
6752 echo "if you care about QEMU on this platform you should contact"
6753 echo "us upstream at qemu-devel@nongnu.org."
6754fi
6755
6756if test "$supported_os" = "no"; then
6757 echo
6758 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6759 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006760 echo "Host OS $targetos support is not currently maintained."
6761 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006762 echo "a future release if nobody volunteers to maintain it and to"
6763 echo "provide a build host for our continuous integration setup."
6764 echo "configure has succeeded and you can continue to build, but"
6765 echo "if you care about QEMU on this platform you should contact"
6766 echo "us upstream at qemu-devel@nongnu.org."
6767fi
6768
Juan Quintela98ec69a2009-07-16 18:34:18 +02006769config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006770
Stefan Weildbd99ae2013-01-01 18:33:44 +01006771echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6772
Juan Quintela98ec69a2009-07-16 18:34:18 +02006773echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006774echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006775
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006776echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006777echo "prefix=$prefix" >> $config_host_mak
6778echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006779echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006780echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006781echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006782echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006783echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006784echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006785echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006786echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006787echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006788echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006789if test "$mingw32" = "no" ; then
6790 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6791fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006792echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006793echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006794echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006795echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006796echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006797echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006798echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006799echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006800echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006801
Juan Quintela98ec69a2009-07-16 18:34:18 +02006802echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006803
Paolo Bonzinif3494742019-01-23 14:56:17 +08006804if test "$default_devices" = "yes" ; then
6805 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6806else
6807 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6808fi
aurel32f8393942009-04-13 18:45:38 +00006809if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006810 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006811fi
aliguori1625af82009-04-05 17:41:02 +00006812if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006813 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006814fi
bellard7d132992003-03-06 23:23:54 +00006815if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006816 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006817fi
bellard67b915a2004-03-31 23:37:16 +00006818if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006819 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006820 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006821 version_major=${rc_version%%.*}
6822 rc_version=${rc_version#*.}
6823 version_minor=${rc_version%%.*}
6824 rc_version=${rc_version#*.}
6825 version_subminor=${rc_version%%.*}
6826 version_micro=0
6827 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6828 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006829 if test "$guest_agent_with_vss" = "yes" ; then
6830 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006831 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006832 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6833 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006834 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006835 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006836 fi
Michael Roth1a349042015-08-26 11:14:31 -05006837 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006838 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006839 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6840 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6841 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6842 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6843 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6844 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6845 fi
pbrook210fa552007-02-27 21:04:49 +00006846else
Juan Quintela35f4df22009-07-27 16:13:07 +02006847 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006848fi
blueswir1128ab2f2008-08-15 18:33:42 +00006849
Mark McLoughlindffcb712009-10-22 17:49:11 +01006850if test "$linux" = "yes" ; then
6851 echo "CONFIG_LINUX=y" >> $config_host_mak
6852fi
6853
bellard83fb7ad2004-07-05 21:25:26 +00006854if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006855 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006856fi
malcb29fe3e2008-11-18 01:42:22 +00006857
bellardec530c82006-04-25 22:36:06 +00006858if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006859 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006860fi
Andreas Färber179cf402010-09-20 00:50:43 +02006861if test "$haiku" = "yes" ; then
6862 echo "CONFIG_HAIKU=y" >> $config_host_mak
6863fi
bellard97a847b2003-08-10 21:36:04 +00006864if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006865 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006866fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006867if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006868 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006869fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006870if test "$want_tools" = "yes" ; then
6871 echo "CONFIG_TOOLS=y" >> $config_host_mak
6872fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006873if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006874 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006875 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006876 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6877 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6878fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006879if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006880 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006881fi
ths8a16d272008-07-19 09:56:24 +00006882if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006883 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006884 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006885fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006886if test "$netmap" = "yes" ; then
6887 echo "CONFIG_NETMAP=y" >> $config_host_mak
6888fi
Gonglei015a33b2014-07-01 20:58:08 +08006889if test "$l2tpv3" = "yes" ; then
6890 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6891fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006892if test "$gprof" = "yes" ; then
6893 echo "CONFIG_GPROF=y" >> $config_host_mak
6894fi
Corey Bryant47e98652012-01-26 09:42:26 -05006895if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006896 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006897fi
Juan Quintela2358a492009-07-27 16:13:25 +02006898echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006899for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006900 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006901 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006902 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006903 echo "$def=m" >> $config_host_mak ;;
6904 *)
6905 echo "$def=y" >> $config_host_mak ;;
6906 esac
malc0c58ac12008-06-25 21:04:05 +00006907done
Fam Zhengb1149912017-09-07 16:29:13 +08006908echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6909echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6910echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6911echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6912echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006913if test "$audio_win_int" = "yes" ; then
6914 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6915fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006916echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6917echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006918if test "$vnc" = "yes" ; then
6919 echo "CONFIG_VNC=y" >> $config_host_mak
6920fi
aliguori2f9606b2009-03-06 20:27:28 +00006921if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006922 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006923fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006924if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006925 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006926fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006927if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006928 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006929fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006930if test "$xkbcommon" = "yes" ; then
6931 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6932 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6933fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006934if test "$xfs" = "yes" ; then
6935 echo "CONFIG_XFS=y" >> $config_host_mak
6936fi
Stefan Weil89138852016-05-16 15:10:20 +02006937qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006938echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006939echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006940echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006941echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006942if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006943 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006944fi
Fam Zheng17969262014-02-10 14:48:56 +08006945if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006946 # $shacmd can generate a hash started with digit, which the compiler doesn't
6947 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006948 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006949 echo "CONFIG_MODULES=y" >> $config_host_mak
6950fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006951if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006952 echo "CONFIG_X11=y" >> $config_host_mak
6953 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6954 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6955fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006956if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006957 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006958 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006959 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006960 if test "$sdl_image" = "yes" ; then
6961 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6962 fi
bellard49ecc3f2007-11-07 19:25:15 +00006963fi
6964if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006965 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006966fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006967if test "$iconv" = "yes" ; then
6968 echo "CONFIG_ICONV=y" >> $config_host_mak
6969 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6970 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6971fi
balrog4d3b6f62008-02-10 16:33:14 +00006972if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006973 echo "CONFIG_CURSES=m" >> $config_host_mak
6974 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6975 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006976fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006977if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006978 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006979fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006980if test "$accept4" = "yes" ; then
6981 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6982fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306983if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006984 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306985fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006986if test "$eventfd" = "yes" ; then
6987 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6988fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006989if test "$memfd" = "yes" ; then
6990 echo "CONFIG_MEMFD=y" >> $config_host_mak
6991fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006992if test "$have_usbfs" = "yes" ; then
6993 echo "CONFIG_USBFS=y" >> $config_host_mak
6994fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006995if test "$fallocate" = "yes" ; then
6996 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6997fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006998if test "$fallocate_punch_hole" = "yes" ; then
6999 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7000fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03007001if test "$fallocate_zero_range" = "yes" ; then
7002 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7003fi
Kevin Wolfed911432014-09-29 17:12:59 +02007004if test "$posix_fallocate" = "yes" ; then
7005 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7006fi
Peter Maydellc727f472011-01-06 11:05:10 +00007007if test "$sync_file_range" = "yes" ; then
7008 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7009fi
Peter Maydelldace20d2011-01-10 13:11:24 +00007010if test "$fiemap" = "yes" ; then
7011 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7012fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007013if test "$dup3" = "yes" ; then
7014 echo "CONFIG_DUP3=y" >> $config_host_mak
7015fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01007016if test "$ppoll" = "yes" ; then
7017 echo "CONFIG_PPOLL=y" >> $config_host_mak
7018fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007019if test "$prctl_pr_set_timerslack" = "yes" ; then
7020 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7021fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007022if test "$epoll" = "yes" ; then
7023 echo "CONFIG_EPOLL=y" >> $config_host_mak
7024fi
7025if test "$epoll_create1" = "yes" ; then
7026 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7027fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007028if test "$sendfile" = "yes" ; then
7029 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7030fi
Riku Voipio51834342014-06-22 11:25:42 +01007031if test "$timerfd" = "yes" ; then
7032 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7033fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007034if test "$setns" = "yes" ; then
7035 echo "CONFIG_SETNS=y" >> $config_host_mak
7036fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007037if test "$clock_adjtime" = "yes" ; then
7038 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7039fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007040if test "$syncfs" = "yes" ; then
7041 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7042fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007043if test "$kcov" = "yes" ; then
7044 echo "CONFIG_KCOV=y" >> $config_host_mak
7045fi
aurel323b3f24a2009-04-15 16:12:13 +00007046if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007047 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007048fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007049if test "$inotify1" = "yes" ; then
7050 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7051fi
Peter Maydell401bc052017-09-05 13:19:32 +01007052if test "$sem_timedwait" = "yes" ; then
7053 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7054fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007055if test "$strchrnul" = "yes" ; then
7056 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7057fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007058if test "$st_atim" = "yes" ; then
7059 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7060fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007061if test "$byteswap_h" = "yes" ; then
7062 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7063fi
7064if test "$bswap_h" = "yes" ; then
7065 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7066fi
Alexander Graf769ce762009-05-11 17:41:42 +02007067if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007068 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007069 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007070 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007071fi
aurel322e4d9fb2008-04-08 06:01:02 +00007072if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007073 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007074 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007075fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007076if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007077 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007078 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007079 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007080 if test "$gtk_gl" = "yes" ; then
7081 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7082 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007083fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007084if test "$gio" = "yes" ; then
7085 echo "CONFIG_GIO=y" >> $config_host_mak
7086 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7087 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007088 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007089fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007090echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007091if test "$gnutls" = "yes" ; then
7092 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7093fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007094if test "$gcrypt" = "yes" ; then
7095 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007096 if test "$gcrypt_hmac" = "yes" ; then
7097 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7098 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007099fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007100if test "$nettle" = "yes" ; then
7101 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007102 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007103fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007104if test "$qemu_private_xts" = "yes" ; then
7105 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7106fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007107if test "$tasn1" = "yes" ; then
7108 echo "CONFIG_TASN1=y" >> $config_host_mak
7109fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007110if test "$auth_pam" = "yes" ; then
7111 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7112fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007113if test "$have_ifaddrs_h" = "yes" ; then
7114 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7115fi
Eric Blake6b39b062016-10-11 10:46:23 -05007116if test "$have_broken_size_max" = "yes" ; then
7117 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7118fi
Jan Vesely277abf12016-04-29 13:15:23 -04007119
7120# Work around a system header bug with some kernel/XFS header
7121# versions where they both try to define 'struct fsxattr':
7122# xfs headers will not try to redefine structs from linux headers
7123# if this macro is set.
7124if test "$have_fsxattr" = "yes" ; then
7125 echo "HAVE_FSXATTR=y" >> $config_host_mak
7126fi
Fam Zheng1efad062018-06-01 17:26:43 +08007127if test "$have_copy_file_range" = "yes" ; then
7128 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7129fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007130if test "$vte" = "yes" ; then
7131 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007132 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007133 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007134fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007135if test "$virglrenderer" = "yes" ; then
7136 echo "CONFIG_VIRGL=y" >> $config_host_mak
7137 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7138 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7139fi
aliguorie37630c2009-04-22 15:19:10 +00007140if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007141 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007142 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007143fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007144if test "$linux_aio" = "yes" ; then
7145 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7146fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007147if test "$linux_io_uring" = "yes" ; then
7148 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7149 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7150 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7151fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007152if test "$attr" = "yes" ; then
7153 echo "CONFIG_ATTR=y" >> $config_host_mak
7154fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007155if test "$libattr" = "yes" ; then
7156 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7157fi
Meador Inge983eef52012-02-24 14:00:42 +05307158if test "$virtfs" = "yes" ; then
7159 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007160fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007161if test "$mpath" = "yes" ; then
7162 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007163 if test "$mpathpersist_new_api" = "yes"; then
7164 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7165 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007166fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007167if test "$vhost_scsi" = "yes" ; then
7168 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7169fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007170if test "$vhost_net" = "yes" ; then
7171 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7172fi
7173if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007174 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007175fi
Gonglei042cea22018-03-01 21:46:28 +08007176if test "$vhost_crypto" = "yes" ; then
7177 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7178fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007179if test "$vhost_vsock" = "yes" ; then
7180 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7181fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007182if test "$vhost_kernel" = "yes" ; then
7183 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7184fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007185if test "$vhost_user" = "yes" ; then
7186 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7187fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007188if test "$vhost_user_fs" = "yes" ; then
7189 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7190fi
ths77755342008-11-27 15:45:16 +00007191if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007192 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007193fi
aliguoribf9298b2008-12-05 20:05:26 +00007194if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007195 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007196fi
aliguoriceb42de2009-04-07 18:43:28 +00007197if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007198 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007199fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007200if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007201 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007202fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007203if test "$membarrier" = "yes" ; then
7204 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7205fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007206if test "$signalfd" = "yes" ; then
7207 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7208fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007209if test "$optreset" = "yes" ; then
7210 echo "HAVE_OPTRESET=y" >> $config_host_mak
7211fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007212if test "$tcg" = "yes"; then
7213 echo "CONFIG_TCG=y" >> $config_host_mak
7214 if test "$tcg_interpreter" = "yes" ; then
7215 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7216 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007217fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007218if test "$fdatasync" = "yes" ; then
7219 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7220fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007221if test "$madvise" = "yes" ; then
7222 echo "CONFIG_MADVISE=y" >> $config_host_mak
7223fi
7224if test "$posix_madvise" = "yes" ; then
7225 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7226fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007227if test "$posix_memalign" = "yes" ; then
7228 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7229fi
bellard97a847b2003-08-10 21:36:04 +00007230
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007231if test "$spice" = "yes" ; then
7232 echo "CONFIG_SPICE=y" >> $config_host_mak
7233fi
7234
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007235if test "$smartcard" = "yes" ; then
7236 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007237 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7238 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007239fi
7240
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007241if test "$libusb" = "yes" ; then
7242 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007243 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7244 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007245fi
7246
Hans de Goede69354a82011-07-19 11:04:10 +02007247if test "$usb_redir" = "yes" ; then
7248 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007249 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7250 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007251fi
7252
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007253if test "$opengl" = "yes" ; then
7254 echo "CONFIG_OPENGL=y" >> $config_host_mak
7255 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007256 if test "$opengl_dmabuf" = "yes" ; then
7257 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7258 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007259fi
7260
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007261if test "$gbm" = "yes" ; then
7262 echo "CONFIG_GBM=y" >> $config_host_mak
7263 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7264 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7265fi
7266
7267
Yang Zhong5a22ab72017-12-20 21:16:46 +08007268if test "$malloc_trim" = "yes" ; then
7269 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7270fi
7271
Liang Li99f2dbd2016-03-08 13:53:16 +08007272if test "$avx2_opt" = "yes" ; then
7273 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7274fi
7275
qiaonuohan607dacd2014-02-18 14:11:30 +08007276if test "$lzo" = "yes" ; then
7277 echo "CONFIG_LZO=y" >> $config_host_mak
7278fi
7279
7280if test "$snappy" = "yes" ; then
7281 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7282fi
7283
Peter Wu6b383c02015-01-06 18:48:14 +01007284if test "$bzip2" = "yes" ; then
7285 echo "CONFIG_BZIP2=y" >> $config_host_mak
7286 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7287fi
7288
Julio Faracco83bc1f92018-11-05 13:08:04 -02007289if test "$lzfse" = "yes" ; then
7290 echo "CONFIG_LZFSE=y" >> $config_host_mak
7291 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7292fi
7293
Juan Quintela3a678482019-12-17 21:15:24 +01007294if test "$zstd" = "yes" ; then
7295 echo "CONFIG_ZSTD=y" >> $config_host_mak
7296fi
7297
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007298if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007299 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007300 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7301 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007302fi
7303
Peter Lieven6542aa92014-02-03 10:26:13 +01007304if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007305 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7306 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007307fi
7308
Eduardo Otubof7945732012-08-14 18:44:05 -03007309if test "$seccomp" = "yes"; then
7310 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007311 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7312 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007313fi
7314
bellard83fb7ad2004-07-05 21:25:26 +00007315# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007316if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007317 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007318fi
7319
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007320if test "$localtime_r" = "yes" ; then
7321 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7322fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007323if test "$qom_cast_debug" = "yes" ; then
7324 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7325fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007326if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007327 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007328 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7329 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007330fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007331
Peter Maydell7c2acc72013-04-08 12:11:27 +01007332echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007333if test "$coroutine_pool" = "yes" ; then
7334 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7335else
7336 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7337fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307338
Peter Lieven7d992e42016-09-27 11:58:45 +02007339if test "$debug_stack_usage" = "yes" ; then
7340 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7341fi
7342
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007343if test "$crypto_afalg" = "yes" ; then
7344 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7345fi
7346
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307347if test "$open_by_handle_at" = "yes" ; then
7348 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7349fi
7350
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307351if test "$linux_magic_h" = "yes" ; then
7352 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7353fi
7354
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007355if test "$pragma_diagnostic_available" = "yes" ; then
7356 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007357fi
7358
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007359if test "$valgrind_h" = "yes" ; then
7360 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7361fi
7362
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007363if test "$have_asan_iface_fiber" = "yes" ; then
7364 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7365fi
7366
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007367if test "$has_environ" = "yes" ; then
7368 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7369fi
7370
Richard Henderson76a347e2012-12-28 14:17:02 -08007371if test "$cpuid_h" = "yes" ; then
7372 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7373fi
7374
Richard Hendersonf5401662013-02-16 12:46:59 -08007375if test "$int128" = "yes" ; then
7376 echo "CONFIG_INT128=y" >> $config_host_mak
7377fi
7378
Richard Henderson7ebee432016-06-29 21:10:59 -07007379if test "$atomic128" = "yes" ; then
7380 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7381fi
7382
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007383if test "$cmpxchg128" = "yes" ; then
7384 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7385fi
7386
Richard Hendersondf79b992016-09-02 12:23:57 -07007387if test "$atomic64" = "yes" ; then
7388 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7389fi
7390
Richard Hendersondb432672017-09-15 14:11:45 -07007391if test "$vector16" = "yes" ; then
7392 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7393fi
7394
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007395if test "$attralias" = "yes" ; then
7396 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7397fi
7398
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007399if test "$getauxval" = "yes" ; then
7400 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7401fi
7402
Bharata B Raoeb100392012-09-24 14:42:45 +05307403if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007404 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007405 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7406 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307407fi
7408
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007409if test "$glusterfs_xlator_opt" = "yes" ; then
7410 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7411fi
7412
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307413if test "$glusterfs_discard" = "yes" ; then
7414 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7415fi
7416
Niels de Vosdf3a4292017-05-28 12:01:14 +05307417if test "$glusterfs_fallocate" = "yes" ; then
7418 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7419fi
7420
Bharata B Rao7c815372013-12-21 14:51:25 +05307421if test "$glusterfs_zerofill" = "yes" ; then
7422 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7423fi
7424
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007425if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7426 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7427fi
7428
Niels de Vos0e3b8912019-03-05 16:46:34 +01007429if test "$glusterfs_iocb_has_stat" = "yes" ; then
7430 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7431fi
7432
Pino Toscanob10d49d2019-06-20 22:08:40 +02007433if test "$libssh" = "yes" ; then
7434 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7435 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7436 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007437fi
7438
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007439if test "$live_block_migration" = "yes" ; then
7440 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7441fi
7442
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007443if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007444 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007445fi
7446
Lluís Vilanova5b808272014-05-27 15:02:14 +02007447echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7448if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007449 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307450fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007451if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007452 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7453 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007454 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007455fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007456if have_backend "log"; then
7457 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007458fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007459if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007460 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7461fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007462if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007463 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7464 if test "$trace_backend_stap" = "yes" ; then
7465 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7466 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007467fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007468if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007469 if test "$linux" = "yes" ; then
7470 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007471 else
Stewart Smith21684af2014-01-24 12:39:10 +11007472 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007473 fi
7474fi
Paul Durrant0a852412016-08-04 14:44:14 +01007475if have_backend "syslog"; then
7476 if test "$posix_syslog" = "yes" ; then
7477 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7478 else
7479 feature_not_found "syslog(trace backend)" "syslog not available"
7480 fi
7481fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007482echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7483
Michael R. Hines2da776d2013-07-22 10:01:54 -04007484if test "$rdma" = "yes" ; then
7485 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007486 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007487fi
7488
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007489if test "$pvrdma" = "yes" ; then
7490 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7491fi
7492
Laurent Vivier575b22b2016-06-02 22:14:15 +02007493if test "$have_rtnetlink" = "yes" ; then
7494 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7495fi
7496
Klim Kireeved279a02018-01-12 12:01:19 +03007497if test "$libxml2" = "yes" ; then
7498 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7499 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7500 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7501fi
7502
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007503if test "$replication" = "yes" ; then
7504 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7505fi
7506
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007507if test "$have_af_vsock" = "yes" ; then
7508 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7509fi
7510
Christopher Covington4d043512016-12-28 15:04:33 -05007511if test "$have_sysmacros" = "yes" ; then
7512 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7513fi
7514
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007515if test "$have_static_assert" = "yes" ; then
7516 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7517fi
7518
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007519if test "$have_utmpx" = "yes" ; then
7520 echo "HAVE_UTMPX=y" >> $config_host_mak
7521fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007522if test "$have_getrandom" = "yes" ; then
7523 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7524fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007525if test "$ivshmem" = "yes" ; then
7526 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7527fi
Richard Hendersone219c492017-09-28 09:01:23 -07007528if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007529 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7530fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007531if test "$debug_mutex" = "yes" ; then
7532 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7533fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007534
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007535# Hold two types of flag:
7536# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7537# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007538# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007539# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007540if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007541 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007542 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7543elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7544 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7545 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007546fi
7547
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007548if test "$vxhs" = "yes" ; then
7549 echo "CONFIG_VXHS=y" >> $config_host_mak
7550 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7551fi
7552
Junyan He17824402018-07-18 15:47:59 +08007553if test "$libpmem" = "yes" ; then
7554 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7555fi
7556
Jeff Cody2f740132018-11-07 07:36:44 +01007557if test "$bochs" = "yes" ; then
7558 echo "CONFIG_BOCHS=y" >> $config_host_mak
7559fi
7560if test "$cloop" = "yes" ; then
7561 echo "CONFIG_CLOOP=y" >> $config_host_mak
7562fi
7563if test "$dmg" = "yes" ; then
7564 echo "CONFIG_DMG=y" >> $config_host_mak
7565fi
7566if test "$qcow1" = "yes" ; then
7567 echo "CONFIG_QCOW1=y" >> $config_host_mak
7568fi
7569if test "$vdi" = "yes" ; then
7570 echo "CONFIG_VDI=y" >> $config_host_mak
7571fi
7572if test "$vvfat" = "yes" ; then
7573 echo "CONFIG_VVFAT=y" >> $config_host_mak
7574fi
7575if test "$qed" = "yes" ; then
7576 echo "CONFIG_QED=y" >> $config_host_mak
7577fi
7578if test "$parallels" = "yes" ; then
7579 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7580fi
7581if test "$sheepdog" = "yes" ; then
7582 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7583fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007584if test "$fuzzing" = "yes" ; then
7585 if test "$have_fuzzer" = "yes"; then
7586 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7587 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7588 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7589 else
7590 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7591 exit 1
7592 fi
7593fi
Jeff Cody2f740132018-11-07 07:36:44 +01007594
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007595if test "$plugins" = "yes" ; then
7596 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7597 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007598 # Copy the export object list to the build dir
7599 if test "$ld_dynamic_list" = "yes" ; then
7600 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7601 ld_symbols=qemu-plugins-ld.symbols
7602 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7603 elif test "$ld_exported_symbols_list" = "yes" ; then
7604 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7605 ld64_symbols=qemu-plugins-ld64.symbols
7606 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7607 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7608 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7609 else
7610 error_exit \
7611 "If \$plugins=yes, either \$ld_dynamic_list or " \
7612 "\$ld_exported_symbols_list should have been set to 'yes'."
7613 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007614fi
7615
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007616if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007617 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007618elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007619 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007620elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007621 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007622elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007623 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007624elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007625 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007626elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007627 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007628else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007629 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007630fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007631
Juan Quintela98ec69a2009-07-16 18:34:18 +02007632echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007633echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007634echo "MAKE=$make" >> $config_host_mak
7635echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007636echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7637echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007638echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7639echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007640echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007641echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007642echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007643echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007644if $iasl -h > /dev/null 2>&1; then
7645 echo "IASL=$iasl" >> $config_host_mak
7646fi
Juan Quintela804edf22009-07-27 16:12:49 +02007647echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007648echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007649echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007650echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007651echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007652echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007653echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007654echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007655echo "OBJCOPY=$objcopy" >> $config_host_mak
7656echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007657echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007658echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007659echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007660echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007661echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007662echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007663echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007664echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007665echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007666if test "$sparse" = "yes" ; then
7667 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007668 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007669 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007670 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7671 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7672fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007673echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007674echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007675echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007676echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007677echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007678echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007679echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007680echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007681echo "DSOSUF=$DSOSUF" >> $config_host_mak
7682echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007683echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007684echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7685echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007686echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007687if test "$gcov" = "yes" ; then
7688 echo "CONFIG_GCOV=y" >> $config_host_mak
7689 echo "GCOV=$gcov_tool" >> $config_host_mak
7690fi
Juan Quintela804edf22009-07-27 16:12:49 +02007691
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007692if test "$libudev" != "no"; then
7693 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7694 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7695fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007696if test "$fuzzing" != "no"; then
7697 echo "CONFIG_FUZZ=y" >> $config_host_mak
7698 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7699 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7700fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007701
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007702if test "$edk2_blobs" = "yes" ; then
7703 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7704fi
7705
Peter Maydell6efd7512011-11-30 11:59:04 +00007706# use included Linux headers
7707if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007708 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007709 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007710 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007711 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007712 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007713 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007714 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007715 ;;
7716 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007717 linux_arch=s390
7718 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007719 aarch64)
7720 linux_arch=arm64
7721 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007722 mips64)
7723 linux_arch=mips
7724 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007725 *)
7726 # For most CPUs the kernel architecture name and QEMU CPU name match.
7727 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007728 ;;
7729 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007730 # For non-KVM architectures we will not have asm headers
7731 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7732 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7733 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007734fi
7735
bellard1d14ffa2005-10-30 18:58:22 +00007736for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007737target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007738config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007739target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007740target_aligned_only="no"
7741case "$target_name" in
7742 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7743 target_aligned_only="yes"
7744 ;;
7745esac
bellard97a847b2003-08-10 21:36:04 +00007746target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007747case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007748 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 +00007749 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007750 ;;
7751esac
bellard97a847b2003-08-10 21:36:04 +00007752target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007753target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007754target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007755target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007756case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007757 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007758 target_softmmu="yes"
7759 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007760 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007761 target_user_only="yes"
7762 target_linux_user="yes"
7763 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007764 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007765 target_user_only="yes"
7766 target_bsd_user="yes"
7767 ;;
pbrook9e407a82007-05-26 16:38:53 +00007768 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007769 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007770 exit 1
7771 ;;
7772esac
ths831b7822007-01-18 20:06:33 +00007773
bellard97a847b2003-08-10 21:36:04 +00007774mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007775echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007776
pbrooke5fe0c52006-06-11 13:32:59 +00007777bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007778mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007779interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007780gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007781
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007782TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007783TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007784TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007785
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007786case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007787 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007788 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307789 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007790 ;;
7791 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007792 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007793 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307794 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007795 ;;
7796 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007797 mttcg="yes"
Laurent Vivier6116aea2020-03-10 11:33:44 +01007798 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007799 ;;
7800 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007801 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007802 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007803 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007804 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007805 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007806 aarch64|aarch64_be)
7807 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007808 TARGET_BASE_ARCH=arm
7809 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007810 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007811 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 +01007812 ;;
aurel322408a522008-04-20 20:19:44 +00007813 cris)
aurel322408a522008-04-20 20:19:44 +00007814 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007815 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007816 mttcg="yes"
Laurent Vivier9566f4c2020-03-10 11:33:45 +01007817 TARGET_SYSTBL_ABI=common,32
Richard Henderson61766fe2016-12-15 11:26:14 -08007818 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007819 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007820 ;;
aurel322408a522008-04-20 20:19:44 +00007821 m68k)
aurel322408a522008-04-20 20:19:44 +00007822 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007823 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Laurent Vivier5b85cae2020-03-10 11:33:46 +01007824 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007825 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007826 microblaze|microblazeel)
7827 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007828 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007829 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007830 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007831 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007832 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007833 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007834 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007835 ;;
7836 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007837 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007838 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007839 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007840 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007841 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007842 ;;
7843 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007844 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007845 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007846 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007847 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007848 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007849 moxie)
7850 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007851 nios2)
7852 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007853 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007854 TARGET_ARCH=openrisc
7855 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007856 ;;
aurel322408a522008-04-20 20:19:44 +00007857 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007858 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007859 ;;
aurel322408a522008-04-20 20:19:44 +00007860 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007861 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007862 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307863 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007864 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007865 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007866 ppc64le)
7867 TARGET_ARCH=ppc64
7868 TARGET_BASE_ARCH=ppc
7869 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307870 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007871 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 -05007872 ;;
aurel322408a522008-04-20 20:19:44 +00007873 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007874 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007875 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007876 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007877 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007878 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007879 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007880 riscv32)
7881 TARGET_BASE_ARCH=riscv
7882 TARGET_ABI_DIR=riscv
7883 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007884 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 +13007885 ;;
7886 riscv64)
7887 TARGET_BASE_ARCH=riscv
7888 TARGET_ABI_DIR=riscv
7889 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007890 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 +13007891 ;;
aurel322408a522008-04-20 20:19:44 +00007892 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007893 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007894 bflt="yes"
7895 ;;
7896 sparc)
aurel322408a522008-04-20 20:19:44 +00007897 ;;
7898 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007899 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007900 ;;
7901 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007902 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007903 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007904 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02007905 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007906 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007907 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007908 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007909 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 +01007910 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007911 tilegx)
7912 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007913 tricore)
7914 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007915 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007916 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007917 xtensa|xtensaeb)
7918 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007919 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007920 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007921 ;;
aurel322408a522008-04-20 20:19:44 +00007922 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007923 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007924 ;;
7925esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007926# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7927if [ "$TARGET_BASE_ARCH" = "" ]; then
7928 TARGET_BASE_ARCH=$TARGET_ARCH
7929fi
7930
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007931symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7932
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007933upper() {
7934 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7935}
7936
Stefan Weil89138852016-05-16 15:10:20 +02007937target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007938echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007939echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007940echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007941if [ "$TARGET_ABI_DIR" = "" ]; then
7942 TARGET_ABI_DIR=$TARGET_ARCH
7943fi
Juan Quintela25be2102009-10-07 02:41:00 +02007944echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007945if [ "$HOST_VARIANT_DIR" != "" ]; then
7946 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7947fi
Laurent Vivier4d6a8352020-03-10 11:33:43 +01007948if [ "$TARGET_SYSTBL_ABI" != "" ]; then
7949 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
7950fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007951
7952if supported_xen_target $target; then
7953 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007954 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007955 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007956 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007957 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007958else
7959 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007960fi
7961if supported_kvm_target $target; then
7962 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007963 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7964else
7965 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007966fi
7967if supported_hax_target $target; then
7968 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007969fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007970if supported_hvf_target $target; then
7971 echo "CONFIG_HVF=y" >> $config_target_mak
7972fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007973if supported_whpx_target $target; then
7974 echo "CONFIG_WHPX=y" >> $config_target_mak
7975fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007976if test "$target_aligned_only" = "yes" ; then
7977 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7978fi
bellardde83cd02003-06-15 20:25:43 +00007979if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007980 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007981fi
7982if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007983 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007984 if test "$mttcg" = "yes" ; then
7985 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7986 fi
bellardde83cd02003-06-15 20:25:43 +00007987fi
bellard997344f2003-10-27 21:10:39 +00007988if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007989 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007990 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007991fi
ths831b7822007-01-18 20:06:33 +00007992if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007993 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007994fi
pbrook56aebc82008-10-11 17:55:29 +00007995list=""
7996if test ! -z "$gdb_xml_files" ; then
7997 for x in $gdb_xml_files; do
7998 list="$list $source_path/gdb-xml/$x"
7999 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02008000 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00008001fi
bellardde83cd02003-06-15 20:25:43 +00008002
Eric Blakee633a5c2019-02-04 20:39:37 -06008003if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02008004 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008005fi
blueswir184778502008-10-26 20:33:16 +00008006if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008007 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008008fi
bellard5b0753e2005-03-01 21:37:28 +00008009
Alex Bennée716a5072018-04-10 12:19:40 +01008010
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008011# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008012
Juan Quintela4afddb52009-08-03 14:46:45 +02008013cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008014ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008015
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008016disas_config() {
8017 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8018 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8019}
8020
Juan Quintela64656022009-08-03 14:46:53 +02008021for i in $ARCH $TARGET_BASE_ARCH ; do
8022 case "$i" in
8023 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008024 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008025 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008026 aarch64)
8027 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008028 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008029 fi
8030 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008031 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008032 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008033 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008034 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008035 fi
Juan Quintela64656022009-08-03 14:46:53 +02008036 ;;
8037 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008038 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008039 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008040 hppa)
8041 disas_config "HPPA"
8042 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008043 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008044 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008045 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008046 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008047 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008048 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008049 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008050 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008051 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008052 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008053 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008054 ;;
8055 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008056 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008057 if test -n "${cxx}"; then
8058 disas_config "NANOMIPS"
8059 fi
Juan Quintela64656022009-08-03 14:46:53 +02008060 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008061 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008062 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008063 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008064 nios2)
8065 disas_config "NIOS2"
8066 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008067 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008068 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008069 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008070 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008071 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008072 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008073 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008074 disas_config "RISCV"
8075 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008076 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008077 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008078 ;;
8079 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008080 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008081 ;;
8082 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008083 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008084 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008085 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008086 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008087 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008088 esac
8089done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008090if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008091 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008092fi
Juan Quintela64656022009-08-03 14:46:53 +02008093
Juan Quintela6ee71262009-08-03 14:46:47 +02008094case "$ARCH" in
8095alpha)
8096 # Ensure there's only a single GP
8097 cflags="-msmall-data $cflags"
8098;;
8099esac
8100
Juan Quintelad02c1db2009-08-03 14:46:50 +02008101if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008102 if test "$target_linux_user" = "yes" ; then
8103 cflags="-p $cflags"
8104 ldflags="-p $ldflags"
8105 fi
8106 if test "$target_softmmu" = "yes" ; then
8107 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02008108 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008109 fi
8110fi
8111
Eric Blakee633a5c2019-02-04 20:39:37 -06008112if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07008113 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02008114fi
Juan Quintelafa282482009-07-22 22:37:39 +02008115
Christian Borntraegere9a35912017-08-23 12:16:23 +02008116# Newer kernels on s390 check for an S390_PGSTE program header and
8117# enable the pgste page table extensions in that case. This makes
8118# the vm.allocate_pgste sysctl unnecessary. We enable this program
8119# header if
8120# - we build on s390x
8121# - we build the system emulation for s390x (qemu-system-s390x)
8122# - KVM is enabled
8123# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008124if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8125 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008126 if ld_has --s390-pgste ; then
8127 ldflags="-Wl,--s390-pgste $ldflags"
8128 fi
8129fi
8130
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008131echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02008132echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008133
bellard97a847b2003-08-10 21:36:04 +00008134done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008135
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008136echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8137echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8138
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008139if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008140 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008141fi
Richard Hendersone219c492017-09-28 09:01:23 -07008142if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008143 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008144fi
8145if test -n "$LIBCAPSTONE"; then
8146 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8147fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008148
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008149if test "$numa" = "yes"; then
8150 echo "CONFIG_NUMA=y" >> $config_host_mak
8151fi
8152
John Snowfd0e6052015-03-25 18:57:39 -04008153if test "$ccache_cpp2" = "yes"; then
8154 echo "export CCACHE_CPP2=y" >> $config_host_mak
8155fi
8156
Peter Maydelle29e5c62018-11-02 11:52:38 +00008157# If we're using a separate build tree, set it up now.
8158# DIRS are directories which we simply mkdir in the build tree;
8159# LINKS are things to symlink back into the source tree
8160# (these can be both files and directories).
8161# Caution: do not add files or directories here using wildcards. This
8162# will result in problems later if a new file matching the wildcard is
8163# added to the source tree -- nothing will cause configure to be rerun
8164# so the build tree will be missing the link back to the new file, and
8165# tests might fail. Prefer to keep the relevant files in their own
8166# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008167DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8168DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008169DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008170DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008171DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008172LINKS="Makefile"
8173LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8174LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008175LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008176LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008177LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8178LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8179LINKS="$LINKS pc-bios/qemu-icon.bmp"
8180LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008181LINKS="$LINKS tests/acceptance tests/data"
8182LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008183LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008184for bios_file in \
8185 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008186 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008187 $source_path/pc-bios/*.rom \
8188 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008189 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008190 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008191 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008192 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008193 $source_path/pc-bios/palcode-*
8194do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008195 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008196done
8197mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008198for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008199 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008200 symlink "$source_path/$f" "$f"
8201 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008202done
Paul Brook1ad21342009-05-19 16:17:58 +01008203
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008204(for i in $cross_cc_vars; do
8205 export $i
8206done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008207export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008208$source_path/tests/tcg/configure.sh)
8209
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008210# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008211for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008212 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008213 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008214 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008215 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008216 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008217 echo "CC=$cc" >> $config_mak
8218 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008219 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008220 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008221 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008222 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008223 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008224done
8225
Max Reitz76c75602014-05-24 23:24:56 +02008226# set up qemu-iotests in this build directory
8227iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008228
8229echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8230echo >> "$iotests_common_env"
8231echo "export PYTHON='$python'" >> "$iotests_common_env"
8232
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008233# Save the configure command line for later reuse.
8234cat <<EOD >config.status
8235#!/bin/sh
8236# Generated by configure.
8237# Run this file to recreate the current configuration.
8238# Compiler output produced by configure, useful for debugging
8239# configure, is in config.log if it exists.
8240EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008241
8242preserve_env() {
8243 envname=$1
8244
8245 eval envval=\$$envname
8246
8247 if test -n "$envval"
8248 then
8249 echo "$envname='$envval'" >> config.status
8250 echo "export $envname" >> config.status
8251 else
8252 echo "unset $envname" >> config.status
8253 fi
8254}
8255
8256# Preserve various env variables that influence what
8257# features/build target configure will detect
8258preserve_env AR
8259preserve_env AS
8260preserve_env CC
8261preserve_env CPP
8262preserve_env CXX
8263preserve_env INSTALL
8264preserve_env LD
8265preserve_env LD_LIBRARY_PATH
8266preserve_env LIBTOOL
8267preserve_env MAKE
8268preserve_env NM
8269preserve_env OBJCOPY
8270preserve_env PATH
8271preserve_env PKG_CONFIG
8272preserve_env PKG_CONFIG_LIBDIR
8273preserve_env PKG_CONFIG_PATH
8274preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008275preserve_env SDL2_CONFIG
8276preserve_env SMBD
8277preserve_env STRIP
8278preserve_env WINDRES
8279
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008280printf "exec" >>config.status
8281printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008282echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008283chmod +x config.status
8284
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008285rm -r "$TMPDIR1"