blob: 48d6f89d57c8ad25c040df8b64772069b3926c0b [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=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400452guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400453guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500454guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300455guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400456vss_win32_sdk=""
457win_sdk="no"
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +0100458want_tools=""
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100459libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100460libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100461coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200462coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200463debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400464crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300465seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530466glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400467glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530468glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530469glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530470glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100471glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100472glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600473gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200474gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100475tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100476gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100477nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100478nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100479gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800480gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100481gcrypt_xts="no"
482qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100483auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100484vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200485virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800486tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200487libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100488live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800489numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800490tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200491jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800492replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700493vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100494bochs="yes"
495cloop="yes"
496dmg="yes"
497qcow1="yes"
498vdi="yes"
499vvfat="yes"
500qed="yes"
501parallels="yes"
502sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300503libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200504debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800505libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800506default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100507plugins="no"
Alexander Bulekovadc28022020-02-19 23:11:14 -0500508fuzzing="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100509
Peter Maydell898be3e2017-03-21 14:31:57 +0000510supported_cpu="no"
511supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100512bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800513malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000514
aliguoriac0df512008-12-29 17:14:15 +0000515# parse CC options first
516for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200517 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000518 case "$opt" in
519 --cross-prefix=*) cross_prefix="$optarg"
520 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100521 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000522 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400523 --cxx=*) CXX="$optarg"
524 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200525 --cpu=*) cpu="$optarg"
526 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100527 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100528 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200529 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100530 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100531 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100532 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100533 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200534 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100535 --enable-debug-info) debug_info="yes"
536 ;;
537 --disable-debug-info) debug_info="no"
538 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100539 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
540 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100541 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
542 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200543 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100544 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100545 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200546 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100547 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200548 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100549 ;;
aliguoriac0df512008-12-29 17:14:15 +0000550 esac
551done
aliguoriac0df512008-12-29 17:14:15 +0000552# OS specific
553# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100554# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000555
Peter Maydelle49d0212012-12-07 15:39:13 +0000556# Preferred compiler:
557# ${CC} (if set)
558# ${cross_prefix}gcc (if cross-prefix specified)
559# system compiler
560if test -z "${CC}${cross_prefix}"; then
561 cc="$host_cc"
562else
563 cc="${CC-${cross_prefix}gcc}"
564fi
565
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400566if test -z "${CXX}${cross_prefix}"; then
567 cxx="c++"
568else
569 cxx="${CXX-${cross_prefix}g++}"
570fi
571
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500572ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700573as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700574ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000575cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500576objcopy="${OBJCOPY-${cross_prefix}objcopy}"
577ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800578ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200579nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500580strip="${STRIP-${cross_prefix}strip}"
581windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300582pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
583query_pkg_config() {
584 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
585}
586pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000587sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000588
Peter Maydell45d285a2013-10-21 21:03:06 +0100589# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
590ARFLAGS="${ARFLAGS-rv}"
591
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200592# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100593# We use -fwrapv to tell the compiler that we require a C dialect where
594# left shift of signed integers is well defined and has the expected
595# 2s-complement style results. (Both clang and gcc agree that it
596# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100597QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400598QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100599QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200600QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200601QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200602QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100603if test "$debug_info" = "yes"; then
604 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100605fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200606
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300607# running configure in the source tree?
608# we know that's the case if configure is there.
609if test -f "./configure"; then
610 pwd_is_source_path="y"
611else
612 pwd_is_source_path="n"
613fi
614
aliguoriac0df512008-12-29 17:14:15 +0000615check_define() {
616cat > $TMPC <<EOF
617#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000618#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000619#endif
620int main(void) { return 0; }
621EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200622 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000623}
624
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200625check_include() {
626cat > $TMPC <<EOF
627#include <$1>
628int main(void) { return 0; }
629EOF
630 compile_object
631}
632
John Snow93b25862015-03-25 18:57:37 -0400633write_c_skeleton() {
634 cat > $TMPC <<EOF
635int main(void) { return 0; }
636EOF
637}
638
Alexander Bulekovadc28022020-02-19 23:11:14 -0500639write_c_fuzzer_skeleton() {
640 cat > $TMPC <<EOF
641#include <stdint.h>
642#include <sys/types.h>
643int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
644int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
645EOF
646}
647
Peter Maydellbbea4052012-08-14 15:35:34 +0100648if check_define __linux__ ; then
649 targetos="Linux"
650elif check_define _WIN32 ; then
651 targetos='MINGW32'
652elif check_define __OpenBSD__ ; then
653 targetos='OpenBSD'
654elif check_define __sun__ ; then
655 targetos='SunOS'
656elif check_define __HAIKU__ ; then
657 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100658elif check_define __FreeBSD__ ; then
659 targetos='FreeBSD'
660elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
661 targetos='GNU/kFreeBSD'
662elif check_define __DragonFly__ ; then
663 targetos='DragonFly'
664elif check_define __NetBSD__; then
665 targetos='NetBSD'
666elif check_define __APPLE__; then
667 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100668else
Peter Maydell951fedf2017-07-13 16:15:32 +0100669 # This is a fatal error, but don't report it yet, because we
670 # might be going to just print the --help text, or it might
671 # be the result of a missing compiler.
672 targetos='bogus'
673 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100674fi
675
676# Some host OSes need non-standard checks for which CPU to use.
677# Note that these checks are broken for cross-compilation: if you're
678# cross-compiling to one of these OSes then you'll need to specify
679# the correct CPU with the --cpu option.
680case $targetos in
681Darwin)
682 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
683 # run 64-bit userspace code.
684 # If the user didn't specify a CPU explicitly and the kernel says this is
685 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
686 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
687 cpu="x86_64"
688 fi
689 ;;
690SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200691 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100692 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
693 cpu="x86_64"
694 fi
695esac
696
Juan Quintela2ff6b912009-08-03 14:45:55 +0200697if test ! -z "$cpu" ; then
698 # command line argument
699 :
700elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000701 cpu="i386"
702elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700703 if check_define __ILP32__ ; then
704 cpu="x32"
705 else
706 cpu="x86_64"
707 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000708elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000709 if check_define __arch64__ ; then
710 cpu="sparc64"
711 else
712 cpu="sparc"
713 fi
malcfdf7ed92009-01-14 18:39:52 +0000714elif check_define _ARCH_PPC ; then
715 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700716 if check_define _LITTLE_ENDIAN ; then
717 cpu="ppc64le"
718 else
719 cpu="ppc64"
720 fi
malcfdf7ed92009-01-14 18:39:52 +0000721 else
722 cpu="ppc"
723 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200724elif check_define __mips__ ; then
725 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200726elif check_define __s390__ ; then
727 if check_define __s390x__ ; then
728 cpu="s390x"
729 else
730 cpu="s390"
731 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000732elif check_define __riscv ; then
733 if check_define _LP64 ; then
734 cpu="riscv64"
735 else
736 cpu="riscv32"
737 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100738elif check_define __arm__ ; then
739 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100740elif check_define __aarch64__ ; then
741 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000742else
Stefan Weil89138852016-05-16 15:10:20 +0200743 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000744fi
745
Peter Maydell359bc952011-12-24 13:07:25 +0000746ARCH=
747# Normalise host CPU name and set ARCH.
748# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000749case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200750 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000751 supported_cpu="yes"
752 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700753 ppc64le)
754 ARCH="ppc64"
755 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700756 ;;
bellard7d132992003-03-06 23:23:54 +0000757 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000758 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000759 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000760 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000761 x86_64|amd64)
762 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000763 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000764 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100765 armv*b|armv*l|arm)
766 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000767 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000768 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100769 aarch64)
770 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000771 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100772 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200773 mips*)
774 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000775 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200776 ;;
blueswir131422552007-04-16 18:27:06 +0000777 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000778 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100779 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000780 ;;
bellard7d132992003-03-06 23:23:54 +0000781 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000782 # This will result in either an error or falling back to TCI later
783 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000784 ;;
785esac
Peter Maydell359bc952011-12-24 13:07:25 +0000786if test -z "$ARCH"; then
787 ARCH="$cpu"
788fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200789
bellard7d132992003-03-06 23:23:54 +0000790# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200791
Stacey Sonadfc3e92014-06-08 09:57:22 -0700792# host *BSD for user mode
793HOST_VARIANT_DIR=""
794
bellard7d132992003-03-06 23:23:54 +0000795case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000796MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200797 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100798 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100799 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200800 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200801 if check_include dsound.h; then
802 audio_drv_list="dsound"
803 else
804 audio_drv_list=""
805 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000806 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000807;;
ths5c40d2b2007-06-23 16:03:36 +0000808GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100809 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100810 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200811 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000812;;
bellard7d3505c2004-05-12 19:32:15 +0000813FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200814 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100815 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100816 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200817 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100818 # needed for kinfo_getvmmap(3) in libutil.h
819 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500820 # needed for kinfo_getproc
821 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100822 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700823 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000824 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000825;;
blueswir1c5e97232009-03-07 20:06:23 +0000826DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200827 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100828 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100829 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200830 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700831 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000832;;
bellard7d3505c2004-05-12 19:32:15 +0000833NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200834 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100835 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100836 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100837 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200838 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200839 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700840 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200841 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000842;;
843OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200844 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100845 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100846 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200847 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700848 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500849 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000850;;
bellard83fb7ad2004-07-05 21:25:26 +0000851Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200852 bsd="yes"
853 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100854 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500855 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800856 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200857 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200858 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100859 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200860 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200861 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100862 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200863 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100864 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200865 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100866 # Disable attempts to use ObjectiveC features in os/object.h since they
867 # won't work when we're compiling with gcc as a C compiler.
868 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700869 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000870 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000871;;
bellardec530c82006-04-25 22:36:06 +0000872SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200873 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100874 make="${MAKE-gmake}"
875 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400876 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200877 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100878 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200879 fi
880 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000881# needed for CMSG_ macros in sys/socket.h
882 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
883# needed for TIOCWIN* defines in termios.h
884 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200885 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200886 solarisnetlibs="-lsocket -lnsl -lresolv"
887 LIBS="$solarisnetlibs $LIBS"
888 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000889;;
Andreas Färber179cf402010-09-20 00:50:43 +0200890Haiku)
891 haiku="yes"
892 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
893 LIBS="-lposix_error_mapper -lnetwork $LIBS"
894;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000895Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100896 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200897 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200898 linux="yes"
899 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200900 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600901 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000902 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200903 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000904;;
bellard7d132992003-03-06 23:23:54 +0000905esac
906
bellard7d3505c2004-05-12 19:32:15 +0000907if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000908 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200909 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000910 fi
bellard7d3505c2004-05-12 19:32:15 +0000911fi
912
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100913: ${make=${MAKE-make}}
914: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000915# We prefer python 3.x. A bare 'python' is traditionally
916# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300917# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000918python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300919for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000920do
921 if has "$binary"
922 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200923 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000924 break
925 fi
926done
Markus Armbruster903458c2020-02-14 18:18:41 +0100927
928sphinx_build=
929for binary in sphinx-build-3 sphinx-build
930do
931 if has "$binary"
932 then
933 sphinx_build=$(command -v "$binary")
934 break
935 fi
936done
937
Brade2d88302011-09-02 16:53:28 -0400938: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100939
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100940# Default objcc to clang if available, otherwise use CC
941if has clang; then
942 objcc=clang
943else
944 objcc="$cc"
945fi
946
Juan Quintela3457a3f2009-08-03 14:46:07 +0200947if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200948 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800949 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100950 # MinGW needs -mthreads for TLS and macro _MT.
951 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100952 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400953 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100954 if compile_prog "" "-liberty" ; then
955 LIBS="-liberty $LIBS"
956 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200957 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200958 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300959 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300960 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200961 bindir="\${prefix}"
962 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200963 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200964 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300965 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200966fi
967
Anthony Liguori487fefd2009-06-11 13:28:25 -0500968werror=""
bellard85aa5182007-11-11 20:17:03 +0000969
bellard7d132992003-03-06 23:23:54 +0000970for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200971 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000972 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000973 --help|-h) show_help=yes
974 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400975 --version|-V) exec cat $source_path/VERSION
976 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000977 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000978 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000979 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000980 ;;
aliguoriac0df512008-12-29 17:14:15 +0000981 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000982 ;;
aliguoriac0df512008-12-29 17:14:15 +0000983 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000984 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000985 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000986 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400987 --cxx=*)
988 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200989 --iasl=*) iasl="$optarg"
990 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100991 --objcc=*) objcc="$optarg"
992 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000993 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000994 ;;
pbrook6a882642006-04-17 13:57:12 +0000995 --install=*) install="$optarg"
996 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000997 --python=*) python="$optarg"
998 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +0000999 --sphinx-build=*) sphinx_build="$optarg"
1000 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001001 --gcov=*) gcov_tool="$optarg"
1002 ;;
Brade2d88302011-09-02 16:53:28 -04001003 --smbd=*) smbd="$optarg"
1004 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001005 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001006 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001007 --extra-cxxflags=*)
1008 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001009 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001010 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001011 --enable-debug-info)
1012 ;;
1013 --disable-debug-info)
1014 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001015 --cross-cc-*)
1016 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001017 --enable-modules)
1018 modules="yes"
1019 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001020 --disable-modules)
1021 modules="no"
1022 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001023 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001024 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001025 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001026 if test "$target_list_exclude"; then
1027 error_exit "Can't mix --target-list with --target-list-exclude"
1028 fi
1029 ;;
1030 --target-list-exclude=*) target_list_exclude="$optarg"
1031 if test "$target_list"; then
1032 error_exit "Can't mix --target-list-exclude with --target-list"
1033 fi
bellardde83cd02003-06-15 20:25:43 +00001034 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001035 --enable-trace-backends=*) trace_backends="$optarg"
1036 ;;
1037 # XXX: backwards compatibility
1038 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001039 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001040 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001041 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001042 --with-default-devices) default_devices="yes"
1043 ;;
1044 --without-default-devices) default_devices="no"
1045 ;;
bellard7d132992003-03-06 23:23:54 +00001046 --enable-gprof) gprof="yes"
1047 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001048 --enable-gcov) gcov="yes"
1049 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001050 --static)
1051 static="yes"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001052 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001053 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001054 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001055 --mandir=*) mandir="$optarg"
1056 ;;
1057 --bindir=*) bindir="$optarg"
1058 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001059 --libdir=*) libdir="$optarg"
1060 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001061 --libexecdir=*) libexecdir="$optarg"
1062 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001063 --includedir=*) includedir="$optarg"
1064 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001065 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001066 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001067 --with-confsuffix=*) confsuffix="$optarg"
1068 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001069 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001070 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001071 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001072 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001073 --localstatedir=*) local_statedir="$optarg"
1074 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001075 --firmwarepath=*) firmwarepath="$optarg"
1076 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001077 --host=*|--build=*|\
1078 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001079 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001080 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1081 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1082 # These switches are silently ignored, for compatibility with
1083 # autoconf-generated configure scripts. This allows QEMU's
1084 # configure to be used by RPM and similar macros that set
1085 # lots of directory switches by default.
1086 ;;
bellard97a847b2003-08-10 21:36:04 +00001087 --disable-sdl) sdl="no"
1088 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001089 --enable-sdl) sdl="yes"
1090 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001091 --disable-sdl-image) sdl_image="no"
1092 ;;
1093 --enable-sdl-image) sdl_image="yes"
1094 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001095 --disable-qom-cast-debug) qom_cast_debug="no"
1096 ;;
1097 --enable-qom-cast-debug) qom_cast_debug="yes"
1098 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301099 --disable-virtfs) virtfs="no"
1100 ;;
1101 --enable-virtfs) virtfs="yes"
1102 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001103 --disable-mpath) mpath="no"
1104 ;;
1105 --enable-mpath) mpath="yes"
1106 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001107 --disable-vnc) vnc="no"
1108 ;;
1109 --enable-vnc) vnc="yes"
1110 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001111 --oss-lib=*) oss_lib="$optarg"
1112 ;;
malc0c58ac12008-06-25 21:04:05 +00001113 --audio-drv-list=*) audio_drv_list="$optarg"
1114 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001115 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001116 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001117 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001118 ;;
aurel32f8393942009-04-13 18:45:38 +00001119 --enable-debug-tcg) debug_tcg="yes"
1120 ;;
1121 --disable-debug-tcg) debug_tcg="no"
1122 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001123 --enable-debug)
1124 # Enable debugging options that aren't excessively noisy
1125 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001126 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001127 debug="yes"
1128 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001129 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001130 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001131 --enable-sanitizers) sanitizers="yes"
1132 ;;
1133 --disable-sanitizers) sanitizers="no"
1134 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001135 --enable-sparse) sparse="yes"
1136 ;;
1137 --disable-sparse) sparse="no"
1138 ;;
aliguori1625af82009-04-05 17:41:02 +00001139 --disable-strip) strip_opt="no"
1140 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001141 --disable-vnc-sasl) vnc_sasl="no"
1142 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001143 --enable-vnc-sasl) vnc_sasl="yes"
1144 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001145 --disable-vnc-jpeg) vnc_jpeg="no"
1146 ;;
1147 --enable-vnc-jpeg) vnc_jpeg="yes"
1148 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001149 --disable-vnc-png) vnc_png="no"
1150 ;;
1151 --enable-vnc-png) vnc_png="yes"
1152 ;;
bellard443f1372004-06-04 11:13:20 +00001153 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001154 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001155 --enable-slirp=git) slirp="git"
1156 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001157 --enable-slirp=system) slirp="system"
1158 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001159 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001160 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001161 --enable-vde) vde="yes"
1162 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001163 --disable-netmap) netmap="no"
1164 ;;
1165 --enable-netmap) netmap="yes"
1166 ;;
aliguorie37630c2009-04-22 15:19:10 +00001167 --disable-xen) xen="no"
1168 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001169 --enable-xen) xen="yes"
1170 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001171 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1172 ;;
1173 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1174 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001175 --disable-brlapi) brlapi="no"
1176 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001177 --enable-brlapi) brlapi="yes"
1178 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001179 --disable-kvm) kvm="no"
1180 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001181 --enable-kvm) kvm="yes"
1182 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001183 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001184 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001185 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001186 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001187 --disable-hvf) hvf="no"
1188 ;;
1189 --enable-hvf) hvf="yes"
1190 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001191 --disable-whpx) whpx="no"
1192 ;;
1193 --enable-whpx) whpx="yes"
1194 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001195 --disable-tcg-interpreter) tcg_interpreter="no"
1196 ;;
1197 --enable-tcg-interpreter) tcg_interpreter="yes"
1198 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001199 --disable-cap-ng) cap_ng="no"
1200 ;;
1201 --enable-cap-ng) cap_ng="yes"
1202 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001203 --disable-tcg) tcg="no"
1204 ;;
1205 --enable-tcg) tcg="yes"
1206 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001207 --disable-malloc-trim) malloc_trim="no"
1208 ;;
1209 --enable-malloc-trim) malloc_trim="yes"
1210 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001211 --disable-spice) spice="no"
1212 ;;
1213 --enable-spice) spice="yes"
1214 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001215 --disable-libiscsi) libiscsi="no"
1216 ;;
1217 --enable-libiscsi) libiscsi="yes"
1218 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001219 --disable-libnfs) libnfs="no"
1220 ;;
1221 --enable-libnfs) libnfs="yes"
1222 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001223 --enable-profiler) profiler="yes"
1224 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001225 --disable-cocoa) cocoa="no"
1226 ;;
malcc2de5c92008-06-28 19:13:06 +00001227 --enable-cocoa)
1228 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001229 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001230 ;;
pbrookcad25d62006-03-19 16:31:11 +00001231 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001232 ;;
pbrookcad25d62006-03-19 16:31:11 +00001233 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001234 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001235 --disable-user)
1236 linux_user="no" ;
1237 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001238 ;;
1239 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001240 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001241 ;;
ths831b7822007-01-18 20:06:33 +00001242 --enable-linux-user) linux_user="yes"
1243 ;;
blueswir184778502008-10-26 20:33:16 +00001244 --disable-bsd-user) bsd_user="no"
1245 ;;
1246 --enable-bsd-user) bsd_user="yes"
1247 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001248 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001249 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001250 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001251 ;;
bellard85aa5182007-11-11 20:17:03 +00001252 --enable-werror) werror="yes"
1253 ;;
1254 --disable-werror) werror="no"
1255 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001256 --enable-stack-protector) stack_protector="yes"
1257 ;;
1258 --disable-stack-protector) stack_protector="no"
1259 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001260 --disable-curses) curses="no"
1261 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001262 --enable-curses) curses="yes"
1263 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001264 --disable-iconv) iconv="no"
1265 ;;
1266 --enable-iconv) iconv="yes"
1267 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001268 --disable-curl) curl="no"
1269 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001270 --enable-curl) curl="yes"
1271 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001272 --disable-fdt) fdt="no"
1273 ;;
1274 --enable-fdt) fdt="yes"
1275 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001276 --disable-linux-aio) linux_aio="no"
1277 ;;
1278 --enable-linux-aio) linux_aio="yes"
1279 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001280 --disable-linux-io-uring) linux_io_uring="no"
1281 ;;
1282 --enable-linux-io-uring) linux_io_uring="yes"
1283 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001284 --disable-attr) attr="no"
1285 ;;
1286 --enable-attr) attr="yes"
1287 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001288 --disable-membarrier) membarrier="no"
1289 ;;
1290 --enable-membarrier) membarrier="yes"
1291 ;;
ths77755342008-11-27 15:45:16 +00001292 --disable-blobs) blobs="no"
1293 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001294 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001295 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001296 --with-coroutine=*) coroutine="$optarg"
1297 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001298 --disable-coroutine-pool) coroutine_pool="no"
1299 ;;
1300 --enable-coroutine-pool) coroutine_pool="yes"
1301 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001302 --enable-debug-stack-usage) debug_stack_usage="yes"
1303 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001304 --enable-crypto-afalg) crypto_afalg="yes"
1305 ;;
1306 --disable-crypto-afalg) crypto_afalg="no"
1307 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001308 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001309 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001310 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001311 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001312 --disable-vhost-net) vhost_net="no"
1313 ;;
1314 --enable-vhost-net) vhost_net="yes"
1315 ;;
Gonglei042cea22018-03-01 21:46:28 +08001316 --disable-vhost-crypto) vhost_crypto="no"
1317 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001318 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001319 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001320 --disable-vhost-scsi) vhost_scsi="no"
1321 ;;
1322 --enable-vhost-scsi) vhost_scsi="yes"
1323 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001324 --disable-vhost-vsock) vhost_vsock="no"
1325 ;;
1326 --enable-vhost-vsock) vhost_vsock="yes"
1327 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001328 --disable-vhost-user-fs) vhost_user_fs="no"
1329 ;;
1330 --enable-vhost-user-fs) vhost_user_fs="yes"
1331 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001332 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001333 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001334 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001335 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001336 --disable-rbd) rbd="no"
1337 ;;
1338 --enable-rbd) rbd="yes"
1339 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001340 --disable-xfsctl) xfs="no"
1341 ;;
1342 --enable-xfsctl) xfs="yes"
1343 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001344 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001345 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001346 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001347 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001348 --disable-libusb) libusb="no"
1349 ;;
1350 --enable-libusb) libusb="yes"
1351 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001352 --disable-usb-redir) usb_redir="no"
1353 ;;
1354 --enable-usb-redir) usb_redir="yes"
1355 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001356 --disable-zlib-test) zlib="no"
1357 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001358 --disable-lzo) lzo="no"
1359 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001360 --enable-lzo) lzo="yes"
1361 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001362 --disable-snappy) snappy="no"
1363 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001364 --enable-snappy) snappy="yes"
1365 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001366 --disable-bzip2) bzip2="no"
1367 ;;
1368 --enable-bzip2) bzip2="yes"
1369 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001370 --enable-lzfse) lzfse="yes"
1371 ;;
1372 --disable-lzfse) lzfse="no"
1373 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001374 --enable-guest-agent) guest_agent="yes"
1375 ;;
1376 --disable-guest-agent) guest_agent="no"
1377 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001378 --enable-guest-agent-msi) guest_agent_msi="yes"
1379 ;;
1380 --disable-guest-agent-msi) guest_agent_msi="no"
1381 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001382 --with-vss-sdk) vss_win32_sdk=""
1383 ;;
1384 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1385 ;;
1386 --without-vss-sdk) vss_win32_sdk="no"
1387 ;;
1388 --with-win-sdk) win_sdk=""
1389 ;;
1390 --with-win-sdk=*) win_sdk="$optarg"
1391 ;;
1392 --without-win-sdk) win_sdk="no"
1393 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001394 --enable-tools) want_tools="yes"
1395 ;;
1396 --disable-tools) want_tools="no"
1397 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001398 --enable-seccomp) seccomp="yes"
1399 ;;
1400 --disable-seccomp) seccomp="no"
1401 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301402 --disable-glusterfs) glusterfs="no"
1403 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001404 --disable-avx2) avx2_opt="no"
1405 ;;
1406 --enable-avx2) avx2_opt="yes"
1407 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301408 --enable-glusterfs) glusterfs="yes"
1409 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001410 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1411 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001412 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001413 --enable-vhdx|--disable-vhdx)
1414 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1415 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001416 --enable-uuid|--disable-uuid)
1417 echo "$0: $opt is obsolete, UUID support is always built" >&2
1418 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001419 --disable-gtk) gtk="no"
1420 ;;
1421 --enable-gtk) gtk="yes"
1422 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001423 --tls-priority=*) tls_priority="$optarg"
1424 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001425 --disable-gnutls) gnutls="no"
1426 ;;
1427 --enable-gnutls) gnutls="yes"
1428 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001429 --disable-nettle) nettle="no"
1430 ;;
1431 --enable-nettle) nettle="yes"
1432 ;;
1433 --disable-gcrypt) gcrypt="no"
1434 ;;
1435 --enable-gcrypt) gcrypt="yes"
1436 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001437 --disable-auth-pam) auth_pam="no"
1438 ;;
1439 --enable-auth-pam) auth_pam="yes"
1440 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001441 --enable-rdma) rdma="yes"
1442 ;;
1443 --disable-rdma) rdma="no"
1444 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001445 --enable-pvrdma) pvrdma="yes"
1446 ;;
1447 --disable-pvrdma) pvrdma="no"
1448 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001449 --disable-vte) vte="no"
1450 ;;
1451 --enable-vte) vte="yes"
1452 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001453 --disable-virglrenderer) virglrenderer="no"
1454 ;;
1455 --enable-virglrenderer) virglrenderer="yes"
1456 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001457 --disable-tpm) tpm="no"
1458 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001459 --enable-tpm) tpm="yes"
1460 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001461 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001462 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001463 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001464 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001465 --disable-live-block-migration) live_block_migration="no"
1466 ;;
1467 --enable-live-block-migration) live_block_migration="yes"
1468 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001469 --disable-numa) numa="no"
1470 ;;
1471 --enable-numa) numa="yes"
1472 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001473 --disable-libxml2) libxml2="no"
1474 ;;
1475 --enable-libxml2) libxml2="yes"
1476 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001477 --disable-tcmalloc) tcmalloc="no"
1478 ;;
1479 --enable-tcmalloc) tcmalloc="yes"
1480 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001481 --disable-jemalloc) jemalloc="no"
1482 ;;
1483 --enable-jemalloc) jemalloc="yes"
1484 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001485 --disable-replication) replication="no"
1486 ;;
1487 --enable-replication) replication="yes"
1488 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001489 --disable-vxhs) vxhs="no"
1490 ;;
1491 --enable-vxhs) vxhs="yes"
1492 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001493 --disable-bochs) bochs="no"
1494 ;;
1495 --enable-bochs) bochs="yes"
1496 ;;
1497 --disable-cloop) cloop="no"
1498 ;;
1499 --enable-cloop) cloop="yes"
1500 ;;
1501 --disable-dmg) dmg="no"
1502 ;;
1503 --enable-dmg) dmg="yes"
1504 ;;
1505 --disable-qcow1) qcow1="no"
1506 ;;
1507 --enable-qcow1) qcow1="yes"
1508 ;;
1509 --disable-vdi) vdi="no"
1510 ;;
1511 --enable-vdi) vdi="yes"
1512 ;;
1513 --disable-vvfat) vvfat="no"
1514 ;;
1515 --enable-vvfat) vvfat="yes"
1516 ;;
1517 --disable-qed) qed="no"
1518 ;;
1519 --enable-qed) qed="yes"
1520 ;;
1521 --disable-parallels) parallels="no"
1522 ;;
1523 --enable-parallels) parallels="yes"
1524 ;;
1525 --disable-sheepdog) sheepdog="no"
1526 ;;
1527 --enable-sheepdog) sheepdog="yes"
1528 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001529 --disable-vhost-user) vhost_user="no"
1530 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001531 --enable-vhost-user) vhost_user="yes"
1532 ;;
1533 --disable-vhost-kernel) vhost_kernel="no"
1534 ;;
1535 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001536 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001537 --disable-capstone) capstone="no"
1538 ;;
1539 --enable-capstone) capstone="yes"
1540 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001541 --enable-capstone=git) capstone="git"
1542 ;;
1543 --enable-capstone=system) capstone="system"
1544 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001545 --with-git=*) git="$optarg"
1546 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001547 --enable-git-update) git_update=yes
1548 ;;
1549 --disable-git-update) git_update=no
1550 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001551 --enable-debug-mutex) debug_mutex=yes
1552 ;;
1553 --disable-debug-mutex) debug_mutex=no
1554 ;;
Junyan He17824402018-07-18 15:47:59 +08001555 --enable-libpmem) libpmem=yes
1556 ;;
1557 --disable-libpmem) libpmem=no
1558 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001559 --enable-xkbcommon) xkbcommon=yes
1560 ;;
1561 --disable-xkbcommon) xkbcommon=no
1562 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001563 --enable-plugins) plugins="yes"
1564 ;;
1565 --disable-plugins) plugins="no"
1566 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001567 --enable-containers) use_containers="yes"
1568 ;;
1569 --disable-containers) use_containers="no"
1570 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001571 --enable-fuzzing) fuzzing=yes
1572 ;;
1573 --disable-fuzzing) fuzzing=no
1574 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001575 *)
1576 echo "ERROR: unknown option $opt"
1577 echo "Try '$0 --help' for more information"
1578 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001579 ;;
bellard7d132992003-03-06 23:23:54 +00001580 esac
1581done
1582
bellard40293e52008-01-31 11:32:10 +00001583case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001584 ppc)
1585 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001586 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001587 ;;
1588 ppc64)
1589 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001590 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001591 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001592 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001593 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001594 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001595 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001596 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001597 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001598 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001599 ;;
ths76d83bd2007-11-18 21:22:10 +00001600 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001601 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001602 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001603 ;;
1604 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001605 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001606 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001607 ;;
bellard40293e52008-01-31 11:32:10 +00001608 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001609 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001610 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001611 ;;
1612 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001613 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1614 # If we truly care, we should simply detect this case at
1615 # runtime and generate the fallback to serial emulation.
1616 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001617 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001618 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001619 x32)
1620 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001621 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001622 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001623 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001624esac
1625
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001626eval "cross_cc_${cpu}=\$host_cc"
1627cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001628QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001629
Peter Maydellaffc88c2016-06-13 11:32:24 +01001630# For user-mode emulation the host arch has to be one we explicitly
1631# support, even if we're using TCI.
1632if [ "$ARCH" = "unknown" ]; then
1633 bsd_user="no"
1634 linux_user="no"
1635fi
1636
Peter Maydell60e0df22011-05-03 14:50:13 +01001637default_target_list=""
1638
Peter Maydell6e92f822013-05-20 16:16:15 +01001639mak_wilds=""
1640
1641if [ "$softmmu" = "yes" ]; then
1642 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001643fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001644if [ "$linux_user" = "yes" ]; then
1645 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001646fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001647if [ "$bsd_user" = "yes" ]; then
1648 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001649fi
1650
Alex Bennée447e1332019-03-19 11:59:12 +00001651if test -z "$target_list_exclude"; then
1652 for config in $mak_wilds; do
1653 default_target_list="${default_target_list} $(basename "$config" .mak)"
1654 done
1655else
1656 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1657 for config in $mak_wilds; do
1658 target="$(basename "$config" .mak)"
1659 exclude="no"
1660 for excl in $exclude_list; do
1661 if test "$excl" = "$target"; then
1662 exclude="yes"
1663 break;
1664 fi
1665 done
1666 if test "$exclude" = "no"; then
1667 default_target_list="${default_target_list} $target"
1668 fi
1669 done
1670fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001671
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001672# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001673trace_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 +01001674
pbrookaf5db582006-04-08 14:26:41 +00001675if test x"$show_help" = x"yes" ; then
1676cat << EOF
1677
1678Usage: configure [options]
1679Options: [defaults in brackets after descriptions]
1680
Stefan Weil08fb77e2013-12-18 22:09:39 +01001681Standard options:
1682 --help print this message
1683 --prefix=PREFIX install in PREFIX [$prefix]
1684 --interp-prefix=PREFIX where to find shared libraries, etc.
1685 use %M for cpu name [$interp_prefix]
1686 --target-list=LIST set target list (default: build everything)
1687$(echo Available targets: $default_target_list | \
1688 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001689 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001690
1691Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001692 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1693 --cc=CC use C compiler CC [$cc]
1694 --iasl=IASL use ACPI compiler IASL [$iasl]
1695 --host-cc=CC use C compiler CC [$host_cc] for code run at
1696 build time
1697 --cxx=CXX use C++ compiler CXX [$cxx]
1698 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1699 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001700 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001701 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001702 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001703 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001704 --make=MAKE use specified make [$make]
1705 --install=INSTALL use specified install [$install]
1706 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001707 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001708 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001709 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001710 --static enable static build [$static]
1711 --mandir=PATH install man pages in PATH
1712 --datadir=PATH install firmware in PATH$confsuffix
1713 --docdir=PATH install documentation in PATH$confsuffix
1714 --bindir=PATH install binaries in PATH
1715 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001716 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001717 --sysconfdir=PATH install config in PATH$confsuffix
1718 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001719 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001720 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001721 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001722 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001723 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001724 --disable-strip disable stripping binaries
1725 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001726 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001727 --audio-drv-list=LIST set audio drivers list:
1728 Available drivers: $audio_possible_drivers
1729 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1730 --block-drv-rw-whitelist=L
1731 set block driver read-write whitelist
1732 (affects only QEMU, not qemu-img)
1733 --block-drv-ro-whitelist=L
1734 set block driver read-only whitelist
1735 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001736 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001737 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001738 --with-trace-file=NAME Full PATH,NAME of file to store traces
1739 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001740 --disable-slirp disable SLIRP userspace network connectivity
1741 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001742 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001743 --oss-lib path to OSS library
1744 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001745 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001746 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001747 --enable-gcov enable test coverage analysis with gcov
1748 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001749 --disable-blobs disable installing provided firmware blobs
1750 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1751 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001752 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001753 --enable-gprof QEMU profiling with gprof
1754 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001755 --enable-debug-stack-usage
1756 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001757 --enable-plugins
1758 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001759 --disable-containers don't use containers for cross-building
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001760
1761Optional features, enabled with --enable-FEATURE and
1762disabled with --disable-FEATURE, default is enabled if available:
1763
1764 system all system emulation targets
1765 user supported user emulation targets
1766 linux-user all linux usermode emulation targets
1767 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001768 docs build documentation
1769 guest-agent build the QEMU Guest Agent
1770 guest-agent-msi build guest agent Windows MSI installation package
1771 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001772 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001773 debug-tcg TCG debugging (default is disabled)
1774 debug-info debugging information
1775 sparse sparse checker
1776
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001777 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001778 nettle nettle cryptography support
1779 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001780 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001781 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001782 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001783 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001784 vte vte support for the gtk UI
1785 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001786 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001787 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001788 vnc-sasl SASL encryption for VNC server
1789 vnc-jpeg JPEG lossy compression for VNC server
1790 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001791 cocoa Cocoa UI (Mac OS X only)
1792 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001793 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001794 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001795 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001796 brlapi BrlAPI (Braile)
1797 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001798 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001799 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001800 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001801 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001802 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001803 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001804 rdma Enable RDMA-based migration
1805 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001806 vde support for vde network
1807 netmap support for netmap network
1808 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001809 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001810 cap-ng libcap-ng support
1811 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001812 vhost-net vhost-net kernel acceleration support
1813 vhost-vsock virtio sockets device support
1814 vhost-scsi vhost-scsi kernel target support
1815 vhost-crypto vhost-user-crypto backend support
1816 vhost-kernel vhost kernel backend support
1817 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001818 spice spice
1819 rbd rados block device (rbd)
1820 libiscsi iscsi support
1821 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001822 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001823 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001824 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001825 usb-redir usb network redirection support
1826 lzo support of lzo compression library
1827 snappy support of snappy compression library
1828 bzip2 support of bzip2 compression library
1829 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001830 lzfse support of lzfse compression library
1831 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001832 seccomp seccomp support
1833 coroutine-pool coroutine freelist (better performance)
1834 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001835 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001836 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001837 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001838 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001839 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001840 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001841 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001842 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001843 opengl opengl support
1844 virglrenderer virgl rendering support
1845 xfsctl xfsctl support
1846 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001847 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001848 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001849 bochs bochs image format support
1850 cloop cloop image format support
1851 dmg dmg image format support
1852 qcow1 qcow v1 image format support
1853 vdi vdi image format support
1854 vvfat vvfat image format support
1855 qed qed image format support
1856 parallels parallels image format support
1857 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001858 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001859 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001860 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001861 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001862 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001863
1864NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001865EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001866exit 0
pbrookaf5db582006-04-08 14:26:41 +00001867fi
1868
Thomas Huth9c790242019-03-11 11:20:34 +01001869# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001870rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001871
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001872if test -z "$python"
1873then
1874 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001875fi
1876
1877# Note that if the Python conditional here evaluates True we will exit
1878# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001879if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1880 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001881 "Use --python=/path/to/python to specify a supported Python."
1882fi
1883
Cleber Rosa755ee702018-11-09 10:07:07 -05001884# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001885python_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 -05001886
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001887# Suppress writing compiled files
1888python="$python -B"
1889
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001890# Check that the C compiler works. Doing this here before testing
1891# the host CPU ensures that we had a valid CC to autodetect the
1892# $cpu var (and we should bail right here if that's not the case).
1893# It also allows the help message to be printed without a CC.
1894write_c_skeleton;
1895if compile_object ; then
1896 : C compiler works ok
1897else
1898 error_exit "\"$cc\" either does not exist or does not work"
1899fi
1900if ! compile_prog ; then
1901 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1902fi
1903
Peter Maydell359bc952011-12-24 13:07:25 +00001904# Now we have handled --enable-tcg-interpreter and know we're not just
1905# printing the help message, bail out if the host CPU isn't supported.
1906if test "$ARCH" = "unknown"; then
1907 if test "$tcg_interpreter" = "yes" ; then
1908 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001909 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001910 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001911 fi
1912fi
1913
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001914# Consult white-list to determine whether to enable werror
1915# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001916if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001917 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001918 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001919 werror="yes"
1920 else
1921 werror="no"
1922 fi
1923fi
1924
Peter Maydellfb59dab2017-03-28 14:01:52 +01001925if test "$bogus_os" = "yes"; then
1926 # Now that we know that we're not printing the help and that
1927 # the compiler works (so the results of the check_defines we used
1928 # to identify the OS are reliable), if we didn't recognize the
1929 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001930 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001931fi
1932
Thomas Huthefc6c072018-12-03 10:12:32 +01001933# Check whether the compiler matches our minimum requirements:
1934cat > $TMPC << EOF
1935#if defined(__clang_major__) && defined(__clang_minor__)
1936# ifdef __apple_build_version__
1937# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1938# error You need at least XCode Clang v5.1 to compile QEMU
1939# endif
1940# else
1941# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1942# error You need at least Clang v3.4 to compile QEMU
1943# endif
1944# endif
1945#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1946# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1947# error You need at least GCC v4.8 to compile QEMU
1948# endif
1949#else
1950# error You either need GCC or Clang to compiler QEMU
1951#endif
1952int main (void) { return 0; }
1953EOF
1954if ! compile_prog "" "" ; then
1955 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1956fi
1957
Paolo Bonzini8d050952010-12-23 11:43:52 +01001958gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1959gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001960gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001961gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001962gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001963gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001964# Note that we do not add -Werror to gcc_flags here, because that would
1965# enable it for all configure tests. If a configure test failed due
1966# to -Werror this would just silently disable some features,
1967# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001968
1969cc_has_warning_flag() {
1970 write_c_skeleton;
1971
Peter Maydella1d29d62012-10-27 22:19:07 +01001972 # Use the positive sense of the flag when testing for -Wno-wombat
1973 # support (gcc will happily accept the -Wno- form of unknown
1974 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001975 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1976 compile_prog "-Werror $optflag" ""
1977}
1978
1979for flag in $gcc_flags; do
1980 if cc_has_warning_flag $flag ; then
1981 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001982 fi
1983done
1984
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001985if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001986 cat > $TMPC << EOF
1987int main(int argc, char *argv[])
1988{
1989 char arr[64], *p = arr, *c = argv[0];
1990 while (*c) {
1991 *p++ = *c++;
1992 }
1993 return 0;
1994}
1995EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001996 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001997 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001998 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001999 # We need to check both a compile and a link, since some compiler
2000 # setups fail only on a .c->.o compile and some only at link time
2001 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2002 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01002003 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002004 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002005 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01002006 break
2007 fi
2008 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002009 if test "$stack_protector" = yes; then
2010 if test $sp_on = 0; then
2011 error_exit "Stack protector not supported"
2012 fi
2013 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01002014fi
2015
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02002016# Disable -Wmissing-braces on older compilers that warn even for
2017# the "universal" C zero initializer {0}.
2018cat > $TMPC << EOF
2019struct {
2020 int a[2];
2021} x = {0};
2022EOF
2023if compile_object "-Werror" "" ; then
2024 :
2025else
2026 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2027fi
2028
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002029# Our module code doesn't support Windows
2030if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2031 error_exit "Modules are not available for Windows"
2032fi
2033
Thomas Huthd376e9d2018-12-03 11:41:38 +01002034# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002035if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002036 if test "$modules" = "yes" ; then
2037 error_exit "static and modules are mutually incompatible"
2038 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002039 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002040 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002041 else
2042 pie="no"
2043 fi
2044fi
2045
Emilio G. Cota768b7852015-04-29 13:09:02 +02002046# Unconditional check for compiler __thread support
2047 cat > $TMPC << EOF
2048static __thread int tls_var;
2049int main(void) { return tls_var; }
2050EOF
2051
2052if ! compile_prog "-Werror" "" ; then
2053 error_exit "Your compiler does not support the __thread specifier for " \
2054 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2055fi
2056
Avi Kivity40d64442011-11-15 20:12:17 +02002057if test "$pie" = ""; then
2058 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002059 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002060 ;;
2061 *)
2062 pie="no"
2063 ;;
2064 esac
2065fi
2066
2067if test "$pie" != "no" ; then
2068 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002069
2070#ifdef __linux__
2071# define THREAD __thread
2072#else
2073# define THREAD
2074#endif
2075
2076static THREAD int tls_var;
2077
2078int main(void) { return tls_var; }
2079
Avi Kivity40d64442011-11-15 20:12:17 +02002080EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002081 # check we support --no-pie first...
2082 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2083 CFLAGS_NOPIE="-fno-pie"
2084 LDFLAGS_NOPIE="-nopie"
2085 fi
2086
Avi Kivity40d64442011-11-15 20:12:17 +02002087 if compile_prog "-fPIE -DPIE" "-pie"; then
2088 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002089 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002090 pie="yes"
2091 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002092 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002093 fi
2094 else
2095 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002096 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002097 else
2098 echo "Disabling PIE due to missing toolchain support"
2099 pie="no"
2100 fi
2101 fi
2102fi
2103
Paolo Bonzini09dada42013-04-17 16:26:47 +02002104##########################################
2105# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2106# use i686 as default anyway, but for those that don't, an explicit
2107# specification is necessary
2108
2109if test "$cpu" = "i386"; then
2110 cat > $TMPC << EOF
2111static int sfaa(int *ptr)
2112{
2113 return __sync_fetch_and_and(ptr, 0);
2114}
2115
2116int main(void)
2117{
2118 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002119 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002120 sfaa(&val);
2121 return val;
2122}
2123EOF
2124 if ! compile_prog "" "" ; then
2125 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2126 fi
2127fi
2128
2129#########################################
bellardec530c82006-04-25 22:36:06 +00002130# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002131
bellardec530c82006-04-25 22:36:06 +00002132if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002133 if has $install; then
2134 :
2135 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002136 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2137 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2138 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002139 fi
Stefan Weil89138852016-05-16 15:10:20 +02002140 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002141 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2142 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2143 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002144 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002145 if has ar; then
2146 :
2147 else
bellardec530c82006-04-25 22:36:06 +00002148 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002149 error_exit "No path includes ar" \
2150 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002151 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002152 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002153 fi
ths5fafdf22007-09-16 21:08:06 +00002154fi
bellardec530c82006-04-25 22:36:06 +00002155
Stefan Weilafb63eb2012-09-26 22:04:38 +02002156if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002157 for target in $default_target_list; do
2158 supported_target $target 2>/dev/null && \
2159 target_list="$target_list $target"
2160 done
2161 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002162else
Stefan Weil89138852016-05-16 15:10:20 +02002163 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002164 for target in $target_list; do
2165 # Check that we recognised the target name; this allows a more
2166 # friendly error message than if we let it fall through.
2167 case " $default_target_list " in
2168 *" $target "*)
2169 ;;
2170 *)
2171 error_exit "Unknown target name '$target'"
2172 ;;
2173 esac
2174 supported_target $target || exit 1
2175 done
bellard5327cf42005-01-10 23:18:50 +00002176fi
Peter Maydell25b48332013-05-20 16:16:16 +01002177
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002178# see if system emulation was really requested
2179case " $target_list " in
2180 *"-softmmu "*) softmmu=yes
2181 ;;
2182 *) softmmu=no
2183 ;;
2184esac
bellard5327cf42005-01-10 23:18:50 +00002185
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002186for target in $target_list; do
2187 case "$target" in
2188 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2189 edk2_blobs="yes"
2190 ;;
2191 esac
2192done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002193# The EDK2 binaries are compressed with bzip2
2194if test "$edk2_blobs" = "yes" && ! has bzip2; then
2195 error_exit "The bzip2 program is required for building QEMU"
2196fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002197
Juan Quintela249247c2009-08-12 18:20:25 +02002198feature_not_found() {
2199 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002200 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002201
Peter Maydell76ad07a2013-04-08 12:11:26 +01002202 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002203 "configure was not able to find it." \
2204 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002205}
2206
bellard7d132992003-03-06 23:23:54 +00002207# ---
2208# big/little endian test
2209cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002210short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2211short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2212extern int foo(short *, short *);
2213int main(int argc, char *argv[]) {
2214 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002215}
2216EOF
2217
Mike Frysinger61cc9192013-06-30 23:30:18 -04002218if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002219 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002220 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002221 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002222 bigendian="no"
2223 else
2224 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002225 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002226else
2227 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002228fi
2229
Juan Quintelab0a47e72009-08-12 18:29:49 +02002230##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002231# system tools
2232if test -z "$want_tools"; then
2233 if test "$softmmu" = "no"; then
2234 want_tools=no
2235 else
2236 want_tools=yes
2237 fi
2238fi
2239
2240##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002241# cocoa implies not SDL or GTK
2242# (the cocoa UI code currently assumes it is always the active UI
2243# and doesn't interact well with other UI frontend code)
2244if test "$cocoa" = "yes"; then
2245 if test "$sdl" = "yes"; then
2246 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2247 fi
2248 if test "$gtk" = "yes"; then
2249 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2250 fi
2251 gtk=no
2252 sdl=no
2253fi
2254
Eric Blake6b39b062016-10-11 10:46:23 -05002255# Some versions of Mac OS X incorrectly define SIZE_MAX
2256cat > $TMPC << EOF
2257#include <stdint.h>
2258#include <stdio.h>
2259int main(int argc, char *argv[]) {
2260 return printf("%zu", SIZE_MAX);
2261}
2262EOF
2263have_broken_size_max=no
2264if ! compile_object -Werror ; then
2265 have_broken_size_max=yes
2266fi
2267
Peter Maydella30878e2015-08-14 16:10:52 +01002268##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002269# L2TPV3 probe
2270
2271cat > $TMPC <<EOF
2272#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002273#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002274int main(void) { return sizeof(struct mmsghdr); }
2275EOF
2276if compile_prog "" "" ; then
2277 l2tpv3=yes
2278else
2279 l2tpv3=no
2280fi
2281
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002282#########################################
2283# vhost interdependencies and host support
2284
2285# vhost backends
2286test "$vhost_user" = "" && vhost_user=yes
2287if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2288 error_exit "vhost-user isn't available on win32"
2289fi
2290test "$vhost_kernel" = "" && vhost_kernel=$linux
2291if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2292 error_exit "vhost-kernel is only available on Linux"
2293fi
2294
2295# vhost-kernel devices
2296test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2297if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2298 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2299fi
2300test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2301if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2302 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2303fi
2304
2305# vhost-user backends
2306test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2307if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2308 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2309fi
2310test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2311if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2312 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2313fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002314test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2315if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2316 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2317fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002318
2319# OR the vhost-kernel and vhost-user values for simplicity
2320if test "$vhost_net" = ""; then
2321 test "$vhost_net_user" = "yes" && vhost_net=yes
2322 test "$vhost_kernel" = "yes" && vhost_net=yes
2323fi
2324
Gonglei015a33b2014-07-01 20:58:08 +08002325##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002326# MinGW / Mingw-w64 localtime_r/gmtime_r check
2327
2328if test "$mingw32" = "yes"; then
2329 # Some versions of MinGW / Mingw-w64 lack localtime_r
2330 # and gmtime_r entirely.
2331 #
2332 # Some versions of Mingw-w64 define a macro for
2333 # localtime_r/gmtime_r.
2334 #
2335 # Some versions of Mingw-w64 will define functions
2336 # for localtime_r/gmtime_r, but only if you have
2337 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2338 # though, unistd.h and pthread.h both define
2339 # that for you.
2340 #
2341 # So this #undef localtime_r and #include <unistd.h>
2342 # are not in fact redundant.
2343cat > $TMPC << EOF
2344#include <unistd.h>
2345#include <time.h>
2346#undef localtime_r
2347int main(void) { localtime_r(NULL, NULL); return 0; }
2348EOF
2349 if compile_prog "" "" ; then
2350 localtime_r="yes"
2351 else
2352 localtime_r="no"
2353 fi
2354fi
2355
2356##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002357# pkg-config probe
2358
2359if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002360 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002361fi
2362
2363##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002364# NPTL probe
2365
Peter Maydell24cb36a2013-07-16 18:45:00 +01002366if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002367 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002368#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002369#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002370int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002371#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2372#error bork
2373#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002374 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002375}
2376EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002377 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002378 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002379 fi
pbrookbd0c5662008-05-29 14:34:11 +00002380fi
2381
balrogac629222008-10-11 09:56:04 +00002382##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002383# lzo check
2384
2385if test "$lzo" != "no" ; then
2386 cat > $TMPC << EOF
2387#include <lzo/lzo1x.h>
2388int main(void) { lzo_version(); return 0; }
2389EOF
2390 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002391 libs_softmmu="$libs_softmmu -llzo2"
2392 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002393 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002394 if test "$lzo" = "yes"; then
2395 feature_not_found "liblzo2" "Install liblzo2 devel"
2396 fi
2397 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002398 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002399fi
2400
2401##########################################
2402# snappy check
2403
2404if test "$snappy" != "no" ; then
2405 cat > $TMPC << EOF
2406#include <snappy-c.h>
2407int main(void) { snappy_max_compressed_length(4096); return 0; }
2408EOF
2409 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002410 libs_softmmu="$libs_softmmu -lsnappy"
2411 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002412 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002413 if test "$snappy" = "yes"; then
2414 feature_not_found "libsnappy" "Install libsnappy devel"
2415 fi
2416 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002417 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002418fi
2419
2420##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002421# bzip2 check
2422
2423if test "$bzip2" != "no" ; then
2424 cat > $TMPC << EOF
2425#include <bzlib.h>
2426int main(void) { BZ2_bzlibVersion(); return 0; }
2427EOF
2428 if compile_prog "" "-lbz2" ; then
2429 bzip2="yes"
2430 else
2431 if test "$bzip2" = "yes"; then
2432 feature_not_found "libbzip2" "Install libbzip2 devel"
2433 fi
2434 bzip2="no"
2435 fi
2436fi
2437
2438##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002439# lzfse check
2440
2441if test "$lzfse" != "no" ; then
2442 cat > $TMPC << EOF
2443#include <lzfse.h>
2444int main(void) { lzfse_decode_scratch_size(); return 0; }
2445EOF
2446 if compile_prog "" "-llzfse" ; then
2447 lzfse="yes"
2448 else
2449 if test "$lzfse" = "yes"; then
2450 feature_not_found "lzfse" "Install lzfse devel"
2451 fi
2452 lzfse="no"
2453 fi
2454fi
2455
2456##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002457# libseccomp check
2458
2459if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002460 libseccomp_minver="2.3.0"
2461 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002462 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2463 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002464 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002465 else
Andrew Jones693e5912015-09-30 11:59:18 -04002466 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002467 feature_not_found "libseccomp" \
2468 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002469 fi
2470 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002471 fi
2472fi
2473##########################################
aliguorie37630c2009-04-22 15:19:10 +00002474# xen probe
2475
Juan Quintelafc321b42009-08-12 18:29:55 +02002476if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002477 # Check whether Xen library path is specified via --extra-ldflags to avoid
2478 # overriding this setting with pkg-config output. If not, try pkg-config
2479 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002480
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002481 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2482 $pkg_config --exists xencontrol ; then
2483 xen_ctrl_version="$(printf '%d%02d%02d' \
2484 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2485 xen=yes
2486 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2487 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002488 if $pkg_config --exists xentoolcore; then
2489 xen_pc="$xen_pc xentoolcore"
2490 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002491 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2492 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002493 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002494
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002495 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002496 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002497
2498 # First we test whether Xen headers and libraries are available.
2499 # If no, we are done and there is no Xen support.
2500 # If yes, more tests are run to detect the Xen version.
2501
2502 # Xen (any)
2503 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002504#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002505int main(void) {
2506 return 0;
2507}
2508EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002509 if ! compile_prog "" "$xen_libs" ; then
2510 # Xen not found
2511 if test "$xen" = "yes" ; then
2512 feature_not_found "xen" "Install xen devel"
2513 fi
2514 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002515
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002516 # Xen unstable
2517 elif
2518 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002519#undef XC_WANT_COMPAT_DEVICEMODEL_API
2520#define __XEN_TOOLS__
2521#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002522#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002523int main(void) {
2524 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002525 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002526
2527 xd = xendevicemodel_open(0, 0);
2528 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2529
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002530 xfmem = xenforeignmemory_open(0, 0);
2531 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2532
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002533 return 0;
2534}
2535EOF
2536 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2537 then
2538 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2539 xen_ctrl_version=41100
2540 xen=yes
2541 elif
2542 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002543#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2544#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002545#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002546int main(void) {
2547 xenforeignmemory_handle *xfmem;
2548
2549 xfmem = xenforeignmemory_open(0, 0);
2550 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002551 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002552
2553 return 0;
2554}
2555EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002556 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002557 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002558 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002559 xen_ctrl_version=41000
2560 xen=yes
2561 elif
2562 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002563#undef XC_WANT_COMPAT_DEVICEMODEL_API
2564#define __XEN_TOOLS__
2565#include <xendevicemodel.h>
2566int main(void) {
2567 xendevicemodel_handle *xd;
2568
2569 xd = xendevicemodel_open(0, 0);
2570 xendevicemodel_close(xd);
2571
2572 return 0;
2573}
2574EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002575 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2576 then
2577 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2578 xen_ctrl_version=40900
2579 xen=yes
2580 elif
2581 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002582/*
2583 * If we have stable libs the we don't want the libxc compat
2584 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002585 *
2586 * Also, check if xengnttab_grant_copy_segment_t is defined and
2587 * grant copy operation is implemented.
2588 */
2589#undef XC_WANT_COMPAT_EVTCHN_API
2590#undef XC_WANT_COMPAT_GNTTAB_API
2591#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2592#include <xenctrl.h>
2593#include <xenstore.h>
2594#include <xenevtchn.h>
2595#include <xengnttab.h>
2596#include <xenforeignmemory.h>
2597#include <stdint.h>
2598#include <xen/hvm/hvm_info_table.h>
2599#if !defined(HVM_MAX_VCPUS)
2600# error HVM_MAX_VCPUS not defined
2601#endif
2602int main(void) {
2603 xc_interface *xc = NULL;
2604 xenforeignmemory_handle *xfmem;
2605 xenevtchn_handle *xe;
2606 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002607 xengnttab_grant_copy_segment_t* seg = NULL;
2608
2609 xs_daemon_open();
2610
2611 xc = xc_interface_open(0, 0, 0);
2612 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2613 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2614 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2615 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002616
2617 xfmem = xenforeignmemory_open(0, 0);
2618 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2619
2620 xe = xenevtchn_open(0, 0);
2621 xenevtchn_fd(xe);
2622
2623 xg = xengnttab_open(0, 0);
2624 xengnttab_grant_copy(xg, 0, seg);
2625
2626 return 0;
2627}
2628EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002629 compile_prog "" "$xen_libs $xen_stable_libs"
2630 then
2631 xen_ctrl_version=40800
2632 xen=yes
2633 elif
2634 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002635/*
2636 * If we have stable libs the we don't want the libxc compat
2637 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002638 */
2639#undef XC_WANT_COMPAT_EVTCHN_API
2640#undef XC_WANT_COMPAT_GNTTAB_API
2641#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2642#include <xenctrl.h>
2643#include <xenstore.h>
2644#include <xenevtchn.h>
2645#include <xengnttab.h>
2646#include <xenforeignmemory.h>
2647#include <stdint.h>
2648#include <xen/hvm/hvm_info_table.h>
2649#if !defined(HVM_MAX_VCPUS)
2650# error HVM_MAX_VCPUS not defined
2651#endif
2652int main(void) {
2653 xc_interface *xc = NULL;
2654 xenforeignmemory_handle *xfmem;
2655 xenevtchn_handle *xe;
2656 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002657
2658 xs_daemon_open();
2659
2660 xc = xc_interface_open(0, 0, 0);
2661 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2662 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2663 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2664 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002665
2666 xfmem = xenforeignmemory_open(0, 0);
2667 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2668
2669 xe = xenevtchn_open(0, 0);
2670 xenevtchn_fd(xe);
2671
2672 xg = xengnttab_open(0, 0);
2673 xengnttab_map_grant_ref(xg, 0, 0, 0);
2674
2675 return 0;
2676}
2677EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002678 compile_prog "" "$xen_libs $xen_stable_libs"
2679 then
2680 xen_ctrl_version=40701
2681 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002682
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002683 # Xen 4.6
2684 elif
2685 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002686#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002687#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002688#include <stdint.h>
2689#include <xen/hvm/hvm_info_table.h>
2690#if !defined(HVM_MAX_VCPUS)
2691# error HVM_MAX_VCPUS not defined
2692#endif
2693int main(void) {
2694 xc_interface *xc;
2695 xs_daemon_open();
2696 xc = xc_interface_open(0, 0, 0);
2697 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2698 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002699 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002700 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002701 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002702 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002703 return 0;
2704}
2705EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002706 compile_prog "" "$xen_libs"
2707 then
2708 xen_ctrl_version=40600
2709 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002710
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002711 # Xen 4.5
2712 elif
2713 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002714#include <xenctrl.h>
2715#include <xenstore.h>
2716#include <stdint.h>
2717#include <xen/hvm/hvm_info_table.h>
2718#if !defined(HVM_MAX_VCPUS)
2719# error HVM_MAX_VCPUS not defined
2720#endif
2721int main(void) {
2722 xc_interface *xc;
2723 xs_daemon_open();
2724 xc = xc_interface_open(0, 0, 0);
2725 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2726 xc_gnttab_open(NULL, 0);
2727 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2728 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002729 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2730 return 0;
2731}
2732EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002733 compile_prog "" "$xen_libs"
2734 then
2735 xen_ctrl_version=40500
2736 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002737
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002738 elif
2739 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002740#include <xenctrl.h>
2741#include <xenstore.h>
2742#include <stdint.h>
2743#include <xen/hvm/hvm_info_table.h>
2744#if !defined(HVM_MAX_VCPUS)
2745# error HVM_MAX_VCPUS not defined
2746#endif
2747int main(void) {
2748 xc_interface *xc;
2749 xs_daemon_open();
2750 xc = xc_interface_open(0, 0, 0);
2751 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2752 xc_gnttab_open(NULL, 0);
2753 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2754 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002755 return 0;
2756}
2757EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002758 compile_prog "" "$xen_libs"
2759 then
2760 xen_ctrl_version=40200
2761 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002762
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002763 else
2764 if test "$xen" = "yes" ; then
2765 feature_not_found "xen (unsupported version)" \
2766 "Install a supported xen (xen 4.2 or newer)"
2767 fi
2768 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002769 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002770
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002771 if test "$xen" = yes; then
2772 if test $xen_ctrl_version -ge 40701 ; then
2773 libs_softmmu="$xen_stable_libs $libs_softmmu"
2774 fi
2775 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002776 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002777 fi
aliguorie37630c2009-04-22 15:19:10 +00002778fi
2779
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002780if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002781 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002782 xen_pci_passthrough=yes
2783 else
2784 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002785 error_exit "User requested feature Xen PCI Passthrough" \
2786 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002787 fi
2788 xen_pci_passthrough=no
2789 fi
2790fi
2791
aliguorie37630c2009-04-22 15:19:10 +00002792##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002793# Windows Hypervisor Platform accelerator (WHPX) check
2794if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002795 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002796 whpx="yes"
2797 else
2798 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002799 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002800 fi
2801 whpx="no"
2802 fi
2803fi
2804
2805##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002806# Sparse probe
2807if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002808 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002809 sparse=yes
2810 else
2811 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002812 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002813 fi
2814 sparse=no
2815 fi
2816fi
2817
2818##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002819# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002820if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002821 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002822 x11_cflags=$($pkg_config --cflags x11)
2823 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002824fi
2825
2826##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002827# GTK probe
2828
2829if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002830 gtkpackage="gtk+-3.0"
2831 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002832 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002833 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002834 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2835 gtk_libs=$($pkg_config --libs $gtkpackage)
2836 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002837 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002838 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002839 gtk_cflags="$gtk_cflags $x11_cflags"
2840 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002841 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002842 gtk="yes"
2843 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002844 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002845 else
2846 gtk="no"
2847 fi
2848fi
2849
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002850
2851##########################################
2852# GNUTLS probe
2853
2854if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002855 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002856 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002857 gnutls_cflags=$($pkg_config --cflags gnutls)
2858 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002859 # Packaging for the static libraries is not always correct.
2860 # At least ubuntu 18.04 ships only shared libraries.
2861 write_c_skeleton
2862 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002863 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002864 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2865 pass="yes"
2866 fi
2867 fi
2868 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002869 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002870 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002871 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002872 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002873fi
2874
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002875
2876# If user didn't give a --disable/enable-gcrypt flag,
2877# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002878# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002879if test -z "$gcrypt"
2880then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002881 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002882 then
2883 gcrypt="no"
2884 fi
2885fi
2886
2887# If user didn't give a --disable/enable-nettle flag,
2888# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002889# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002890if test -z "$nettle"
2891then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002892 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002893 then
2894 nettle="no"
2895 fi
2896fi
2897
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002898has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002899 if ! has "libgcrypt-config"
2900 then
2901 return 1
2902 fi
2903
2904 if test -n "$cross_prefix"
2905 then
Stefan Weil89138852016-05-16 15:10:20 +02002906 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002907 if test "$host-" != $cross_prefix
2908 then
2909 return 1
2910 fi
2911 fi
2912
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002913 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2914 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2915
2916 if test $maj != 1 || test $min -lt 5
2917 then
2918 return 1
2919 fi
2920
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002921 return 0
2922}
2923
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002924
2925if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002926 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002927 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002928 nettle_cflags=$($pkg_config --cflags nettle)
2929 nettle_libs=$($pkg_config --libs nettle)
2930 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002931 # Link test to make sure the given libraries work (e.g for static).
2932 write_c_skeleton
2933 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002934 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002935 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2936 if test -z "$gcrypt"; then
2937 gcrypt="no"
2938 fi
2939 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002940 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002941 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01002942 if test "$pass" = "yes"
2943 then
2944 cat > $TMPC << EOF
2945#include <nettle/xts.h>
2946int main(void) {
2947 return 0;
2948}
2949EOF
2950 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2951 nettle_xts=yes
2952 qemu_private_xts=no
2953 fi
2954 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002955 if test "$pass" = "no" && test "$nettle" = "yes"; then
2956 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002957 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002958 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002959 fi
2960fi
2961
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002962if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002963 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002964 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002965 gcrypt_cflags=$(libgcrypt-config --cflags)
2966 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002967 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002968 # as it "spreads unnecessary dependencies" which in
2969 # turn breaks static builds...
2970 if test "$static" = "yes"
2971 then
2972 gcrypt_libs="$gcrypt_libs -lgpg-error"
2973 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002974
Richard Hendersona73e82e2019-05-09 18:24:35 -07002975 # Link test to make sure the given libraries work (e.g for static).
2976 write_c_skeleton
2977 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002978 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002979 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2980 pass="yes"
2981 fi
2982 fi
2983 if test "$pass" = "yes"; then
2984 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002985 cat > $TMPC << EOF
2986#include <gcrypt.h>
2987int main(void) {
2988 gcry_mac_hd_t handle;
2989 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2990 GCRY_MAC_FLAG_SECURE, NULL);
2991 return 0;
2992}
2993EOF
2994 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2995 gcrypt_hmac=yes
2996 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01002997 cat > $TMPC << EOF
2998#include <gcrypt.h>
2999int main(void) {
3000 gcry_cipher_hd_t handle;
3001 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3002 return 0;
3003}
3004EOF
3005 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3006 gcrypt_xts=yes
3007 qemu_private_xts=no
3008 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003009 elif test "$gcrypt" = "yes"; then
3010 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003011 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003012 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003013 fi
3014fi
3015
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003016
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003017if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3018then
3019 error_exit "Only one of gcrypt & nettle can be enabled"
3020fi
3021
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003022##########################################
3023# libtasn1 - only for the TLS creds/session test suite
3024
3025tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003026tasn1_cflags=""
3027tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003028if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003029 tasn1_cflags=$($pkg_config --cflags libtasn1)
3030 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003031else
3032 tasn1=no
3033fi
3034
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003035
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003036##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003037# PAM probe
3038
3039if test "$auth_pam" != "no"; then
3040 cat > $TMPC <<EOF
3041#include <security/pam_appl.h>
3042#include <stdio.h>
3043int main(void) {
3044 const char *service_name = "qemu";
3045 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003046 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003047 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003048 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003049 return 0;
3050}
3051EOF
3052 if compile_prog "" "-lpam" ; then
3053 auth_pam=yes
3054 else
3055 if test "$auth_pam" = "yes"; then
3056 feature_not_found "PAM" "Install PAM development package"
3057 else
3058 auth_pam=no
3059 fi
3060 fi
3061fi
3062
3063##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003064# getifaddrs (for tests/test-io-channel-socket )
3065
3066have_ifaddrs_h=yes
3067if ! check_include "ifaddrs.h" ; then
3068 have_ifaddrs_h=no
3069fi
3070
3071##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003072# VTE probe
3073
3074if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003075 vteminversion="0.32.0"
3076 if $pkg_config --exists "vte-2.91"; then
3077 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003078 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003079 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003080 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003081 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003082 vte_cflags=$($pkg_config --cflags $vtepackage)
3083 vte_libs=$($pkg_config --libs $vtepackage)
3084 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003085 vte="yes"
3086 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003087 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003088 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003089 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003090 fi
3091fi
3092
3093##########################################
bellard11d9f692004-04-02 20:55:59 +00003094# SDL probe
3095
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003096# Look for sdl configuration program (pkg-config or sdl2-config). Try
3097# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003098
Peter Xuc6093a02018-04-10 13:40:34 +08003099sdl_probe ()
3100{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003101 if $pkg_config sdl2 --exists; then
3102 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003103 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003104 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003105 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003106 sdlversion=$($sdlconfig --version)
3107 else
3108 if test "$sdl" = "yes" ; then
3109 feature_not_found "sdl" "Install SDL2-devel"
3110 fi
3111 sdl=no
3112 # no need to do the rest
3113 return
3114 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003115 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003116 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3117 fi
3118
Juan Quintelaac119f92009-07-27 16:13:15 +02003119 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003120#include <SDL.h>
3121#undef main /* We don't want SDL to override our main() */
3122int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3123EOF
Stefan Weil89138852016-05-16 15:10:20 +02003124 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003125 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003126 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003127 if $pkg_config sdl2 --exists; then
3128 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003129 else
3130 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3131 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003132 else
Stefan Weil89138852016-05-16 15:10:20 +02003133 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003134 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003135 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003136 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003137
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003138 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003139 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003140 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003141 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3142 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003143 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003144 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003145 :
3146 else
3147 sdl=no
3148 fi
3149 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003150 else # sdl not found
3151 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003152 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003153 fi
3154 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003155 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003156}
3157
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003158sdl_image_probe ()
3159{
3160 if test "$sdl_image" != "no" ; then
3161 if $pkg_config SDL2_image --exists; then
3162 if test "$static" = "yes"; then
3163 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3164 else
3165 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3166 fi
3167 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3168 sdl_image=yes
3169
3170 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3171 sdl_libs="$sdl_libs $sdl_image_libs"
3172 else
3173 if test "$sdl_image" = "yes" ; then
3174 feature_not_found "sdl_image" "Install SDL Image devel"
3175 else
3176 sdl_image=no
3177 fi
3178 fi
3179 fi
3180}
3181
Peter Xuc6093a02018-04-10 13:40:34 +08003182if test "$sdl" != "no" ; then
3183 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003184fi
bellard11d9f692004-04-02 20:55:59 +00003185
aliguori5368a422009-03-03 17:37:21 +00003186if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003187 sdl_image_probe
3188else
3189 if test "$sdl_image" = "yes"; then
3190 echo "warning: SDL Image requested, but SDL is not available, disabling"
3191 fi
3192 sdl_image=no
3193fi
3194
3195if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003196 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003197#include <SDL.h>
3198#if defined(SDL_VIDEO_DRIVER_X11)
3199#include <X11/XKBlib.h>
3200#else
3201#error No x11 support
3202#endif
3203int main(void) { return 0; }
3204EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003205 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003206 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003207 sdl_cflags="$sdl_cflags $x11_cflags"
3208 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003209 fi
aliguori5368a422009-03-03 17:37:21 +00003210fi
3211
ths8f28f3f2007-01-05 21:25:54 +00003212##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003213# RDMA needs OpenFabrics libraries
3214if test "$rdma" != "no" ; then
3215 cat > $TMPC <<EOF
3216#include <rdma/rdma_cma.h>
3217int main(void) { return 0; }
3218EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003219 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003220 if compile_prog "" "$rdma_libs" ; then
3221 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003222 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003223 else
3224 if test "$rdma" = "yes" ; then
3225 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003226 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003227 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003228 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003229 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3230 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3231 fi
3232 rdma="no"
3233 fi
3234fi
3235
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003236##########################################
3237# PVRDMA detection
3238
3239cat > $TMPC <<EOF &&
3240#include <sys/mman.h>
3241
3242int
3243main(void)
3244{
3245 char buf = 0;
3246 void *addr = &buf;
3247 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3248
3249 return 0;
3250}
3251EOF
3252
3253if test "$rdma" = "yes" ; then
3254 case "$pvrdma" in
3255 "")
3256 if compile_prog "" ""; then
3257 pvrdma="yes"
3258 else
3259 pvrdma="no"
3260 fi
3261 ;;
3262 "yes")
3263 if ! compile_prog "" ""; then
3264 error_exit "PVRDMA is not supported since mremap is not implemented"
3265 fi
3266 pvrdma="yes"
3267 ;;
3268 "no")
3269 pvrdma="no"
3270 ;;
3271 esac
3272else
3273 if test "$pvrdma" = "yes" ; then
3274 error_exit "PVRDMA requires rdma suppport"
3275 fi
3276 pvrdma="no"
3277fi
ths8d5d2d42007-08-25 01:37:51 +00003278
Yuval Shaiaee108582019-08-18 16:21:06 +03003279# Let's see if enhanced reg_mr is supported
3280if test "$pvrdma" = "yes" ; then
3281
3282cat > $TMPC <<EOF &&
3283#include <infiniband/verbs.h>
3284
3285int
3286main(void)
3287{
3288 struct ibv_mr *mr;
3289 struct ibv_pd *pd = NULL;
3290 size_t length = 10;
3291 uint64_t iova = 0;
3292 int access = 0;
3293 void *addr = NULL;
3294
3295 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3296
3297 ibv_dereg_mr(mr);
3298
3299 return 0;
3300}
3301EOF
3302 if ! compile_prog "" "-libverbs"; then
3303 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3304 fi
3305fi
3306
ths8d5d2d42007-08-25 01:37:51 +00003307##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003308# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003309if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003310 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003311#include <sasl/sasl.h>
3312#include <stdio.h>
3313int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3314EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003315 # Assuming Cyrus-SASL installed in /usr prefix
3316 vnc_sasl_cflags=""
3317 vnc_sasl_libs="-lsasl2"
3318 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3319 vnc_sasl=yes
3320 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003321 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003322 else
3323 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003324 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003325 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003326 vnc_sasl=no
3327 fi
aliguori2f9606b2009-03-06 20:27:28 +00003328fi
3329
3330##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003331# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003332if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003333cat > $TMPC <<EOF
3334#include <stdio.h>
3335#include <jpeglib.h>
3336int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3337EOF
3338 vnc_jpeg_cflags=""
3339 vnc_jpeg_libs="-ljpeg"
3340 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3341 vnc_jpeg=yes
3342 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003343 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003344 else
3345 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003346 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003347 fi
3348 vnc_jpeg=no
3349 fi
3350fi
3351
3352##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003353# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003354if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003355cat > $TMPC <<EOF
3356//#include <stdio.h>
3357#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003358#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003359int main(void) {
3360 png_structp png_ptr;
3361 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003362 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003363}
3364EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003365 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003366 vnc_png_cflags=$($pkg_config libpng --cflags)
3367 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003368 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003369 vnc_png_cflags=""
3370 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003371 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003372 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3373 vnc_png=yes
3374 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003375 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003376 else
3377 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003378 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003379 fi
3380 vnc_png=no
3381 fi
3382fi
3383
3384##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003385# xkbcommon probe
3386if test "$xkbcommon" != "no" ; then
3387 if $pkg_config xkbcommon --exists; then
3388 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3389 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3390 xkbcommon=yes
3391 else
3392 if test "$xkbcommon" = "yes" ; then
3393 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3394 fi
3395 xkbcommon=no
3396 fi
3397fi
3398
aliguori76655d62009-03-06 20:27:37 +00003399
3400##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003401# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003402if test "$xfs" != "no" ; then
3403 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003404#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003405#include <xfs/xfs.h>
3406int main(void)
3407{
3408 xfsctl(NULL, 0, 0, NULL);
3409 return 0;
3410}
3411EOF
3412 if compile_prog "" "" ; then
3413 xfs="yes"
3414 else
3415 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003416 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003417 fi
3418 xfs=no
3419 fi
3420fi
3421
3422##########################################
ths8a16d272008-07-19 09:56:24 +00003423# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003424if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003425 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003426 cat > $TMPC << EOF
3427#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003428int main(void)
3429{
3430 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003431 char s[] = "";
3432 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003433 return 0;
3434}
ths8a16d272008-07-19 09:56:24 +00003435EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003436 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003437 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003438 else
3439 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003440 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003441 fi
3442 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003443 fi
ths8a16d272008-07-19 09:56:24 +00003444fi
3445
3446##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003447# netmap support probe
3448# Apart from looking for netmap headers, we make sure that the host API version
3449# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3450# a minor/major version number. Minor new features will be marked with values up
3451# to 15, and if something happens that requires a change to the backend we will
3452# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003453if test "$netmap" != "no" ; then
3454 cat > $TMPC << EOF
3455#include <inttypes.h>
3456#include <net/if.h>
3457#include <net/netmap.h>
3458#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003459#if (NETMAP_API < 11) || (NETMAP_API > 15)
3460#error
3461#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003462int main(void) { return 0; }
3463EOF
3464 if compile_prog "" "" ; then
3465 netmap=yes
3466 else
3467 if test "$netmap" = "yes" ; then
3468 feature_not_found "netmap"
3469 fi
3470 netmap=no
3471 fi
3472fi
3473
3474##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003475# libcap-ng library probe
3476if test "$cap_ng" != "no" ; then
3477 cap_libs="-lcap-ng"
3478 cat > $TMPC << EOF
3479#include <cap-ng.h>
3480int main(void)
3481{
3482 capng_capability_to_name(CAPNG_EFFECTIVE);
3483 return 0;
3484}
3485EOF
3486 if compile_prog "" "$cap_libs" ; then
3487 cap_ng=yes
3488 libs_tools="$cap_libs $libs_tools"
3489 else
3490 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003491 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003492 fi
3493 cap_ng=no
3494 fi
3495fi
3496
3497##########################################
malcc2de5c92008-06-28 19:13:06 +00003498# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003499
Stefan Weil89138852016-05-16 15:10:20 +02003500audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003501for drv in $audio_drv_list; do
3502 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003503 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003504 if $pkg_config alsa --exists; then
3505 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003506 if test "$drv" = "try-alsa"; then
3507 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3508 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003509 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003510 if test "$drv" = "try-alsa"; then
3511 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3512 else
3513 error_exit "$drv check failed" \
3514 "Make sure to have the $drv libs and headers installed."
3515 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003516 fi
malcc2de5c92008-06-28 19:13:06 +00003517 ;;
3518
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003519 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003520 if $pkg_config libpulse --exists; then
3521 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003522 if test "$drv" = "try-pa"; then
3523 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3524 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003525 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003526 if test "$drv" = "try-pa"; then
3527 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3528 else
3529 error_exit "$drv check failed" \
3530 "Make sure to have the $drv libs and headers installed."
3531 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003532 fi
malcb8e59f12008-07-02 21:03:08 +00003533 ;;
3534
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003535 sdl)
3536 if test "$sdl" = "no"; then
3537 error_exit "sdl not found or disabled, can not use sdl audio driver"
3538 fi
3539 ;;
3540
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003541 try-sdl)
3542 if test "$sdl" = "no"; then
3543 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3544 else
3545 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3546 fi
3547 ;;
3548
Juan Quintela997e6902009-08-03 14:46:29 +02003549 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003550 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003551 ;;
3552
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003553 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003554 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003555 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003556 ;;
3557
3558 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003559 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003560 ;;
3561
malce4c63a62008-07-19 16:15:16 +00003562 *)
malc1c9b2a52008-07-19 16:57:30 +00003563 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003564 error_exit "Unknown driver '$drv' selected" \
3565 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003566 }
3567 ;;
malcc2de5c92008-06-28 19:13:06 +00003568 esac
3569done
ths8f28f3f2007-01-05 21:25:54 +00003570
balrog4d3b6f62008-02-10 16:33:14 +00003571##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003572# BrlAPI probe
3573
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003574if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003575 brlapi_libs="-lbrlapi"
3576 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003577#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003578#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003579int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3580EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003581 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003582 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003583 else
3584 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003585 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003586 fi
3587 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003588 fi
3589fi
aurel322e4d9fb2008-04-08 06:01:02 +00003590
3591##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003592# iconv probe
3593if test "$iconv" != "no" ; then
3594 cat > $TMPC << EOF
3595#include <iconv.h>
3596int main(void) {
3597 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3598 return conv != (iconv_t) -1;
3599}
3600EOF
3601 iconv_prefix_list="/usr/local:/usr"
3602 iconv_lib_list=":-liconv"
3603 IFS=:
3604 for iconv_prefix in $iconv_prefix_list; do
3605 IFS=:
3606 iconv_cflags="-I$iconv_prefix/include"
3607 iconv_ldflags="-L$iconv_prefix/lib"
3608 for iconv_link in $iconv_lib_list; do
3609 unset IFS
3610 iconv_lib="$iconv_ldflags $iconv_link"
3611 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3612 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3613 iconv_found=yes
3614 break
3615 fi
3616 done
3617 if test "$iconv_found" = yes ; then
3618 break
3619 fi
3620 done
3621 if test "$iconv_found" = "yes" ; then
3622 iconv=yes
3623 else
3624 if test "$iconv" = "yes" ; then
3625 feature_not_found "iconv" "Install iconv devel"
3626 fi
3627 iconv=no
3628 fi
3629fi
3630
3631##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003632# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003633if test "$iconv" = "no" ; then
3634 # curses will need iconv
3635 curses=no
3636fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003637if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003638 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003639 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3640 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003641 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003642 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003643 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003644 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003645 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003646 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003647#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003648#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003649#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003650#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003651int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003652 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003653 wchar_t wch = L'w';
3654 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003655 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003656 addwstr(L"wide chars\n");
3657 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003658 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003659 codeset = nl_langinfo(CODESET);
3660 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003661}
balrog4d3b6f62008-02-10 16:33:14 +00003662EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003663 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003664 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003665 # Make sure we get the wide character prototypes
3666 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003667 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003668 for curses_lib in $curses_lib_list; do
3669 unset IFS
3670 if compile_prog "$curses_inc" "$curses_lib" ; then
3671 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003672 break
3673 fi
3674 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003675 if test "$curses_found" = yes ; then
3676 break
3677 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003678 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003679 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003680 if test "$curses_found" = "yes" ; then
3681 curses=yes
3682 else
3683 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003684 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003685 fi
3686 curses=no
3687 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003688fi
balrog4d3b6f62008-02-10 16:33:14 +00003689
blueswir1414f0da2008-08-15 18:20:52 +00003690##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003691# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003692if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003693 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003694 curlconfig="$pkg_config libcurl"
3695 else
3696 curlconfig=curl-config
3697 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003698 cat > $TMPC << EOF
3699#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003700int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003701EOF
Stefan Weil89138852016-05-16 15:10:20 +02003702 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3703 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003704 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003705 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003706 else
3707 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003708 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003709 fi
3710 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003711 fi
3712fi # test "$curl"
3713
3714##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003715# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003716
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003717glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003718glib_modules=gthread-2.0
3719if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003720 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003721fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003722if test "$plugins" = yes; then
3723 glib_modules="$glib_modules gmodule-2.0"
3724fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003725
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003726# This workaround is required due to a bug in pkg-config file for glib as it
3727# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3728
Eric Blakee633a5c2019-02-04 20:39:37 -06003729if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003730 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3731fi
3732
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003733for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003734 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003735 glib_cflags=$($pkg_config --cflags $i)
3736 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003737 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003738 LIBS="$glib_libs $LIBS"
3739 libs_qga="$glib_libs $libs_qga"
3740 else
3741 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3742 fi
3743done
3744
Marc-André Lureauf876b762019-02-21 12:07:00 +01003745if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3746 gio=yes
3747 gio_cflags=$($pkg_config --cflags gio-2.0)
3748 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003749 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003750 if [ ! -x "$gdbus_codegen" ]; then
3751 gdbus_codegen=
3752 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003753else
3754 gio=no
3755fi
3756
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003757if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3758 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3759 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3760fi
3761
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003762# Sanity check that the current size_t matches the
3763# size that glib thinks it should be. This catches
3764# problems on multi-arch where people try to build
3765# 32-bit QEMU while pointing at 64-bit glib headers
3766cat > $TMPC <<EOF
3767#include <glib.h>
3768#include <unistd.h>
3769
3770#define QEMU_BUILD_BUG_ON(x) \
3771 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3772
3773int main(void) {
3774 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3775 return 0;
3776}
3777EOF
3778
Stefan Weil5919e032016-04-28 23:33:41 +02003779if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003780 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3781 "You probably need to set PKG_CONFIG_LIBDIR"\
3782 "to point to the right pkg-config files for your"\
3783 "build target"
3784fi
3785
John Snowbbbf2e02015-03-25 18:57:38 -04003786# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3787cat > $TMPC << EOF
3788#include <glib.h>
3789int main(void) { return 0; }
3790EOF
3791if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3792 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3793 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3794 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3795 fi
3796fi
3797
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003798#########################################
3799# zlib check
3800
3801if test "$zlib" != "no" ; then
3802 if $pkg_config --exists zlib; then
3803 zlib_cflags=$($pkg_config --cflags zlib)
3804 zlib_libs=$($pkg_config --libs zlib)
3805 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3806 LIBS="$zlib_libs $LIBS"
3807 else
3808 cat > $TMPC << EOF
3809#include <zlib.h>
3810int main(void) { zlibVersion(); return 0; }
3811EOF
3812 if compile_prog "" "-lz" ; then
3813 LIBS="$LIBS -lz"
3814 else
3815 error_exit "zlib check failed" \
3816 "Make sure to have the zlib libs and headers installed."
3817 fi
3818 fi
3819fi
3820
Fam Zhenge26110c2014-02-10 14:48:57 +08003821##########################################
3822# SHA command probe for modules
3823if test "$modules" = yes; then
3824 shacmd_probe="sha1sum sha1 shasum"
3825 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003826 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003827 shacmd="$c"
3828 break
3829 fi
3830 done
3831 if test "$shacmd" = ""; then
3832 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3833 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003834fi
3835
3836##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003837# pixman support probe
3838
Eric Blakee633a5c2019-02-04 20:39:37 -06003839if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003840 pixman_cflags=
3841 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003842elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003843 pixman_cflags=$($pkg_config --cflags pixman-1)
3844 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003845else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003846 error_exit "pixman >= 0.21.8 not present." \
3847 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003848fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003849
3850##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003851# libmpathpersist probe
3852
3853if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003854 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003855 cat > $TMPC <<EOF
3856#include <libudev.h>
3857#include <mpath_persist.h>
3858unsigned mpath_mx_alloc_len = 1024;
3859int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003860static struct config *multipath_conf;
3861extern struct udev *udev;
3862extern struct config *get_multipath_config(void);
3863extern void put_multipath_config(struct config *conf);
3864struct udev *udev;
3865struct config *get_multipath_config(void) { return multipath_conf; }
3866void put_multipath_config(struct config *conf) { }
3867
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003868int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003869 udev = udev_new();
3870 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003871 return 0;
3872}
3873EOF
3874 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3875 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003876 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003877 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003878 # probe for the old API
3879 cat > $TMPC <<EOF
3880#include <libudev.h>
3881#include <mpath_persist.h>
3882unsigned mpath_mx_alloc_len = 1024;
3883int logsink;
3884int main(void) {
3885 struct udev *udev = udev_new();
3886 mpath_lib_init(udev);
3887 return 0;
3888}
3889EOF
3890 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3891 mpathpersist=yes
3892 mpathpersist_new_api=no
3893 else
3894 mpathpersist=no
3895 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003896 fi
3897else
3898 mpathpersist=no
3899fi
3900
3901##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003902# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003903PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003904
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003905pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003906cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003907#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003908static void *f(void *p) { return NULL; }
3909int main(void) {
3910 pthread_t thread;
3911 pthread_create(&thread, 0, f, 0);
3912 return 0;
3913}
blueswir1414f0da2008-08-15 18:20:52 +00003914EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003915if compile_prog "" "" ; then
3916 pthread=yes
3917else
3918 for pthread_lib in $PTHREADLIBS_LIST; do
3919 if compile_prog "" "$pthread_lib" ; then
3920 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003921 found=no
3922 for lib_entry in $LIBS; do
3923 if test "$lib_entry" = "$pthread_lib"; then
3924 found=yes
3925 break
3926 fi
3927 done
3928 if test "$found" = "no"; then
3929 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003930 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003931 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003932 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003933 break
3934 fi
3935 done
3936fi
blueswir1414f0da2008-08-15 18:20:52 +00003937
Eric Blakee633a5c2019-02-04 20:39:37 -06003938if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003939 error_exit "pthread check failed" \
3940 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003941fi
3942
Roman Bolshakov479a5742018-12-17 23:26:01 +03003943# check for pthread_setname_np with thread id
3944pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003945cat > $TMPC << EOF
3946#include <pthread.h>
3947
3948static void *f(void *p) { return NULL; }
3949int main(void)
3950{
3951 pthread_t thread;
3952 pthread_create(&thread, 0, f, 0);
3953 pthread_setname_np(thread, "QEMU");
3954 return 0;
3955}
3956EOF
3957if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003958 pthread_setname_np_w_tid=yes
3959fi
3960
3961# check for pthread_setname_np without thread id
3962pthread_setname_np_wo_tid=no
3963cat > $TMPC << EOF
3964#include <pthread.h>
3965
3966static void *f(void *p) { pthread_setname_np("QEMU"); }
3967int main(void)
3968{
3969 pthread_t thread;
3970 pthread_create(&thread, 0, f, 0);
3971 return 0;
3972}
3973EOF
3974if compile_prog "" "$pthread_lib" ; then
3975 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003976fi
3977
aliguoribf9298b2008-12-05 20:05:26 +00003978##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003979# rbd probe
3980if test "$rbd" != "no" ; then
3981 cat > $TMPC <<EOF
3982#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003983#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003984int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003985 rados_t cluster;
3986 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003987 return 0;
3988}
3989EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003990 rbd_libs="-lrbd -lrados"
3991 if compile_prog "" "$rbd_libs" ; then
3992 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003993 else
3994 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003995 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003996 fi
3997 rbd=no
3998 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003999fi
4000
4001##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004002# libssh probe
4003if test "$libssh" != "no" ; then
4004 if $pkg_config --exists libssh; then
4005 libssh_cflags=$($pkg_config libssh --cflags)
4006 libssh_libs=$($pkg_config libssh --libs)
4007 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004008 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004009 if test "$libssh" = "yes" ; then
4010 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004011 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004012 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004013 fi
4014fi
4015
4016##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004017# Check for libssh 0.8
4018# This is done like this instead of using the LIBSSH_VERSION_* and
4019# SSH_VERSION_* macros because some distributions in the past shipped
4020# snapshots of the future 0.8 from Git, and those snapshots did not
4021# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004022
Pino Toscanob10d49d2019-06-20 22:08:40 +02004023if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004024 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004025#include <libssh/libssh.h>
4026int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004027EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004028 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4029 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004030 fi
4031fi
4032
4033##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004034# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004035
4036if test "$linux_aio" != "no" ; then
4037 cat > $TMPC <<EOF
4038#include <libaio.h>
4039#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004040#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004041int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4042EOF
4043 if compile_prog "" "-laio" ; then
4044 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004045 else
4046 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004047 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004048 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004049 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004050 fi
4051fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004052##########################################
4053# linux-io-uring probe
4054
4055if test "$linux_io_uring" != "no" ; then
4056 if $pkg_config liburing; then
4057 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4058 linux_io_uring_libs=$($pkg_config --libs liburing)
4059 linux_io_uring=yes
4060 else
4061 if test "$linux_io_uring" = "yes" ; then
4062 feature_not_found "linux io_uring" "Install liburing devel"
4063 fi
4064 linux_io_uring=no
4065 fi
4066fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004067
4068##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004069# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004070
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004071if test "$tpm" = ""; then
4072 if test "$mingw32" = "yes"; then
4073 tpm=no
4074 else
4075 tpm=yes
4076 fi
4077elif test "$tpm" = "yes"; then
4078 if test "$mingw32" = "yes" ; then
4079 error_exit "TPM emulation only available on POSIX systems"
4080 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004081fi
4082
4083##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004084# attr probe
4085
4086if test "$attr" != "no" ; then
4087 cat > $TMPC <<EOF
4088#include <stdio.h>
4089#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004090#ifdef CONFIG_LIBATTR
4091#include <attr/xattr.h>
4092#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004093#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004094#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004095int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4096EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004097 if compile_prog "" "" ; then
4098 attr=yes
4099 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004100 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004101 attr=yes
4102 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004103 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004104 else
4105 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004106 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004107 fi
4108 attr=no
4109 fi
4110fi
4111
4112##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004113# iovec probe
4114cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004115#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004116#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004117#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004118int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004119EOF
4120iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004121if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004122 iovec=yes
4123fi
4124
aurel32f652e6a2008-12-16 10:43:48 +00004125##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004126# preadv probe
4127cat > $TMPC <<EOF
4128#include <sys/types.h>
4129#include <sys/uio.h>
4130#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004131int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004132EOF
4133preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004134if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004135 preadv=yes
4136fi
4137
4138##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004139# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004140# fdt support is mandatory for at least some target architectures,
4141# so insist on it if we're building those system emulators.
4142fdt_required=no
4143for target in $target_list; do
4144 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004145 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004146 fdt_required=yes
4147 ;;
4148 esac
4149done
4150
4151if test "$fdt_required" = "yes"; then
4152 if test "$fdt" = "no"; then
4153 error_exit "fdt disabled but some requested targets require it." \
4154 "You can turn off fdt only if you also disable all the system emulation" \
4155 "targets which need it (by specifying a cut down --target-list)."
4156 fi
4157 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004158elif test "$fdt" != "yes" ; then
4159 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004160fi
4161
Laurent Vivierd5999382019-06-21 15:05:44 +02004162# fdt is only required when building softmmu targets
4163if test -z "$fdt" -a "$softmmu" != "yes" ; then
4164 fdt="no"
4165fi
4166
Juan Quintela2df87df2009-08-12 18:29:54 +02004167if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004168 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004169 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004170 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004171 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004172#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004173#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004174int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004175EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004176 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004177 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004178 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004179 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004180 # have GIT checkout, so activate dtc submodule
4181 if test -e "${source_path}/.git" ; then
4182 git_submodules="${git_submodules} dtc"
4183 fi
4184 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004185 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004186 mkdir -p dtc
4187 if [ "$pwd_is_source_path" != "y" ] ; then
4188 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4189 symlink "$source_path/dtc/scripts" "dtc/scripts"
4190 fi
4191 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004192 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4193 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004194 elif test "$fdt" = "yes" ; then
4195 # Not a git build & no libfdt found, prompt for system install
4196 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4197 "Please install the DTC (libfdt) devel package"
4198 else
4199 # don't have and don't want
4200 fdt_libs=
4201 fdt=no
4202 fi
aurel32f652e6a2008-12-16 10:43:48 +00004203 fi
4204fi
4205
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004206libs_softmmu="$libs_softmmu $fdt_libs"
4207
Michael Walle20ff0752011-03-07 23:32:39 +01004208##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004209# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004210
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004211gbm="no"
4212if $pkg_config gbm; then
4213 gbm_cflags="$($pkg_config --cflags gbm)"
4214 gbm_libs="$($pkg_config --libs gbm)"
4215 gbm="yes"
4216fi
4217
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004218if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004219 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004220 if $pkg_config $opengl_pkgs; then
4221 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4222 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004223 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004224 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4225 gtk_gl="yes"
4226 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004227 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004228 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004229 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004230 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004231 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004232 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004233 opengl_libs=""
4234 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004235 fi
4236fi
4237
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004238if test "$opengl" = "yes"; then
4239 cat > $TMPC << EOF
4240#include <epoxy/egl.h>
4241#ifndef EGL_MESA_image_dma_buf_export
4242# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4243#endif
4244int main(void) { return 0; }
4245EOF
4246 if compile_prog "" "" ; then
4247 opengl_dmabuf=yes
4248 fi
4249fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004250
Eric Blakee633a5c2019-02-04 20:39:37 -06004251if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004252 for target in $target_list; do
4253 case $target in
4254 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4255 need_x11=yes
4256 ;;
4257 esac
4258 done
4259fi
4260
Klim Kireeved279a02018-01-12 12:01:19 +03004261##########################################
4262# libxml2 probe
4263if test "$libxml2" != "no" ; then
4264 if $pkg_config --exists libxml-2.0; then
4265 libxml2="yes"
4266 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4267 libxml2_libs=$($pkg_config --libs libxml-2.0)
4268 else
4269 if test "$libxml2" = "yes"; then
4270 feature_not_found "libxml2" "Install libxml2 devel"
4271 fi
4272 libxml2="no"
4273 fi
4274fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004275
Bharata B Raoeb100392012-09-24 14:42:45 +05304276##########################################
4277# glusterfs probe
4278if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004279 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304280 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004281 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4282 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004283 if $pkg_config --atleast-version=4 glusterfs-api; then
4284 glusterfs_xlator_opt="yes"
4285 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004286 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304287 glusterfs_discard="yes"
4288 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304289 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304290 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304291 glusterfs_zerofill="yes"
4292 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004293 cat > $TMPC << EOF
4294#include <glusterfs/api/glfs.h>
4295
4296int
4297main(void)
4298{
4299 /* new glfs_ftruncate() passes two additional args */
4300 return glfs_ftruncate(NULL, 0, NULL, NULL);
4301}
4302EOF
4303 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4304 glusterfs_ftruncate_has_stat="yes"
4305 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004306 cat > $TMPC << EOF
4307#include <glusterfs/api/glfs.h>
4308
4309/* new glfs_io_cbk() passes two additional glfs_stat structs */
4310static void
4311glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4312{}
4313
4314int
4315main(void)
4316{
4317 glfs_io_cbk iocb = &glusterfs_iocb;
4318 iocb(NULL, 0 , NULL, NULL, NULL);
4319 return 0;
4320}
4321EOF
4322 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4323 glusterfs_iocb_has_stat="yes"
4324 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304325 else
4326 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004327 feature_not_found "GlusterFS backend support" \
4328 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304329 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304330 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304331 fi
4332fi
4333
aurel3239386ac2009-04-15 19:48:17 +00004334# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004335# emulator. This is done because older glibc versions don't
4336# have syscall stubs for these implemented. In that case we
4337# don't provide them even if kernel supports them.
4338#
4339inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004340cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004341#include <sys/inotify.h>
4342
4343int
4344main(void)
4345{
4346 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004347 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004348}
4349EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004350if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004351 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004352fi
4353
Riku Voipioc05c7a72010-03-26 15:25:11 +00004354inotify1=no
4355cat > $TMPC << EOF
4356#include <sys/inotify.h>
4357
4358int
4359main(void)
4360{
4361 /* try to start inotify */
4362 return inotify_init1(0);
4363}
4364EOF
4365if compile_prog "" "" ; then
4366 inotify1=yes
4367fi
4368
Riku Voipio099d6b02009-05-05 12:10:04 +03004369# check if pipe2 is there
4370pipe2=no
4371cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004372#include <unistd.h>
4373#include <fcntl.h>
4374
4375int main(void)
4376{
4377 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004378 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004379}
4380EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004381if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004382 pipe2=yes
4383fi
4384
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004385# check if accept4 is there
4386accept4=no
4387cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004388#include <sys/socket.h>
4389#include <stddef.h>
4390
4391int main(void)
4392{
4393 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4394 return 0;
4395}
4396EOF
4397if compile_prog "" "" ; then
4398 accept4=yes
4399fi
4400
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304401# check if tee/splice is there. vmsplice was added same time.
4402splice=no
4403cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304404#include <unistd.h>
4405#include <fcntl.h>
4406#include <limits.h>
4407
4408int main(void)
4409{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004410 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304411 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4412 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4413 return 0;
4414}
4415EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004416if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304417 splice=yes
4418fi
4419
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004420##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004421# libnuma probe
4422
4423if test "$numa" != "no" ; then
4424 cat > $TMPC << EOF
4425#include <numa.h>
4426int main(void) { return numa_available(); }
4427EOF
4428
4429 if compile_prog "" "-lnuma" ; then
4430 numa=yes
4431 libs_softmmu="-lnuma $libs_softmmu"
4432 else
4433 if test "$numa" = "yes" ; then
4434 feature_not_found "numa" "install numactl devel"
4435 fi
4436 numa=no
4437 fi
4438fi
4439
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004440if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4441 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4442 exit 1
4443fi
4444
Yang Zhong5a22ab72017-12-20 21:16:46 +08004445# Even if malloc_trim() is available, these non-libc memory allocators
4446# do not support it.
4447if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4448 if test "$malloc_trim" = "yes" ; then
4449 echo "Disabling malloc_trim with non-libc memory allocator"
4450 fi
4451 malloc_trim="no"
4452fi
4453
4454#######################################
4455# malloc_trim
4456
4457if test "$malloc_trim" != "no" ; then
4458 cat > $TMPC << EOF
4459#include <malloc.h>
4460int main(void) { malloc_trim(0); return 0; }
4461EOF
4462 if compile_prog "" "" ; then
4463 malloc_trim="yes"
4464 else
4465 malloc_trim="no"
4466 fi
4467fi
4468
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004469##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004470# tcmalloc probe
4471
4472if test "$tcmalloc" = "yes" ; then
4473 cat > $TMPC << EOF
4474#include <stdlib.h>
4475int main(void) { malloc(1); return 0; }
4476EOF
4477
4478 if compile_prog "" "-ltcmalloc" ; then
4479 LIBS="-ltcmalloc $LIBS"
4480 else
4481 feature_not_found "tcmalloc" "install gperftools devel"
4482 fi
4483fi
4484
4485##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004486# jemalloc probe
4487
4488if test "$jemalloc" = "yes" ; then
4489 cat > $TMPC << EOF
4490#include <stdlib.h>
4491int main(void) { malloc(1); return 0; }
4492EOF
4493
4494 if compile_prog "" "-ljemalloc" ; then
4495 LIBS="-ljemalloc $LIBS"
4496 else
4497 feature_not_found "jemalloc" "install jemalloc devel"
4498 fi
4499fi
4500
4501##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004502# signalfd probe
4503signalfd="no"
4504cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004505#include <unistd.h>
4506#include <sys/syscall.h>
4507#include <signal.h>
4508int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4509EOF
4510
4511if compile_prog "" "" ; then
4512 signalfd=yes
4513fi
4514
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004515# check if optreset global is declared by <getopt.h>
4516optreset="no"
4517cat > $TMPC << EOF
4518#include <getopt.h>
4519int main(void) { return optreset; }
4520EOF
4521
4522if compile_prog "" "" ; then
4523 optreset=yes
4524fi
4525
Riku Voipioc2882b92009-08-12 15:08:24 +03004526# check if eventfd is supported
4527eventfd=no
4528cat > $TMPC << EOF
4529#include <sys/eventfd.h>
4530
4531int main(void)
4532{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004533 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004534}
4535EOF
4536if compile_prog "" "" ; then
4537 eventfd=yes
4538fi
4539
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004540# check if memfd is supported
4541memfd=no
4542cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004543#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004544
4545int main(void)
4546{
4547 return memfd_create("foo", MFD_ALLOW_SEALING);
4548}
4549EOF
4550if compile_prog "" "" ; then
4551 memfd=yes
4552fi
4553
Cortland Tölva955727d2018-10-08 09:35:19 -07004554# check for usbfs
4555have_usbfs=no
4556if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004557 cat > $TMPC << EOF
4558#include <linux/usbdevice_fs.h>
4559
4560#ifndef USBDEVFS_GET_CAPABILITIES
4561#error "USBDEVFS_GET_CAPABILITIES undefined"
4562#endif
4563
4564#ifndef USBDEVFS_DISCONNECT_CLAIM
4565#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4566#endif
4567
4568int main(void)
4569{
4570 return 0;
4571}
4572EOF
4573 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004574 have_usbfs=yes
4575 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004576fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004577
Ulrich Hechtd0927932009-09-17 20:22:14 +03004578# check for fallocate
4579fallocate=no
4580cat > $TMPC << EOF
4581#include <fcntl.h>
4582
4583int main(void)
4584{
4585 fallocate(0, 0, 0, 0);
4586 return 0;
4587}
4588EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004589if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004590 fallocate=yes
4591fi
4592
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004593# check for fallocate hole punching
4594fallocate_punch_hole=no
4595cat > $TMPC << EOF
4596#include <fcntl.h>
4597#include <linux/falloc.h>
4598
4599int main(void)
4600{
4601 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4602 return 0;
4603}
4604EOF
4605if compile_prog "" "" ; then
4606 fallocate_punch_hole=yes
4607fi
4608
Denis V. Lunevb953f072015-01-30 11:42:14 +03004609# check that fallocate supports range zeroing inside the file
4610fallocate_zero_range=no
4611cat > $TMPC << EOF
4612#include <fcntl.h>
4613#include <linux/falloc.h>
4614
4615int main(void)
4616{
4617 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4618 return 0;
4619}
4620EOF
4621if compile_prog "" "" ; then
4622 fallocate_zero_range=yes
4623fi
4624
Kevin Wolfed911432014-09-29 17:12:59 +02004625# check for posix_fallocate
4626posix_fallocate=no
4627cat > $TMPC << EOF
4628#include <fcntl.h>
4629
4630int main(void)
4631{
4632 posix_fallocate(0, 0, 0);
4633 return 0;
4634}
4635EOF
4636if compile_prog "" "" ; then
4637 posix_fallocate=yes
4638fi
4639
Peter Maydellc727f472011-01-06 11:05:10 +00004640# check for sync_file_range
4641sync_file_range=no
4642cat > $TMPC << EOF
4643#include <fcntl.h>
4644
4645int main(void)
4646{
4647 sync_file_range(0, 0, 0, 0);
4648 return 0;
4649}
4650EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004651if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004652 sync_file_range=yes
4653fi
4654
Peter Maydelldace20d2011-01-10 13:11:24 +00004655# check for linux/fiemap.h and FS_IOC_FIEMAP
4656fiemap=no
4657cat > $TMPC << EOF
4658#include <sys/ioctl.h>
4659#include <linux/fs.h>
4660#include <linux/fiemap.h>
4661
4662int main(void)
4663{
4664 ioctl(0, FS_IOC_FIEMAP, 0);
4665 return 0;
4666}
4667EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004668if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004669 fiemap=yes
4670fi
4671
Ulrich Hechtd0927932009-09-17 20:22:14 +03004672# check for dup3
4673dup3=no
4674cat > $TMPC << EOF
4675#include <unistd.h>
4676
4677int main(void)
4678{
4679 dup3(0, 0, 0);
4680 return 0;
4681}
4682EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004683if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004684 dup3=yes
4685fi
4686
Alex Bligh4e0c6522013-08-21 16:02:43 +01004687# check for ppoll support
4688ppoll=no
4689cat > $TMPC << EOF
4690#include <poll.h>
4691
4692int main(void)
4693{
4694 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4695 ppoll(&pfd, 1, 0, 0);
4696 return 0;
4697}
4698EOF
4699if compile_prog "" "" ; then
4700 ppoll=yes
4701fi
4702
Alex Blighcd758dd2013-08-21 16:02:44 +01004703# check for prctl(PR_SET_TIMERSLACK , ... ) support
4704prctl_pr_set_timerslack=no
4705cat > $TMPC << EOF
4706#include <sys/prctl.h>
4707
4708int main(void)
4709{
4710 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4711 return 0;
4712}
4713EOF
4714if compile_prog "" "" ; then
4715 prctl_pr_set_timerslack=yes
4716fi
4717
Peter Maydell3b6edd12011-02-15 18:35:05 +00004718# check for epoll support
4719epoll=no
4720cat > $TMPC << EOF
4721#include <sys/epoll.h>
4722
4723int main(void)
4724{
4725 epoll_create(0);
4726 return 0;
4727}
4728EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004729if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004730 epoll=yes
4731fi
4732
Peter Maydell227f0212016-06-06 19:58:11 +01004733# epoll_create1 is a later addition
4734# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004735epoll_create1=no
4736cat > $TMPC << EOF
4737#include <sys/epoll.h>
4738
4739int main(void)
4740{
Peter Maydell19e83f62011-04-26 16:56:40 +01004741 /* Note that we use epoll_create1 as a value, not as
4742 * a function being called. This is necessary so that on
4743 * old SPARC glibc versions where the function was present in
4744 * the library but not declared in the header file we will
4745 * fail the configure check. (Otherwise we will get a compiler
4746 * warning but not an error, and will proceed to fail the
4747 * qemu compile where we compile with -Werror.)
4748 */
Blue Swirlc075a722012-08-09 20:21:25 +00004749 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004750}
4751EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004752if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004753 epoll_create1=yes
4754fi
4755
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004756# check for sendfile support
4757sendfile=no
4758cat > $TMPC << EOF
4759#include <sys/sendfile.h>
4760
4761int main(void)
4762{
4763 return sendfile(0, 0, 0, 0);
4764}
4765EOF
4766if compile_prog "" "" ; then
4767 sendfile=yes
4768fi
4769
Riku Voipio51834342014-06-22 11:25:42 +01004770# check for timerfd support (glibc 2.8 and newer)
4771timerfd=no
4772cat > $TMPC << EOF
4773#include <sys/timerfd.h>
4774
4775int main(void)
4776{
4777 return(timerfd_create(CLOCK_REALTIME, 0));
4778}
4779EOF
4780if compile_prog "" "" ; then
4781 timerfd=yes
4782fi
4783
Riku Voipio9af5c902014-08-12 15:58:57 +03004784# check for setns and unshare support
4785setns=no
4786cat > $TMPC << EOF
4787#include <sched.h>
4788
4789int main(void)
4790{
4791 int ret;
4792 ret = setns(0, 0);
4793 ret = unshare(0);
4794 return ret;
4795}
4796EOF
4797if compile_prog "" "" ; then
4798 setns=yes
4799fi
4800
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004801# clock_adjtime probe
4802clock_adjtime=no
4803cat > $TMPC <<EOF
4804#include <time.h>
4805
4806int main(void)
4807{
4808 return clock_adjtime(0, 0);
4809}
4810EOF
4811clock_adjtime=no
4812if compile_prog "" "" ; then
4813 clock_adjtime=yes
4814fi
4815
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004816# syncfs probe
4817syncfs=no
4818cat > $TMPC <<EOF
4819#include <unistd.h>
4820
4821int main(void)
4822{
4823 return syncfs(0);
4824}
4825EOF
4826syncfs=no
4827if compile_prog "" "" ; then
4828 syncfs=yes
4829fi
4830
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004831# check for kcov support (kernel must be 4.4+, compiled with certain options)
4832kcov=no
4833if check_include sys/kcov.h ; then
4834 kcov=yes
4835fi
4836
Peter Maydell5f71eac2019-03-07 14:26:46 +00004837# Check we have a new enough version of sphinx-build
4838has_sphinx_build() {
4839 # This is a bit awkward but works: create a trivial document and
4840 # try to run it with our configuration file (which enforces a
4841 # version requirement). This will fail if either
4842 # sphinx-build doesn't exist at all or if it is too old.
4843 mkdir -p "$TMPDIR1/sphinx"
4844 touch "$TMPDIR1/sphinx/index.rst"
Markus Armbruster903458c2020-02-14 18:18:41 +01004845 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004846}
4847
pbrookcc8ae6d2006-04-23 17:57:59 +00004848# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004849if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004850 if has_sphinx_build; then
4851 sphinx_ok=yes
4852 else
4853 sphinx_ok=no
4854 fi
4855 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004856 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004857 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004858 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004859 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4860 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4861 fi
4862 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004863 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004864 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004865 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004866fi
4867
Stefan Weilf514f412009-10-11 12:44:07 +02004868# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004869byteswap_h=no
4870cat > $TMPC << EOF
4871#include <byteswap.h>
4872int main(void) { return bswap_32(0); }
4873EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004874if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004875 byteswap_h=yes
4876fi
4877
Stefan Weil75f13592013-01-05 12:17:38 +01004878# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004879bswap_h=no
4880cat > $TMPC << EOF
4881#include <sys/endian.h>
4882#include <sys/types.h>
4883#include <machine/bswap.h>
4884int main(void) { return bswap32(0); }
4885EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004886if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004887 bswap_h=yes
4888fi
4889
aliguorida93a1f2008-12-12 20:02:52 +00004890##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004891# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004892if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004893 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004894 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004895 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4896 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004897 else
4898 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004899 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004900 fi
4901 libiscsi="no"
4902 fi
4903fi
4904
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004905##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004906# Do we need libm
4907cat > $TMPC << EOF
4908#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004909int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004910EOF
4911if compile_prog "" "" ; then
4912 :
4913elif compile_prog "" "-lm" ; then
4914 LIBS="-lm $LIBS"
4915 libs_qga="-lm $libs_qga"
4916else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004917 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004918fi
4919
4920##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004921# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004922# uClibc provides 2 versions of clock_gettime(), one with realtime
4923# support and one without. This means that the clock_gettime() don't
4924# need -lrt. We still need it for timer_create() so we check for this
4925# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004926cat > $TMPC <<EOF
4927#include <signal.h>
4928#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004929int main(void) {
4930 timer_create(CLOCK_REALTIME, NULL, NULL);
4931 return clock_gettime(CLOCK_REALTIME, NULL);
4932}
aliguorida93a1f2008-12-12 20:02:52 +00004933EOF
4934
Juan Quintela52166aa2009-08-03 14:46:03 +02004935if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004936 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004937# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004938elif compile_prog "" "$pthread_lib -lrt" ; then
4939 LIBS="$LIBS -lrt"
4940 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004941fi
4942
Thomas Huthd99e97e2019-01-17 18:14:08 +01004943# Check whether we need to link libutil for openpty()
4944cat > $TMPC << EOF
4945extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4946int main(void) { return openpty(0, 0, 0, 0, 0); }
4947EOF
4948
4949if ! compile_prog "" "" ; then
4950 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004951 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004952 libs_tools="-lutil $libs_tools"
4953 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004954fi
4955
Blue Swirlde5071c2009-09-12 09:58:46 +00004956##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004957# spice probe
4958if test "$spice" != "no" ; then
4959 cat > $TMPC << EOF
4960#include <spice.h>
4961int main(void) { spice_server_new(); return 0; }
4962EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004963 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4964 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004965 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004966 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004967 compile_prog "$spice_cflags" "$spice_libs" ; then
4968 spice="yes"
4969 libs_softmmu="$libs_softmmu $spice_libs"
4970 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004971 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4972 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004973 else
4974 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004975 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004976 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004977 fi
4978 spice="no"
4979 fi
4980fi
4981
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004982# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004983if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004984 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004985 libcacard_cflags=$($pkg_config --cflags libcacard)
4986 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004987 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004988 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004989 if test "$smartcard" = "yes"; then
4990 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004991 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004992 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004993 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004994fi
4995
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004996# check for libusb
4997if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004998 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004999 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005000 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5001 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005002 else
5003 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005004 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005005 fi
5006 libusb="no"
5007 fi
5008fi
5009
Hans de Goede69354a82011-07-19 11:04:10 +02005010# check for usbredirparser for usb network redirection support
5011if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005012 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005013 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005014 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5015 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005016 else
5017 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005018 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005019 fi
5020 usb_redir="no"
5021 fi
5022fi
5023
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005024##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005025# check if we have VSS SDK headers for win
5026
Eric Blakee633a5c2019-02-04 20:39:37 -06005027if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5028 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005029 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005030 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005031 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5032 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005033 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005034 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5035 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005036 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005037 esac
5038 cat > $TMPC << EOF
5039#define __MIDL_user_allocate_free_DEFINED__
5040#include <inc/win2003/vss.h>
5041int main(void) { return VSS_CTX_BACKUP; }
5042EOF
5043 if compile_prog "$vss_win32_include" "" ; then
5044 guest_agent_with_vss="yes"
5045 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005046 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005047 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005048 else
5049 if test "$vss_win32_sdk" != "" ; then
5050 echo "ERROR: Please download and install Microsoft VSS SDK:"
5051 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5052 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5053 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5054 echo "ERROR: The headers are extracted in the directory \`inc'."
5055 feature_not_found "VSS support"
5056 fi
5057 guest_agent_with_vss="no"
5058 fi
5059fi
5060
5061##########################################
5062# lookup Windows platform SDK (if not specified)
5063# The SDK is needed only to build .tlb (type library) file of guest agent
5064# VSS provider from the source. It is usually unnecessary because the
5065# pre-compiled .tlb file is included.
5066
Eric Blakee633a5c2019-02-04 20:39:37 -06005067if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5068 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005069 if test -z "$win_sdk"; then
5070 programfiles="$PROGRAMFILES"
5071 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5072 if test -n "$programfiles"; then
5073 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5074 else
5075 feature_not_found "Windows SDK"
5076 fi
5077 elif test "$win_sdk" = "no"; then
5078 win_sdk=""
5079 fi
5080fi
5081
5082##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005083# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005084if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005085 cat > $TMPC << EOF
5086#include <windows.h>
5087#include <ntddscsi.h>
5088int main(void) {
5089#if !defined(IOCTL_SCSI_GET_ADDRESS)
5090#error Missing required ioctl definitions
5091#endif
5092 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5093 return addr.Lun;
5094}
5095EOF
5096 if compile_prog "" "" ; then
5097 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005098 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005099 fi
5100fi
5101
5102##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005103# virgl renderer probe
5104
5105if test "$virglrenderer" != "no" ; then
5106 cat > $TMPC << EOF
5107#include <virglrenderer.h>
5108int main(void) { virgl_renderer_poll(); return 0; }
5109EOF
5110 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5111 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005112 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005113 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5114 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5115 virglrenderer="yes"
5116 else
5117 if test "$virglrenderer" = "yes" ; then
5118 feature_not_found "virglrenderer"
5119 fi
5120 virglrenderer="no"
5121 fi
5122fi
5123
5124##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005125# capstone
5126
Richard Hendersone219c492017-09-28 09:01:23 -07005127case "$capstone" in
5128 "" | yes)
5129 if $pkg_config capstone; then
5130 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005131 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005132 capstone=git
5133 elif test -e "${source_path}/capstone/Makefile" ; then
5134 capstone=internal
5135 elif test -z "$capstone" ; then
5136 capstone=no
5137 else
5138 feature_not_found "capstone" "Install capstone devel or git submodule"
5139 fi
5140 ;;
5141
5142 system)
5143 if ! $pkg_config capstone; then
5144 feature_not_found "capstone" "Install capstone devel"
5145 fi
5146 ;;
5147esac
5148
5149case "$capstone" in
5150 git | internal)
5151 if test "$capstone" = git; then
5152 git_submodules="${git_submodules} capstone"
5153 fi
5154 mkdir -p capstone
5155 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5156 if test "$mingw32" = "yes"; then
5157 LIBCAPSTONE=capstone.lib
5158 else
5159 LIBCAPSTONE=libcapstone.a
5160 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005161 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005162 ;;
5163
5164 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005165 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005166 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005167 ;;
5168
5169 no)
5170 ;;
5171 *)
5172 error_exit "Unknown state for capstone: $capstone"
5173 ;;
5174esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005175
5176##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005177# check if we have fdatasync
5178
5179fdatasync=no
5180cat > $TMPC << EOF
5181#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005182int main(void) {
5183#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5184return fdatasync(0);
5185#else
Stefan Weile172fe12012-04-06 21:33:20 +02005186#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005187#endif
5188}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005189EOF
5190if compile_prog "" "" ; then
5191 fdatasync=yes
5192fi
5193
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005194##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005195# check if we have madvise
5196
5197madvise=no
5198cat > $TMPC << EOF
5199#include <sys/types.h>
5200#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005201#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005202int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5203EOF
5204if compile_prog "" "" ; then
5205 madvise=yes
5206fi
5207
5208##########################################
5209# check if we have posix_madvise
5210
5211posix_madvise=no
5212cat > $TMPC << EOF
5213#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005214#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005215int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5216EOF
5217if compile_prog "" "" ; then
5218 posix_madvise=yes
5219fi
5220
5221##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005222# check if we have posix_memalign()
5223
5224posix_memalign=no
5225cat > $TMPC << EOF
5226#include <stdlib.h>
5227int main(void) {
5228 void *p;
5229 return posix_memalign(&p, 8, 8);
5230}
5231EOF
5232if compile_prog "" "" ; then
5233 posix_memalign=yes
5234fi
5235
5236##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005237# check if we have posix_syslog
5238
5239posix_syslog=no
5240cat > $TMPC << EOF
5241#include <syslog.h>
5242int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5243EOF
5244if compile_prog "" "" ; then
5245 posix_syslog=yes
5246fi
5247
5248##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005249# check if we have sem_timedwait
5250
5251sem_timedwait=no
5252cat > $TMPC << EOF
5253#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005254int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005255EOF
5256if compile_prog "" "" ; then
5257 sem_timedwait=yes
5258fi
5259
5260##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005261# check if we have strchrnul
5262
5263strchrnul=no
5264cat > $TMPC << EOF
5265#include <string.h>
5266int main(void);
5267// Use a haystack that the compiler shouldn't be able to constant fold
5268char *haystack = (char*)&main;
5269int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5270EOF
5271if compile_prog "" "" ; then
5272 strchrnul=yes
5273fi
5274
Jiufei Xue8a792b02019-04-17 03:08:56 +08005275#########################################
5276# check if we have st_atim
5277
5278st_atim=no
5279cat > $TMPC << EOF
5280#include <sys/stat.h>
5281#include <stddef.h>
5282int main(void) { return offsetof(struct stat, st_atim); }
5283EOF
5284if compile_prog "" "" ; then
5285 st_atim=yes
5286fi
5287
Keno Fischer5c99fa32018-06-29 12:32:10 +02005288##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005289# check if trace backend exists
5290
Lluís Vilanova5b808272014-05-27 15:02:14 +02005291$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005292if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005293 error_exit "invalid trace backends" \
5294 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005295fi
5296
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005297##########################################
5298# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005299if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005300 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005301#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005302int main(void) { return 0; }
5303EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005304 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005305 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005306 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005307 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005308 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005309 fi
5310 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005311 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005312 else
5313 urcu_bp_libs="-lurcu-bp"
5314 fi
5315
5316 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5317 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005318 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005319 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005320 fi
5321fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005322
5323##########################################
5324# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005325if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005326 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005327 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005328 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005329 trace_backend_stap="no"
5330 if has 'stap' ; then
5331 trace_backend_stap="yes"
5332 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005333fi
5334
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005335##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005336# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305337
Peter Maydell7c2acc72013-04-08 12:11:27 +01005338# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005339# is sigcontext. On Windows the only valid backend is the Windows
5340# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005341
5342ucontext_works=no
5343if test "$darwin" != "yes"; then
5344 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305345#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005346#ifdef __stub_makecontext
5347#error Ignoring glibc stub makecontext which will always fail
5348#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005349int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305350EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005351 if compile_prog "" "" ; then
5352 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305353 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005354fi
5355
5356if test "$coroutine" = ""; then
5357 if test "$mingw32" = "yes"; then
5358 coroutine=win32
5359 elif test "$ucontext_works" = "yes"; then
5360 coroutine=ucontext
5361 else
5362 coroutine=sigaltstack
5363 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005364else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005365 case $coroutine in
5366 windows)
5367 if test "$mingw32" != "yes"; then
5368 error_exit "'windows' coroutine backend only valid for Windows"
5369 fi
5370 # Unfortunately the user visible backend name doesn't match the
5371 # coroutine-*.c filename for this case, so we have to adjust it here.
5372 coroutine=win32
5373 ;;
5374 ucontext)
5375 if test "$ucontext_works" != "yes"; then
5376 feature_not_found "ucontext"
5377 fi
5378 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005379 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005380 if test "$mingw32" = "yes"; then
5381 error_exit "only the 'windows' coroutine backend is valid for Windows"
5382 fi
5383 ;;
5384 *)
5385 error_exit "unknown coroutine backend $coroutine"
5386 ;;
5387 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305388fi
5389
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005390if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005391 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005392fi
5393
Peter Lieven7d992e42016-09-27 11:58:45 +02005394if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005395 if test "$coroutine_pool" = "yes"; then
5396 echo "WARN: disabling coroutine pool for stack usage debugging"
5397 coroutine_pool=no
5398 fi
5399fi
5400
5401
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305402##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305403# check if we have open_by_handle_at
5404
Stefan Weil4e1797f2012-06-18 22:11:06 +02005405open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305406cat > $TMPC << EOF
5407#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005408#if !defined(AT_EMPTY_PATH)
5409# error missing definition
5410#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005411int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005412#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305413EOF
5414if compile_prog "" "" ; then
5415 open_by_handle_at=yes
5416fi
5417
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305418########################################
5419# check if we have linux/magic.h
5420
5421linux_magic_h=no
5422cat > $TMPC << EOF
5423#include <linux/magic.h>
5424int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005425 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305426}
5427EOF
5428if compile_prog "" "" ; then
5429 linux_magic_h=yes
5430fi
5431
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005432########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005433# check whether we can disable warning option with a pragma (this is needed
5434# to silence warnings in the headers of some versions of external libraries).
5435# This test has to be compiled with -Werror as otherwise an unknown pragma is
5436# only a warning.
5437#
5438# If we can't selectively disable warning in the code, disable -Werror so that
5439# the build doesn't fail anyway.
5440
Peter Maydell06d71fa2012-07-30 16:13:07 +01005441pragma_disable_unused_but_set=no
5442cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005443#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005444#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005445#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005446
Peter Maydell06d71fa2012-07-30 16:13:07 +01005447int main(void) {
5448 return 0;
5449}
5450EOF
5451if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005452 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005453else
5454 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005455fi
5456
5457########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005458# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005459
5460valgrind_h=no
5461cat > $TMPC << EOF
5462#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005463int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005464 return 0;
5465}
5466EOF
5467if compile_prog "" "" ; then
5468 valgrind_h=yes
5469fi
5470
5471########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005472# check if environ is declared
5473
5474has_environ=no
5475cat > $TMPC << EOF
5476#include <unistd.h>
5477int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005478 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005479 return 0;
5480}
5481EOF
5482if compile_prog "" "" ; then
5483 has_environ=yes
5484fi
5485
Richard Henderson76a347e2012-12-28 14:17:02 -08005486########################################
5487# check if cpuid.h is usable.
5488
Richard Henderson76a347e2012-12-28 14:17:02 -08005489cat > $TMPC << EOF
5490#include <cpuid.h>
5491int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005492 unsigned a, b, c, d;
5493 int max = __get_cpuid_max(0, 0);
5494
5495 if (max >= 1) {
5496 __cpuid(1, a, b, c, d);
5497 }
5498
5499 if (max >= 7) {
5500 __cpuid_count(7, 0, a, b, c, d);
5501 }
5502
5503 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005504}
5505EOF
5506if compile_prog "" "" ; then
5507 cpuid_h=yes
5508fi
5509
Richard Henderson5dd89902017-07-18 18:40:18 -10005510##########################################
5511# avx2 optimization requirement check
5512#
5513# There is no point enabling this if cpuid.h is not usable,
5514# since we won't be able to select the new routines.
5515
Eric Blakee633a5c2019-02-04 20:39:37 -06005516if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005517 cat > $TMPC << EOF
5518#pragma GCC push_options
5519#pragma GCC target("avx2")
5520#include <cpuid.h>
5521#include <immintrin.h>
5522static int bar(void *a) {
5523 __m256i x = *(__m256i *)a;
5524 return _mm256_testz_si256(x, x);
5525}
5526int main(int argc, char *argv[]) { return bar(argv[0]); }
5527EOF
5528 if compile_object "" ; then
5529 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005530 else
5531 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005532 fi
5533fi
5534
Richard Hendersonf5401662013-02-16 12:46:59 -08005535########################################
5536# check if __[u]int128_t is usable.
5537
5538int128=no
5539cat > $TMPC << EOF
5540__int128_t a;
5541__uint128_t b;
5542int main (void) {
5543 a = a + b;
5544 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005545 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005546 return 0;
5547}
5548EOF
5549if compile_prog "" "" ; then
5550 int128=yes
5551fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005552
Richard Henderson7ebee432016-06-29 21:10:59 -07005553#########################################
5554# See if 128-bit atomic operations are supported.
5555
5556atomic128=no
5557if test "$int128" = "yes"; then
5558 cat > $TMPC << EOF
5559int main(void)
5560{
5561 unsigned __int128 x = 0, y = 0;
5562 y = __atomic_load_16(&x, 0);
5563 __atomic_store_16(&x, y, 0);
5564 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5565 return 0;
5566}
5567EOF
5568 if compile_prog "" "" ; then
5569 atomic128=yes
5570 fi
5571fi
5572
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005573cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005574if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005575 cat > $TMPC << EOF
5576int main(void)
5577{
5578 unsigned __int128 x = 0, y = 0;
5579 __sync_val_compare_and_swap_16(&x, y, x);
5580 return 0;
5581}
5582EOF
5583 if compile_prog "" "" ; then
5584 cmpxchg128=yes
5585 fi
5586fi
5587
Richard Hendersondf79b992016-09-02 12:23:57 -07005588#########################################
5589# See if 64-bit atomic operations are supported.
5590# Note that without __atomic builtins, we can only
5591# assume atomic loads/stores max at pointer size.
5592
5593cat > $TMPC << EOF
5594#include <stdint.h>
5595int main(void)
5596{
5597 uint64_t x = 0, y = 0;
5598#ifdef __ATOMIC_RELAXED
5599 y = __atomic_load_8(&x, 0);
5600 __atomic_store_8(&x, y, 0);
5601 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5602 __atomic_exchange_8(&x, y, 0);
5603 __atomic_fetch_add_8(&x, y, 0);
5604#else
5605 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5606 __sync_lock_test_and_set(&x, y);
5607 __sync_val_compare_and_swap(&x, y, 0);
5608 __sync_fetch_and_add(&x, y);
5609#endif
5610 return 0;
5611}
5612EOF
5613if compile_prog "" "" ; then
5614 atomic64=yes
5615fi
5616
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005617#########################################
5618# See if --dynamic-list is supported by the linker
5619ld_dynamic_list="no"
5620if test "$static" = "no" ; then
5621 cat > $TMPTXT <<EOF
5622{
5623 foo;
5624};
5625EOF
5626
5627 cat > $TMPC <<EOF
5628#include <stdio.h>
5629void foo(void);
5630
5631void foo(void)
5632{
5633 printf("foo\n");
5634}
5635
5636int main(void)
5637{
5638 foo();
5639 return 0;
5640}
5641EOF
5642
5643 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5644 ld_dynamic_list="yes"
5645 fi
5646fi
5647
5648#########################################
5649# See if -exported_symbols_list is supported by the linker
5650
5651ld_exported_symbols_list="no"
5652if test "$static" = "no" ; then
5653 cat > $TMPTXT <<EOF
5654 _foo
5655EOF
5656
5657 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5658 ld_exported_symbols_list="yes"
5659 fi
5660fi
5661
5662if test "$plugins" = "yes" &&
5663 test "$ld_dynamic_list" = "no" &&
5664 test "$ld_exported_symbols_list" = "no" ; then
5665 error_exit \
5666 "Plugin support requires dynamic linking and specifying a set of symbols " \
5667 "that are exported to plugins. Unfortunately your linker doesn't " \
5668 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5669 "for this purpose. You can't build with --static."
5670fi
5671
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005672########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005673# See if 16-byte vector operations are supported.
5674# Even without a vector unit the compiler may expand these.
5675# There is a bug in old GCC for PPC that crashes here.
5676# Unfortunately it's the system compiler for Centos 7.
5677
5678cat > $TMPC << EOF
5679typedef unsigned char U1 __attribute__((vector_size(16)));
5680typedef unsigned short U2 __attribute__((vector_size(16)));
5681typedef unsigned int U4 __attribute__((vector_size(16)));
5682typedef unsigned long long U8 __attribute__((vector_size(16)));
5683typedef signed char S1 __attribute__((vector_size(16)));
5684typedef signed short S2 __attribute__((vector_size(16)));
5685typedef signed int S4 __attribute__((vector_size(16)));
5686typedef signed long long S8 __attribute__((vector_size(16)));
5687static U1 a1, b1;
5688static U2 a2, b2;
5689static U4 a4, b4;
5690static U8 a8, b8;
5691static S1 c1;
5692static S2 c2;
5693static S4 c4;
5694static S8 c8;
5695static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005696void helper(void *d, void *a, int shift, int i);
5697void helper(void *d, void *a, int shift, int i)
5698{
5699 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5700 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5701 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5702 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5703}
Richard Hendersondb432672017-09-15 14:11:45 -07005704int main(void)
5705{
5706 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5707 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5708 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5709 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5710 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5711 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5712 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5713 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5714 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5715 return 0;
5716}
5717EOF
5718
5719vector16=no
5720if compile_prog "" "" ; then
5721 vector16=yes
5722fi
5723
5724########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005725# See if __attribute__((alias)) is supported.
5726# This false for Xcode 9, but has been remedied for Xcode 10.
5727# Unfortunately, travis uses Xcode 9 by default.
5728
5729attralias=no
5730cat > $TMPC << EOF
5731int x = 1;
5732extern const int y __attribute__((alias("x")));
5733int main(void) { return 0; }
5734EOF
5735if compile_prog "" "" ; then
5736 attralias=yes
5737fi
5738
5739########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005740# check if getauxval is available.
5741
5742getauxval=no
5743cat > $TMPC << EOF
5744#include <sys/auxv.h>
5745int main(void) {
5746 return getauxval(AT_HWCAP) == 0;
5747}
5748EOF
5749if compile_prog "" "" ; then
5750 getauxval=yes
5751fi
5752
John Snowfd0e6052015-03-25 18:57:39 -04005753########################################
5754# check if ccache is interfering with
5755# semantic analysis of macros
5756
John Snow5e4dfd32015-10-28 13:56:40 -04005757unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005758ccache_cpp2=no
5759cat > $TMPC << EOF
5760static const int Z = 1;
5761#define fn() ({ Z; })
5762#define TAUT(X) ((X) == Z)
5763#define PAREN(X, Y) (X == Y)
5764#define ID(X) (X)
5765int main(int argc, char *argv[])
5766{
5767 int x = 0, y = 0;
5768 x = ID(x);
5769 x = fn();
5770 fn();
5771 if (PAREN(x, y)) return 0;
5772 if (TAUT(Z)) return 0;
5773 return 0;
5774}
5775EOF
5776
5777if ! compile_object "-Werror"; then
5778 ccache_cpp2=yes
5779fi
5780
John Snowb553a042015-11-03 15:43:42 -05005781#################################################
5782# clang does not support glibc + FORTIFY_SOURCE.
5783
5784if test "$fortify_source" != "no"; then
5785 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5786 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005787 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005788 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005789 fortify_source="no";
5790 else
5791 fortify_source="yes"
5792 fi
5793fi
5794
Fam Zheng1efad062018-06-01 17:26:43 +08005795###############################################
5796# Check if copy_file_range is provided by glibc
5797have_copy_file_range=no
5798cat > $TMPC << EOF
5799#include <unistd.h>
5800int main(void) {
5801 copy_file_range(0, NULL, 0, NULL, 0, 0);
5802 return 0;
5803}
5804EOF
5805if compile_prog "" "" ; then
5806 have_copy_file_range=yes
5807fi
5808
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305809##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005810# check if struct fsxattr is available via linux/fs.h
5811
5812have_fsxattr=no
5813cat > $TMPC << EOF
5814#include <linux/fs.h>
5815struct fsxattr foo;
5816int main(void) {
5817 return 0;
5818}
5819EOF
5820if compile_prog "" "" ; then
5821 have_fsxattr=yes
5822fi
5823
Peter Maydellb66e10e2016-06-08 18:34:32 +01005824##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005825# check for usable membarrier system call
5826if test "$membarrier" = "yes"; then
5827 have_membarrier=no
5828 if test "$mingw32" = "yes" ; then
5829 have_membarrier=yes
5830 elif test "$linux" = "yes" ; then
5831 cat > $TMPC << EOF
5832 #include <linux/membarrier.h>
5833 #include <sys/syscall.h>
5834 #include <unistd.h>
5835 #include <stdlib.h>
5836 int main(void) {
5837 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5838 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5839 exit(0);
5840 }
5841EOF
5842 if compile_prog "" "" ; then
5843 have_membarrier=yes
5844 fi
5845 fi
5846 if test "$have_membarrier" = "no"; then
5847 feature_not_found "membarrier" "membarrier system call not available"
5848 fi
5849else
5850 # Do not enable it by default even for Mingw32, because it doesn't
5851 # work on Wine.
5852 membarrier=no
5853fi
5854
5855##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005856# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005857have_rtnetlink=no
5858cat > $TMPC << EOF
5859#include <linux/rtnetlink.h>
5860int main(void) {
5861 return IFLA_PROTO_DOWN;
5862}
5863EOF
5864if compile_prog "" "" ; then
5865 have_rtnetlink=yes
5866fi
5867
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005868##########################################
5869# check for usable AF_VSOCK environment
5870have_af_vsock=no
5871cat > $TMPC << EOF
5872#include <errno.h>
5873#include <sys/types.h>
5874#include <sys/socket.h>
5875#if !defined(AF_VSOCK)
5876# error missing AF_VSOCK flag
5877#endif
5878#include <linux/vm_sockets.h>
5879int main(void) {
5880 int sock, ret;
5881 struct sockaddr_vm svm;
5882 socklen_t len = sizeof(svm);
5883 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5884 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5885 if ((ret == -1) && (errno == ENOTCONN)) {
5886 return 0;
5887 }
5888 return -1;
5889}
5890EOF
5891if compile_prog "" "" ; then
5892 have_af_vsock=yes
5893fi
5894
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005895##########################################
5896# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005897have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005898cat > $TMPC << EOF
5899#include <errno.h>
5900#include <sys/types.h>
5901#include <sys/socket.h>
5902#include <linux/if_alg.h>
5903int main(void) {
5904 int sock;
5905 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5906 return sock;
5907}
5908EOF
5909if compile_prog "" "" ; then
5910 have_afalg=yes
5911fi
5912if test "$crypto_afalg" = "yes"
5913then
5914 if test "$have_afalg" != "yes"
5915 then
5916 error_exit "AF_ALG requested but could not be detected"
5917 fi
5918fi
5919
5920
James Clarke6969ec62016-06-06 12:02:50 +01005921#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005922# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005923if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005924 cat > $TMPC << EOF
5925#include <Hypervisor/hv.h>
5926int main() { return 0;}
5927EOF
5928 if ! compile_object ""; then
5929 hvf='no'
5930 else
5931 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01005932 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005933 fi
5934fi
5935
5936#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005937# Sparc implicitly links with --relax, which is
5938# incompatible with -r, so --no-relax should be
5939# given. It does no harm to give it on other
5940# platforms too.
5941
5942# Note: the prototype is needed since QEMU_CFLAGS
5943# contains -Wmissing-prototypes
5944cat > $TMPC << EOF
5945extern int foo(void);
5946int foo(void) { return 0; }
5947EOF
5948if ! compile_object ""; then
5949 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5950fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005951for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5952 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5953 LD_REL_FLAGS=$i
5954 break
5955 fi
5956done
5957if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5958 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005959fi
5960
Jan Vesely277abf12016-04-29 13:15:23 -04005961##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005962# check for sysmacros.h
5963
5964have_sysmacros=no
5965cat > $TMPC << EOF
5966#include <sys/sysmacros.h>
5967int main(void) {
5968 return makedev(0, 0);
5969}
5970EOF
5971if compile_prog "" "" ; then
5972 have_sysmacros=yes
5973fi
5974
5975##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005976# Veritas HyperScale block driver VxHS
5977# Check if libvxhs is installed
5978
5979if test "$vxhs" != "no" ; then
5980 cat > $TMPC <<EOF
5981#include <stdint.h>
5982#include <qnio/qnio_api.h>
5983
5984void *vxhs_callback;
5985
5986int main(void) {
5987 iio_init(QNIO_VERSION, vxhs_callback);
5988 return 0;
5989}
5990EOF
5991 vxhs_libs="-lvxhs -lssl"
5992 if compile_prog "" "$vxhs_libs" ; then
5993 vxhs=yes
5994 else
5995 if test "$vxhs" = "yes" ; then
5996 feature_not_found "vxhs block device" "Install libvxhs See github"
5997 fi
5998 vxhs=no
5999 fi
6000fi
6001
6002##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006003# check for _Static_assert()
6004
6005have_static_assert=no
6006cat > $TMPC << EOF
6007_Static_assert(1, "success");
6008int main(void) {
6009 return 0;
6010}
6011EOF
6012if compile_prog "" "" ; then
6013 have_static_assert=yes
6014fi
6015
6016##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006017# check for utmpx.h, it is missing e.g. on OpenBSD
6018
6019have_utmpx=no
6020cat > $TMPC << EOF
6021#include <utmpx.h>
6022struct utmpx user_info;
6023int main(void) {
6024 return 0;
6025}
6026EOF
6027if compile_prog "" "" ; then
6028 have_utmpx=yes
6029fi
6030
6031##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006032# check for getrandom()
6033
6034have_getrandom=no
6035cat > $TMPC << EOF
6036#include <sys/random.h>
6037int main(void) {
6038 return getrandom(0, 0, GRND_NONBLOCK);
6039}
6040EOF
6041if compile_prog "" "" ; then
6042 have_getrandom=yes
6043fi
6044
6045##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006046# checks for sanitizers
6047
Marc-André Lureau247724c2018-01-16 16:11:51 +01006048have_asan=no
6049have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006050have_asan_iface_h=no
6051have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006052
6053if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006054 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006055 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6056 have_asan=yes
6057 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006058
6059 # we could use a simple skeleton for flags checks, but this also
6060 # detect the static linking issue of ubsan, see also:
6061 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6062 cat > $TMPC << EOF
6063#include <stdlib.h>
6064int main(void) {
6065 void *tmp = malloc(10);
6066 return *(int *)(tmp + 2);
6067}
6068EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006069 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6070 have_ubsan=yes
6071 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006072
6073 if check_include "sanitizer/asan_interface.h" ; then
6074 have_asan_iface_h=yes
6075 fi
6076
6077 cat > $TMPC << EOF
6078#include <sanitizer/asan_interface.h>
6079int main(void) {
6080 __sanitizer_start_switch_fiber(0, 0, 0);
6081 return 0;
6082}
6083EOF
6084 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6085 have_asan_iface_fiber=yes
6086 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006087fi
6088
6089##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006090# checks for fuzzer
6091if test "$fuzzing" = "yes" ; then
6092 write_c_fuzzer_skeleton
6093 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6094 have_fuzzer=yes
6095 fi
6096fi
6097
6098##########################################
Junyan He17824402018-07-18 15:47:59 +08006099# check for libpmem
6100
6101if test "$libpmem" != "no"; then
6102 if $pkg_config --exists "libpmem"; then
6103 libpmem="yes"
6104 libpmem_libs=$($pkg_config --libs libpmem)
6105 libpmem_cflags=$($pkg_config --cflags libpmem)
6106 libs_softmmu="$libs_softmmu $libpmem_libs"
6107 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6108 else
6109 if test "$libpmem" = "yes" ; then
6110 feature_not_found "libpmem" "Install nvml or pmdk"
6111 fi
6112 libpmem="no"
6113 fi
6114fi
6115
6116##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006117# check for slirp
6118
Laurent Vivierd5999382019-06-21 15:05:44 +02006119# slirp is only required when building softmmu targets
6120if test -z "$slirp" -a "$softmmu" != "yes" ; then
6121 slirp="no"
6122fi
6123
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006124case "$slirp" in
6125 "" | yes)
6126 if $pkg_config slirp; then
6127 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006128 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6129 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006130 elif test -e "${source_path}/slirp/Makefile" ; then
6131 slirp=internal
6132 elif test -z "$slirp" ; then
6133 slirp=no
6134 else
6135 feature_not_found "slirp" "Install slirp devel or git submodule"
6136 fi
6137 ;;
6138
6139 system)
6140 if ! $pkg_config slirp; then
6141 feature_not_found "slirp" "Install slirp devel"
6142 fi
6143 ;;
6144esac
6145
6146case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006147 git | internal)
6148 if test "$slirp" = git; then
6149 git_submodules="${git_submodules} slirp"
6150 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006151 mkdir -p slirp
6152 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6153 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006154 if test "$mingw32" = "yes" ; then
6155 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6156 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006157 ;;
6158
6159 system)
6160 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6161 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6162 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6163 ;;
6164
6165 no)
6166 ;;
6167 *)
6168 error_exit "Unknown state for slirp: $slirp"
6169 ;;
6170esac
6171
6172
6173##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006174# End of CC checks
6175# After here, no more $cc or $ld runs
6176
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006177write_c_skeleton
6178
Blue Swirl1d728c32012-05-01 18:45:39 +00006179if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006180 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6181 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006182elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006183 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006184elif test "$debug" = "no"; then
6185 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006186fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006187
Marc-André Lureau247724c2018-01-16 16:11:51 +01006188if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006189 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6190 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006191 if test "$have_asan_iface_h" = "no" ; then
6192 echo "ASAN build enabled, but ASAN header missing." \
6193 "Without code annotation, the report may be inferior."
6194 elif test "$have_asan_iface_fiber" = "no" ; then
6195 echo "ASAN build enabled, but ASAN header is too old." \
6196 "Without code annotation, the report may be inferior."
6197 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006198fi
6199if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006200 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6201 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006202fi
6203
Peter Lieven6542aa92014-02-03 10:26:13 +01006204##########################################
6205# Do we have libnfs
6206if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006207 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006208 libnfs="yes"
6209 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006210 else
6211 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006212 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006213 fi
6214 libnfs="no"
6215 fi
6216fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006217
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006218##########################################
6219# Do we have libudev
6220if test "$libudev" != "no" ; then
6221 if $pkg_config libudev && test "$static" != "yes"; then
6222 libudev="yes"
6223 libudev_libs=$($pkg_config --libs libudev)
6224 else
6225 libudev="no"
6226 fi
6227fi
6228
Peter Maydell6ca026c2012-07-18 15:10:18 +01006229# Now we've finished running tests it's OK to add -Werror to the compiler flags
6230if test "$werror" = "yes"; then
6231 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6232fi
6233
Juan Quintelae86ecd42009-08-03 14:45:59 +02006234if test "$solaris" = "no" ; then
6235 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006236 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006237 fi
6238fi
6239
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006240# test if pod2man has --utf8 option
6241if pod2man --help | grep -q utf8; then
6242 POD2MAN="pod2man --utf8"
6243else
6244 POD2MAN="pod2man"
6245fi
6246
Blue Swirl952afb72010-09-19 08:36:34 +00006247# Use ASLR, no-SEH and DEP if available
6248if test "$mingw32" = "yes" ; then
6249 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006250 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006251 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006252 fi
6253 done
6254fi
6255
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006256# Disable OpenBSD W^X if available
6257if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6258 cat > $TMPC <<EOF
6259 int main(void) { return 0; }
6260EOF
6261 wx_ldflags="-Wl,-z,wxneeded"
6262 if compile_prog "" "$wx_ldflags"; then
6263 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6264 fi
6265fi
6266
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006267qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006268qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006269qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006270qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006271qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006272qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006273
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006274# We can only support ivshmem if we have eventfd
6275if [ "$eventfd" = "yes" ]; then
6276 ivshmem=yes
6277fi
6278
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006279tools=""
6280if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006281 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006282 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6283 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006284 fi
6285 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006286 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006287 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006288 if [ "$curl" = "yes" ]; then
6289 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006290 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006291fi
6292if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006293 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006294 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006295 virtfs=yes
6296 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6297 else
6298 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006299 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306300 fi
Andreas Färber17500372012-05-01 01:12:03 +02006301 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006302 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006303 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6304 mpath=yes
6305 else
6306 if test "$mpath" = yes; then
6307 error_exit "Multipath requires libmpathpersist devel"
6308 fi
6309 mpath=no
6310 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006311 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6312 else
6313 if test "$virtfs" = yes; then
6314 error_exit "VirtFS is supported only on Linux"
6315 fi
6316 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006317 if test "$mpath" = yes; then
6318 error_exit "Multipath is supported only on Linux"
6319 fi
6320 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306321 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006322 if test "$xkbcommon" = "yes"; then
6323 tools="qemu-keymap\$(EXESUF) $tools"
6324 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006325fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006326
6327# Probe for guest agent support/options
6328
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006329if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006330 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6331 guest_agent=no
6332 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006333 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006334 guest_agent=yes
6335 elif [ "$guest_agent" != yes ]; then
6336 guest_agent=no
6337 else
6338 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006339 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006340fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006341
Michael Roth9d6bc272015-08-26 10:49:13 -05006342# Guest agent Window MSI package
6343
6344if test "$guest_agent" != yes; then
6345 if test "$guest_agent_msi" = yes; then
6346 error_exit "MSI guest agent package requires guest agent enabled"
6347 fi
6348 guest_agent_msi=no
6349elif test "$mingw32" != "yes"; then
6350 if test "$guest_agent_msi" = "yes"; then
6351 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6352 fi
6353 guest_agent_msi=no
6354elif ! has wixl; then
6355 if test "$guest_agent_msi" = "yes"; then
6356 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6357 fi
6358 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006359else
6360 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6361 # disabled explicitly
6362 if test "$guest_agent_msi" != "no"; then
6363 guest_agent_msi=yes
6364 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006365fi
6366
Michael Roth1a349042015-08-26 11:14:31 -05006367if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006368 if test "$guest_agent_with_vss" = "yes"; then
6369 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6370 fi
6371
6372 if test "$QEMU_GA_MANUFACTURER" = ""; then
6373 QEMU_GA_MANUFACTURER=QEMU
6374 fi
6375
6376 if test "$QEMU_GA_DISTRO" = ""; then
6377 QEMU_GA_DISTRO=Linux
6378 fi
6379
6380 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006381 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006382 fi
6383
Stefan Weil89138852016-05-16 15:10:20 +02006384 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006385
6386 case "$cpu" in
6387 x86_64)
6388 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6389 ;;
6390 i386)
6391 QEMU_GA_MSI_ARCH="-D Arch=32"
6392 ;;
6393 *)
6394 error_exit "CPU $cpu not supported for building installation package"
6395 ;;
6396 esac
6397fi
6398
Paolo Bonzinica35f782010-05-26 16:08:29 +02006399# Mac OS X ships with a broken assembler
6400roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006401if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6402 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6403 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006404 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006405 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6406 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6407 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006408 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6409 ld_i386_emulation="$emu"
6410 roms="optionrom"
6411 break
6412 fi
6413 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006414fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006415
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006416# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006417if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006418 write_c_skeleton
6419 if compile_prog "-march=z900" ""; then
6420 roms="$roms s390-ccw"
6421 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006422fi
6423
Richard Henderson964c6fa2013-06-21 19:10:16 -07006424# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006425if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006426 textseg_addr=
6427 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006428 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6429 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006430 textseg_addr=0x60000000
6431 ;;
6432 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006433 # A 256M aligned address, high in the address space, with enough
6434 # room for the code_gen_buffer above it before the stack.
6435 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006436 ;;
6437 esac
6438 if [ -n "$textseg_addr" ]; then
6439 cat > $TMPC <<EOF
6440 int main(void) { return 0; }
6441EOF
6442 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6443 if ! compile_prog "" "$textseg_ldflags"; then
6444 # In case ld does not support -Ttext-segment, edit the default linker
6445 # script via sed to set the .text start addr. This is needed on FreeBSD
6446 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006447 if ! $ld --verbose >/dev/null 2>&1; then
6448 error_exit \
6449 "We need to link the QEMU user mode binaries at a" \
6450 "specific text address. Unfortunately your linker" \
6451 "doesn't support either the -Ttext-segment option or" \
6452 "printing the default linker script with --verbose." \
6453 "If you don't want the user mode binaries, pass the" \
6454 "--disable-user option to configure."
6455 fi
6456
Richard Henderson964c6fa2013-06-21 19:10:16 -07006457 $ld --verbose | sed \
6458 -e '1,/==================================================/d' \
6459 -e '/==================================================/,$d' \
6460 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6461 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6462 textseg_ldflags="-Wl,-T../config-host.ld"
6463 fi
6464 fi
6465fi
6466
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006467# Check that the C++ compiler exists and works with the C compiler.
6468# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6469if has $cxx; then
6470 cat > $TMPC <<EOF
6471int c_function(void);
6472int main(void) { return c_function(); }
6473EOF
6474
6475 compile_object
6476
6477 cat > $TMPCXX <<EOF
6478extern "C" {
6479 int c_function(void);
6480}
6481int c_function(void) { return 42; }
6482EOF
6483
6484 update_cxxflags
6485
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006486 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006487 # C++ compiler $cxx works ok with C compiler $cc
6488 :
6489 else
6490 echo "C++ compiler $cxx does not work with C compiler $cc"
6491 echo "Disabling C++ specific optional code"
6492 cxx=
6493 fi
6494else
6495 echo "No C++ compiler available; disabling C++ specific optional code"
6496 cxx=
6497fi
6498
Cole Robinson02d34f62016-05-06 14:03:09 -04006499echo_version() {
6500 if test "$1" = "yes" ; then
6501 echo "($2)"
6502 fi
6503}
6504
Jan Kiszka50e12062014-10-02 10:03:55 +02006505# prepend pixman and ftd flags after all config tests are done
6506QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006507QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006508libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006509
bellard43ce4df2003-06-09 19:53:12 +00006510echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006511echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006512echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006513echo "binary directory $(eval echo $bindir)"
6514echo "library directory $(eval echo $libdir)"
6515echo "module directory $(eval echo $qemu_moddir)"
6516echo "libexec directory $(eval echo $libexecdir)"
6517echo "include directory $(eval echo $includedir)"
6518echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006519if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006520echo "local state directory $(eval echo $local_statedir)"
6521echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006522echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006523else
6524echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006525echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006526fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006527echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006528echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006529echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006530echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006531echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006532echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006533echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006534echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006535echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006536echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006537echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006538echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006539echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006540echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006541echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006542if test "$docs" != "no"; then
6543 echo "sphinx-build $sphinx_build"
6544fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006545echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6546if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006547 echo "smbd $smbd"
6548fi
Fam Zheng17969262014-02-10 14:48:56 +08006549echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006550echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006551echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006552echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006553echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006554echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006555echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006556echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006557echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006558if test "$darwin" = "yes" ; then
6559 echo "Cocoa support $cocoa"
6560fi
Stefan Weil89138852016-05-16 15:10:20 +02006561echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006562echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006563echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006564echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006565echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006566echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006567echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006568echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006569if test "$gcrypt" = "yes"
6570then
6571 echo " hmac $gcrypt_hmac"
6572 echo " XTS $gcrypt_xts"
6573fi
Stefan Weil89138852016-05-16 15:10:20 +02006574echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006575if test "$nettle" = "yes"
6576then
6577 echo " XTS $nettle_xts"
6578fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006579echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006580echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006581echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006582echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006583echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006584echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006585echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006586echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006587echo "Block whitelist (rw) $block_drv_rw_whitelist"
6588echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306589echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006590echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006591echo "VNC support $vnc"
6592if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006593 echo "VNC SASL support $vnc_sasl"
6594 echo "VNC JPEG support $vnc_jpeg"
6595 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006596fi
aliguorie37630c2009-04-22 15:19:10 +00006597echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006598if test "$xen" = "yes" ; then
6599 echo "xen ctrl version $xen_ctrl_version"
6600fi
aurel322e4d9fb2008-04-08 06:01:02 +00006601echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006602echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006603echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006604echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006605echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006606echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006607echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006608echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006609echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006610echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006611echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006612echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006613echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006614echo "TCG support $tcg"
6615if test "$tcg" = "yes" ; then
6616 echo "TCG debug enabled $debug_tcg"
6617 echo "TCG interpreter $tcg_interpreter"
6618fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006619echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006620echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006621echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006622echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006623echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006624echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006625echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006626echo "madvise $madvise"
6627echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006628echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006629echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006630echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006631echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006632echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006633echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006634echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006635echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006636echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006637if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006638echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006639fi
Stefan Weil89138852016-05-16 15:10:20 +02006640echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006641echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006642echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006643echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006644echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006645echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006646echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006647echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006648echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006649echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006650echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006651echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006652echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006653echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006654echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006655echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006656echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006657echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006658echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006659echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306660echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006661echo "gcov $gcov_tool"
6662echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006663echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006664echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006665echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006666echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006667echo "lzo support $lzo"
6668echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006669echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006670echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006671echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006672echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006673echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006674echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006675echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006676echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006677echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006678echo "bochs support $bochs"
6679echo "cloop support $cloop"
6680echo "dmg support $dmg"
6681echo "qcow v1 support $qcow1"
6682echo "vdi support $vdi"
6683echo "vvfat support $vvfat"
6684echo "qed support $qed"
6685echo "parallels support $parallels"
6686echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006687echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006688echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006689echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006690echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006691echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006692echo "fuzzing support $fuzzing"
bellard67b915a2004-03-31 23:37:16 +00006693
Peter Maydell898be3e2017-03-21 14:31:57 +00006694if test "$supported_cpu" = "no"; then
6695 echo
6696 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6697 echo
6698 echo "CPU host architecture $cpu support is not currently maintained."
6699 echo "The QEMU project intends to remove support for this host CPU in"
6700 echo "a future release if nobody volunteers to maintain it and to"
6701 echo "provide a build host for our continuous integration setup."
6702 echo "configure has succeeded and you can continue to build, but"
6703 echo "if you care about QEMU on this platform you should contact"
6704 echo "us upstream at qemu-devel@nongnu.org."
6705fi
6706
6707if test "$supported_os" = "no"; then
6708 echo
6709 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6710 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006711 echo "Host OS $targetos support is not currently maintained."
6712 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006713 echo "a future release if nobody volunteers to maintain it and to"
6714 echo "provide a build host for our continuous integration setup."
6715 echo "configure has succeeded and you can continue to build, but"
6716 echo "if you care about QEMU on this platform you should contact"
6717 echo "us upstream at qemu-devel@nongnu.org."
6718fi
6719
Juan Quintela98ec69a2009-07-16 18:34:18 +02006720config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006721
Stefan Weildbd99ae2013-01-01 18:33:44 +01006722echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6723
Juan Quintela98ec69a2009-07-16 18:34:18 +02006724echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006725echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006726
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006727echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006728echo "prefix=$prefix" >> $config_host_mak
6729echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006730echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006731echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006732echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006733echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006734echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006735echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006736echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006737echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006738echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006739echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006740if test "$mingw32" = "no" ; then
6741 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6742fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006743echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006744echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006745echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006746echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006747echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006748echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006749echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006750echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006751echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006752
Juan Quintela98ec69a2009-07-16 18:34:18 +02006753echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006754
Paolo Bonzinif3494742019-01-23 14:56:17 +08006755if test "$default_devices" = "yes" ; then
6756 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6757else
6758 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6759fi
aurel32f8393942009-04-13 18:45:38 +00006760if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006761 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006762fi
aliguori1625af82009-04-05 17:41:02 +00006763if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006764 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006765fi
bellard7d132992003-03-06 23:23:54 +00006766if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006767 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006768fi
bellard67b915a2004-03-31 23:37:16 +00006769if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006770 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006771 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006772 version_major=${rc_version%%.*}
6773 rc_version=${rc_version#*.}
6774 version_minor=${rc_version%%.*}
6775 rc_version=${rc_version#*.}
6776 version_subminor=${rc_version%%.*}
6777 version_micro=0
6778 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6779 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006780 if test "$guest_agent_with_vss" = "yes" ; then
6781 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006782 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006783 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6784 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006785 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006786 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006787 fi
Michael Roth1a349042015-08-26 11:14:31 -05006788 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006789 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006790 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6791 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6792 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6793 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6794 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6795 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6796 fi
pbrook210fa552007-02-27 21:04:49 +00006797else
Juan Quintela35f4df22009-07-27 16:13:07 +02006798 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006799fi
blueswir1128ab2f2008-08-15 18:33:42 +00006800
Mark McLoughlindffcb712009-10-22 17:49:11 +01006801if test "$linux" = "yes" ; then
6802 echo "CONFIG_LINUX=y" >> $config_host_mak
6803fi
6804
bellard83fb7ad2004-07-05 21:25:26 +00006805if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006806 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006807fi
malcb29fe3e2008-11-18 01:42:22 +00006808
bellardec530c82006-04-25 22:36:06 +00006809if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006810 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006811fi
Andreas Färber179cf402010-09-20 00:50:43 +02006812if test "$haiku" = "yes" ; then
6813 echo "CONFIG_HAIKU=y" >> $config_host_mak
6814fi
bellard97a847b2003-08-10 21:36:04 +00006815if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006816 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006817fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006818if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006819 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006820fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006821if test "$want_tools" = "yes" ; then
6822 echo "CONFIG_TOOLS=y" >> $config_host_mak
6823fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006824if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006825 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006826 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006827 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6828 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6829fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006830if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006831 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006832fi
ths8a16d272008-07-19 09:56:24 +00006833if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006834 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006835 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006836fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006837if test "$netmap" = "yes" ; then
6838 echo "CONFIG_NETMAP=y" >> $config_host_mak
6839fi
Gonglei015a33b2014-07-01 20:58:08 +08006840if test "$l2tpv3" = "yes" ; then
6841 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6842fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006843if test "$gprof" = "yes" ; then
6844 echo "CONFIG_GPROF=y" >> $config_host_mak
6845fi
Corey Bryant47e98652012-01-26 09:42:26 -05006846if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006847 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006848fi
Juan Quintela2358a492009-07-27 16:13:25 +02006849echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006850for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006851 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006852 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006853 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006854 echo "$def=m" >> $config_host_mak ;;
6855 *)
6856 echo "$def=y" >> $config_host_mak ;;
6857 esac
malc0c58ac12008-06-25 21:04:05 +00006858done
Fam Zhengb1149912017-09-07 16:29:13 +08006859echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6860echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6861echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6862echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6863echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006864if test "$audio_win_int" = "yes" ; then
6865 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6866fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006867echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6868echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006869if test "$vnc" = "yes" ; then
6870 echo "CONFIG_VNC=y" >> $config_host_mak
6871fi
aliguori2f9606b2009-03-06 20:27:28 +00006872if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006873 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006874fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006875if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006876 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006877fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006878if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006879 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006880fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006881if test "$xkbcommon" = "yes" ; then
6882 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6883 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6884fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006885if test "$xfs" = "yes" ; then
6886 echo "CONFIG_XFS=y" >> $config_host_mak
6887fi
Stefan Weil89138852016-05-16 15:10:20 +02006888qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006889echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006890echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006891echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006892echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006893if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006894 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006895fi
Fam Zheng17969262014-02-10 14:48:56 +08006896if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006897 # $shacmd can generate a hash started with digit, which the compiler doesn't
6898 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006899 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006900 echo "CONFIG_MODULES=y" >> $config_host_mak
6901fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006902if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006903 echo "CONFIG_X11=y" >> $config_host_mak
6904 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6905 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6906fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006907if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006908 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006909 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006910 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006911 if test "$sdl_image" = "yes" ; then
6912 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6913 fi
bellard49ecc3f2007-11-07 19:25:15 +00006914fi
6915if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006916 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006917fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006918if test "$iconv" = "yes" ; then
6919 echo "CONFIG_ICONV=y" >> $config_host_mak
6920 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6921 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6922fi
balrog4d3b6f62008-02-10 16:33:14 +00006923if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006924 echo "CONFIG_CURSES=m" >> $config_host_mak
6925 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6926 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006927fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006928if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006929 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006930fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006931if test "$accept4" = "yes" ; then
6932 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6933fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306934if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006935 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306936fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006937if test "$eventfd" = "yes" ; then
6938 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6939fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006940if test "$memfd" = "yes" ; then
6941 echo "CONFIG_MEMFD=y" >> $config_host_mak
6942fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006943if test "$have_usbfs" = "yes" ; then
6944 echo "CONFIG_USBFS=y" >> $config_host_mak
6945fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006946if test "$fallocate" = "yes" ; then
6947 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6948fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006949if test "$fallocate_punch_hole" = "yes" ; then
6950 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6951fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006952if test "$fallocate_zero_range" = "yes" ; then
6953 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6954fi
Kevin Wolfed911432014-09-29 17:12:59 +02006955if test "$posix_fallocate" = "yes" ; then
6956 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6957fi
Peter Maydellc727f472011-01-06 11:05:10 +00006958if test "$sync_file_range" = "yes" ; then
6959 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6960fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006961if test "$fiemap" = "yes" ; then
6962 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6963fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006964if test "$dup3" = "yes" ; then
6965 echo "CONFIG_DUP3=y" >> $config_host_mak
6966fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006967if test "$ppoll" = "yes" ; then
6968 echo "CONFIG_PPOLL=y" >> $config_host_mak
6969fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006970if test "$prctl_pr_set_timerslack" = "yes" ; then
6971 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6972fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006973if test "$epoll" = "yes" ; then
6974 echo "CONFIG_EPOLL=y" >> $config_host_mak
6975fi
6976if test "$epoll_create1" = "yes" ; then
6977 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6978fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006979if test "$sendfile" = "yes" ; then
6980 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6981fi
Riku Voipio51834342014-06-22 11:25:42 +01006982if test "$timerfd" = "yes" ; then
6983 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6984fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006985if test "$setns" = "yes" ; then
6986 echo "CONFIG_SETNS=y" >> $config_host_mak
6987fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006988if test "$clock_adjtime" = "yes" ; then
6989 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6990fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006991if test "$syncfs" = "yes" ; then
6992 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6993fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01006994if test "$kcov" = "yes" ; then
6995 echo "CONFIG_KCOV=y" >> $config_host_mak
6996fi
aurel323b3f24a2009-04-15 16:12:13 +00006997if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006998 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006999fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007000if test "$inotify1" = "yes" ; then
7001 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7002fi
Peter Maydell401bc052017-09-05 13:19:32 +01007003if test "$sem_timedwait" = "yes" ; then
7004 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7005fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007006if test "$strchrnul" = "yes" ; then
7007 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7008fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007009if test "$st_atim" = "yes" ; then
7010 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7011fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007012if test "$byteswap_h" = "yes" ; then
7013 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7014fi
7015if test "$bswap_h" = "yes" ; then
7016 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7017fi
Alexander Graf769ce762009-05-11 17:41:42 +02007018if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007019 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007020 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007021 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007022fi
aurel322e4d9fb2008-04-08 06:01:02 +00007023if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007024 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007025 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007026fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007027if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007028 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007029 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007030 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007031 if test "$gtk_gl" = "yes" ; then
7032 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7033 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007034fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007035if test "$gio" = "yes" ; then
7036 echo "CONFIG_GIO=y" >> $config_host_mak
7037 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7038 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007039 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007040fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007041echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007042if test "$gnutls" = "yes" ; then
7043 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7044fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007045if test "$gcrypt" = "yes" ; then
7046 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007047 if test "$gcrypt_hmac" = "yes" ; then
7048 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7049 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007050fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007051if test "$nettle" = "yes" ; then
7052 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007053 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007054fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007055if test "$qemu_private_xts" = "yes" ; then
7056 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7057fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007058if test "$tasn1" = "yes" ; then
7059 echo "CONFIG_TASN1=y" >> $config_host_mak
7060fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007061if test "$auth_pam" = "yes" ; then
7062 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7063fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007064if test "$have_ifaddrs_h" = "yes" ; then
7065 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7066fi
Eric Blake6b39b062016-10-11 10:46:23 -05007067if test "$have_broken_size_max" = "yes" ; then
7068 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7069fi
Jan Vesely277abf12016-04-29 13:15:23 -04007070
7071# Work around a system header bug with some kernel/XFS header
7072# versions where they both try to define 'struct fsxattr':
7073# xfs headers will not try to redefine structs from linux headers
7074# if this macro is set.
7075if test "$have_fsxattr" = "yes" ; then
7076 echo "HAVE_FSXATTR=y" >> $config_host_mak
7077fi
Fam Zheng1efad062018-06-01 17:26:43 +08007078if test "$have_copy_file_range" = "yes" ; then
7079 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7080fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007081if test "$vte" = "yes" ; then
7082 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007083 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007084 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007085fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007086if test "$virglrenderer" = "yes" ; then
7087 echo "CONFIG_VIRGL=y" >> $config_host_mak
7088 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7089 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7090fi
aliguorie37630c2009-04-22 15:19:10 +00007091if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007092 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007093 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007094fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007095if test "$linux_aio" = "yes" ; then
7096 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7097fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007098if test "$linux_io_uring" = "yes" ; then
7099 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7100 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7101 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7102fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007103if test "$attr" = "yes" ; then
7104 echo "CONFIG_ATTR=y" >> $config_host_mak
7105fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007106if test "$libattr" = "yes" ; then
7107 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7108fi
Meador Inge983eef52012-02-24 14:00:42 +05307109if test "$virtfs" = "yes" ; then
7110 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007111fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007112if test "$mpath" = "yes" ; then
7113 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007114 if test "$mpathpersist_new_api" = "yes"; then
7115 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7116 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007117fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007118if test "$vhost_scsi" = "yes" ; then
7119 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7120fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007121if test "$vhost_net" = "yes" ; then
7122 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7123fi
7124if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007125 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007126fi
Gonglei042cea22018-03-01 21:46:28 +08007127if test "$vhost_crypto" = "yes" ; then
7128 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7129fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007130if test "$vhost_vsock" = "yes" ; then
7131 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7132fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007133if test "$vhost_kernel" = "yes" ; then
7134 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7135fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007136if test "$vhost_user" = "yes" ; then
7137 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7138fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007139if test "$vhost_user_fs" = "yes" ; then
7140 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7141fi
ths77755342008-11-27 15:45:16 +00007142if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007143 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007144fi
aliguoribf9298b2008-12-05 20:05:26 +00007145if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007146 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007147fi
aliguoriceb42de2009-04-07 18:43:28 +00007148if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007149 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007150fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007151if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007152 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007153fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007154if test "$membarrier" = "yes" ; then
7155 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7156fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007157if test "$signalfd" = "yes" ; then
7158 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7159fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007160if test "$optreset" = "yes" ; then
7161 echo "HAVE_OPTRESET=y" >> $config_host_mak
7162fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007163if test "$tcg" = "yes"; then
7164 echo "CONFIG_TCG=y" >> $config_host_mak
7165 if test "$tcg_interpreter" = "yes" ; then
7166 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7167 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007168fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007169if test "$fdatasync" = "yes" ; then
7170 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7171fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007172if test "$madvise" = "yes" ; then
7173 echo "CONFIG_MADVISE=y" >> $config_host_mak
7174fi
7175if test "$posix_madvise" = "yes" ; then
7176 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7177fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007178if test "$posix_memalign" = "yes" ; then
7179 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7180fi
bellard97a847b2003-08-10 21:36:04 +00007181
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007182if test "$spice" = "yes" ; then
7183 echo "CONFIG_SPICE=y" >> $config_host_mak
7184fi
7185
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007186if test "$smartcard" = "yes" ; then
7187 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007188 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7189 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007190fi
7191
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007192if test "$libusb" = "yes" ; then
7193 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007194 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7195 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007196fi
7197
Hans de Goede69354a82011-07-19 11:04:10 +02007198if test "$usb_redir" = "yes" ; then
7199 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007200 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7201 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007202fi
7203
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007204if test "$opengl" = "yes" ; then
7205 echo "CONFIG_OPENGL=y" >> $config_host_mak
7206 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007207 if test "$opengl_dmabuf" = "yes" ; then
7208 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7209 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007210fi
7211
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007212if test "$gbm" = "yes" ; then
7213 echo "CONFIG_GBM=y" >> $config_host_mak
7214 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7215 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7216fi
7217
7218
Yang Zhong5a22ab72017-12-20 21:16:46 +08007219if test "$malloc_trim" = "yes" ; then
7220 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7221fi
7222
Liang Li99f2dbd2016-03-08 13:53:16 +08007223if test "$avx2_opt" = "yes" ; then
7224 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7225fi
7226
qiaonuohan607dacd2014-02-18 14:11:30 +08007227if test "$lzo" = "yes" ; then
7228 echo "CONFIG_LZO=y" >> $config_host_mak
7229fi
7230
7231if test "$snappy" = "yes" ; then
7232 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7233fi
7234
Peter Wu6b383c02015-01-06 18:48:14 +01007235if test "$bzip2" = "yes" ; then
7236 echo "CONFIG_BZIP2=y" >> $config_host_mak
7237 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7238fi
7239
Julio Faracco83bc1f92018-11-05 13:08:04 -02007240if test "$lzfse" = "yes" ; then
7241 echo "CONFIG_LZFSE=y" >> $config_host_mak
7242 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7243fi
7244
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007245if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007246 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007247 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7248 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007249fi
7250
Peter Lieven6542aa92014-02-03 10:26:13 +01007251if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007252 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7253 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007254fi
7255
Eduardo Otubof7945732012-08-14 18:44:05 -03007256if test "$seccomp" = "yes"; then
7257 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007258 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7259 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007260fi
7261
bellard83fb7ad2004-07-05 21:25:26 +00007262# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007263if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007264 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007265fi
7266
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007267if test "$localtime_r" = "yes" ; then
7268 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7269fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007270if test "$qom_cast_debug" = "yes" ; then
7271 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7272fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007273if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007274 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007275 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7276 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007277fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007278
Peter Maydell7c2acc72013-04-08 12:11:27 +01007279echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007280if test "$coroutine_pool" = "yes" ; then
7281 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7282else
7283 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7284fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307285
Peter Lieven7d992e42016-09-27 11:58:45 +02007286if test "$debug_stack_usage" = "yes" ; then
7287 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7288fi
7289
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007290if test "$crypto_afalg" = "yes" ; then
7291 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7292fi
7293
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307294if test "$open_by_handle_at" = "yes" ; then
7295 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7296fi
7297
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307298if test "$linux_magic_h" = "yes" ; then
7299 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7300fi
7301
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007302if test "$pragma_diagnostic_available" = "yes" ; then
7303 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007304fi
7305
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007306if test "$valgrind_h" = "yes" ; then
7307 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7308fi
7309
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007310if test "$have_asan_iface_fiber" = "yes" ; then
7311 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7312fi
7313
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007314if test "$has_environ" = "yes" ; then
7315 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7316fi
7317
Richard Henderson76a347e2012-12-28 14:17:02 -08007318if test "$cpuid_h" = "yes" ; then
7319 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7320fi
7321
Richard Hendersonf5401662013-02-16 12:46:59 -08007322if test "$int128" = "yes" ; then
7323 echo "CONFIG_INT128=y" >> $config_host_mak
7324fi
7325
Richard Henderson7ebee432016-06-29 21:10:59 -07007326if test "$atomic128" = "yes" ; then
7327 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7328fi
7329
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007330if test "$cmpxchg128" = "yes" ; then
7331 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7332fi
7333
Richard Hendersondf79b992016-09-02 12:23:57 -07007334if test "$atomic64" = "yes" ; then
7335 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7336fi
7337
Richard Hendersondb432672017-09-15 14:11:45 -07007338if test "$vector16" = "yes" ; then
7339 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7340fi
7341
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007342if test "$attralias" = "yes" ; then
7343 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7344fi
7345
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007346if test "$getauxval" = "yes" ; then
7347 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7348fi
7349
Bharata B Raoeb100392012-09-24 14:42:45 +05307350if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007351 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007352 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7353 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307354fi
7355
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007356if test "$glusterfs_xlator_opt" = "yes" ; then
7357 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7358fi
7359
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307360if test "$glusterfs_discard" = "yes" ; then
7361 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7362fi
7363
Niels de Vosdf3a4292017-05-28 12:01:14 +05307364if test "$glusterfs_fallocate" = "yes" ; then
7365 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7366fi
7367
Bharata B Rao7c815372013-12-21 14:51:25 +05307368if test "$glusterfs_zerofill" = "yes" ; then
7369 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7370fi
7371
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007372if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7373 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7374fi
7375
Niels de Vos0e3b8912019-03-05 16:46:34 +01007376if test "$glusterfs_iocb_has_stat" = "yes" ; then
7377 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7378fi
7379
Pino Toscanob10d49d2019-06-20 22:08:40 +02007380if test "$libssh" = "yes" ; then
7381 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7382 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7383 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007384fi
7385
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007386if test "$live_block_migration" = "yes" ; then
7387 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7388fi
7389
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007390if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007391 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007392fi
7393
Lluís Vilanova5b808272014-05-27 15:02:14 +02007394echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7395if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007396 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307397fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007398if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007399 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7400 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007401 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007402fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007403if have_backend "log"; then
7404 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007405fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007406if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007407 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7408fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007409if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007410 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7411 if test "$trace_backend_stap" = "yes" ; then
7412 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7413 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007414fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007415if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007416 if test "$linux" = "yes" ; then
7417 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007418 else
Stewart Smith21684af2014-01-24 12:39:10 +11007419 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007420 fi
7421fi
Paul Durrant0a852412016-08-04 14:44:14 +01007422if have_backend "syslog"; then
7423 if test "$posix_syslog" = "yes" ; then
7424 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7425 else
7426 feature_not_found "syslog(trace backend)" "syslog not available"
7427 fi
7428fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007429echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7430
Michael R. Hines2da776d2013-07-22 10:01:54 -04007431if test "$rdma" = "yes" ; then
7432 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007433 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007434fi
7435
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007436if test "$pvrdma" = "yes" ; then
7437 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7438fi
7439
Laurent Vivier575b22b2016-06-02 22:14:15 +02007440if test "$have_rtnetlink" = "yes" ; then
7441 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7442fi
7443
Klim Kireeved279a02018-01-12 12:01:19 +03007444if test "$libxml2" = "yes" ; then
7445 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7446 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7447 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7448fi
7449
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007450if test "$replication" = "yes" ; then
7451 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7452fi
7453
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007454if test "$have_af_vsock" = "yes" ; then
7455 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7456fi
7457
Christopher Covington4d043512016-12-28 15:04:33 -05007458if test "$have_sysmacros" = "yes" ; then
7459 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7460fi
7461
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007462if test "$have_static_assert" = "yes" ; then
7463 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7464fi
7465
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007466if test "$have_utmpx" = "yes" ; then
7467 echo "HAVE_UTMPX=y" >> $config_host_mak
7468fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007469if test "$have_getrandom" = "yes" ; then
7470 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7471fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007472if test "$ivshmem" = "yes" ; then
7473 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7474fi
Richard Hendersone219c492017-09-28 09:01:23 -07007475if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007476 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7477fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007478if test "$debug_mutex" = "yes" ; then
7479 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7480fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007481
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007482# Hold two types of flag:
7483# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7484# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007485# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007486# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007487if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007488 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007489 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7490elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7491 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7492 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007493fi
7494
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007495if test "$vxhs" = "yes" ; then
7496 echo "CONFIG_VXHS=y" >> $config_host_mak
7497 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7498fi
7499
Junyan He17824402018-07-18 15:47:59 +08007500if test "$libpmem" = "yes" ; then
7501 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7502fi
7503
Jeff Cody2f740132018-11-07 07:36:44 +01007504if test "$bochs" = "yes" ; then
7505 echo "CONFIG_BOCHS=y" >> $config_host_mak
7506fi
7507if test "$cloop" = "yes" ; then
7508 echo "CONFIG_CLOOP=y" >> $config_host_mak
7509fi
7510if test "$dmg" = "yes" ; then
7511 echo "CONFIG_DMG=y" >> $config_host_mak
7512fi
7513if test "$qcow1" = "yes" ; then
7514 echo "CONFIG_QCOW1=y" >> $config_host_mak
7515fi
7516if test "$vdi" = "yes" ; then
7517 echo "CONFIG_VDI=y" >> $config_host_mak
7518fi
7519if test "$vvfat" = "yes" ; then
7520 echo "CONFIG_VVFAT=y" >> $config_host_mak
7521fi
7522if test "$qed" = "yes" ; then
7523 echo "CONFIG_QED=y" >> $config_host_mak
7524fi
7525if test "$parallels" = "yes" ; then
7526 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7527fi
7528if test "$sheepdog" = "yes" ; then
7529 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7530fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007531if test "$fuzzing" = "yes" ; then
7532 if test "$have_fuzzer" = "yes"; then
7533 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7534 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7535 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7536 else
7537 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7538 exit 1
7539 fi
7540fi
Jeff Cody2f740132018-11-07 07:36:44 +01007541
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007542if test "$plugins" = "yes" ; then
7543 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7544 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007545 # Copy the export object list to the build dir
7546 if test "$ld_dynamic_list" = "yes" ; then
7547 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7548 ld_symbols=qemu-plugins-ld.symbols
7549 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7550 elif test "$ld_exported_symbols_list" = "yes" ; then
7551 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7552 ld64_symbols=qemu-plugins-ld64.symbols
7553 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7554 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7555 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7556 else
7557 error_exit \
7558 "If \$plugins=yes, either \$ld_dynamic_list or " \
7559 "\$ld_exported_symbols_list should have been set to 'yes'."
7560 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007561fi
7562
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007563if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007564 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007565elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007566 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007567elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007568 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007569elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007570 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007571elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007572 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007573elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007574 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007575else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007576 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007577fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007578
Juan Quintela98ec69a2009-07-16 18:34:18 +02007579echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007580echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007581echo "MAKE=$make" >> $config_host_mak
7582echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007583echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7584echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007585echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7586echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007587echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007588echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007589echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007590if $iasl -h > /dev/null 2>&1; then
7591 echo "IASL=$iasl" >> $config_host_mak
7592fi
Juan Quintela804edf22009-07-27 16:12:49 +02007593echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007594echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007595echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007596echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007597echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007598echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007599echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007600echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007601echo "OBJCOPY=$objcopy" >> $config_host_mak
7602echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007603echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007604echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007605echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007606echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007607echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007608echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007609echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007610echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007611echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007612if test "$sparse" = "yes" ; then
7613 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007614 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007615 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007616 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7617 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7618fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007619echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007620echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007621echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007622echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007623echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007624echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007625echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007626echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007627echo "DSOSUF=$DSOSUF" >> $config_host_mak
7628echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007629echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007630echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7631echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007632echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007633if test "$gcov" = "yes" ; then
7634 echo "CONFIG_GCOV=y" >> $config_host_mak
7635 echo "GCOV=$gcov_tool" >> $config_host_mak
7636fi
Juan Quintela804edf22009-07-27 16:12:49 +02007637
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007638if test "$libudev" != "no"; then
7639 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7640 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7641fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007642if test "$fuzzing" != "no"; then
7643 echo "CONFIG_FUZZ=y" >> $config_host_mak
7644 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7645 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7646fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007647
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007648if test "$edk2_blobs" = "yes" ; then
7649 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7650fi
7651
Peter Maydell6efd7512011-11-30 11:59:04 +00007652# use included Linux headers
7653if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007654 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007655 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007656 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007657 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007658 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007659 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007660 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007661 ;;
7662 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007663 linux_arch=s390
7664 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007665 aarch64)
7666 linux_arch=arm64
7667 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007668 mips64)
7669 linux_arch=mips
7670 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007671 *)
7672 # For most CPUs the kernel architecture name and QEMU CPU name match.
7673 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007674 ;;
7675 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007676 # For non-KVM architectures we will not have asm headers
7677 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7678 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7679 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007680fi
7681
bellard1d14ffa2005-10-30 18:58:22 +00007682for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007683target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007684config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007685target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007686target_aligned_only="no"
7687case "$target_name" in
7688 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7689 target_aligned_only="yes"
7690 ;;
7691esac
bellard97a847b2003-08-10 21:36:04 +00007692target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007693case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007694 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 +00007695 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007696 ;;
7697esac
bellard97a847b2003-08-10 21:36:04 +00007698target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007699target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007700target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007701target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007702case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007703 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007704 target_softmmu="yes"
7705 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007706 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007707 target_user_only="yes"
7708 target_linux_user="yes"
7709 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007710 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007711 target_user_only="yes"
7712 target_bsd_user="yes"
7713 ;;
pbrook9e407a82007-05-26 16:38:53 +00007714 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007715 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007716 exit 1
7717 ;;
7718esac
ths831b7822007-01-18 20:06:33 +00007719
bellard97a847b2003-08-10 21:36:04 +00007720mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007721echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007722
pbrooke5fe0c52006-06-11 13:32:59 +00007723bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007724mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007725interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007726gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007727
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007728TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007729TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007730TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007731
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007732case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007733 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007734 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307735 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007736 ;;
7737 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007738 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007739 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307740 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007741 ;;
7742 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007743 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00007744 ;;
7745 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007746 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007747 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007748 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007749 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007750 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007751 aarch64|aarch64_be)
7752 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007753 TARGET_BASE_ARCH=arm
7754 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007755 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007756 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 +01007757 ;;
aurel322408a522008-04-20 20:19:44 +00007758 cris)
aurel322408a522008-04-20 20:19:44 +00007759 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007760 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007761 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08007762 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007763 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007764 ;;
aurel322408a522008-04-20 20:19:44 +00007765 m68k)
aurel322408a522008-04-20 20:19:44 +00007766 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007767 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00007768 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007769 microblaze|microblazeel)
7770 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007771 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007772 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007773 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007774 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007775 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007776 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007777 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007778 ;;
7779 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007780 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007781 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007782 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007783 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007784 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007785 ;;
7786 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007787 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007788 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007789 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007790 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007791 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007792 moxie)
7793 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007794 nios2)
7795 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007796 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007797 TARGET_ARCH=openrisc
7798 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007799 ;;
aurel322408a522008-04-20 20:19:44 +00007800 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007801 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007802 ;;
aurel322408a522008-04-20 20:19:44 +00007803 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007804 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007805 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307806 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007807 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007808 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007809 ppc64le)
7810 TARGET_ARCH=ppc64
7811 TARGET_BASE_ARCH=ppc
7812 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307813 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007814 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 -05007815 ;;
aurel322408a522008-04-20 20:19:44 +00007816 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007817 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007818 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007819 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007820 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007821 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007822 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007823 riscv32)
7824 TARGET_BASE_ARCH=riscv
7825 TARGET_ABI_DIR=riscv
7826 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007827 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 +13007828 ;;
7829 riscv64)
7830 TARGET_BASE_ARCH=riscv
7831 TARGET_ABI_DIR=riscv
7832 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007833 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 +13007834 ;;
aurel322408a522008-04-20 20:19:44 +00007835 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007836 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007837 bflt="yes"
7838 ;;
7839 sparc)
aurel322408a522008-04-20 20:19:44 +00007840 ;;
7841 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007842 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007843 ;;
7844 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007845 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007846 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007847 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02007848 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007849 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007850 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007851 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007852 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 +01007853 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007854 tilegx)
7855 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007856 tricore)
7857 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007858 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007859 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007860 xtensa|xtensaeb)
7861 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007862 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007863 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007864 ;;
aurel322408a522008-04-20 20:19:44 +00007865 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007866 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007867 ;;
7868esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007869# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7870if [ "$TARGET_BASE_ARCH" = "" ]; then
7871 TARGET_BASE_ARCH=$TARGET_ARCH
7872fi
7873
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007874symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7875
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007876upper() {
7877 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7878}
7879
Stefan Weil89138852016-05-16 15:10:20 +02007880target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007881echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007882echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007883echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007884if [ "$TARGET_ABI_DIR" = "" ]; then
7885 TARGET_ABI_DIR=$TARGET_ARCH
7886fi
Juan Quintela25be2102009-10-07 02:41:00 +02007887echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007888if [ "$HOST_VARIANT_DIR" != "" ]; then
7889 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7890fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007891
7892if supported_xen_target $target; then
7893 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007894 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007895 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007896 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007897 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007898else
7899 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007900fi
7901if supported_kvm_target $target; then
7902 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007903 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7904else
7905 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007906fi
7907if supported_hax_target $target; then
7908 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007909fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007910if supported_hvf_target $target; then
7911 echo "CONFIG_HVF=y" >> $config_target_mak
7912fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007913if supported_whpx_target $target; then
7914 echo "CONFIG_WHPX=y" >> $config_target_mak
7915fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007916if test "$target_aligned_only" = "yes" ; then
7917 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7918fi
bellardde83cd02003-06-15 20:25:43 +00007919if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007920 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007921fi
7922if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007923 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007924 if test "$mttcg" = "yes" ; then
7925 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7926 fi
bellardde83cd02003-06-15 20:25:43 +00007927fi
bellard997344f2003-10-27 21:10:39 +00007928if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007929 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007930 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007931fi
ths831b7822007-01-18 20:06:33 +00007932if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007933 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007934fi
pbrook56aebc82008-10-11 17:55:29 +00007935list=""
7936if test ! -z "$gdb_xml_files" ; then
7937 for x in $gdb_xml_files; do
7938 list="$list $source_path/gdb-xml/$x"
7939 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007940 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007941fi
bellardde83cd02003-06-15 20:25:43 +00007942
Eric Blakee633a5c2019-02-04 20:39:37 -06007943if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007944 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007945fi
blueswir184778502008-10-26 20:33:16 +00007946if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007947 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007948fi
bellard5b0753e2005-03-01 21:37:28 +00007949
Alex Bennée716a5072018-04-10 12:19:40 +01007950
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007951# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007952
Juan Quintela4afddb52009-08-03 14:46:45 +02007953cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007954ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007955
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007956disas_config() {
7957 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7958 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7959}
7960
Juan Quintela64656022009-08-03 14:46:53 +02007961for i in $ARCH $TARGET_BASE_ARCH ; do
7962 case "$i" in
7963 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007964 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007965 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007966 aarch64)
7967 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007968 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007969 fi
7970 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007971 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007972 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007973 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007974 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007975 fi
Juan Quintela64656022009-08-03 14:46:53 +02007976 ;;
7977 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007978 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007979 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007980 hppa)
7981 disas_config "HPPA"
7982 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007983 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007984 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007985 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007986 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007987 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007988 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007989 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007990 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007991 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007992 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007993 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007994 ;;
7995 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007996 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007997 if test -n "${cxx}"; then
7998 disas_config "NANOMIPS"
7999 fi
Juan Quintela64656022009-08-03 14:46:53 +02008000 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008001 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008002 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008003 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008004 nios2)
8005 disas_config "NIOS2"
8006 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008007 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008008 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008009 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008010 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008011 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008012 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008013 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008014 disas_config "RISCV"
8015 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008016 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008017 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008018 ;;
8019 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008020 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008021 ;;
8022 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008023 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008024 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008025 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008026 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008027 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008028 esac
8029done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008030if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008031 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008032fi
Juan Quintela64656022009-08-03 14:46:53 +02008033
Juan Quintela6ee71262009-08-03 14:46:47 +02008034case "$ARCH" in
8035alpha)
8036 # Ensure there's only a single GP
8037 cflags="-msmall-data $cflags"
8038;;
8039esac
8040
Juan Quintelad02c1db2009-08-03 14:46:50 +02008041if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008042 if test "$target_linux_user" = "yes" ; then
8043 cflags="-p $cflags"
8044 ldflags="-p $ldflags"
8045 fi
8046 if test "$target_softmmu" = "yes" ; then
8047 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02008048 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008049 fi
8050fi
8051
Eric Blakee633a5c2019-02-04 20:39:37 -06008052if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07008053 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02008054fi
Juan Quintelafa282482009-07-22 22:37:39 +02008055
Christian Borntraegere9a35912017-08-23 12:16:23 +02008056# Newer kernels on s390 check for an S390_PGSTE program header and
8057# enable the pgste page table extensions in that case. This makes
8058# the vm.allocate_pgste sysctl unnecessary. We enable this program
8059# header if
8060# - we build on s390x
8061# - we build the system emulation for s390x (qemu-system-s390x)
8062# - KVM is enabled
8063# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008064if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8065 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008066 if ld_has --s390-pgste ; then
8067 ldflags="-Wl,--s390-pgste $ldflags"
8068 fi
8069fi
8070
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008071echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02008072echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008073
bellard97a847b2003-08-10 21:36:04 +00008074done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008075
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008076echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8077echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8078
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008079if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008080 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008081fi
Richard Hendersone219c492017-09-28 09:01:23 -07008082if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008083 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008084fi
8085if test -n "$LIBCAPSTONE"; then
8086 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8087fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008088
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008089if test "$numa" = "yes"; then
8090 echo "CONFIG_NUMA=y" >> $config_host_mak
8091fi
8092
John Snowfd0e6052015-03-25 18:57:39 -04008093if test "$ccache_cpp2" = "yes"; then
8094 echo "export CCACHE_CPP2=y" >> $config_host_mak
8095fi
8096
Peter Maydelle29e5c62018-11-02 11:52:38 +00008097# If we're using a separate build tree, set it up now.
8098# DIRS are directories which we simply mkdir in the build tree;
8099# LINKS are things to symlink back into the source tree
8100# (these can be both files and directories).
8101# Caution: do not add files or directories here using wildcards. This
8102# will result in problems later if a new file matching the wildcard is
8103# added to the source tree -- nothing will cause configure to be rerun
8104# so the build tree will be missing the link back to the new file, and
8105# tests might fail. Prefer to keep the relevant files in their own
8106# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008107DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8108DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008109DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008110DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008111DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008112LINKS="Makefile"
8113LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8114LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008115LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008116LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008117LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8118LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8119LINKS="$LINKS pc-bios/qemu-icon.bmp"
8120LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008121LINKS="$LINKS tests/acceptance tests/data"
8122LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008123LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008124for bios_file in \
8125 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008126 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008127 $source_path/pc-bios/*.rom \
8128 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008129 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008130 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008131 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008132 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008133 $source_path/pc-bios/palcode-*
8134do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008135 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008136done
8137mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008138for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008139 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008140 symlink "$source_path/$f" "$f"
8141 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008142done
Paul Brook1ad21342009-05-19 16:17:58 +01008143
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008144(for i in $cross_cc_vars; do
8145 export $i
8146done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008147export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008148$source_path/tests/tcg/configure.sh)
8149
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008150# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008151for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008152 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008153 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008154 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008155 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008156 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008157 echo "CC=$cc" >> $config_mak
8158 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008159 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008160 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008161 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008162 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008163 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008164done
8165
Max Reitz76c75602014-05-24 23:24:56 +02008166# set up qemu-iotests in this build directory
8167iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008168
8169echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8170echo >> "$iotests_common_env"
8171echo "export PYTHON='$python'" >> "$iotests_common_env"
8172
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008173# Save the configure command line for later reuse.
8174cat <<EOD >config.status
8175#!/bin/sh
8176# Generated by configure.
8177# Run this file to recreate the current configuration.
8178# Compiler output produced by configure, useful for debugging
8179# configure, is in config.log if it exists.
8180EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008181
8182preserve_env() {
8183 envname=$1
8184
8185 eval envval=\$$envname
8186
8187 if test -n "$envval"
8188 then
8189 echo "$envname='$envval'" >> config.status
8190 echo "export $envname" >> config.status
8191 else
8192 echo "unset $envname" >> config.status
8193 fi
8194}
8195
8196# Preserve various env variables that influence what
8197# features/build target configure will detect
8198preserve_env AR
8199preserve_env AS
8200preserve_env CC
8201preserve_env CPP
8202preserve_env CXX
8203preserve_env INSTALL
8204preserve_env LD
8205preserve_env LD_LIBRARY_PATH
8206preserve_env LIBTOOL
8207preserve_env MAKE
8208preserve_env NM
8209preserve_env OBJCOPY
8210preserve_env PATH
8211preserve_env PKG_CONFIG
8212preserve_env PKG_CONFIG_LIBDIR
8213preserve_env PKG_CONFIG_PATH
8214preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008215preserve_env SDL2_CONFIG
8216preserve_env SMBD
8217preserve_env STRIP
8218preserve_env WINDRES
8219
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008220printf "exec" >>config.status
8221printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008222echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008223chmod +x config.status
8224
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008225rm -r "$TMPDIR1"