blob: 1a8268303b402043db63f14545b2ad011ab17724 [file] [log] [blame]
bellard7d132992003-03-06 23:23:54 +00001#!/bin/sh
2#
bellard3ef693a2003-03-23 20:17:16 +00003# qemu configure script (c) 2003 Fabrice Bellard
bellard7d132992003-03-06 23:23:54 +00004#
Peter Maydell8cd05ab2014-05-23 17:07:24 +01005
Cornelia Huck99519e62014-05-28 12:39:17 +02006# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
John Snow5e4dfd32015-10-28 13:56:40 -040011# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
Peter Maydell8cd05ab2014-05-23 17:07:24 +010014# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
bellard7d132992003-03-06 23:23:54 +000025fi
26
Peter Maydell8cd05ab2014-05-23 17:07:24 +010027TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
Don Slutz66518bf2014-01-02 21:12:46 -050029TMPO="${TMPDIR1}/${TMPB}.o"
Peter Maydell9c83ffd2014-02-25 18:27:49 +000030TMPCXX="${TMPDIR1}/${TMPB}.cxx"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010031TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010032TMPMO="${TMPDIR1}/${TMPB}.mo"
Emilio G. Cota26fffe22018-10-21 13:56:29 -040033TMPTXT="${TMPDIR1}/${TMPB}.txt"
bellard7d132992003-03-06 23:23:54 +000034
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020035rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000036
Peter Maydellb48e3612011-11-23 17:26:44 +000037# Print a helpful header at the top of config.log
38echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000039printf "# Configured with:" >> config.log
40printf " '%s'" "$0" "$@" >> config.log
41echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000042echo "#" >> config.log
43
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020044print_error() {
45 (echo
Peter Maydell76ad07a2013-04-08 12:11:26 +010046 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020051 echo) >&2
52}
53
54error_exit() {
55 print_error "$@"
Peter Maydell76ad07a2013-04-08 12:11:26 +010056 exit 1
57}
58
Peter Maydell9c83ffd2014-02-25 18:27:49 +000059do_compiler() {
60 # Run the compiler, capturing its output to the log. First argument
61 # is compiler binary to execute.
62 local compiler="$1"
63 shift
Ian Jackson8bbe05d2017-09-25 16:41:03 +010064 if test -n "$BASH_VERSION"; then eval '
65 echo >>config.log "
66funcs: ${FUNCNAME[*]}
67lines: ${BASH_LINENO[*]}"
68 '; fi
Peter Maydell9c83ffd2014-02-25 18:27:49 +000069 echo $compiler "$@" >> config.log
70 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010071 # Test passed. If this is an --enable-werror build, rerun
72 # the test with -Werror and bail out if it fails. This
73 # makes warning-generating-errors in configure test code
74 # obvious to developers.
75 if test "$werror" != "yes"; then
76 return 0
77 fi
78 # Don't bother rerunning the compile if we were already using -Werror
79 case "$*" in
80 *-Werror*)
81 return 0
82 ;;
83 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000084 echo $compiler -Werror "$@" >> config.log
85 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010086 error_exit "configure test passed without -Werror but failed with -Werror." \
87 "This is probably a bug in the configure script. The failing command" \
88 "will be at the bottom of config.log." \
89 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010090}
91
Peter Maydell9c83ffd2014-02-25 18:27:49 +000092do_cc() {
93 do_compiler "$cc" "$@"
94}
95
96do_cxx() {
97 do_compiler "$cxx" "$@"
98}
99
100update_cxxflags() {
101 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
102 # options which some versions of GCC's C++ compiler complain about
103 # because they only make sense for C programs.
Paolo Bonzini53422042019-07-29 12:50:04 +0200104 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100105
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000106 for arg in $QEMU_CFLAGS; do
107 case $arg in
108 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
110 ;;
Thomas Huth7be41672019-01-07 11:25:22 +0100111 -std=gnu99)
112 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
113 ;;
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000114 *)
115 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
116 ;;
117 esac
118 done
119}
120
Juan Quintela52166aa2009-08-03 14:46:03 +0200121compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400122 local_cflags="$1"
123 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200124}
125
126compile_prog() {
127 local_cflags="$1"
128 local_ldflags="$2"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100129 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200130}
131
Paolo Bonzini11568d62010-12-23 11:43:58 +0100132# symbolically link $1 to $2. Portable version of "ln -sf".
133symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100134 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800135 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100136 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100137}
138
Loïc Minier0dba6192010-01-28 21:26:51 +0000139# check whether a command is available to this shell (may be either an
140# executable or a builtin)
141has() {
142 type "$1" >/dev/null 2>&1
143}
144
145# search for an executable in PATH
146path_of() {
147 local_command="$1"
148 local_ifs="$IFS"
149 local_dir=""
150
151 # pathname has a dir component?
152 if [ "${local_command#*/}" != "$local_command" ]; then
153 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
154 echo "$local_command"
155 return 0
156 fi
157 fi
158 if [ -z "$local_command" ]; then
159 return 1
160 fi
161
162 IFS=:
163 for local_dir in $PATH; do
164 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
165 echo "$local_dir/$local_command"
166 IFS="${local_ifs:-$(printf ' \t\n')}"
167 return 0
168 fi
169 done
170 # not found
171 IFS="${local_ifs:-$(printf ' \t\n')}"
172 return 1
173}
174
Lluís Vilanova5b808272014-05-27 15:02:14 +0200175have_backend () {
176 echo "$trace_backends" | grep "$1" >/dev/null
177}
178
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200179glob() {
180 eval test -z '"${1#'"$2"'}"'
181}
182
183supported_hax_target() {
184 test "$hax" = "yes" || return 1
185 glob "$1" "*-softmmu" || return 1
186 case "${1%-softmmu}" in
187 i386|x86_64)
188 return 0
189 ;;
190 esac
191 return 1
192}
193
194supported_kvm_target() {
195 test "$kvm" = "yes" || return 1
196 glob "$1" "*-softmmu" || return 1
197 case "${1%-softmmu}:$cpu" in
198 arm:arm | aarch64:aarch64 | \
199 i386:i386 | i386:x86_64 | i386:x32 | \
200 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
201 mips:mips | mipsel:mips | \
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700202 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200203 s390x:s390x)
204 return 0
205 ;;
206 esac
207 return 1
208}
209
210supported_xen_target() {
211 test "$xen" = "yes" || return 1
212 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200213 # Only i386 and x86_64 provide the xenpv machine.
214 case "${1%-softmmu}" in
215 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200216 return 0
217 ;;
218 esac
219 return 1
220}
221
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500222supported_hvf_target() {
223 test "$hvf" = "yes" || return 1
224 glob "$1" "*-softmmu" || return 1
225 case "${1%-softmmu}" in
226 x86_64)
227 return 0
228 ;;
229 esac
230 return 1
231}
232
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800233supported_whpx_target() {
234 test "$whpx" = "yes" || return 1
235 glob "$1" "*-softmmu" || return 1
236 case "${1%-softmmu}" in
237 i386|x86_64)
238 return 0
239 ;;
240 esac
241 return 1
242}
243
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200244supported_target() {
245 case "$1" in
246 *-softmmu)
247 ;;
248 *-linux-user)
249 if test "$linux" != "yes"; then
250 print_error "Target '$target' is only available on a Linux host"
251 return 1
252 fi
253 ;;
254 *-bsd-user)
255 if test "$bsd" != "yes"; then
256 print_error "Target '$target' is only available on a BSD host"
257 return 1
258 fi
259 ;;
260 *)
261 print_error "Invalid target name '$target'"
262 return 1
263 ;;
264 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200265 test "$tcg" = "yes" && return 0
266 supported_kvm_target "$1" && return 0
267 supported_xen_target "$1" && return 0
268 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500269 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800270 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200271 print_error "TCG disabled, but hardware accelerator not available for '$target'"
272 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200273}
274
Christian Borntraegere9a35912017-08-23 12:16:23 +0200275
276ld_has() {
277 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
278}
279
Peter Maydell79d77bc2019-04-29 17:35:57 +0100280# make source path absolute
Antonio Ospite14211822019-05-26 16:47:46 +0200281source_path=$(cd "$(dirname -- "$0")"; pwd)
282
Antonio Ospite4ace32e2019-05-26 16:47:47 +0200283if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
284then
285 error_exit "main directory cannot contain spaces nor colons"
286fi
287
Antonio Ospite14211822019-05-26 16:47:46 +0200288# default parameters
Juan Quintela2ff6b912009-08-03 14:45:55 +0200289cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300290iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000291interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000292static="no"
bellard7d132992003-03-06 23:23:54 +0000293cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000294audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800295block_drv_rw_whitelist=""
296block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000297host_cc="cc"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +0100298libs_cpu=""
Juan Quintela73da3752009-08-03 14:46:26 +0200299libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200300libs_tools=""
malcd5631632009-10-10 01:13:41 +0400301audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500302libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100303debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100304stack_protector=""
Alex Bennéeafc3a8f2019-11-28 16:35:24 +0100305use_containers="yes"
aliguoriac0df512008-12-29 17:14:15 +0000306
Daniel P. Berrange92712822017-09-29 11:11:58 +0100307if test -e "$source_path/.git"
308then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100309 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100310 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500311 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
312 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100313else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100314 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100315 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100316
317 if ! test -f "$source_path/ui/keycodemapdb/README"
318 then
319 echo
320 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
321 echo
322 echo "This is not a GIT checkout but module content appears to"
323 echo "be missing. Do not use 'git archive' or GitHub download links"
324 echo "to acquire QEMU source archives. Non-GIT builds are only"
325 echo "supported with source archives linked from:"
326 echo
Peter Maydella3e3b522019-07-22 14:07:39 +0100327 echo " https://www.qemu.org/download/#source"
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100328 echo
329 echo "Developers working with GIT can use scripts/archive-source.sh"
330 echo "if they need to create valid source archives."
331 echo
332 exit 1
333 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100334fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100335git="git"
aliguoriac0df512008-12-29 17:14:15 +0000336
Stefan Weilafb63eb2012-09-26 22:04:38 +0200337# Don't accept a target_list environment variable.
338unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000339unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100340
341# Default value for a variable defining feature "foo".
342# * foo="no" feature will only be used if --enable-foo arg is given
343# * foo="" feature will be searched for, and if found, will be used
344# unless --disable-foo is given
345# * foo="yes" this value will only be set by --enable-foo flag.
346# feature will searched for,
347# if not found, configure exits with error
348#
349# Always add --enable-foo and --disable-foo command line args.
350# Distributions want to ensure that several features are compiled in, and it
351# is impossible without a --enable-foo that exits if a feature is not found.
352
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353brlapi=""
354curl=""
355curses=""
356docs=""
357fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100358netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100359sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000360sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530361virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200362mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100363vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366vnc_sasl=""
367vnc_jpeg=""
368vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200369xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100370xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000371xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000372xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100373linux_aio=""
Aarushi Mehtac10dd852020-01-20 14:18:44 +0000374linux_io_uring=""
Corey Bryant47e98652012-01-26 09:42:26 -0500375cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100376attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200377libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100378xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200379tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100380membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100381vhost_net=""
382vhost_crypto=""
383vhost_scsi=""
384vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200385vhost_user=""
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +0100386vhost_user_fs=""
Bradd41a75a2011-07-26 23:11:26 -0400387kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100388hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500389hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800390whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400391rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300392pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100393gprof="no"
394debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100395debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100396sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500397fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100398strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200399tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100400bigendian="no"
401mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000402gcov="no"
403gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100404EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800405DSOSUF=".so"
406LDFLAGS_SHARED="-shared"
407modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100408prefix="/usr/local"
409mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300410datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200411firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300412qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100413bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300414libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400415libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200416includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100417sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300418local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100419confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100420slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100421oss_lib=""
422bsd="no"
423linux="no"
424solaris="no"
425profiler="no"
426cocoa="no"
427softmmu="yes"
428linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100429bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100430blobs="yes"
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +0100431edk2_blobs="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100432pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200433pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200434qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300435trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100436trace_file="trace"
437spice=""
438rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200439smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100440libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200441usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100442opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100443opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000444cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100445avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300446zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700447capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200448lzo=""
449snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100450bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200451lzfse=""
Juan Quintela3a678482019-12-17 21:15:24 +0100452zstd=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400453guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400454guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500455guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300456guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400457vss_win32_sdk=""
458win_sdk="no"
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +0100459want_tools=""
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100460libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100461libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100462coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200463coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200464debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400465crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300466seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530467glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400468glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530469glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530470glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530471glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100472glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100473glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600474gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200475gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100476tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100477gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100478nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100479nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100480gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800481gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100482gcrypt_xts="no"
483qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100484auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100485vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200486virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800487tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200488libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100489live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800490numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800491tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200492jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800493replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700494vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100495bochs="yes"
496cloop="yes"
497dmg="yes"
498qcow1="yes"
499vdi="yes"
500vvfat="yes"
501qed="yes"
502parallels="yes"
503sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300504libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200505debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800506libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800507default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100508plugins="no"
Alexander Bulekovadc28022020-02-19 23:11:14 -0500509fuzzing="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100510
Peter Maydell898be3e2017-03-21 14:31:57 +0000511supported_cpu="no"
512supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100513bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800514malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000515
aliguoriac0df512008-12-29 17:14:15 +0000516# parse CC options first
517for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200518 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000519 case "$opt" in
520 --cross-prefix=*) cross_prefix="$optarg"
521 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100522 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000523 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400524 --cxx=*) CXX="$optarg"
525 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200526 --cpu=*) cpu="$optarg"
527 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100528 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100529 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200530 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100531 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100532 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100533 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100534 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200535 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100536 --enable-debug-info) debug_info="yes"
537 ;;
538 --disable-debug-info) debug_info="no"
539 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100540 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
541 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100542 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
543 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200544 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100545 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100546 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200547 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100548 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200549 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100550 ;;
aliguoriac0df512008-12-29 17:14:15 +0000551 esac
552done
aliguoriac0df512008-12-29 17:14:15 +0000553# OS specific
554# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100555# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000556
Peter Maydelle49d0212012-12-07 15:39:13 +0000557# Preferred compiler:
558# ${CC} (if set)
559# ${cross_prefix}gcc (if cross-prefix specified)
560# system compiler
561if test -z "${CC}${cross_prefix}"; then
562 cc="$host_cc"
563else
564 cc="${CC-${cross_prefix}gcc}"
565fi
566
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400567if test -z "${CXX}${cross_prefix}"; then
568 cxx="c++"
569else
570 cxx="${CXX-${cross_prefix}g++}"
571fi
572
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500573ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700574as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700575ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000576cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500577objcopy="${OBJCOPY-${cross_prefix}objcopy}"
578ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800579ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200580nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500581strip="${STRIP-${cross_prefix}strip}"
582windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300583pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
584query_pkg_config() {
585 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
586}
587pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000588sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000589
Peter Maydell45d285a2013-10-21 21:03:06 +0100590# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
591ARFLAGS="${ARFLAGS-rv}"
592
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200593# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100594# We use -fwrapv to tell the compiler that we require a C dialect where
595# left shift of signed integers is well defined and has the expected
596# 2s-complement style results. (Both clang and gcc agree that it
597# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100598QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400599QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100600QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200601QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200602QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200603QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100604if test "$debug_info" = "yes"; then
605 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100606fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200607
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300608# running configure in the source tree?
609# we know that's the case if configure is there.
610if test -f "./configure"; then
611 pwd_is_source_path="y"
612else
613 pwd_is_source_path="n"
614fi
615
aliguoriac0df512008-12-29 17:14:15 +0000616check_define() {
617cat > $TMPC <<EOF
618#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000619#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000620#endif
621int main(void) { return 0; }
622EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200623 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000624}
625
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200626check_include() {
627cat > $TMPC <<EOF
628#include <$1>
629int main(void) { return 0; }
630EOF
631 compile_object
632}
633
John Snow93b25862015-03-25 18:57:37 -0400634write_c_skeleton() {
635 cat > $TMPC <<EOF
636int main(void) { return 0; }
637EOF
638}
639
Alexander Bulekovadc28022020-02-19 23:11:14 -0500640write_c_fuzzer_skeleton() {
641 cat > $TMPC <<EOF
642#include <stdint.h>
643#include <sys/types.h>
644int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
645int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
646EOF
647}
648
Peter Maydellbbea4052012-08-14 15:35:34 +0100649if check_define __linux__ ; then
650 targetos="Linux"
651elif check_define _WIN32 ; then
652 targetos='MINGW32'
653elif check_define __OpenBSD__ ; then
654 targetos='OpenBSD'
655elif check_define __sun__ ; then
656 targetos='SunOS'
657elif check_define __HAIKU__ ; then
658 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100659elif check_define __FreeBSD__ ; then
660 targetos='FreeBSD'
661elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
662 targetos='GNU/kFreeBSD'
663elif check_define __DragonFly__ ; then
664 targetos='DragonFly'
665elif check_define __NetBSD__; then
666 targetos='NetBSD'
667elif check_define __APPLE__; then
668 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100669else
Peter Maydell951fedf2017-07-13 16:15:32 +0100670 # This is a fatal error, but don't report it yet, because we
671 # might be going to just print the --help text, or it might
672 # be the result of a missing compiler.
673 targetos='bogus'
674 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100675fi
676
677# Some host OSes need non-standard checks for which CPU to use.
678# Note that these checks are broken for cross-compilation: if you're
679# cross-compiling to one of these OSes then you'll need to specify
680# the correct CPU with the --cpu option.
681case $targetos in
682Darwin)
683 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
684 # run 64-bit userspace code.
685 # If the user didn't specify a CPU explicitly and the kernel says this is
686 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
687 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
688 cpu="x86_64"
689 fi
690 ;;
691SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200692 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100693 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
694 cpu="x86_64"
695 fi
696esac
697
Juan Quintela2ff6b912009-08-03 14:45:55 +0200698if test ! -z "$cpu" ; then
699 # command line argument
700 :
701elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000702 cpu="i386"
703elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700704 if check_define __ILP32__ ; then
705 cpu="x32"
706 else
707 cpu="x86_64"
708 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000709elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000710 if check_define __arch64__ ; then
711 cpu="sparc64"
712 else
713 cpu="sparc"
714 fi
malcfdf7ed92009-01-14 18:39:52 +0000715elif check_define _ARCH_PPC ; then
716 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700717 if check_define _LITTLE_ENDIAN ; then
718 cpu="ppc64le"
719 else
720 cpu="ppc64"
721 fi
malcfdf7ed92009-01-14 18:39:52 +0000722 else
723 cpu="ppc"
724 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200725elif check_define __mips__ ; then
726 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200727elif check_define __s390__ ; then
728 if check_define __s390x__ ; then
729 cpu="s390x"
730 else
731 cpu="s390"
732 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000733elif check_define __riscv ; then
734 if check_define _LP64 ; then
735 cpu="riscv64"
736 else
737 cpu="riscv32"
738 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100739elif check_define __arm__ ; then
740 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100741elif check_define __aarch64__ ; then
742 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000743else
Stefan Weil89138852016-05-16 15:10:20 +0200744 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000745fi
746
Peter Maydell359bc952011-12-24 13:07:25 +0000747ARCH=
748# Normalise host CPU name and set ARCH.
749# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000750case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200751 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000752 supported_cpu="yes"
753 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700754 ppc64le)
755 ARCH="ppc64"
756 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700757 ;;
bellard7d132992003-03-06 23:23:54 +0000758 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000759 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000760 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000761 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000762 x86_64|amd64)
763 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000764 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000765 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100766 armv*b|armv*l|arm)
767 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000768 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000769 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100770 aarch64)
771 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000772 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100773 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200774 mips*)
775 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000776 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200777 ;;
blueswir131422552007-04-16 18:27:06 +0000778 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000779 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100780 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000781 ;;
bellard7d132992003-03-06 23:23:54 +0000782 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000783 # This will result in either an error or falling back to TCI later
784 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000785 ;;
786esac
Peter Maydell359bc952011-12-24 13:07:25 +0000787if test -z "$ARCH"; then
788 ARCH="$cpu"
789fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200790
bellard7d132992003-03-06 23:23:54 +0000791# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200792
Stacey Sonadfc3e92014-06-08 09:57:22 -0700793# host *BSD for user mode
794HOST_VARIANT_DIR=""
795
bellard7d132992003-03-06 23:23:54 +0000796case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000797MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200798 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100799 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100800 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200801 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200802 if check_include dsound.h; then
803 audio_drv_list="dsound"
804 else
805 audio_drv_list=""
806 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000807 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000808;;
ths5c40d2b2007-06-23 16:03:36 +0000809GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100810 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100811 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200812 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000813;;
bellard7d3505c2004-05-12 19:32:15 +0000814FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200815 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100816 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100817 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200818 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100819 # needed for kinfo_getvmmap(3) in libutil.h
820 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500821 # needed for kinfo_getproc
822 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100823 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700824 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000825 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000826;;
blueswir1c5e97232009-03-07 20:06:23 +0000827DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200828 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100829 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100830 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200831 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700832 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000833;;
bellard7d3505c2004-05-12 19:32:15 +0000834NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200835 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100836 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100837 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100838 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200839 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200840 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700841 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200842 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000843;;
844OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200845 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100846 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100847 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200848 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700849 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500850 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000851;;
bellard83fb7ad2004-07-05 21:25:26 +0000852Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200853 bsd="yes"
854 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100855 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500856 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800857 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200858 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200859 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100860 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200861 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200862 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100863 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200864 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100865 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200866 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100867 # Disable attempts to use ObjectiveC features in os/object.h since they
868 # won't work when we're compiling with gcc as a C compiler.
869 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700870 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000871 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000872;;
bellardec530c82006-04-25 22:36:06 +0000873SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200874 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100875 make="${MAKE-gmake}"
876 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400877 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200878 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100879 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200880 fi
881 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000882# needed for CMSG_ macros in sys/socket.h
883 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
884# needed for TIOCWIN* defines in termios.h
885 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200886 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200887 solarisnetlibs="-lsocket -lnsl -lresolv"
888 LIBS="$solarisnetlibs $LIBS"
889 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000890;;
Andreas Färber179cf402010-09-20 00:50:43 +0200891Haiku)
892 haiku="yes"
893 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
894 LIBS="-lposix_error_mapper -lnetwork $LIBS"
895;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000896Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100897 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200898 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200899 linux="yes"
900 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200901 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600902 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000903 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200904 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000905;;
bellard7d132992003-03-06 23:23:54 +0000906esac
907
bellard7d3505c2004-05-12 19:32:15 +0000908if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000909 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200910 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000911 fi
bellard7d3505c2004-05-12 19:32:15 +0000912fi
913
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100914: ${make=${MAKE-make}}
915: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000916# We prefer python 3.x. A bare 'python' is traditionally
917# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300918# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000919python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300920for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000921do
922 if has "$binary"
923 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200924 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000925 break
926 fi
927done
Markus Armbruster903458c2020-02-14 18:18:41 +0100928
929sphinx_build=
930for binary in sphinx-build-3 sphinx-build
931do
932 if has "$binary"
933 then
934 sphinx_build=$(command -v "$binary")
935 break
936 fi
937done
938
Alex Bennée39d87c82020-03-03 15:06:20 +0000939# Check for ancillary tools used in testing
940genisoimage=
941for binary in genisoimage
942do
943 if has $binary
944 then
945 genisoimage=$(command -v "$binary")
946 break
947 fi
948done
949
Brade2d88302011-09-02 16:53:28 -0400950: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100951
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100952# Default objcc to clang if available, otherwise use CC
953if has clang; then
954 objcc=clang
955else
956 objcc="$cc"
957fi
958
Juan Quintela3457a3f2009-08-03 14:46:07 +0200959if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200960 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800961 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100962 # MinGW needs -mthreads for TLS and macro _MT.
963 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100964 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400965 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100966 if compile_prog "" "-liberty" ; then
967 LIBS="-liberty $LIBS"
968 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200969 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200970 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300971 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300972 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200973 bindir="\${prefix}"
974 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200975 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200976 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300977 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200978fi
979
Anthony Liguori487fefd2009-06-11 13:28:25 -0500980werror=""
bellard85aa5182007-11-11 20:17:03 +0000981
bellard7d132992003-03-06 23:23:54 +0000982for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200983 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000984 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000985 --help|-h) show_help=yes
986 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400987 --version|-V) exec cat $source_path/VERSION
988 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000989 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000990 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000991 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000992 ;;
aliguoriac0df512008-12-29 17:14:15 +0000993 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000994 ;;
aliguoriac0df512008-12-29 17:14:15 +0000995 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000996 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000997 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000998 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400999 --cxx=*)
1000 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +02001001 --iasl=*) iasl="$optarg"
1002 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +01001003 --objcc=*) objcc="$optarg"
1004 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001005 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +00001006 ;;
pbrook6a882642006-04-17 13:57:12 +00001007 --install=*) install="$optarg"
1008 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +00001009 --python=*) python="$optarg"
1010 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001011 --sphinx-build=*) sphinx_build="$optarg"
1012 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001013 --gcov=*) gcov_tool="$optarg"
1014 ;;
Brade2d88302011-09-02 16:53:28 -04001015 --smbd=*) smbd="$optarg"
1016 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001017 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001018 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001019 --extra-cxxflags=*)
1020 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001021 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001022 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001023 --enable-debug-info)
1024 ;;
1025 --disable-debug-info)
1026 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001027 --cross-cc-*)
1028 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001029 --enable-modules)
1030 modules="yes"
1031 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001032 --disable-modules)
1033 modules="no"
1034 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001035 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001036 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001037 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001038 if test "$target_list_exclude"; then
1039 error_exit "Can't mix --target-list with --target-list-exclude"
1040 fi
1041 ;;
1042 --target-list-exclude=*) target_list_exclude="$optarg"
1043 if test "$target_list"; then
1044 error_exit "Can't mix --target-list-exclude with --target-list"
1045 fi
bellardde83cd02003-06-15 20:25:43 +00001046 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001047 --enable-trace-backends=*) trace_backends="$optarg"
1048 ;;
1049 # XXX: backwards compatibility
1050 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001051 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001052 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001053 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001054 --with-default-devices) default_devices="yes"
1055 ;;
1056 --without-default-devices) default_devices="no"
1057 ;;
bellard7d132992003-03-06 23:23:54 +00001058 --enable-gprof) gprof="yes"
1059 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001060 --enable-gcov) gcov="yes"
1061 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001062 --static)
1063 static="yes"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001064 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001065 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001066 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001067 --mandir=*) mandir="$optarg"
1068 ;;
1069 --bindir=*) bindir="$optarg"
1070 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001071 --libdir=*) libdir="$optarg"
1072 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001073 --libexecdir=*) libexecdir="$optarg"
1074 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001075 --includedir=*) includedir="$optarg"
1076 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001077 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001078 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001079 --with-confsuffix=*) confsuffix="$optarg"
1080 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001081 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001082 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001083 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001084 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001085 --localstatedir=*) local_statedir="$optarg"
1086 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001087 --firmwarepath=*) firmwarepath="$optarg"
1088 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001089 --host=*|--build=*|\
1090 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001091 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001092 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1093 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1094 # These switches are silently ignored, for compatibility with
1095 # autoconf-generated configure scripts. This allows QEMU's
1096 # configure to be used by RPM and similar macros that set
1097 # lots of directory switches by default.
1098 ;;
bellard97a847b2003-08-10 21:36:04 +00001099 --disable-sdl) sdl="no"
1100 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001101 --enable-sdl) sdl="yes"
1102 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001103 --disable-sdl-image) sdl_image="no"
1104 ;;
1105 --enable-sdl-image) sdl_image="yes"
1106 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001107 --disable-qom-cast-debug) qom_cast_debug="no"
1108 ;;
1109 --enable-qom-cast-debug) qom_cast_debug="yes"
1110 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301111 --disable-virtfs) virtfs="no"
1112 ;;
1113 --enable-virtfs) virtfs="yes"
1114 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001115 --disable-mpath) mpath="no"
1116 ;;
1117 --enable-mpath) mpath="yes"
1118 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001119 --disable-vnc) vnc="no"
1120 ;;
1121 --enable-vnc) vnc="yes"
1122 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001123 --oss-lib=*) oss_lib="$optarg"
1124 ;;
malc0c58ac12008-06-25 21:04:05 +00001125 --audio-drv-list=*) audio_drv_list="$optarg"
1126 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001127 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001128 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001129 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001130 ;;
aurel32f8393942009-04-13 18:45:38 +00001131 --enable-debug-tcg) debug_tcg="yes"
1132 ;;
1133 --disable-debug-tcg) debug_tcg="no"
1134 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001135 --enable-debug)
1136 # Enable debugging options that aren't excessively noisy
1137 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001138 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001139 debug="yes"
1140 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001141 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001142 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001143 --enable-sanitizers) sanitizers="yes"
1144 ;;
1145 --disable-sanitizers) sanitizers="no"
1146 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001147 --enable-sparse) sparse="yes"
1148 ;;
1149 --disable-sparse) sparse="no"
1150 ;;
aliguori1625af82009-04-05 17:41:02 +00001151 --disable-strip) strip_opt="no"
1152 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001153 --disable-vnc-sasl) vnc_sasl="no"
1154 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001155 --enable-vnc-sasl) vnc_sasl="yes"
1156 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001157 --disable-vnc-jpeg) vnc_jpeg="no"
1158 ;;
1159 --enable-vnc-jpeg) vnc_jpeg="yes"
1160 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001161 --disable-vnc-png) vnc_png="no"
1162 ;;
1163 --enable-vnc-png) vnc_png="yes"
1164 ;;
bellard443f1372004-06-04 11:13:20 +00001165 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001166 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001167 --enable-slirp=git) slirp="git"
1168 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001169 --enable-slirp=system) slirp="system"
1170 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001171 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001172 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001173 --enable-vde) vde="yes"
1174 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001175 --disable-netmap) netmap="no"
1176 ;;
1177 --enable-netmap) netmap="yes"
1178 ;;
aliguorie37630c2009-04-22 15:19:10 +00001179 --disable-xen) xen="no"
1180 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001181 --enable-xen) xen="yes"
1182 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001183 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1184 ;;
1185 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1186 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001187 --disable-brlapi) brlapi="no"
1188 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001189 --enable-brlapi) brlapi="yes"
1190 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001191 --disable-kvm) kvm="no"
1192 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001193 --enable-kvm) kvm="yes"
1194 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001195 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001196 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001197 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001198 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001199 --disable-hvf) hvf="no"
1200 ;;
1201 --enable-hvf) hvf="yes"
1202 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001203 --disable-whpx) whpx="no"
1204 ;;
1205 --enable-whpx) whpx="yes"
1206 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001207 --disable-tcg-interpreter) tcg_interpreter="no"
1208 ;;
1209 --enable-tcg-interpreter) tcg_interpreter="yes"
1210 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001211 --disable-cap-ng) cap_ng="no"
1212 ;;
1213 --enable-cap-ng) cap_ng="yes"
1214 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001215 --disable-tcg) tcg="no"
1216 ;;
1217 --enable-tcg) tcg="yes"
1218 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001219 --disable-malloc-trim) malloc_trim="no"
1220 ;;
1221 --enable-malloc-trim) malloc_trim="yes"
1222 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001223 --disable-spice) spice="no"
1224 ;;
1225 --enable-spice) spice="yes"
1226 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001227 --disable-libiscsi) libiscsi="no"
1228 ;;
1229 --enable-libiscsi) libiscsi="yes"
1230 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001231 --disable-libnfs) libnfs="no"
1232 ;;
1233 --enable-libnfs) libnfs="yes"
1234 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001235 --enable-profiler) profiler="yes"
1236 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001237 --disable-cocoa) cocoa="no"
1238 ;;
malcc2de5c92008-06-28 19:13:06 +00001239 --enable-cocoa)
1240 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001241 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001242 ;;
pbrookcad25d62006-03-19 16:31:11 +00001243 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001244 ;;
pbrookcad25d62006-03-19 16:31:11 +00001245 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001246 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001247 --disable-user)
1248 linux_user="no" ;
1249 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001250 ;;
1251 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001252 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001253 ;;
ths831b7822007-01-18 20:06:33 +00001254 --enable-linux-user) linux_user="yes"
1255 ;;
blueswir184778502008-10-26 20:33:16 +00001256 --disable-bsd-user) bsd_user="no"
1257 ;;
1258 --enable-bsd-user) bsd_user="yes"
1259 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001260 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001261 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001262 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001263 ;;
bellard85aa5182007-11-11 20:17:03 +00001264 --enable-werror) werror="yes"
1265 ;;
1266 --disable-werror) werror="no"
1267 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001268 --enable-stack-protector) stack_protector="yes"
1269 ;;
1270 --disable-stack-protector) stack_protector="no"
1271 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001272 --disable-curses) curses="no"
1273 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001274 --enable-curses) curses="yes"
1275 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001276 --disable-iconv) iconv="no"
1277 ;;
1278 --enable-iconv) iconv="yes"
1279 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001280 --disable-curl) curl="no"
1281 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001282 --enable-curl) curl="yes"
1283 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001284 --disable-fdt) fdt="no"
1285 ;;
1286 --enable-fdt) fdt="yes"
1287 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001288 --disable-linux-aio) linux_aio="no"
1289 ;;
1290 --enable-linux-aio) linux_aio="yes"
1291 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001292 --disable-linux-io-uring) linux_io_uring="no"
1293 ;;
1294 --enable-linux-io-uring) linux_io_uring="yes"
1295 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001296 --disable-attr) attr="no"
1297 ;;
1298 --enable-attr) attr="yes"
1299 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001300 --disable-membarrier) membarrier="no"
1301 ;;
1302 --enable-membarrier) membarrier="yes"
1303 ;;
ths77755342008-11-27 15:45:16 +00001304 --disable-blobs) blobs="no"
1305 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001306 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001307 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001308 --with-coroutine=*) coroutine="$optarg"
1309 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001310 --disable-coroutine-pool) coroutine_pool="no"
1311 ;;
1312 --enable-coroutine-pool) coroutine_pool="yes"
1313 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001314 --enable-debug-stack-usage) debug_stack_usage="yes"
1315 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001316 --enable-crypto-afalg) crypto_afalg="yes"
1317 ;;
1318 --disable-crypto-afalg) crypto_afalg="no"
1319 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001320 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001321 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001322 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001323 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001324 --disable-vhost-net) vhost_net="no"
1325 ;;
1326 --enable-vhost-net) vhost_net="yes"
1327 ;;
Gonglei042cea22018-03-01 21:46:28 +08001328 --disable-vhost-crypto) vhost_crypto="no"
1329 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001330 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001331 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001332 --disable-vhost-scsi) vhost_scsi="no"
1333 ;;
1334 --enable-vhost-scsi) vhost_scsi="yes"
1335 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001336 --disable-vhost-vsock) vhost_vsock="no"
1337 ;;
1338 --enable-vhost-vsock) vhost_vsock="yes"
1339 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001340 --disable-vhost-user-fs) vhost_user_fs="no"
1341 ;;
1342 --enable-vhost-user-fs) vhost_user_fs="yes"
1343 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001344 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001345 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001346 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001347 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001348 --disable-rbd) rbd="no"
1349 ;;
1350 --enable-rbd) rbd="yes"
1351 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001352 --disable-xfsctl) xfs="no"
1353 ;;
1354 --enable-xfsctl) xfs="yes"
1355 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001356 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001357 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001358 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001359 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001360 --disable-libusb) libusb="no"
1361 ;;
1362 --enable-libusb) libusb="yes"
1363 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001364 --disable-usb-redir) usb_redir="no"
1365 ;;
1366 --enable-usb-redir) usb_redir="yes"
1367 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001368 --disable-zlib-test) zlib="no"
1369 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001370 --disable-lzo) lzo="no"
1371 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001372 --enable-lzo) lzo="yes"
1373 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001374 --disable-snappy) snappy="no"
1375 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001376 --enable-snappy) snappy="yes"
1377 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001378 --disable-bzip2) bzip2="no"
1379 ;;
1380 --enable-bzip2) bzip2="yes"
1381 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001382 --enable-lzfse) lzfse="yes"
1383 ;;
1384 --disable-lzfse) lzfse="no"
1385 ;;
Juan Quintela3a678482019-12-17 21:15:24 +01001386 --disable-zstd) zstd="no"
1387 ;;
1388 --enable-zstd) zstd="yes"
1389 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001390 --enable-guest-agent) guest_agent="yes"
1391 ;;
1392 --disable-guest-agent) guest_agent="no"
1393 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001394 --enable-guest-agent-msi) guest_agent_msi="yes"
1395 ;;
1396 --disable-guest-agent-msi) guest_agent_msi="no"
1397 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001398 --with-vss-sdk) vss_win32_sdk=""
1399 ;;
1400 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1401 ;;
1402 --without-vss-sdk) vss_win32_sdk="no"
1403 ;;
1404 --with-win-sdk) win_sdk=""
1405 ;;
1406 --with-win-sdk=*) win_sdk="$optarg"
1407 ;;
1408 --without-win-sdk) win_sdk="no"
1409 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001410 --enable-tools) want_tools="yes"
1411 ;;
1412 --disable-tools) want_tools="no"
1413 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001414 --enable-seccomp) seccomp="yes"
1415 ;;
1416 --disable-seccomp) seccomp="no"
1417 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301418 --disable-glusterfs) glusterfs="no"
1419 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001420 --disable-avx2) avx2_opt="no"
1421 ;;
1422 --enable-avx2) avx2_opt="yes"
1423 ;;
Robert Hoo6b8cd442020-02-29 20:34:34 +08001424 --disable-avx512f) avx512f_opt="no"
1425 ;;
1426 --enable-avx512f) avx512f_opt="yes"
1427 ;;
1428
Bharata B Raoeb100392012-09-24 14:42:45 +05301429 --enable-glusterfs) glusterfs="yes"
1430 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001431 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1432 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001433 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001434 --enable-vhdx|--disable-vhdx)
1435 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1436 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001437 --enable-uuid|--disable-uuid)
1438 echo "$0: $opt is obsolete, UUID support is always built" >&2
1439 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001440 --disable-gtk) gtk="no"
1441 ;;
1442 --enable-gtk) gtk="yes"
1443 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001444 --tls-priority=*) tls_priority="$optarg"
1445 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001446 --disable-gnutls) gnutls="no"
1447 ;;
1448 --enable-gnutls) gnutls="yes"
1449 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001450 --disable-nettle) nettle="no"
1451 ;;
1452 --enable-nettle) nettle="yes"
1453 ;;
1454 --disable-gcrypt) gcrypt="no"
1455 ;;
1456 --enable-gcrypt) gcrypt="yes"
1457 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001458 --disable-auth-pam) auth_pam="no"
1459 ;;
1460 --enable-auth-pam) auth_pam="yes"
1461 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001462 --enable-rdma) rdma="yes"
1463 ;;
1464 --disable-rdma) rdma="no"
1465 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001466 --enable-pvrdma) pvrdma="yes"
1467 ;;
1468 --disable-pvrdma) pvrdma="no"
1469 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001470 --disable-vte) vte="no"
1471 ;;
1472 --enable-vte) vte="yes"
1473 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001474 --disable-virglrenderer) virglrenderer="no"
1475 ;;
1476 --enable-virglrenderer) virglrenderer="yes"
1477 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001478 --disable-tpm) tpm="no"
1479 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001480 --enable-tpm) tpm="yes"
1481 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001482 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001483 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001484 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001485 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001486 --disable-live-block-migration) live_block_migration="no"
1487 ;;
1488 --enable-live-block-migration) live_block_migration="yes"
1489 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001490 --disable-numa) numa="no"
1491 ;;
1492 --enable-numa) numa="yes"
1493 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001494 --disable-libxml2) libxml2="no"
1495 ;;
1496 --enable-libxml2) libxml2="yes"
1497 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001498 --disable-tcmalloc) tcmalloc="no"
1499 ;;
1500 --enable-tcmalloc) tcmalloc="yes"
1501 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001502 --disable-jemalloc) jemalloc="no"
1503 ;;
1504 --enable-jemalloc) jemalloc="yes"
1505 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001506 --disable-replication) replication="no"
1507 ;;
1508 --enable-replication) replication="yes"
1509 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001510 --disable-vxhs) vxhs="no"
1511 ;;
1512 --enable-vxhs) vxhs="yes"
1513 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001514 --disable-bochs) bochs="no"
1515 ;;
1516 --enable-bochs) bochs="yes"
1517 ;;
1518 --disable-cloop) cloop="no"
1519 ;;
1520 --enable-cloop) cloop="yes"
1521 ;;
1522 --disable-dmg) dmg="no"
1523 ;;
1524 --enable-dmg) dmg="yes"
1525 ;;
1526 --disable-qcow1) qcow1="no"
1527 ;;
1528 --enable-qcow1) qcow1="yes"
1529 ;;
1530 --disable-vdi) vdi="no"
1531 ;;
1532 --enable-vdi) vdi="yes"
1533 ;;
1534 --disable-vvfat) vvfat="no"
1535 ;;
1536 --enable-vvfat) vvfat="yes"
1537 ;;
1538 --disable-qed) qed="no"
1539 ;;
1540 --enable-qed) qed="yes"
1541 ;;
1542 --disable-parallels) parallels="no"
1543 ;;
1544 --enable-parallels) parallels="yes"
1545 ;;
1546 --disable-sheepdog) sheepdog="no"
1547 ;;
1548 --enable-sheepdog) sheepdog="yes"
1549 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001550 --disable-vhost-user) vhost_user="no"
1551 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001552 --enable-vhost-user) vhost_user="yes"
1553 ;;
1554 --disable-vhost-kernel) vhost_kernel="no"
1555 ;;
1556 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001557 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001558 --disable-capstone) capstone="no"
1559 ;;
1560 --enable-capstone) capstone="yes"
1561 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001562 --enable-capstone=git) capstone="git"
1563 ;;
1564 --enable-capstone=system) capstone="system"
1565 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001566 --with-git=*) git="$optarg"
1567 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001568 --enable-git-update) git_update=yes
1569 ;;
1570 --disable-git-update) git_update=no
1571 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001572 --enable-debug-mutex) debug_mutex=yes
1573 ;;
1574 --disable-debug-mutex) debug_mutex=no
1575 ;;
Junyan He17824402018-07-18 15:47:59 +08001576 --enable-libpmem) libpmem=yes
1577 ;;
1578 --disable-libpmem) libpmem=no
1579 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001580 --enable-xkbcommon) xkbcommon=yes
1581 ;;
1582 --disable-xkbcommon) xkbcommon=no
1583 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001584 --enable-plugins) plugins="yes"
1585 ;;
1586 --disable-plugins) plugins="no"
1587 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001588 --enable-containers) use_containers="yes"
1589 ;;
1590 --disable-containers) use_containers="no"
1591 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001592 --enable-fuzzing) fuzzing=yes
1593 ;;
1594 --disable-fuzzing) fuzzing=no
1595 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001596 *)
1597 echo "ERROR: unknown option $opt"
1598 echo "Try '$0 --help' for more information"
1599 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001600 ;;
bellard7d132992003-03-06 23:23:54 +00001601 esac
1602done
1603
bellard40293e52008-01-31 11:32:10 +00001604case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001605 ppc)
1606 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001607 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001608 ;;
1609 ppc64)
1610 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001611 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001612 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001613 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001614 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001615 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001616 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001617 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001618 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001619 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001620 ;;
ths76d83bd2007-11-18 21:22:10 +00001621 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001622 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001623 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001624 ;;
1625 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001626 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001627 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001628 ;;
bellard40293e52008-01-31 11:32:10 +00001629 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001630 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001631 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001632 ;;
1633 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001634 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1635 # If we truly care, we should simply detect this case at
1636 # runtime and generate the fallback to serial emulation.
1637 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001638 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001639 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001640 x32)
1641 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001642 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001643 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001644 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001645esac
1646
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001647eval "cross_cc_${cpu}=\$host_cc"
1648cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001649QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001650
Peter Maydellaffc88c2016-06-13 11:32:24 +01001651# For user-mode emulation the host arch has to be one we explicitly
1652# support, even if we're using TCI.
1653if [ "$ARCH" = "unknown" ]; then
1654 bsd_user="no"
1655 linux_user="no"
1656fi
1657
Peter Maydell60e0df22011-05-03 14:50:13 +01001658default_target_list=""
1659
Peter Maydell6e92f822013-05-20 16:16:15 +01001660mak_wilds=""
1661
1662if [ "$softmmu" = "yes" ]; then
1663 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001664fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001665if [ "$linux_user" = "yes" ]; then
1666 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001667fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001668if [ "$bsd_user" = "yes" ]; then
1669 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001670fi
1671
Alex Bennée447e1332019-03-19 11:59:12 +00001672if test -z "$target_list_exclude"; then
1673 for config in $mak_wilds; do
1674 default_target_list="${default_target_list} $(basename "$config" .mak)"
1675 done
1676else
1677 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1678 for config in $mak_wilds; do
1679 target="$(basename "$config" .mak)"
1680 exclude="no"
1681 for excl in $exclude_list; do
1682 if test "$excl" = "$target"; then
1683 exclude="yes"
1684 break;
1685 fi
1686 done
1687 if test "$exclude" = "no"; then
1688 default_target_list="${default_target_list} $target"
1689 fi
1690 done
1691fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001692
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001693# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001694trace_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 +01001695
pbrookaf5db582006-04-08 14:26:41 +00001696if test x"$show_help" = x"yes" ; then
1697cat << EOF
1698
1699Usage: configure [options]
1700Options: [defaults in brackets after descriptions]
1701
Stefan Weil08fb77e2013-12-18 22:09:39 +01001702Standard options:
1703 --help print this message
1704 --prefix=PREFIX install in PREFIX [$prefix]
1705 --interp-prefix=PREFIX where to find shared libraries, etc.
1706 use %M for cpu name [$interp_prefix]
1707 --target-list=LIST set target list (default: build everything)
1708$(echo Available targets: $default_target_list | \
1709 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001710 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001711
1712Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001713 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1714 --cc=CC use C compiler CC [$cc]
1715 --iasl=IASL use ACPI compiler IASL [$iasl]
1716 --host-cc=CC use C compiler CC [$host_cc] for code run at
1717 build time
1718 --cxx=CXX use C++ compiler CXX [$cxx]
1719 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1720 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001721 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001722 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001723 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001724 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001725 --make=MAKE use specified make [$make]
1726 --install=INSTALL use specified install [$install]
1727 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001728 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001729 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001730 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001731 --static enable static build [$static]
1732 --mandir=PATH install man pages in PATH
1733 --datadir=PATH install firmware in PATH$confsuffix
1734 --docdir=PATH install documentation in PATH$confsuffix
1735 --bindir=PATH install binaries in PATH
1736 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001737 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001738 --sysconfdir=PATH install config in PATH$confsuffix
1739 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001740 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001741 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001742 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001743 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001744 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001745 --disable-strip disable stripping binaries
1746 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001747 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001748 --audio-drv-list=LIST set audio drivers list:
1749 Available drivers: $audio_possible_drivers
1750 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1751 --block-drv-rw-whitelist=L
1752 set block driver read-write whitelist
1753 (affects only QEMU, not qemu-img)
1754 --block-drv-ro-whitelist=L
1755 set block driver read-only whitelist
1756 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001757 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001758 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001759 --with-trace-file=NAME Full PATH,NAME of file to store traces
1760 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001761 --disable-slirp disable SLIRP userspace network connectivity
1762 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001763 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001764 --oss-lib path to OSS library
1765 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001766 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001767 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001768 --enable-gcov enable test coverage analysis with gcov
1769 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001770 --disable-blobs disable installing provided firmware blobs
1771 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1772 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001773 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001774 --enable-gprof QEMU profiling with gprof
1775 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001776 --enable-debug-stack-usage
1777 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001778 --enable-plugins
1779 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001780 --disable-containers don't use containers for cross-building
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001781
1782Optional features, enabled with --enable-FEATURE and
1783disabled with --disable-FEATURE, default is enabled if available:
1784
1785 system all system emulation targets
1786 user supported user emulation targets
1787 linux-user all linux usermode emulation targets
1788 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001789 docs build documentation
1790 guest-agent build the QEMU Guest Agent
1791 guest-agent-msi build guest agent Windows MSI installation package
1792 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001793 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001794 debug-tcg TCG debugging (default is disabled)
1795 debug-info debugging information
1796 sparse sparse checker
1797
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001798 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001799 nettle nettle cryptography support
1800 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001801 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001802 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001803 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001804 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001805 vte vte support for the gtk UI
1806 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001807 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001808 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001809 vnc-sasl SASL encryption for VNC server
1810 vnc-jpeg JPEG lossy compression for VNC server
1811 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001812 cocoa Cocoa UI (Mac OS X only)
1813 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001814 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001815 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001816 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001817 brlapi BrlAPI (Braile)
1818 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001819 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001820 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001821 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001822 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001823 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001824 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001825 rdma Enable RDMA-based migration
1826 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001827 vde support for vde network
1828 netmap support for netmap network
1829 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001830 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001831 cap-ng libcap-ng support
1832 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001833 vhost-net vhost-net kernel acceleration support
1834 vhost-vsock virtio sockets device support
1835 vhost-scsi vhost-scsi kernel target support
1836 vhost-crypto vhost-user-crypto backend support
1837 vhost-kernel vhost kernel backend support
1838 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001839 spice spice
1840 rbd rados block device (rbd)
1841 libiscsi iscsi support
1842 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001843 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001844 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001845 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001846 usb-redir usb network redirection support
1847 lzo support of lzo compression library
1848 snappy support of snappy compression library
1849 bzip2 support of bzip2 compression library
1850 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001851 lzfse support of lzfse compression library
1852 (for reading lzfse-compressed dmg images)
Juan Quintela3a678482019-12-17 21:15:24 +01001853 zstd support for zstd compression library
1854 (for migration compression)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001855 seccomp seccomp support
1856 coroutine-pool coroutine freelist (better performance)
1857 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001858 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001859 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001860 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001861 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001862 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001863 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001864 avx2 AVX2 optimization support
Robert Hoo6b8cd442020-02-29 20:34:34 +08001865 avx512f AVX512F optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001866 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001867 opengl opengl support
1868 virglrenderer virgl rendering support
1869 xfsctl xfsctl support
1870 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001871 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001872 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001873 bochs bochs image format support
1874 cloop cloop image format support
1875 dmg dmg image format support
1876 qcow1 qcow v1 image format support
1877 vdi vdi image format support
1878 vvfat vvfat image format support
1879 qed qed image format support
1880 parallels parallels image format support
1881 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001882 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001883 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001884 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001885 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001886 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001887
1888NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001889EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001890exit 0
pbrookaf5db582006-04-08 14:26:41 +00001891fi
1892
Thomas Huth9c790242019-03-11 11:20:34 +01001893# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001894rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001895
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001896if test -z "$python"
1897then
1898 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001899fi
1900
1901# Note that if the Python conditional here evaluates True we will exit
1902# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001903if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1904 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001905 "Use --python=/path/to/python to specify a supported Python."
1906fi
1907
Cleber Rosa755ee702018-11-09 10:07:07 -05001908# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001909python_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 -05001910
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001911# Suppress writing compiled files
1912python="$python -B"
1913
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001914# Check that the C compiler works. Doing this here before testing
1915# the host CPU ensures that we had a valid CC to autodetect the
1916# $cpu var (and we should bail right here if that's not the case).
1917# It also allows the help message to be printed without a CC.
1918write_c_skeleton;
1919if compile_object ; then
1920 : C compiler works ok
1921else
1922 error_exit "\"$cc\" either does not exist or does not work"
1923fi
1924if ! compile_prog ; then
1925 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1926fi
1927
Peter Maydell359bc952011-12-24 13:07:25 +00001928# Now we have handled --enable-tcg-interpreter and know we're not just
1929# printing the help message, bail out if the host CPU isn't supported.
1930if test "$ARCH" = "unknown"; then
1931 if test "$tcg_interpreter" = "yes" ; then
1932 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001933 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001934 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001935 fi
1936fi
1937
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001938# Consult white-list to determine whether to enable werror
1939# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001940if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001941 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001942 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001943 werror="yes"
1944 else
1945 werror="no"
1946 fi
1947fi
1948
Peter Maydellfb59dab2017-03-28 14:01:52 +01001949if test "$bogus_os" = "yes"; then
1950 # Now that we know that we're not printing the help and that
1951 # the compiler works (so the results of the check_defines we used
1952 # to identify the OS are reliable), if we didn't recognize the
1953 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001954 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001955fi
1956
Thomas Huthefc6c072018-12-03 10:12:32 +01001957# Check whether the compiler matches our minimum requirements:
1958cat > $TMPC << EOF
1959#if defined(__clang_major__) && defined(__clang_minor__)
1960# ifdef __apple_build_version__
1961# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1962# error You need at least XCode Clang v5.1 to compile QEMU
1963# endif
1964# else
1965# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1966# error You need at least Clang v3.4 to compile QEMU
1967# endif
1968# endif
1969#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1970# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1971# error You need at least GCC v4.8 to compile QEMU
1972# endif
1973#else
1974# error You either need GCC or Clang to compiler QEMU
1975#endif
1976int main (void) { return 0; }
1977EOF
1978if ! compile_prog "" "" ; then
1979 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1980fi
1981
Paolo Bonzini8d050952010-12-23 11:43:52 +01001982gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1983gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001984gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001985gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001986gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001987gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001988# Note that we do not add -Werror to gcc_flags here, because that would
1989# enable it for all configure tests. If a configure test failed due
1990# to -Werror this would just silently disable some features,
1991# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001992
1993cc_has_warning_flag() {
1994 write_c_skeleton;
1995
Peter Maydella1d29d62012-10-27 22:19:07 +01001996 # Use the positive sense of the flag when testing for -Wno-wombat
1997 # support (gcc will happily accept the -Wno- form of unknown
1998 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001999 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2000 compile_prog "-Werror $optflag" ""
2001}
2002
2003for flag in $gcc_flags; do
2004 if cc_has_warning_flag $flag ; then
2005 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01002006 fi
2007done
2008
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002009if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02002010 cat > $TMPC << EOF
2011int main(int argc, char *argv[])
2012{
2013 char arr[64], *p = arr, *c = argv[0];
2014 while (*c) {
2015 *p++ = *c++;
2016 }
2017 return 0;
2018}
2019EOF
Steven Noonan63678e12014-03-28 17:19:02 +01002020 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002021 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01002022 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01002023 # We need to check both a compile and a link, since some compiler
2024 # setups fail only on a .c->.o compile and some only at link time
2025 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2026 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01002027 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002028 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002029 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01002030 break
2031 fi
2032 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002033 if test "$stack_protector" = yes; then
2034 if test $sp_on = 0; then
2035 error_exit "Stack protector not supported"
2036 fi
2037 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01002038fi
2039
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02002040# Disable -Wmissing-braces on older compilers that warn even for
2041# the "universal" C zero initializer {0}.
2042cat > $TMPC << EOF
2043struct {
2044 int a[2];
2045} x = {0};
2046EOF
2047if compile_object "-Werror" "" ; then
2048 :
2049else
2050 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2051fi
2052
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002053# Our module code doesn't support Windows
2054if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2055 error_exit "Modules are not available for Windows"
2056fi
2057
Thomas Huthd376e9d2018-12-03 11:41:38 +01002058# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002059if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002060 if test "$modules" = "yes" ; then
2061 error_exit "static and modules are mutually incompatible"
2062 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002063 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002064 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002065 else
2066 pie="no"
2067 fi
2068fi
2069
Emilio G. Cota768b7852015-04-29 13:09:02 +02002070# Unconditional check for compiler __thread support
2071 cat > $TMPC << EOF
2072static __thread int tls_var;
2073int main(void) { return tls_var; }
2074EOF
2075
2076if ! compile_prog "-Werror" "" ; then
2077 error_exit "Your compiler does not support the __thread specifier for " \
2078 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2079fi
2080
Avi Kivity40d64442011-11-15 20:12:17 +02002081if test "$pie" = ""; then
2082 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002083 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002084 ;;
2085 *)
2086 pie="no"
2087 ;;
2088 esac
2089fi
2090
2091if test "$pie" != "no" ; then
2092 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002093
2094#ifdef __linux__
2095# define THREAD __thread
2096#else
2097# define THREAD
2098#endif
2099
2100static THREAD int tls_var;
2101
2102int main(void) { return tls_var; }
2103
Avi Kivity40d64442011-11-15 20:12:17 +02002104EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002105 # check we support --no-pie first...
2106 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2107 CFLAGS_NOPIE="-fno-pie"
2108 LDFLAGS_NOPIE="-nopie"
2109 fi
2110
Avi Kivity40d64442011-11-15 20:12:17 +02002111 if compile_prog "-fPIE -DPIE" "-pie"; then
2112 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002113 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002114 pie="yes"
2115 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002116 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002117 fi
2118 else
2119 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002120 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002121 else
2122 echo "Disabling PIE due to missing toolchain support"
2123 pie="no"
2124 fi
2125 fi
2126fi
2127
Paolo Bonzini09dada42013-04-17 16:26:47 +02002128##########################################
2129# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2130# use i686 as default anyway, but for those that don't, an explicit
2131# specification is necessary
2132
2133if test "$cpu" = "i386"; then
2134 cat > $TMPC << EOF
2135static int sfaa(int *ptr)
2136{
2137 return __sync_fetch_and_and(ptr, 0);
2138}
2139
2140int main(void)
2141{
2142 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002143 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002144 sfaa(&val);
2145 return val;
2146}
2147EOF
2148 if ! compile_prog "" "" ; then
2149 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2150 fi
2151fi
2152
2153#########################################
bellardec530c82006-04-25 22:36:06 +00002154# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002155
bellardec530c82006-04-25 22:36:06 +00002156if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002157 if has $install; then
2158 :
2159 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002160 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2161 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2162 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002163 fi
Stefan Weil89138852016-05-16 15:10:20 +02002164 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002165 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2166 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2167 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002168 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002169 if has ar; then
2170 :
2171 else
bellardec530c82006-04-25 22:36:06 +00002172 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002173 error_exit "No path includes ar" \
2174 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002175 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002176 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002177 fi
ths5fafdf22007-09-16 21:08:06 +00002178fi
bellardec530c82006-04-25 22:36:06 +00002179
Stefan Weilafb63eb2012-09-26 22:04:38 +02002180if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002181 for target in $default_target_list; do
2182 supported_target $target 2>/dev/null && \
2183 target_list="$target_list $target"
2184 done
2185 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002186else
Stefan Weil89138852016-05-16 15:10:20 +02002187 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002188 for target in $target_list; do
2189 # Check that we recognised the target name; this allows a more
2190 # friendly error message than if we let it fall through.
2191 case " $default_target_list " in
2192 *" $target "*)
2193 ;;
2194 *)
2195 error_exit "Unknown target name '$target'"
2196 ;;
2197 esac
2198 supported_target $target || exit 1
2199 done
bellard5327cf42005-01-10 23:18:50 +00002200fi
Peter Maydell25b48332013-05-20 16:16:16 +01002201
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002202# see if system emulation was really requested
2203case " $target_list " in
2204 *"-softmmu "*) softmmu=yes
2205 ;;
2206 *) softmmu=no
2207 ;;
2208esac
bellard5327cf42005-01-10 23:18:50 +00002209
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002210for target in $target_list; do
2211 case "$target" in
2212 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2213 edk2_blobs="yes"
2214 ;;
2215 esac
2216done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002217# The EDK2 binaries are compressed with bzip2
2218if test "$edk2_blobs" = "yes" && ! has bzip2; then
2219 error_exit "The bzip2 program is required for building QEMU"
2220fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002221
Juan Quintela249247c2009-08-12 18:20:25 +02002222feature_not_found() {
2223 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002224 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002225
Peter Maydell76ad07a2013-04-08 12:11:26 +01002226 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002227 "configure was not able to find it." \
2228 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002229}
2230
bellard7d132992003-03-06 23:23:54 +00002231# ---
2232# big/little endian test
2233cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002234short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2235short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2236extern int foo(short *, short *);
2237int main(int argc, char *argv[]) {
2238 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002239}
2240EOF
2241
Mike Frysinger61cc9192013-06-30 23:30:18 -04002242if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002243 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002244 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002245 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002246 bigendian="no"
2247 else
2248 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002249 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002250else
2251 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002252fi
2253
Juan Quintelab0a47e72009-08-12 18:29:49 +02002254##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002255# system tools
2256if test -z "$want_tools"; then
2257 if test "$softmmu" = "no"; then
2258 want_tools=no
2259 else
2260 want_tools=yes
2261 fi
2262fi
2263
2264##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002265# cocoa implies not SDL or GTK
2266# (the cocoa UI code currently assumes it is always the active UI
2267# and doesn't interact well with other UI frontend code)
2268if test "$cocoa" = "yes"; then
2269 if test "$sdl" = "yes"; then
2270 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2271 fi
2272 if test "$gtk" = "yes"; then
2273 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2274 fi
2275 gtk=no
2276 sdl=no
2277fi
2278
Eric Blake6b39b062016-10-11 10:46:23 -05002279# Some versions of Mac OS X incorrectly define SIZE_MAX
2280cat > $TMPC << EOF
2281#include <stdint.h>
2282#include <stdio.h>
2283int main(int argc, char *argv[]) {
2284 return printf("%zu", SIZE_MAX);
2285}
2286EOF
2287have_broken_size_max=no
2288if ! compile_object -Werror ; then
2289 have_broken_size_max=yes
2290fi
2291
Peter Maydella30878e2015-08-14 16:10:52 +01002292##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002293# L2TPV3 probe
2294
2295cat > $TMPC <<EOF
2296#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002297#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002298int main(void) { return sizeof(struct mmsghdr); }
2299EOF
2300if compile_prog "" "" ; then
2301 l2tpv3=yes
2302else
2303 l2tpv3=no
2304fi
2305
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002306#########################################
2307# vhost interdependencies and host support
2308
2309# vhost backends
2310test "$vhost_user" = "" && vhost_user=yes
2311if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2312 error_exit "vhost-user isn't available on win32"
2313fi
2314test "$vhost_kernel" = "" && vhost_kernel=$linux
2315if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2316 error_exit "vhost-kernel is only available on Linux"
2317fi
2318
2319# vhost-kernel devices
2320test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2321if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2322 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2323fi
2324test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2325if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2326 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2327fi
2328
2329# vhost-user backends
2330test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2331if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2332 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2333fi
2334test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2335if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2336 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2337fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002338test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2339if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2340 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2341fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002342
2343# OR the vhost-kernel and vhost-user values for simplicity
2344if test "$vhost_net" = ""; then
2345 test "$vhost_net_user" = "yes" && vhost_net=yes
2346 test "$vhost_kernel" = "yes" && vhost_net=yes
2347fi
2348
Gonglei015a33b2014-07-01 20:58:08 +08002349##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002350# MinGW / Mingw-w64 localtime_r/gmtime_r check
2351
2352if test "$mingw32" = "yes"; then
2353 # Some versions of MinGW / Mingw-w64 lack localtime_r
2354 # and gmtime_r entirely.
2355 #
2356 # Some versions of Mingw-w64 define a macro for
2357 # localtime_r/gmtime_r.
2358 #
2359 # Some versions of Mingw-w64 will define functions
2360 # for localtime_r/gmtime_r, but only if you have
2361 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2362 # though, unistd.h and pthread.h both define
2363 # that for you.
2364 #
2365 # So this #undef localtime_r and #include <unistd.h>
2366 # are not in fact redundant.
2367cat > $TMPC << EOF
2368#include <unistd.h>
2369#include <time.h>
2370#undef localtime_r
2371int main(void) { localtime_r(NULL, NULL); return 0; }
2372EOF
2373 if compile_prog "" "" ; then
2374 localtime_r="yes"
2375 else
2376 localtime_r="no"
2377 fi
2378fi
2379
2380##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002381# pkg-config probe
2382
2383if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002384 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002385fi
2386
2387##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002388# NPTL probe
2389
Peter Maydell24cb36a2013-07-16 18:45:00 +01002390if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002391 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002392#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002393#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002394int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002395#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2396#error bork
2397#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002398 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002399}
2400EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002401 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002402 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002403 fi
pbrookbd0c5662008-05-29 14:34:11 +00002404fi
2405
balrogac629222008-10-11 09:56:04 +00002406##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002407# lzo check
2408
2409if test "$lzo" != "no" ; then
2410 cat > $TMPC << EOF
2411#include <lzo/lzo1x.h>
2412int main(void) { lzo_version(); return 0; }
2413EOF
2414 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002415 libs_softmmu="$libs_softmmu -llzo2"
2416 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002417 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002418 if test "$lzo" = "yes"; then
2419 feature_not_found "liblzo2" "Install liblzo2 devel"
2420 fi
2421 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002422 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002423fi
2424
2425##########################################
2426# snappy check
2427
2428if test "$snappy" != "no" ; then
2429 cat > $TMPC << EOF
2430#include <snappy-c.h>
2431int main(void) { snappy_max_compressed_length(4096); return 0; }
2432EOF
2433 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002434 libs_softmmu="$libs_softmmu -lsnappy"
2435 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002436 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002437 if test "$snappy" = "yes"; then
2438 feature_not_found "libsnappy" "Install libsnappy devel"
2439 fi
2440 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002441 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002442fi
2443
2444##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002445# bzip2 check
2446
2447if test "$bzip2" != "no" ; then
2448 cat > $TMPC << EOF
2449#include <bzlib.h>
2450int main(void) { BZ2_bzlibVersion(); return 0; }
2451EOF
2452 if compile_prog "" "-lbz2" ; then
2453 bzip2="yes"
2454 else
2455 if test "$bzip2" = "yes"; then
2456 feature_not_found "libbzip2" "Install libbzip2 devel"
2457 fi
2458 bzip2="no"
2459 fi
2460fi
2461
2462##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002463# lzfse check
2464
2465if test "$lzfse" != "no" ; then
2466 cat > $TMPC << EOF
2467#include <lzfse.h>
2468int main(void) { lzfse_decode_scratch_size(); return 0; }
2469EOF
2470 if compile_prog "" "-llzfse" ; then
2471 lzfse="yes"
2472 else
2473 if test "$lzfse" = "yes"; then
2474 feature_not_found "lzfse" "Install lzfse devel"
2475 fi
2476 lzfse="no"
2477 fi
2478fi
2479
2480##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002481# zstd check
2482
2483if test "$zstd" != "no" ; then
Juan Quintela297254c2020-03-10 12:14:31 +01002484 libzstd_minver="1.4.0"
2485 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
Juan Quintela3a678482019-12-17 21:15:24 +01002486 zstd_cflags="$($pkg_config --cflags libzstd)"
2487 zstd_libs="$($pkg_config --libs libzstd)"
2488 LIBS="$zstd_libs $LIBS"
2489 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2490 zstd="yes"
2491 else
2492 if test "$zstd" = "yes" ; then
2493 feature_not_found "libzstd" "Install libzstd devel"
2494 fi
2495 zstd="no"
2496 fi
2497fi
2498
2499##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002500# libseccomp check
2501
2502if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002503 libseccomp_minver="2.3.0"
2504 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002505 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2506 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002507 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002508 else
Andrew Jones693e5912015-09-30 11:59:18 -04002509 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002510 feature_not_found "libseccomp" \
2511 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002512 fi
2513 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002514 fi
2515fi
2516##########################################
aliguorie37630c2009-04-22 15:19:10 +00002517# xen probe
2518
Juan Quintelafc321b42009-08-12 18:29:55 +02002519if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002520 # Check whether Xen library path is specified via --extra-ldflags to avoid
2521 # overriding this setting with pkg-config output. If not, try pkg-config
2522 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002523
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002524 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2525 $pkg_config --exists xencontrol ; then
2526 xen_ctrl_version="$(printf '%d%02d%02d' \
2527 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2528 xen=yes
2529 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2530 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002531 if $pkg_config --exists xentoolcore; then
2532 xen_pc="$xen_pc xentoolcore"
2533 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002534 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2535 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002536 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002537
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002538 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002539 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002540
2541 # First we test whether Xen headers and libraries are available.
2542 # If no, we are done and there is no Xen support.
2543 # If yes, more tests are run to detect the Xen version.
2544
2545 # Xen (any)
2546 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002547#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002548int main(void) {
2549 return 0;
2550}
2551EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002552 if ! compile_prog "" "$xen_libs" ; then
2553 # Xen not found
2554 if test "$xen" = "yes" ; then
2555 feature_not_found "xen" "Install xen devel"
2556 fi
2557 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002558
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002559 # Xen unstable
2560 elif
2561 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002562#undef XC_WANT_COMPAT_DEVICEMODEL_API
2563#define __XEN_TOOLS__
2564#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002565#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002566int main(void) {
2567 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002568 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002569
2570 xd = xendevicemodel_open(0, 0);
2571 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2572
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002573 xfmem = xenforeignmemory_open(0, 0);
2574 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2575
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002576 return 0;
2577}
2578EOF
2579 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2580 then
2581 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2582 xen_ctrl_version=41100
2583 xen=yes
2584 elif
2585 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002586#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2587#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002588#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002589int main(void) {
2590 xenforeignmemory_handle *xfmem;
2591
2592 xfmem = xenforeignmemory_open(0, 0);
2593 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002594 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002595
2596 return 0;
2597}
2598EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002599 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002600 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002601 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002602 xen_ctrl_version=41000
2603 xen=yes
2604 elif
2605 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002606#undef XC_WANT_COMPAT_DEVICEMODEL_API
2607#define __XEN_TOOLS__
2608#include <xendevicemodel.h>
2609int main(void) {
2610 xendevicemodel_handle *xd;
2611
2612 xd = xendevicemodel_open(0, 0);
2613 xendevicemodel_close(xd);
2614
2615 return 0;
2616}
2617EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002618 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2619 then
2620 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2621 xen_ctrl_version=40900
2622 xen=yes
2623 elif
2624 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002625/*
2626 * If we have stable libs the we don't want the libxc compat
2627 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002628 *
2629 * Also, check if xengnttab_grant_copy_segment_t is defined and
2630 * grant copy operation is implemented.
2631 */
2632#undef XC_WANT_COMPAT_EVTCHN_API
2633#undef XC_WANT_COMPAT_GNTTAB_API
2634#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2635#include <xenctrl.h>
2636#include <xenstore.h>
2637#include <xenevtchn.h>
2638#include <xengnttab.h>
2639#include <xenforeignmemory.h>
2640#include <stdint.h>
2641#include <xen/hvm/hvm_info_table.h>
2642#if !defined(HVM_MAX_VCPUS)
2643# error HVM_MAX_VCPUS not defined
2644#endif
2645int main(void) {
2646 xc_interface *xc = NULL;
2647 xenforeignmemory_handle *xfmem;
2648 xenevtchn_handle *xe;
2649 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002650 xengnttab_grant_copy_segment_t* seg = NULL;
2651
2652 xs_daemon_open();
2653
2654 xc = xc_interface_open(0, 0, 0);
2655 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2656 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2657 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2658 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002659
2660 xfmem = xenforeignmemory_open(0, 0);
2661 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2662
2663 xe = xenevtchn_open(0, 0);
2664 xenevtchn_fd(xe);
2665
2666 xg = xengnttab_open(0, 0);
2667 xengnttab_grant_copy(xg, 0, seg);
2668
2669 return 0;
2670}
2671EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002672 compile_prog "" "$xen_libs $xen_stable_libs"
2673 then
2674 xen_ctrl_version=40800
2675 xen=yes
2676 elif
2677 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002678/*
2679 * If we have stable libs the we don't want the libxc compat
2680 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002681 */
2682#undef XC_WANT_COMPAT_EVTCHN_API
2683#undef XC_WANT_COMPAT_GNTTAB_API
2684#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2685#include <xenctrl.h>
2686#include <xenstore.h>
2687#include <xenevtchn.h>
2688#include <xengnttab.h>
2689#include <xenforeignmemory.h>
2690#include <stdint.h>
2691#include <xen/hvm/hvm_info_table.h>
2692#if !defined(HVM_MAX_VCPUS)
2693# error HVM_MAX_VCPUS not defined
2694#endif
2695int main(void) {
2696 xc_interface *xc = NULL;
2697 xenforeignmemory_handle *xfmem;
2698 xenevtchn_handle *xe;
2699 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002700
2701 xs_daemon_open();
2702
2703 xc = xc_interface_open(0, 0, 0);
2704 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2705 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2706 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2707 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002708
2709 xfmem = xenforeignmemory_open(0, 0);
2710 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2711
2712 xe = xenevtchn_open(0, 0);
2713 xenevtchn_fd(xe);
2714
2715 xg = xengnttab_open(0, 0);
2716 xengnttab_map_grant_ref(xg, 0, 0, 0);
2717
2718 return 0;
2719}
2720EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002721 compile_prog "" "$xen_libs $xen_stable_libs"
2722 then
2723 xen_ctrl_version=40701
2724 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002725
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002726 # Xen 4.6
2727 elif
2728 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002729#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002730#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002731#include <stdint.h>
2732#include <xen/hvm/hvm_info_table.h>
2733#if !defined(HVM_MAX_VCPUS)
2734# error HVM_MAX_VCPUS not defined
2735#endif
2736int main(void) {
2737 xc_interface *xc;
2738 xs_daemon_open();
2739 xc = xc_interface_open(0, 0, 0);
2740 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2741 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002742 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002743 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002744 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002745 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002746 return 0;
2747}
2748EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002749 compile_prog "" "$xen_libs"
2750 then
2751 xen_ctrl_version=40600
2752 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002753
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002754 # Xen 4.5
2755 elif
2756 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002757#include <xenctrl.h>
2758#include <xenstore.h>
2759#include <stdint.h>
2760#include <xen/hvm/hvm_info_table.h>
2761#if !defined(HVM_MAX_VCPUS)
2762# error HVM_MAX_VCPUS not defined
2763#endif
2764int main(void) {
2765 xc_interface *xc;
2766 xs_daemon_open();
2767 xc = xc_interface_open(0, 0, 0);
2768 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2769 xc_gnttab_open(NULL, 0);
2770 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2771 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002772 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2773 return 0;
2774}
2775EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002776 compile_prog "" "$xen_libs"
2777 then
2778 xen_ctrl_version=40500
2779 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002780
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002781 elif
2782 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002783#include <xenctrl.h>
2784#include <xenstore.h>
2785#include <stdint.h>
2786#include <xen/hvm/hvm_info_table.h>
2787#if !defined(HVM_MAX_VCPUS)
2788# error HVM_MAX_VCPUS not defined
2789#endif
2790int main(void) {
2791 xc_interface *xc;
2792 xs_daemon_open();
2793 xc = xc_interface_open(0, 0, 0);
2794 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2795 xc_gnttab_open(NULL, 0);
2796 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2797 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002798 return 0;
2799}
2800EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002801 compile_prog "" "$xen_libs"
2802 then
2803 xen_ctrl_version=40200
2804 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002805
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002806 else
2807 if test "$xen" = "yes" ; then
2808 feature_not_found "xen (unsupported version)" \
2809 "Install a supported xen (xen 4.2 or newer)"
2810 fi
2811 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002812 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002813
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002814 if test "$xen" = yes; then
2815 if test $xen_ctrl_version -ge 40701 ; then
2816 libs_softmmu="$xen_stable_libs $libs_softmmu"
2817 fi
2818 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002819 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002820 fi
aliguorie37630c2009-04-22 15:19:10 +00002821fi
2822
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002823if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002824 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002825 xen_pci_passthrough=yes
2826 else
2827 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002828 error_exit "User requested feature Xen PCI Passthrough" \
2829 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002830 fi
2831 xen_pci_passthrough=no
2832 fi
2833fi
2834
aliguorie37630c2009-04-22 15:19:10 +00002835##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002836# Windows Hypervisor Platform accelerator (WHPX) check
2837if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002838 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002839 whpx="yes"
2840 else
2841 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002842 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002843 fi
2844 whpx="no"
2845 fi
2846fi
2847
2848##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002849# Sparse probe
2850if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002851 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002852 sparse=yes
2853 else
2854 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002855 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002856 fi
2857 sparse=no
2858 fi
2859fi
2860
2861##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002862# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002863if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002864 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002865 x11_cflags=$($pkg_config --cflags x11)
2866 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002867fi
2868
2869##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002870# GTK probe
2871
2872if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002873 gtkpackage="gtk+-3.0"
2874 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002875 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002876 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002877 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2878 gtk_libs=$($pkg_config --libs $gtkpackage)
2879 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002880 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002881 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002882 gtk_cflags="$gtk_cflags $x11_cflags"
2883 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002884 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002885 gtk="yes"
2886 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002887 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002888 else
2889 gtk="no"
2890 fi
2891fi
2892
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002893
2894##########################################
2895# GNUTLS probe
2896
2897if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002898 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002899 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002900 gnutls_cflags=$($pkg_config --cflags gnutls)
2901 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002902 # Packaging for the static libraries is not always correct.
2903 # At least ubuntu 18.04 ships only shared libraries.
2904 write_c_skeleton
2905 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002906 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002907 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2908 pass="yes"
2909 fi
2910 fi
2911 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002912 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002913 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002914 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002915 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002916fi
2917
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002918
2919# If user didn't give a --disable/enable-gcrypt flag,
2920# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002921# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002922if test -z "$gcrypt"
2923then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002924 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002925 then
2926 gcrypt="no"
2927 fi
2928fi
2929
2930# If user didn't give a --disable/enable-nettle flag,
2931# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002932# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002933if test -z "$nettle"
2934then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002935 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002936 then
2937 nettle="no"
2938 fi
2939fi
2940
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002941has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002942 if ! has "libgcrypt-config"
2943 then
2944 return 1
2945 fi
2946
2947 if test -n "$cross_prefix"
2948 then
Stefan Weil89138852016-05-16 15:10:20 +02002949 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002950 if test "$host-" != $cross_prefix
2951 then
2952 return 1
2953 fi
2954 fi
2955
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002956 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2957 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2958
2959 if test $maj != 1 || test $min -lt 5
2960 then
2961 return 1
2962 fi
2963
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002964 return 0
2965}
2966
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002967
2968if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002969 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002970 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002971 nettle_cflags=$($pkg_config --cflags nettle)
2972 nettle_libs=$($pkg_config --libs nettle)
2973 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002974 # Link test to make sure the given libraries work (e.g for static).
2975 write_c_skeleton
2976 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002977 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002978 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2979 if test -z "$gcrypt"; then
2980 gcrypt="no"
2981 fi
2982 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002983 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002984 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01002985 if test "$pass" = "yes"
2986 then
2987 cat > $TMPC << EOF
2988#include <nettle/xts.h>
2989int main(void) {
2990 return 0;
2991}
2992EOF
2993 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2994 nettle_xts=yes
2995 qemu_private_xts=no
2996 fi
2997 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002998 if test "$pass" = "no" && test "$nettle" = "yes"; then
2999 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003000 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003001 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003002 fi
3003fi
3004
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003005if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003006 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003007 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003008 gcrypt_cflags=$(libgcrypt-config --cflags)
3009 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003010 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003011 # as it "spreads unnecessary dependencies" which in
3012 # turn breaks static builds...
3013 if test "$static" = "yes"
3014 then
3015 gcrypt_libs="$gcrypt_libs -lgpg-error"
3016 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003017
Richard Hendersona73e82e2019-05-09 18:24:35 -07003018 # Link test to make sure the given libraries work (e.g for static).
3019 write_c_skeleton
3020 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003021 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003022 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3023 pass="yes"
3024 fi
3025 fi
3026 if test "$pass" = "yes"; then
3027 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003028 cat > $TMPC << EOF
3029#include <gcrypt.h>
3030int main(void) {
3031 gcry_mac_hd_t handle;
3032 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3033 GCRY_MAC_FLAG_SECURE, NULL);
3034 return 0;
3035}
3036EOF
3037 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3038 gcrypt_hmac=yes
3039 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003040 cat > $TMPC << EOF
3041#include <gcrypt.h>
3042int main(void) {
3043 gcry_cipher_hd_t handle;
3044 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3045 return 0;
3046}
3047EOF
3048 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3049 gcrypt_xts=yes
3050 qemu_private_xts=no
3051 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003052 elif test "$gcrypt" = "yes"; then
3053 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003054 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003055 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003056 fi
3057fi
3058
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003059
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003060if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3061then
3062 error_exit "Only one of gcrypt & nettle can be enabled"
3063fi
3064
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003065##########################################
3066# libtasn1 - only for the TLS creds/session test suite
3067
3068tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003069tasn1_cflags=""
3070tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003071if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003072 tasn1_cflags=$($pkg_config --cflags libtasn1)
3073 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003074else
3075 tasn1=no
3076fi
3077
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003078
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003079##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003080# PAM probe
3081
3082if test "$auth_pam" != "no"; then
3083 cat > $TMPC <<EOF
3084#include <security/pam_appl.h>
3085#include <stdio.h>
3086int main(void) {
3087 const char *service_name = "qemu";
3088 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003089 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003090 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003091 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003092 return 0;
3093}
3094EOF
3095 if compile_prog "" "-lpam" ; then
3096 auth_pam=yes
3097 else
3098 if test "$auth_pam" = "yes"; then
3099 feature_not_found "PAM" "Install PAM development package"
3100 else
3101 auth_pam=no
3102 fi
3103 fi
3104fi
3105
3106##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003107# getifaddrs (for tests/test-io-channel-socket )
3108
3109have_ifaddrs_h=yes
3110if ! check_include "ifaddrs.h" ; then
3111 have_ifaddrs_h=no
3112fi
3113
3114##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003115# VTE probe
3116
3117if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003118 vteminversion="0.32.0"
3119 if $pkg_config --exists "vte-2.91"; then
3120 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003121 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003122 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003123 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003124 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003125 vte_cflags=$($pkg_config --cflags $vtepackage)
3126 vte_libs=$($pkg_config --libs $vtepackage)
3127 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003128 vte="yes"
3129 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003130 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003131 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003132 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003133 fi
3134fi
3135
3136##########################################
bellard11d9f692004-04-02 20:55:59 +00003137# SDL probe
3138
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003139# Look for sdl configuration program (pkg-config or sdl2-config). Try
3140# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003141
Peter Xuc6093a02018-04-10 13:40:34 +08003142sdl_probe ()
3143{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003144 if $pkg_config sdl2 --exists; then
3145 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003146 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003147 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003148 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003149 sdlversion=$($sdlconfig --version)
3150 else
3151 if test "$sdl" = "yes" ; then
3152 feature_not_found "sdl" "Install SDL2-devel"
3153 fi
3154 sdl=no
3155 # no need to do the rest
3156 return
3157 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003158 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003159 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3160 fi
3161
Juan Quintelaac119f92009-07-27 16:13:15 +02003162 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003163#include <SDL.h>
3164#undef main /* We don't want SDL to override our main() */
3165int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3166EOF
Stefan Weil89138852016-05-16 15:10:20 +02003167 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003168 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003169 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003170 if $pkg_config sdl2 --exists; then
3171 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003172 else
3173 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3174 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003175 else
Stefan Weil89138852016-05-16 15:10:20 +02003176 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003177 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003178 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003179 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003180
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003181 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003182 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003183 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003184 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3185 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003186 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003187 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003188 :
3189 else
3190 sdl=no
3191 fi
3192 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003193 else # sdl not found
3194 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003195 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003196 fi
3197 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003198 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003199}
3200
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003201sdl_image_probe ()
3202{
3203 if test "$sdl_image" != "no" ; then
3204 if $pkg_config SDL2_image --exists; then
3205 if test "$static" = "yes"; then
3206 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3207 else
3208 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3209 fi
3210 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3211 sdl_image=yes
3212
3213 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3214 sdl_libs="$sdl_libs $sdl_image_libs"
3215 else
3216 if test "$sdl_image" = "yes" ; then
3217 feature_not_found "sdl_image" "Install SDL Image devel"
3218 else
3219 sdl_image=no
3220 fi
3221 fi
3222 fi
3223}
3224
Peter Xuc6093a02018-04-10 13:40:34 +08003225if test "$sdl" != "no" ; then
3226 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003227fi
bellard11d9f692004-04-02 20:55:59 +00003228
aliguori5368a422009-03-03 17:37:21 +00003229if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003230 sdl_image_probe
3231else
3232 if test "$sdl_image" = "yes"; then
3233 echo "warning: SDL Image requested, but SDL is not available, disabling"
3234 fi
3235 sdl_image=no
3236fi
3237
3238if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003239 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003240#include <SDL.h>
3241#if defined(SDL_VIDEO_DRIVER_X11)
3242#include <X11/XKBlib.h>
3243#else
3244#error No x11 support
3245#endif
3246int main(void) { return 0; }
3247EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003248 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003249 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003250 sdl_cflags="$sdl_cflags $x11_cflags"
3251 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003252 fi
aliguori5368a422009-03-03 17:37:21 +00003253fi
3254
ths8f28f3f2007-01-05 21:25:54 +00003255##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003256# RDMA needs OpenFabrics libraries
3257if test "$rdma" != "no" ; then
3258 cat > $TMPC <<EOF
3259#include <rdma/rdma_cma.h>
3260int main(void) { return 0; }
3261EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003262 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003263 if compile_prog "" "$rdma_libs" ; then
3264 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003265 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003266 else
3267 if test "$rdma" = "yes" ; then
3268 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003269 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003270 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003271 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003272 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3273 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3274 fi
3275 rdma="no"
3276 fi
3277fi
3278
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003279##########################################
3280# PVRDMA detection
3281
3282cat > $TMPC <<EOF &&
3283#include <sys/mman.h>
3284
3285int
3286main(void)
3287{
3288 char buf = 0;
3289 void *addr = &buf;
3290 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3291
3292 return 0;
3293}
3294EOF
3295
3296if test "$rdma" = "yes" ; then
3297 case "$pvrdma" in
3298 "")
3299 if compile_prog "" ""; then
3300 pvrdma="yes"
3301 else
3302 pvrdma="no"
3303 fi
3304 ;;
3305 "yes")
3306 if ! compile_prog "" ""; then
3307 error_exit "PVRDMA is not supported since mremap is not implemented"
3308 fi
3309 pvrdma="yes"
3310 ;;
3311 "no")
3312 pvrdma="no"
3313 ;;
3314 esac
3315else
3316 if test "$pvrdma" = "yes" ; then
3317 error_exit "PVRDMA requires rdma suppport"
3318 fi
3319 pvrdma="no"
3320fi
ths8d5d2d42007-08-25 01:37:51 +00003321
Yuval Shaiaee108582019-08-18 16:21:06 +03003322# Let's see if enhanced reg_mr is supported
3323if test "$pvrdma" = "yes" ; then
3324
3325cat > $TMPC <<EOF &&
3326#include <infiniband/verbs.h>
3327
3328int
3329main(void)
3330{
3331 struct ibv_mr *mr;
3332 struct ibv_pd *pd = NULL;
3333 size_t length = 10;
3334 uint64_t iova = 0;
3335 int access = 0;
3336 void *addr = NULL;
3337
3338 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3339
3340 ibv_dereg_mr(mr);
3341
3342 return 0;
3343}
3344EOF
3345 if ! compile_prog "" "-libverbs"; then
3346 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3347 fi
3348fi
3349
ths8d5d2d42007-08-25 01:37:51 +00003350##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003351# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003352if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003353 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003354#include <sasl/sasl.h>
3355#include <stdio.h>
3356int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3357EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003358 # Assuming Cyrus-SASL installed in /usr prefix
3359 vnc_sasl_cflags=""
3360 vnc_sasl_libs="-lsasl2"
3361 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3362 vnc_sasl=yes
3363 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003364 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003365 else
3366 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003367 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003368 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003369 vnc_sasl=no
3370 fi
aliguori2f9606b2009-03-06 20:27:28 +00003371fi
3372
3373##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003374# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003375if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003376cat > $TMPC <<EOF
3377#include <stdio.h>
3378#include <jpeglib.h>
3379int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3380EOF
3381 vnc_jpeg_cflags=""
3382 vnc_jpeg_libs="-ljpeg"
3383 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3384 vnc_jpeg=yes
3385 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003386 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003387 else
3388 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003389 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003390 fi
3391 vnc_jpeg=no
3392 fi
3393fi
3394
3395##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003396# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003397if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003398cat > $TMPC <<EOF
3399//#include <stdio.h>
3400#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003401#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003402int main(void) {
3403 png_structp png_ptr;
3404 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003405 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003406}
3407EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003408 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003409 vnc_png_cflags=$($pkg_config libpng --cflags)
3410 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003411 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003412 vnc_png_cflags=""
3413 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003414 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003415 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3416 vnc_png=yes
3417 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003418 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003419 else
3420 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003421 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003422 fi
3423 vnc_png=no
3424 fi
3425fi
3426
3427##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003428# xkbcommon probe
3429if test "$xkbcommon" != "no" ; then
3430 if $pkg_config xkbcommon --exists; then
3431 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3432 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3433 xkbcommon=yes
3434 else
3435 if test "$xkbcommon" = "yes" ; then
3436 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3437 fi
3438 xkbcommon=no
3439 fi
3440fi
3441
aliguori76655d62009-03-06 20:27:37 +00003442
3443##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003444# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003445if test "$xfs" != "no" ; then
3446 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003447#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003448#include <xfs/xfs.h>
3449int main(void)
3450{
3451 xfsctl(NULL, 0, 0, NULL);
3452 return 0;
3453}
3454EOF
3455 if compile_prog "" "" ; then
3456 xfs="yes"
3457 else
3458 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003459 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003460 fi
3461 xfs=no
3462 fi
3463fi
3464
3465##########################################
ths8a16d272008-07-19 09:56:24 +00003466# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003467if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003468 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003469 cat > $TMPC << EOF
3470#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003471int main(void)
3472{
3473 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003474 char s[] = "";
3475 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003476 return 0;
3477}
ths8a16d272008-07-19 09:56:24 +00003478EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003479 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003480 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003481 else
3482 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003483 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003484 fi
3485 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003486 fi
ths8a16d272008-07-19 09:56:24 +00003487fi
3488
3489##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003490# netmap support probe
3491# Apart from looking for netmap headers, we make sure that the host API version
3492# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3493# a minor/major version number. Minor new features will be marked with values up
3494# to 15, and if something happens that requires a change to the backend we will
3495# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003496if test "$netmap" != "no" ; then
3497 cat > $TMPC << EOF
3498#include <inttypes.h>
3499#include <net/if.h>
3500#include <net/netmap.h>
3501#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003502#if (NETMAP_API < 11) || (NETMAP_API > 15)
3503#error
3504#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003505int main(void) { return 0; }
3506EOF
3507 if compile_prog "" "" ; then
3508 netmap=yes
3509 else
3510 if test "$netmap" = "yes" ; then
3511 feature_not_found "netmap"
3512 fi
3513 netmap=no
3514 fi
3515fi
3516
3517##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003518# libcap-ng library probe
3519if test "$cap_ng" != "no" ; then
3520 cap_libs="-lcap-ng"
3521 cat > $TMPC << EOF
3522#include <cap-ng.h>
3523int main(void)
3524{
3525 capng_capability_to_name(CAPNG_EFFECTIVE);
3526 return 0;
3527}
3528EOF
3529 if compile_prog "" "$cap_libs" ; then
3530 cap_ng=yes
3531 libs_tools="$cap_libs $libs_tools"
3532 else
3533 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003534 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003535 fi
3536 cap_ng=no
3537 fi
3538fi
3539
3540##########################################
malcc2de5c92008-06-28 19:13:06 +00003541# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003542
Stefan Weil89138852016-05-16 15:10:20 +02003543audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003544for drv in $audio_drv_list; do
3545 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003546 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003547 if $pkg_config alsa --exists; then
3548 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003549 if test "$drv" = "try-alsa"; then
3550 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3551 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003552 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003553 if test "$drv" = "try-alsa"; then
3554 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3555 else
3556 error_exit "$drv check failed" \
3557 "Make sure to have the $drv libs and headers installed."
3558 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003559 fi
malcc2de5c92008-06-28 19:13:06 +00003560 ;;
3561
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003562 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003563 if $pkg_config libpulse --exists; then
3564 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003565 if test "$drv" = "try-pa"; then
3566 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3567 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003568 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003569 if test "$drv" = "try-pa"; then
3570 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3571 else
3572 error_exit "$drv check failed" \
3573 "Make sure to have the $drv libs and headers installed."
3574 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003575 fi
malcb8e59f12008-07-02 21:03:08 +00003576 ;;
3577
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003578 sdl)
3579 if test "$sdl" = "no"; then
3580 error_exit "sdl not found or disabled, can not use sdl audio driver"
3581 fi
3582 ;;
3583
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003584 try-sdl)
3585 if test "$sdl" = "no"; then
3586 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3587 else
3588 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3589 fi
3590 ;;
3591
Juan Quintela997e6902009-08-03 14:46:29 +02003592 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003593 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003594 ;;
3595
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003596 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003597 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003598 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003599 ;;
3600
3601 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003602 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003603 ;;
3604
malce4c63a62008-07-19 16:15:16 +00003605 *)
malc1c9b2a52008-07-19 16:57:30 +00003606 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003607 error_exit "Unknown driver '$drv' selected" \
3608 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003609 }
3610 ;;
malcc2de5c92008-06-28 19:13:06 +00003611 esac
3612done
ths8f28f3f2007-01-05 21:25:54 +00003613
balrog4d3b6f62008-02-10 16:33:14 +00003614##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003615# BrlAPI probe
3616
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003617if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003618 brlapi_libs="-lbrlapi"
3619 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003620#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003621#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003622int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3623EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003624 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003625 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003626 else
3627 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003628 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003629 fi
3630 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003631 fi
3632fi
aurel322e4d9fb2008-04-08 06:01:02 +00003633
3634##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003635# iconv probe
3636if test "$iconv" != "no" ; then
3637 cat > $TMPC << EOF
3638#include <iconv.h>
3639int main(void) {
3640 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3641 return conv != (iconv_t) -1;
3642}
3643EOF
3644 iconv_prefix_list="/usr/local:/usr"
3645 iconv_lib_list=":-liconv"
3646 IFS=:
3647 for iconv_prefix in $iconv_prefix_list; do
3648 IFS=:
3649 iconv_cflags="-I$iconv_prefix/include"
3650 iconv_ldflags="-L$iconv_prefix/lib"
3651 for iconv_link in $iconv_lib_list; do
3652 unset IFS
3653 iconv_lib="$iconv_ldflags $iconv_link"
3654 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3655 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3656 iconv_found=yes
3657 break
3658 fi
3659 done
3660 if test "$iconv_found" = yes ; then
3661 break
3662 fi
3663 done
3664 if test "$iconv_found" = "yes" ; then
3665 iconv=yes
3666 else
3667 if test "$iconv" = "yes" ; then
3668 feature_not_found "iconv" "Install iconv devel"
3669 fi
3670 iconv=no
3671 fi
3672fi
3673
3674##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003675# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003676if test "$iconv" = "no" ; then
3677 # curses will need iconv
3678 curses=no
3679fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003680if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003681 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003682 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3683 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003684 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003685 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003686 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003687 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003688 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003689 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003690#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003691#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003692#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003693#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003694int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003695 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003696 wchar_t wch = L'w';
3697 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003698 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003699 addwstr(L"wide chars\n");
3700 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003701 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003702 codeset = nl_langinfo(CODESET);
3703 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003704}
balrog4d3b6f62008-02-10 16:33:14 +00003705EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003706 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003707 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003708 # Make sure we get the wide character prototypes
3709 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003710 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003711 for curses_lib in $curses_lib_list; do
3712 unset IFS
3713 if compile_prog "$curses_inc" "$curses_lib" ; then
3714 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003715 break
3716 fi
3717 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003718 if test "$curses_found" = yes ; then
3719 break
3720 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003721 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003722 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003723 if test "$curses_found" = "yes" ; then
3724 curses=yes
3725 else
3726 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003727 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003728 fi
3729 curses=no
3730 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003731fi
balrog4d3b6f62008-02-10 16:33:14 +00003732
blueswir1414f0da2008-08-15 18:20:52 +00003733##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003734# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003735if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003736 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003737 curlconfig="$pkg_config libcurl"
3738 else
3739 curlconfig=curl-config
3740 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003741 cat > $TMPC << EOF
3742#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003743int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003744EOF
Stefan Weil89138852016-05-16 15:10:20 +02003745 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3746 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003747 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003748 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003749 else
3750 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003751 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003752 fi
3753 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003754 fi
3755fi # test "$curl"
3756
3757##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003758# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003759
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003760glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003761glib_modules=gthread-2.0
3762if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003763 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003764fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003765if test "$plugins" = yes; then
3766 glib_modules="$glib_modules gmodule-2.0"
3767fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003768
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003769# This workaround is required due to a bug in pkg-config file for glib as it
3770# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3771
Eric Blakee633a5c2019-02-04 20:39:37 -06003772if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003773 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3774fi
3775
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003776for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003777 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003778 glib_cflags=$($pkg_config --cflags $i)
3779 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003780 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003781 LIBS="$glib_libs $LIBS"
3782 libs_qga="$glib_libs $libs_qga"
3783 else
3784 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3785 fi
3786done
3787
Marc-André Lureauf876b762019-02-21 12:07:00 +01003788if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3789 gio=yes
3790 gio_cflags=$($pkg_config --cflags gio-2.0)
3791 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003792 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003793 if [ ! -x "$gdbus_codegen" ]; then
3794 gdbus_codegen=
3795 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003796else
3797 gio=no
3798fi
3799
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003800if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3801 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3802 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3803fi
3804
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003805# Sanity check that the current size_t matches the
3806# size that glib thinks it should be. This catches
3807# problems on multi-arch where people try to build
3808# 32-bit QEMU while pointing at 64-bit glib headers
3809cat > $TMPC <<EOF
3810#include <glib.h>
3811#include <unistd.h>
3812
3813#define QEMU_BUILD_BUG_ON(x) \
3814 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3815
3816int main(void) {
3817 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3818 return 0;
3819}
3820EOF
3821
Stefan Weil5919e032016-04-28 23:33:41 +02003822if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003823 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3824 "You probably need to set PKG_CONFIG_LIBDIR"\
3825 "to point to the right pkg-config files for your"\
3826 "build target"
3827fi
3828
John Snowbbbf2e02015-03-25 18:57:38 -04003829# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3830cat > $TMPC << EOF
3831#include <glib.h>
3832int main(void) { return 0; }
3833EOF
3834if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3835 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3836 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3837 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3838 fi
3839fi
3840
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003841#########################################
3842# zlib check
3843
3844if test "$zlib" != "no" ; then
3845 if $pkg_config --exists zlib; then
3846 zlib_cflags=$($pkg_config --cflags zlib)
3847 zlib_libs=$($pkg_config --libs zlib)
3848 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3849 LIBS="$zlib_libs $LIBS"
3850 else
3851 cat > $TMPC << EOF
3852#include <zlib.h>
3853int main(void) { zlibVersion(); return 0; }
3854EOF
3855 if compile_prog "" "-lz" ; then
3856 LIBS="$LIBS -lz"
3857 else
3858 error_exit "zlib check failed" \
3859 "Make sure to have the zlib libs and headers installed."
3860 fi
3861 fi
3862fi
3863
Fam Zhenge26110c2014-02-10 14:48:57 +08003864##########################################
3865# SHA command probe for modules
3866if test "$modules" = yes; then
3867 shacmd_probe="sha1sum sha1 shasum"
3868 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003869 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003870 shacmd="$c"
3871 break
3872 fi
3873 done
3874 if test "$shacmd" = ""; then
3875 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3876 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003877fi
3878
3879##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003880# pixman support probe
3881
Eric Blakee633a5c2019-02-04 20:39:37 -06003882if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003883 pixman_cflags=
3884 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003885elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003886 pixman_cflags=$($pkg_config --cflags pixman-1)
3887 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003888else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003889 error_exit "pixman >= 0.21.8 not present." \
3890 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003891fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003892
3893##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003894# libmpathpersist probe
3895
3896if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003897 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003898 cat > $TMPC <<EOF
3899#include <libudev.h>
3900#include <mpath_persist.h>
3901unsigned mpath_mx_alloc_len = 1024;
3902int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003903static struct config *multipath_conf;
3904extern struct udev *udev;
3905extern struct config *get_multipath_config(void);
3906extern void put_multipath_config(struct config *conf);
3907struct udev *udev;
3908struct config *get_multipath_config(void) { return multipath_conf; }
3909void put_multipath_config(struct config *conf) { }
3910
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003911int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003912 udev = udev_new();
3913 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003914 return 0;
3915}
3916EOF
3917 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3918 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003919 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003920 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003921 # probe for the old API
3922 cat > $TMPC <<EOF
3923#include <libudev.h>
3924#include <mpath_persist.h>
3925unsigned mpath_mx_alloc_len = 1024;
3926int logsink;
3927int main(void) {
3928 struct udev *udev = udev_new();
3929 mpath_lib_init(udev);
3930 return 0;
3931}
3932EOF
3933 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3934 mpathpersist=yes
3935 mpathpersist_new_api=no
3936 else
3937 mpathpersist=no
3938 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003939 fi
3940else
3941 mpathpersist=no
3942fi
3943
3944##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003945# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003946PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003947
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003948pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003949cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003950#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003951static void *f(void *p) { return NULL; }
3952int main(void) {
3953 pthread_t thread;
3954 pthread_create(&thread, 0, f, 0);
3955 return 0;
3956}
blueswir1414f0da2008-08-15 18:20:52 +00003957EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003958if compile_prog "" "" ; then
3959 pthread=yes
3960else
3961 for pthread_lib in $PTHREADLIBS_LIST; do
3962 if compile_prog "" "$pthread_lib" ; then
3963 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003964 found=no
3965 for lib_entry in $LIBS; do
3966 if test "$lib_entry" = "$pthread_lib"; then
3967 found=yes
3968 break
3969 fi
3970 done
3971 if test "$found" = "no"; then
3972 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003973 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003974 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003975 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003976 break
3977 fi
3978 done
3979fi
blueswir1414f0da2008-08-15 18:20:52 +00003980
Eric Blakee633a5c2019-02-04 20:39:37 -06003981if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003982 error_exit "pthread check failed" \
3983 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003984fi
3985
Roman Bolshakov479a5742018-12-17 23:26:01 +03003986# check for pthread_setname_np with thread id
3987pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003988cat > $TMPC << EOF
3989#include <pthread.h>
3990
3991static void *f(void *p) { return NULL; }
3992int main(void)
3993{
3994 pthread_t thread;
3995 pthread_create(&thread, 0, f, 0);
3996 pthread_setname_np(thread, "QEMU");
3997 return 0;
3998}
3999EOF
4000if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03004001 pthread_setname_np_w_tid=yes
4002fi
4003
4004# check for pthread_setname_np without thread id
4005pthread_setname_np_wo_tid=no
4006cat > $TMPC << EOF
4007#include <pthread.h>
4008
4009static void *f(void *p) { pthread_setname_np("QEMU"); }
4010int main(void)
4011{
4012 pthread_t thread;
4013 pthread_create(&thread, 0, f, 0);
4014 return 0;
4015}
4016EOF
4017if compile_prog "" "$pthread_lib" ; then
4018 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004019fi
4020
aliguoribf9298b2008-12-05 20:05:26 +00004021##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004022# rbd probe
4023if test "$rbd" != "no" ; then
4024 cat > $TMPC <<EOF
4025#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004026#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004027int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004028 rados_t cluster;
4029 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004030 return 0;
4031}
4032EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004033 rbd_libs="-lrbd -lrados"
4034 if compile_prog "" "$rbd_libs" ; then
4035 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004036 else
4037 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004038 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004039 fi
4040 rbd=no
4041 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004042fi
4043
4044##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004045# libssh probe
4046if test "$libssh" != "no" ; then
4047 if $pkg_config --exists libssh; then
4048 libssh_cflags=$($pkg_config libssh --cflags)
4049 libssh_libs=$($pkg_config libssh --libs)
4050 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004051 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004052 if test "$libssh" = "yes" ; then
4053 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004054 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004055 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004056 fi
4057fi
4058
4059##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004060# Check for libssh 0.8
4061# This is done like this instead of using the LIBSSH_VERSION_* and
4062# SSH_VERSION_* macros because some distributions in the past shipped
4063# snapshots of the future 0.8 from Git, and those snapshots did not
4064# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004065
Pino Toscanob10d49d2019-06-20 22:08:40 +02004066if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004067 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004068#include <libssh/libssh.h>
4069int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004070EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004071 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4072 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004073 fi
4074fi
4075
4076##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004077# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004078
4079if test "$linux_aio" != "no" ; then
4080 cat > $TMPC <<EOF
4081#include <libaio.h>
4082#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004083#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004084int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4085EOF
4086 if compile_prog "" "-laio" ; then
4087 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004088 else
4089 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004090 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004091 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004092 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004093 fi
4094fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004095##########################################
4096# linux-io-uring probe
4097
4098if test "$linux_io_uring" != "no" ; then
4099 if $pkg_config liburing; then
4100 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4101 linux_io_uring_libs=$($pkg_config --libs liburing)
4102 linux_io_uring=yes
Stefan Hajnoczi73fd2822020-03-05 17:08:04 +00004103
4104 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4105 # seen by programs linking the archive. It's not ideal, but just add the
4106 # library dependency globally.
4107 LIBS="$linux_io_uring_libs $LIBS"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004108 else
4109 if test "$linux_io_uring" = "yes" ; then
4110 feature_not_found "linux io_uring" "Install liburing devel"
4111 fi
4112 linux_io_uring=no
4113 fi
4114fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004115
4116##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004117# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004118
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004119if test "$tpm" = ""; then
4120 if test "$mingw32" = "yes"; then
4121 tpm=no
4122 else
4123 tpm=yes
4124 fi
4125elif test "$tpm" = "yes"; then
4126 if test "$mingw32" = "yes" ; then
4127 error_exit "TPM emulation only available on POSIX systems"
4128 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004129fi
4130
4131##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004132# attr probe
4133
4134if test "$attr" != "no" ; then
4135 cat > $TMPC <<EOF
4136#include <stdio.h>
4137#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004138#ifdef CONFIG_LIBATTR
4139#include <attr/xattr.h>
4140#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004141#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004142#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004143int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4144EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004145 if compile_prog "" "" ; then
4146 attr=yes
4147 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004148 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004149 attr=yes
4150 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004151 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004152 else
4153 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004154 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004155 fi
4156 attr=no
4157 fi
4158fi
4159
4160##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004161# iovec probe
4162cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004163#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004164#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004165#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004166int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004167EOF
4168iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004169if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004170 iovec=yes
4171fi
4172
aurel32f652e6a2008-12-16 10:43:48 +00004173##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004174# preadv probe
4175cat > $TMPC <<EOF
4176#include <sys/types.h>
4177#include <sys/uio.h>
4178#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004179int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004180EOF
4181preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004182if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004183 preadv=yes
4184fi
4185
4186##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004187# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004188# fdt support is mandatory for at least some target architectures,
4189# so insist on it if we're building those system emulators.
4190fdt_required=no
4191for target in $target_list; do
4192 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004193 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004194 fdt_required=yes
4195 ;;
4196 esac
4197done
4198
4199if test "$fdt_required" = "yes"; then
4200 if test "$fdt" = "no"; then
4201 error_exit "fdt disabled but some requested targets require it." \
4202 "You can turn off fdt only if you also disable all the system emulation" \
4203 "targets which need it (by specifying a cut down --target-list)."
4204 fi
4205 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004206elif test "$fdt" != "yes" ; then
4207 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004208fi
4209
Laurent Vivierd5999382019-06-21 15:05:44 +02004210# fdt is only required when building softmmu targets
4211if test -z "$fdt" -a "$softmmu" != "yes" ; then
4212 fdt="no"
4213fi
4214
Juan Quintela2df87df2009-08-12 18:29:54 +02004215if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004216 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004217 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004218 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004219 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004220#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004221#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004222int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004223EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004224 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004225 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004226 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004227 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004228 # have GIT checkout, so activate dtc submodule
4229 if test -e "${source_path}/.git" ; then
4230 git_submodules="${git_submodules} dtc"
4231 fi
4232 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004233 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004234 mkdir -p dtc
4235 if [ "$pwd_is_source_path" != "y" ] ; then
4236 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4237 symlink "$source_path/dtc/scripts" "dtc/scripts"
4238 fi
4239 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004240 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4241 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004242 elif test "$fdt" = "yes" ; then
4243 # Not a git build & no libfdt found, prompt for system install
4244 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4245 "Please install the DTC (libfdt) devel package"
4246 else
4247 # don't have and don't want
4248 fdt_libs=
4249 fdt=no
4250 fi
aurel32f652e6a2008-12-16 10:43:48 +00004251 fi
4252fi
4253
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004254libs_softmmu="$libs_softmmu $fdt_libs"
4255
Michael Walle20ff0752011-03-07 23:32:39 +01004256##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004257# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004258
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004259gbm="no"
4260if $pkg_config gbm; then
4261 gbm_cflags="$($pkg_config --cflags gbm)"
4262 gbm_libs="$($pkg_config --libs gbm)"
4263 gbm="yes"
4264fi
4265
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004266if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004267 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004268 if $pkg_config $opengl_pkgs; then
4269 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4270 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004271 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004272 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4273 gtk_gl="yes"
4274 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004275 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004276 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004277 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004278 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004279 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004280 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004281 opengl_libs=""
4282 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004283 fi
4284fi
4285
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004286if test "$opengl" = "yes"; then
4287 cat > $TMPC << EOF
4288#include <epoxy/egl.h>
4289#ifndef EGL_MESA_image_dma_buf_export
4290# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4291#endif
4292int main(void) { return 0; }
4293EOF
4294 if compile_prog "" "" ; then
4295 opengl_dmabuf=yes
4296 fi
4297fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004298
Eric Blakee633a5c2019-02-04 20:39:37 -06004299if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004300 for target in $target_list; do
4301 case $target in
4302 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4303 need_x11=yes
4304 ;;
4305 esac
4306 done
4307fi
4308
Klim Kireeved279a02018-01-12 12:01:19 +03004309##########################################
4310# libxml2 probe
4311if test "$libxml2" != "no" ; then
4312 if $pkg_config --exists libxml-2.0; then
4313 libxml2="yes"
4314 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4315 libxml2_libs=$($pkg_config --libs libxml-2.0)
4316 else
4317 if test "$libxml2" = "yes"; then
4318 feature_not_found "libxml2" "Install libxml2 devel"
4319 fi
4320 libxml2="no"
4321 fi
4322fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004323
Bharata B Raoeb100392012-09-24 14:42:45 +05304324##########################################
4325# glusterfs probe
4326if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004327 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304328 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004329 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4330 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004331 if $pkg_config --atleast-version=4 glusterfs-api; then
4332 glusterfs_xlator_opt="yes"
4333 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004334 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304335 glusterfs_discard="yes"
4336 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304337 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304338 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304339 glusterfs_zerofill="yes"
4340 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004341 cat > $TMPC << EOF
4342#include <glusterfs/api/glfs.h>
4343
4344int
4345main(void)
4346{
4347 /* new glfs_ftruncate() passes two additional args */
4348 return glfs_ftruncate(NULL, 0, NULL, NULL);
4349}
4350EOF
4351 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4352 glusterfs_ftruncate_has_stat="yes"
4353 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004354 cat > $TMPC << EOF
4355#include <glusterfs/api/glfs.h>
4356
4357/* new glfs_io_cbk() passes two additional glfs_stat structs */
4358static void
4359glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4360{}
4361
4362int
4363main(void)
4364{
4365 glfs_io_cbk iocb = &glusterfs_iocb;
4366 iocb(NULL, 0 , NULL, NULL, NULL);
4367 return 0;
4368}
4369EOF
4370 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4371 glusterfs_iocb_has_stat="yes"
4372 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304373 else
4374 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004375 feature_not_found "GlusterFS backend support" \
4376 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304377 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304378 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304379 fi
4380fi
4381
aurel3239386ac2009-04-15 19:48:17 +00004382# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004383# emulator. This is done because older glibc versions don't
4384# have syscall stubs for these implemented. In that case we
4385# don't provide them even if kernel supports them.
4386#
4387inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004388cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004389#include <sys/inotify.h>
4390
4391int
4392main(void)
4393{
4394 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004395 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004396}
4397EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004398if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004399 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004400fi
4401
Riku Voipioc05c7a72010-03-26 15:25:11 +00004402inotify1=no
4403cat > $TMPC << EOF
4404#include <sys/inotify.h>
4405
4406int
4407main(void)
4408{
4409 /* try to start inotify */
4410 return inotify_init1(0);
4411}
4412EOF
4413if compile_prog "" "" ; then
4414 inotify1=yes
4415fi
4416
Riku Voipio099d6b02009-05-05 12:10:04 +03004417# check if pipe2 is there
4418pipe2=no
4419cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004420#include <unistd.h>
4421#include <fcntl.h>
4422
4423int main(void)
4424{
4425 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004426 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004427}
4428EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004429if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004430 pipe2=yes
4431fi
4432
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004433# check if accept4 is there
4434accept4=no
4435cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004436#include <sys/socket.h>
4437#include <stddef.h>
4438
4439int main(void)
4440{
4441 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4442 return 0;
4443}
4444EOF
4445if compile_prog "" "" ; then
4446 accept4=yes
4447fi
4448
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304449# check if tee/splice is there. vmsplice was added same time.
4450splice=no
4451cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304452#include <unistd.h>
4453#include <fcntl.h>
4454#include <limits.h>
4455
4456int main(void)
4457{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004458 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304459 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4460 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4461 return 0;
4462}
4463EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004464if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304465 splice=yes
4466fi
4467
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004468##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004469# libnuma probe
4470
4471if test "$numa" != "no" ; then
4472 cat > $TMPC << EOF
4473#include <numa.h>
4474int main(void) { return numa_available(); }
4475EOF
4476
4477 if compile_prog "" "-lnuma" ; then
4478 numa=yes
4479 libs_softmmu="-lnuma $libs_softmmu"
4480 else
4481 if test "$numa" = "yes" ; then
4482 feature_not_found "numa" "install numactl devel"
4483 fi
4484 numa=no
4485 fi
4486fi
4487
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004488if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4489 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4490 exit 1
4491fi
4492
Yang Zhong5a22ab72017-12-20 21:16:46 +08004493# Even if malloc_trim() is available, these non-libc memory allocators
4494# do not support it.
4495if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4496 if test "$malloc_trim" = "yes" ; then
4497 echo "Disabling malloc_trim with non-libc memory allocator"
4498 fi
4499 malloc_trim="no"
4500fi
4501
4502#######################################
4503# malloc_trim
4504
4505if test "$malloc_trim" != "no" ; then
4506 cat > $TMPC << EOF
4507#include <malloc.h>
4508int main(void) { malloc_trim(0); return 0; }
4509EOF
4510 if compile_prog "" "" ; then
4511 malloc_trim="yes"
4512 else
4513 malloc_trim="no"
4514 fi
4515fi
4516
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004517##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004518# tcmalloc probe
4519
4520if test "$tcmalloc" = "yes" ; then
4521 cat > $TMPC << EOF
4522#include <stdlib.h>
4523int main(void) { malloc(1); return 0; }
4524EOF
4525
4526 if compile_prog "" "-ltcmalloc" ; then
4527 LIBS="-ltcmalloc $LIBS"
4528 else
4529 feature_not_found "tcmalloc" "install gperftools devel"
4530 fi
4531fi
4532
4533##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004534# jemalloc probe
4535
4536if test "$jemalloc" = "yes" ; then
4537 cat > $TMPC << EOF
4538#include <stdlib.h>
4539int main(void) { malloc(1); return 0; }
4540EOF
4541
4542 if compile_prog "" "-ljemalloc" ; then
4543 LIBS="-ljemalloc $LIBS"
4544 else
4545 feature_not_found "jemalloc" "install jemalloc devel"
4546 fi
4547fi
4548
4549##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004550# signalfd probe
4551signalfd="no"
4552cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004553#include <unistd.h>
4554#include <sys/syscall.h>
4555#include <signal.h>
4556int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4557EOF
4558
4559if compile_prog "" "" ; then
4560 signalfd=yes
4561fi
4562
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004563# check if optreset global is declared by <getopt.h>
4564optreset="no"
4565cat > $TMPC << EOF
4566#include <getopt.h>
4567int main(void) { return optreset; }
4568EOF
4569
4570if compile_prog "" "" ; then
4571 optreset=yes
4572fi
4573
Riku Voipioc2882b92009-08-12 15:08:24 +03004574# check if eventfd is supported
4575eventfd=no
4576cat > $TMPC << EOF
4577#include <sys/eventfd.h>
4578
4579int main(void)
4580{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004581 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004582}
4583EOF
4584if compile_prog "" "" ; then
4585 eventfd=yes
4586fi
4587
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004588# check if memfd is supported
4589memfd=no
4590cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004591#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004592
4593int main(void)
4594{
4595 return memfd_create("foo", MFD_ALLOW_SEALING);
4596}
4597EOF
4598if compile_prog "" "" ; then
4599 memfd=yes
4600fi
4601
Cortland Tölva955727d2018-10-08 09:35:19 -07004602# check for usbfs
4603have_usbfs=no
4604if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004605 cat > $TMPC << EOF
4606#include <linux/usbdevice_fs.h>
4607
4608#ifndef USBDEVFS_GET_CAPABILITIES
4609#error "USBDEVFS_GET_CAPABILITIES undefined"
4610#endif
4611
4612#ifndef USBDEVFS_DISCONNECT_CLAIM
4613#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4614#endif
4615
4616int main(void)
4617{
4618 return 0;
4619}
4620EOF
4621 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004622 have_usbfs=yes
4623 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004624fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004625
Ulrich Hechtd0927932009-09-17 20:22:14 +03004626# check for fallocate
4627fallocate=no
4628cat > $TMPC << EOF
4629#include <fcntl.h>
4630
4631int main(void)
4632{
4633 fallocate(0, 0, 0, 0);
4634 return 0;
4635}
4636EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004637if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004638 fallocate=yes
4639fi
4640
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004641# check for fallocate hole punching
4642fallocate_punch_hole=no
4643cat > $TMPC << EOF
4644#include <fcntl.h>
4645#include <linux/falloc.h>
4646
4647int main(void)
4648{
4649 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4650 return 0;
4651}
4652EOF
4653if compile_prog "" "" ; then
4654 fallocate_punch_hole=yes
4655fi
4656
Denis V. Lunevb953f072015-01-30 11:42:14 +03004657# check that fallocate supports range zeroing inside the file
4658fallocate_zero_range=no
4659cat > $TMPC << EOF
4660#include <fcntl.h>
4661#include <linux/falloc.h>
4662
4663int main(void)
4664{
4665 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4666 return 0;
4667}
4668EOF
4669if compile_prog "" "" ; then
4670 fallocate_zero_range=yes
4671fi
4672
Kevin Wolfed911432014-09-29 17:12:59 +02004673# check for posix_fallocate
4674posix_fallocate=no
4675cat > $TMPC << EOF
4676#include <fcntl.h>
4677
4678int main(void)
4679{
4680 posix_fallocate(0, 0, 0);
4681 return 0;
4682}
4683EOF
4684if compile_prog "" "" ; then
4685 posix_fallocate=yes
4686fi
4687
Peter Maydellc727f472011-01-06 11:05:10 +00004688# check for sync_file_range
4689sync_file_range=no
4690cat > $TMPC << EOF
4691#include <fcntl.h>
4692
4693int main(void)
4694{
4695 sync_file_range(0, 0, 0, 0);
4696 return 0;
4697}
4698EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004699if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004700 sync_file_range=yes
4701fi
4702
Peter Maydelldace20d2011-01-10 13:11:24 +00004703# check for linux/fiemap.h and FS_IOC_FIEMAP
4704fiemap=no
4705cat > $TMPC << EOF
4706#include <sys/ioctl.h>
4707#include <linux/fs.h>
4708#include <linux/fiemap.h>
4709
4710int main(void)
4711{
4712 ioctl(0, FS_IOC_FIEMAP, 0);
4713 return 0;
4714}
4715EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004716if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004717 fiemap=yes
4718fi
4719
Ulrich Hechtd0927932009-09-17 20:22:14 +03004720# check for dup3
4721dup3=no
4722cat > $TMPC << EOF
4723#include <unistd.h>
4724
4725int main(void)
4726{
4727 dup3(0, 0, 0);
4728 return 0;
4729}
4730EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004731if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004732 dup3=yes
4733fi
4734
Alex Bligh4e0c6522013-08-21 16:02:43 +01004735# check for ppoll support
4736ppoll=no
4737cat > $TMPC << EOF
4738#include <poll.h>
4739
4740int main(void)
4741{
4742 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4743 ppoll(&pfd, 1, 0, 0);
4744 return 0;
4745}
4746EOF
4747if compile_prog "" "" ; then
4748 ppoll=yes
4749fi
4750
Alex Blighcd758dd2013-08-21 16:02:44 +01004751# check for prctl(PR_SET_TIMERSLACK , ... ) support
4752prctl_pr_set_timerslack=no
4753cat > $TMPC << EOF
4754#include <sys/prctl.h>
4755
4756int main(void)
4757{
4758 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4759 return 0;
4760}
4761EOF
4762if compile_prog "" "" ; then
4763 prctl_pr_set_timerslack=yes
4764fi
4765
Peter Maydell3b6edd12011-02-15 18:35:05 +00004766# check for epoll support
4767epoll=no
4768cat > $TMPC << EOF
4769#include <sys/epoll.h>
4770
4771int main(void)
4772{
4773 epoll_create(0);
4774 return 0;
4775}
4776EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004777if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004778 epoll=yes
4779fi
4780
Peter Maydell227f0212016-06-06 19:58:11 +01004781# epoll_create1 is a later addition
4782# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004783epoll_create1=no
4784cat > $TMPC << EOF
4785#include <sys/epoll.h>
4786
4787int main(void)
4788{
Peter Maydell19e83f62011-04-26 16:56:40 +01004789 /* Note that we use epoll_create1 as a value, not as
4790 * a function being called. This is necessary so that on
4791 * old SPARC glibc versions where the function was present in
4792 * the library but not declared in the header file we will
4793 * fail the configure check. (Otherwise we will get a compiler
4794 * warning but not an error, and will proceed to fail the
4795 * qemu compile where we compile with -Werror.)
4796 */
Blue Swirlc075a722012-08-09 20:21:25 +00004797 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004798}
4799EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004800if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004801 epoll_create1=yes
4802fi
4803
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004804# check for sendfile support
4805sendfile=no
4806cat > $TMPC << EOF
4807#include <sys/sendfile.h>
4808
4809int main(void)
4810{
4811 return sendfile(0, 0, 0, 0);
4812}
4813EOF
4814if compile_prog "" "" ; then
4815 sendfile=yes
4816fi
4817
Riku Voipio51834342014-06-22 11:25:42 +01004818# check for timerfd support (glibc 2.8 and newer)
4819timerfd=no
4820cat > $TMPC << EOF
4821#include <sys/timerfd.h>
4822
4823int main(void)
4824{
4825 return(timerfd_create(CLOCK_REALTIME, 0));
4826}
4827EOF
4828if compile_prog "" "" ; then
4829 timerfd=yes
4830fi
4831
Riku Voipio9af5c902014-08-12 15:58:57 +03004832# check for setns and unshare support
4833setns=no
4834cat > $TMPC << EOF
4835#include <sched.h>
4836
4837int main(void)
4838{
4839 int ret;
4840 ret = setns(0, 0);
4841 ret = unshare(0);
4842 return ret;
4843}
4844EOF
4845if compile_prog "" "" ; then
4846 setns=yes
4847fi
4848
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004849# clock_adjtime probe
4850clock_adjtime=no
4851cat > $TMPC <<EOF
4852#include <time.h>
4853
4854int main(void)
4855{
4856 return clock_adjtime(0, 0);
4857}
4858EOF
4859clock_adjtime=no
4860if compile_prog "" "" ; then
4861 clock_adjtime=yes
4862fi
4863
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004864# syncfs probe
4865syncfs=no
4866cat > $TMPC <<EOF
4867#include <unistd.h>
4868
4869int main(void)
4870{
4871 return syncfs(0);
4872}
4873EOF
4874syncfs=no
4875if compile_prog "" "" ; then
4876 syncfs=yes
4877fi
4878
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004879# check for kcov support (kernel must be 4.4+, compiled with certain options)
4880kcov=no
4881if check_include sys/kcov.h ; then
4882 kcov=yes
4883fi
4884
Peter Maydell5f71eac2019-03-07 14:26:46 +00004885# Check we have a new enough version of sphinx-build
4886has_sphinx_build() {
4887 # This is a bit awkward but works: create a trivial document and
4888 # try to run it with our configuration file (which enforces a
4889 # version requirement). This will fail if either
4890 # sphinx-build doesn't exist at all or if it is too old.
4891 mkdir -p "$TMPDIR1/sphinx"
4892 touch "$TMPDIR1/sphinx/index.rst"
Markus Armbruster903458c2020-02-14 18:18:41 +01004893 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004894}
4895
pbrookcc8ae6d2006-04-23 17:57:59 +00004896# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004897if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004898 if has_sphinx_build; then
4899 sphinx_ok=yes
4900 else
4901 sphinx_ok=no
4902 fi
4903 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004904 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004905 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004906 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004907 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4908 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4909 fi
4910 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004911 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004912 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004913 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004914fi
4915
Stefan Weilf514f412009-10-11 12:44:07 +02004916# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004917byteswap_h=no
4918cat > $TMPC << EOF
4919#include <byteswap.h>
4920int main(void) { return bswap_32(0); }
4921EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004922if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004923 byteswap_h=yes
4924fi
4925
Stefan Weil75f13592013-01-05 12:17:38 +01004926# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004927bswap_h=no
4928cat > $TMPC << EOF
4929#include <sys/endian.h>
4930#include <sys/types.h>
4931#include <machine/bswap.h>
4932int main(void) { return bswap32(0); }
4933EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004934if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004935 bswap_h=yes
4936fi
4937
aliguorida93a1f2008-12-12 20:02:52 +00004938##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004939# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004940if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004941 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004942 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004943 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4944 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004945 else
4946 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004947 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004948 fi
4949 libiscsi="no"
4950 fi
4951fi
4952
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004953##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004954# Do we need libm
4955cat > $TMPC << EOF
4956#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004957int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004958EOF
4959if compile_prog "" "" ; then
4960 :
4961elif compile_prog "" "-lm" ; then
4962 LIBS="-lm $LIBS"
4963 libs_qga="-lm $libs_qga"
4964else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004965 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004966fi
4967
4968##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004969# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004970# uClibc provides 2 versions of clock_gettime(), one with realtime
4971# support and one without. This means that the clock_gettime() don't
4972# need -lrt. We still need it for timer_create() so we check for this
4973# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004974cat > $TMPC <<EOF
4975#include <signal.h>
4976#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004977int main(void) {
4978 timer_create(CLOCK_REALTIME, NULL, NULL);
4979 return clock_gettime(CLOCK_REALTIME, NULL);
4980}
aliguorida93a1f2008-12-12 20:02:52 +00004981EOF
4982
Juan Quintela52166aa2009-08-03 14:46:03 +02004983if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004984 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004985# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004986elif compile_prog "" "$pthread_lib -lrt" ; then
4987 LIBS="$LIBS -lrt"
4988 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004989fi
4990
Thomas Huthd99e97e2019-01-17 18:14:08 +01004991# Check whether we need to link libutil for openpty()
4992cat > $TMPC << EOF
4993extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4994int main(void) { return openpty(0, 0, 0, 0, 0); }
4995EOF
4996
4997if ! compile_prog "" "" ; then
4998 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004999 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01005000 libs_tools="-lutil $libs_tools"
5001 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005002fi
5003
Blue Swirlde5071c2009-09-12 09:58:46 +00005004##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005005# spice probe
5006if test "$spice" != "no" ; then
5007 cat > $TMPC << EOF
5008#include <spice.h>
5009int main(void) { spice_server_new(); return 0; }
5010EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005011 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5012 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005013 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005014 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005015 compile_prog "$spice_cflags" "$spice_libs" ; then
5016 spice="yes"
5017 libs_softmmu="$libs_softmmu $spice_libs"
5018 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005019 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5020 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005021 else
5022 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005023 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005024 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005025 fi
5026 spice="no"
5027 fi
5028fi
5029
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005030# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005031if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005032 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005033 libcacard_cflags=$($pkg_config --cflags libcacard)
5034 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005035 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005036 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005037 if test "$smartcard" = "yes"; then
5038 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005039 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005040 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005041 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005042fi
5043
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005044# check for libusb
5045if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005046 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005047 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005048 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5049 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005050 else
5051 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005052 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005053 fi
5054 libusb="no"
5055 fi
5056fi
5057
Hans de Goede69354a82011-07-19 11:04:10 +02005058# check for usbredirparser for usb network redirection support
5059if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005060 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005061 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005062 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5063 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005064 else
5065 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005066 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005067 fi
5068 usb_redir="no"
5069 fi
5070fi
5071
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005072##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005073# check if we have VSS SDK headers for win
5074
Eric Blakee633a5c2019-02-04 20:39:37 -06005075if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5076 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005077 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005078 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005079 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5080 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005081 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005082 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5083 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005084 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005085 esac
5086 cat > $TMPC << EOF
5087#define __MIDL_user_allocate_free_DEFINED__
5088#include <inc/win2003/vss.h>
5089int main(void) { return VSS_CTX_BACKUP; }
5090EOF
5091 if compile_prog "$vss_win32_include" "" ; then
5092 guest_agent_with_vss="yes"
5093 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005094 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005095 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005096 else
5097 if test "$vss_win32_sdk" != "" ; then
5098 echo "ERROR: Please download and install Microsoft VSS SDK:"
5099 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5100 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5101 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5102 echo "ERROR: The headers are extracted in the directory \`inc'."
5103 feature_not_found "VSS support"
5104 fi
5105 guest_agent_with_vss="no"
5106 fi
5107fi
5108
5109##########################################
5110# lookup Windows platform SDK (if not specified)
5111# The SDK is needed only to build .tlb (type library) file of guest agent
5112# VSS provider from the source. It is usually unnecessary because the
5113# pre-compiled .tlb file is included.
5114
Eric Blakee633a5c2019-02-04 20:39:37 -06005115if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5116 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005117 if test -z "$win_sdk"; then
5118 programfiles="$PROGRAMFILES"
5119 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5120 if test -n "$programfiles"; then
5121 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5122 else
5123 feature_not_found "Windows SDK"
5124 fi
5125 elif test "$win_sdk" = "no"; then
5126 win_sdk=""
5127 fi
5128fi
5129
5130##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005131# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005132if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005133 cat > $TMPC << EOF
5134#include <windows.h>
5135#include <ntddscsi.h>
5136int main(void) {
5137#if !defined(IOCTL_SCSI_GET_ADDRESS)
5138#error Missing required ioctl definitions
5139#endif
5140 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5141 return addr.Lun;
5142}
5143EOF
5144 if compile_prog "" "" ; then
5145 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005146 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005147 fi
5148fi
5149
5150##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005151# virgl renderer probe
5152
5153if test "$virglrenderer" != "no" ; then
5154 cat > $TMPC << EOF
5155#include <virglrenderer.h>
5156int main(void) { virgl_renderer_poll(); return 0; }
5157EOF
5158 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5159 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005160 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005161 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5162 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5163 virglrenderer="yes"
5164 else
5165 if test "$virglrenderer" = "yes" ; then
5166 feature_not_found "virglrenderer"
5167 fi
5168 virglrenderer="no"
5169 fi
5170fi
5171
5172##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005173# capstone
5174
Richard Hendersone219c492017-09-28 09:01:23 -07005175case "$capstone" in
5176 "" | yes)
5177 if $pkg_config capstone; then
5178 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005179 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005180 capstone=git
5181 elif test -e "${source_path}/capstone/Makefile" ; then
5182 capstone=internal
5183 elif test -z "$capstone" ; then
5184 capstone=no
5185 else
5186 feature_not_found "capstone" "Install capstone devel or git submodule"
5187 fi
5188 ;;
5189
5190 system)
5191 if ! $pkg_config capstone; then
5192 feature_not_found "capstone" "Install capstone devel"
5193 fi
5194 ;;
5195esac
5196
5197case "$capstone" in
5198 git | internal)
5199 if test "$capstone" = git; then
5200 git_submodules="${git_submodules} capstone"
5201 fi
5202 mkdir -p capstone
5203 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5204 if test "$mingw32" = "yes"; then
5205 LIBCAPSTONE=capstone.lib
5206 else
5207 LIBCAPSTONE=libcapstone.a
5208 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005209 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005210 ;;
5211
5212 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005213 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005214 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005215 ;;
5216
5217 no)
5218 ;;
5219 *)
5220 error_exit "Unknown state for capstone: $capstone"
5221 ;;
5222esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005223
5224##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005225# check if we have fdatasync
5226
5227fdatasync=no
5228cat > $TMPC << EOF
5229#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005230int main(void) {
5231#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5232return fdatasync(0);
5233#else
Stefan Weile172fe12012-04-06 21:33:20 +02005234#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005235#endif
5236}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005237EOF
5238if compile_prog "" "" ; then
5239 fdatasync=yes
5240fi
5241
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005242##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005243# check if we have madvise
5244
5245madvise=no
5246cat > $TMPC << EOF
5247#include <sys/types.h>
5248#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005249#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005250int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5251EOF
5252if compile_prog "" "" ; then
5253 madvise=yes
5254fi
5255
5256##########################################
5257# check if we have posix_madvise
5258
5259posix_madvise=no
5260cat > $TMPC << EOF
5261#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005262#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005263int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5264EOF
5265if compile_prog "" "" ; then
5266 posix_madvise=yes
5267fi
5268
5269##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005270# check if we have posix_memalign()
5271
5272posix_memalign=no
5273cat > $TMPC << EOF
5274#include <stdlib.h>
5275int main(void) {
5276 void *p;
5277 return posix_memalign(&p, 8, 8);
5278}
5279EOF
5280if compile_prog "" "" ; then
5281 posix_memalign=yes
5282fi
5283
5284##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005285# check if we have posix_syslog
5286
5287posix_syslog=no
5288cat > $TMPC << EOF
5289#include <syslog.h>
5290int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5291EOF
5292if compile_prog "" "" ; then
5293 posix_syslog=yes
5294fi
5295
5296##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005297# check if we have sem_timedwait
5298
5299sem_timedwait=no
5300cat > $TMPC << EOF
5301#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005302int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005303EOF
5304if compile_prog "" "" ; then
5305 sem_timedwait=yes
5306fi
5307
5308##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005309# check if we have strchrnul
5310
5311strchrnul=no
5312cat > $TMPC << EOF
5313#include <string.h>
5314int main(void);
5315// Use a haystack that the compiler shouldn't be able to constant fold
5316char *haystack = (char*)&main;
5317int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5318EOF
5319if compile_prog "" "" ; then
5320 strchrnul=yes
5321fi
5322
Jiufei Xue8a792b02019-04-17 03:08:56 +08005323#########################################
5324# check if we have st_atim
5325
5326st_atim=no
5327cat > $TMPC << EOF
5328#include <sys/stat.h>
5329#include <stddef.h>
5330int main(void) { return offsetof(struct stat, st_atim); }
5331EOF
5332if compile_prog "" "" ; then
5333 st_atim=yes
5334fi
5335
Keno Fischer5c99fa32018-06-29 12:32:10 +02005336##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005337# check if trace backend exists
5338
Lluís Vilanova5b808272014-05-27 15:02:14 +02005339$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005340if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005341 error_exit "invalid trace backends" \
5342 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005343fi
5344
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005345##########################################
5346# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005347if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005348 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005349#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005350int main(void) { return 0; }
5351EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005352 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005353 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005354 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005355 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005356 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005357 fi
5358 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005359 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005360 else
5361 urcu_bp_libs="-lurcu-bp"
5362 fi
5363
5364 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5365 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005366 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005367 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005368 fi
5369fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005370
5371##########################################
5372# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005373if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005374 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005375 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005376 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005377 trace_backend_stap="no"
5378 if has 'stap' ; then
5379 trace_backend_stap="yes"
5380 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005381fi
5382
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005383##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005384# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305385
Peter Maydell7c2acc72013-04-08 12:11:27 +01005386# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005387# is sigcontext. On Windows the only valid backend is the Windows
5388# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005389
5390ucontext_works=no
5391if test "$darwin" != "yes"; then
5392 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305393#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005394#ifdef __stub_makecontext
5395#error Ignoring glibc stub makecontext which will always fail
5396#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005397int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305398EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005399 if compile_prog "" "" ; then
5400 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305401 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005402fi
5403
5404if test "$coroutine" = ""; then
5405 if test "$mingw32" = "yes"; then
5406 coroutine=win32
5407 elif test "$ucontext_works" = "yes"; then
5408 coroutine=ucontext
5409 else
5410 coroutine=sigaltstack
5411 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005412else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005413 case $coroutine in
5414 windows)
5415 if test "$mingw32" != "yes"; then
5416 error_exit "'windows' coroutine backend only valid for Windows"
5417 fi
5418 # Unfortunately the user visible backend name doesn't match the
5419 # coroutine-*.c filename for this case, so we have to adjust it here.
5420 coroutine=win32
5421 ;;
5422 ucontext)
5423 if test "$ucontext_works" != "yes"; then
5424 feature_not_found "ucontext"
5425 fi
5426 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005427 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005428 if test "$mingw32" = "yes"; then
5429 error_exit "only the 'windows' coroutine backend is valid for Windows"
5430 fi
5431 ;;
5432 *)
5433 error_exit "unknown coroutine backend $coroutine"
5434 ;;
5435 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305436fi
5437
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005438if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005439 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005440fi
5441
Peter Lieven7d992e42016-09-27 11:58:45 +02005442if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005443 if test "$coroutine_pool" = "yes"; then
5444 echo "WARN: disabling coroutine pool for stack usage debugging"
5445 coroutine_pool=no
5446 fi
5447fi
5448
5449
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305450##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305451# check if we have open_by_handle_at
5452
Stefan Weil4e1797f2012-06-18 22:11:06 +02005453open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305454cat > $TMPC << EOF
5455#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005456#if !defined(AT_EMPTY_PATH)
5457# error missing definition
5458#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005459int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005460#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305461EOF
5462if compile_prog "" "" ; then
5463 open_by_handle_at=yes
5464fi
5465
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305466########################################
5467# check if we have linux/magic.h
5468
5469linux_magic_h=no
5470cat > $TMPC << EOF
5471#include <linux/magic.h>
5472int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005473 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305474}
5475EOF
5476if compile_prog "" "" ; then
5477 linux_magic_h=yes
5478fi
5479
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005480########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005481# check whether we can disable warning option with a pragma (this is needed
5482# to silence warnings in the headers of some versions of external libraries).
5483# This test has to be compiled with -Werror as otherwise an unknown pragma is
5484# only a warning.
5485#
5486# If we can't selectively disable warning in the code, disable -Werror so that
5487# the build doesn't fail anyway.
5488
Peter Maydell06d71fa2012-07-30 16:13:07 +01005489pragma_disable_unused_but_set=no
5490cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005491#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005492#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005493#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005494
Peter Maydell06d71fa2012-07-30 16:13:07 +01005495int main(void) {
5496 return 0;
5497}
5498EOF
5499if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005500 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005501else
5502 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005503fi
5504
5505########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005506# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005507
5508valgrind_h=no
5509cat > $TMPC << EOF
5510#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005511int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005512 return 0;
5513}
5514EOF
5515if compile_prog "" "" ; then
5516 valgrind_h=yes
5517fi
5518
5519########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005520# check if environ is declared
5521
5522has_environ=no
5523cat > $TMPC << EOF
5524#include <unistd.h>
5525int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005526 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005527 return 0;
5528}
5529EOF
5530if compile_prog "" "" ; then
5531 has_environ=yes
5532fi
5533
Richard Henderson76a347e2012-12-28 14:17:02 -08005534########################################
5535# check if cpuid.h is usable.
5536
Richard Henderson76a347e2012-12-28 14:17:02 -08005537cat > $TMPC << EOF
5538#include <cpuid.h>
5539int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005540 unsigned a, b, c, d;
5541 int max = __get_cpuid_max(0, 0);
5542
5543 if (max >= 1) {
5544 __cpuid(1, a, b, c, d);
5545 }
5546
5547 if (max >= 7) {
5548 __cpuid_count(7, 0, a, b, c, d);
5549 }
5550
5551 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005552}
5553EOF
5554if compile_prog "" "" ; then
5555 cpuid_h=yes
5556fi
5557
Richard Henderson5dd89902017-07-18 18:40:18 -10005558##########################################
5559# avx2 optimization requirement check
5560#
5561# There is no point enabling this if cpuid.h is not usable,
5562# since we won't be able to select the new routines.
5563
Eric Blakee633a5c2019-02-04 20:39:37 -06005564if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005565 cat > $TMPC << EOF
5566#pragma GCC push_options
5567#pragma GCC target("avx2")
5568#include <cpuid.h>
5569#include <immintrin.h>
5570static int bar(void *a) {
5571 __m256i x = *(__m256i *)a;
5572 return _mm256_testz_si256(x, x);
5573}
5574int main(int argc, char *argv[]) { return bar(argv[0]); }
5575EOF
5576 if compile_object "" ; then
5577 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005578 else
5579 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005580 fi
5581fi
5582
Robert Hoo6b8cd442020-02-29 20:34:34 +08005583##########################################
5584# avx512f optimization requirement check
5585#
5586# There is no point enabling this if cpuid.h is not usable,
5587# since we won't be able to select the new routines.
5588# by default, it is turned off.
5589# if user explicitly want to enable it, check environment
5590
5591if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5592 cat > $TMPC << EOF
5593#pragma GCC push_options
5594#pragma GCC target("avx512f")
5595#include <cpuid.h>
5596#include <immintrin.h>
5597static int bar(void *a) {
5598 __m512i x = *(__m512i *)a;
5599 return _mm512_test_epi64_mask(x, x);
5600}
5601int main(int argc, char *argv[])
5602{
5603 return bar(argv[0]);
5604}
5605EOF
5606 if ! compile_object "" ; then
5607 avx512f_opt="no"
5608 fi
5609else
5610 avx512f_opt="no"
5611fi
5612
Richard Hendersonf5401662013-02-16 12:46:59 -08005613########################################
5614# check if __[u]int128_t is usable.
5615
5616int128=no
5617cat > $TMPC << EOF
5618__int128_t a;
5619__uint128_t b;
5620int main (void) {
5621 a = a + b;
5622 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005623 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005624 return 0;
5625}
5626EOF
5627if compile_prog "" "" ; then
5628 int128=yes
5629fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005630
Richard Henderson7ebee432016-06-29 21:10:59 -07005631#########################################
5632# See if 128-bit atomic operations are supported.
5633
5634atomic128=no
5635if test "$int128" = "yes"; then
5636 cat > $TMPC << EOF
5637int main(void)
5638{
5639 unsigned __int128 x = 0, y = 0;
5640 y = __atomic_load_16(&x, 0);
5641 __atomic_store_16(&x, y, 0);
5642 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5643 return 0;
5644}
5645EOF
5646 if compile_prog "" "" ; then
5647 atomic128=yes
5648 fi
5649fi
5650
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005651cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005652if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005653 cat > $TMPC << EOF
5654int main(void)
5655{
5656 unsigned __int128 x = 0, y = 0;
5657 __sync_val_compare_and_swap_16(&x, y, x);
5658 return 0;
5659}
5660EOF
5661 if compile_prog "" "" ; then
5662 cmpxchg128=yes
5663 fi
5664fi
5665
Richard Hendersondf79b992016-09-02 12:23:57 -07005666#########################################
5667# See if 64-bit atomic operations are supported.
5668# Note that without __atomic builtins, we can only
5669# assume atomic loads/stores max at pointer size.
5670
5671cat > $TMPC << EOF
5672#include <stdint.h>
5673int main(void)
5674{
5675 uint64_t x = 0, y = 0;
5676#ifdef __ATOMIC_RELAXED
5677 y = __atomic_load_8(&x, 0);
5678 __atomic_store_8(&x, y, 0);
5679 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5680 __atomic_exchange_8(&x, y, 0);
5681 __atomic_fetch_add_8(&x, y, 0);
5682#else
5683 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5684 __sync_lock_test_and_set(&x, y);
5685 __sync_val_compare_and_swap(&x, y, 0);
5686 __sync_fetch_and_add(&x, y);
5687#endif
5688 return 0;
5689}
5690EOF
5691if compile_prog "" "" ; then
5692 atomic64=yes
5693fi
5694
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005695#########################################
5696# See if --dynamic-list is supported by the linker
5697ld_dynamic_list="no"
5698if test "$static" = "no" ; then
5699 cat > $TMPTXT <<EOF
5700{
5701 foo;
5702};
5703EOF
5704
5705 cat > $TMPC <<EOF
5706#include <stdio.h>
5707void foo(void);
5708
5709void foo(void)
5710{
5711 printf("foo\n");
5712}
5713
5714int main(void)
5715{
5716 foo();
5717 return 0;
5718}
5719EOF
5720
5721 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5722 ld_dynamic_list="yes"
5723 fi
5724fi
5725
5726#########################################
5727# See if -exported_symbols_list is supported by the linker
5728
5729ld_exported_symbols_list="no"
5730if test "$static" = "no" ; then
5731 cat > $TMPTXT <<EOF
5732 _foo
5733EOF
5734
5735 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5736 ld_exported_symbols_list="yes"
5737 fi
5738fi
5739
5740if test "$plugins" = "yes" &&
5741 test "$ld_dynamic_list" = "no" &&
5742 test "$ld_exported_symbols_list" = "no" ; then
5743 error_exit \
5744 "Plugin support requires dynamic linking and specifying a set of symbols " \
5745 "that are exported to plugins. Unfortunately your linker doesn't " \
5746 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5747 "for this purpose. You can't build with --static."
5748fi
5749
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005750########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005751# See if 16-byte vector operations are supported.
5752# Even without a vector unit the compiler may expand these.
5753# There is a bug in old GCC for PPC that crashes here.
5754# Unfortunately it's the system compiler for Centos 7.
5755
5756cat > $TMPC << EOF
5757typedef unsigned char U1 __attribute__((vector_size(16)));
5758typedef unsigned short U2 __attribute__((vector_size(16)));
5759typedef unsigned int U4 __attribute__((vector_size(16)));
5760typedef unsigned long long U8 __attribute__((vector_size(16)));
5761typedef signed char S1 __attribute__((vector_size(16)));
5762typedef signed short S2 __attribute__((vector_size(16)));
5763typedef signed int S4 __attribute__((vector_size(16)));
5764typedef signed long long S8 __attribute__((vector_size(16)));
5765static U1 a1, b1;
5766static U2 a2, b2;
5767static U4 a4, b4;
5768static U8 a8, b8;
5769static S1 c1;
5770static S2 c2;
5771static S4 c4;
5772static S8 c8;
5773static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005774void helper(void *d, void *a, int shift, int i);
5775void helper(void *d, void *a, int shift, int i)
5776{
5777 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5778 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5779 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5780 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5781}
Richard Hendersondb432672017-09-15 14:11:45 -07005782int main(void)
5783{
5784 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5785 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5786 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5787 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5788 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5789 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5790 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5791 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5792 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5793 return 0;
5794}
5795EOF
5796
5797vector16=no
5798if compile_prog "" "" ; then
5799 vector16=yes
5800fi
5801
5802########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005803# See if __attribute__((alias)) is supported.
5804# This false for Xcode 9, but has been remedied for Xcode 10.
5805# Unfortunately, travis uses Xcode 9 by default.
5806
5807attralias=no
5808cat > $TMPC << EOF
5809int x = 1;
5810extern const int y __attribute__((alias("x")));
5811int main(void) { return 0; }
5812EOF
5813if compile_prog "" "" ; then
5814 attralias=yes
5815fi
5816
5817########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005818# check if getauxval is available.
5819
5820getauxval=no
5821cat > $TMPC << EOF
5822#include <sys/auxv.h>
5823int main(void) {
5824 return getauxval(AT_HWCAP) == 0;
5825}
5826EOF
5827if compile_prog "" "" ; then
5828 getauxval=yes
5829fi
5830
John Snowfd0e6052015-03-25 18:57:39 -04005831########################################
5832# check if ccache is interfering with
5833# semantic analysis of macros
5834
John Snow5e4dfd32015-10-28 13:56:40 -04005835unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005836ccache_cpp2=no
5837cat > $TMPC << EOF
5838static const int Z = 1;
5839#define fn() ({ Z; })
5840#define TAUT(X) ((X) == Z)
5841#define PAREN(X, Y) (X == Y)
5842#define ID(X) (X)
5843int main(int argc, char *argv[])
5844{
5845 int x = 0, y = 0;
5846 x = ID(x);
5847 x = fn();
5848 fn();
5849 if (PAREN(x, y)) return 0;
5850 if (TAUT(Z)) return 0;
5851 return 0;
5852}
5853EOF
5854
5855if ! compile_object "-Werror"; then
5856 ccache_cpp2=yes
5857fi
5858
John Snowb553a042015-11-03 15:43:42 -05005859#################################################
5860# clang does not support glibc + FORTIFY_SOURCE.
5861
5862if test "$fortify_source" != "no"; then
5863 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5864 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005865 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005866 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005867 fortify_source="no";
5868 else
5869 fortify_source="yes"
5870 fi
5871fi
5872
Fam Zheng1efad062018-06-01 17:26:43 +08005873###############################################
5874# Check if copy_file_range is provided by glibc
5875have_copy_file_range=no
5876cat > $TMPC << EOF
5877#include <unistd.h>
5878int main(void) {
5879 copy_file_range(0, NULL, 0, NULL, 0, 0);
5880 return 0;
5881}
5882EOF
5883if compile_prog "" "" ; then
5884 have_copy_file_range=yes
5885fi
5886
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305887##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005888# check if struct fsxattr is available via linux/fs.h
5889
5890have_fsxattr=no
5891cat > $TMPC << EOF
5892#include <linux/fs.h>
5893struct fsxattr foo;
5894int main(void) {
5895 return 0;
5896}
5897EOF
5898if compile_prog "" "" ; then
5899 have_fsxattr=yes
5900fi
5901
Peter Maydellb66e10e2016-06-08 18:34:32 +01005902##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005903# check for usable membarrier system call
5904if test "$membarrier" = "yes"; then
5905 have_membarrier=no
5906 if test "$mingw32" = "yes" ; then
5907 have_membarrier=yes
5908 elif test "$linux" = "yes" ; then
5909 cat > $TMPC << EOF
5910 #include <linux/membarrier.h>
5911 #include <sys/syscall.h>
5912 #include <unistd.h>
5913 #include <stdlib.h>
5914 int main(void) {
5915 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5916 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5917 exit(0);
5918 }
5919EOF
5920 if compile_prog "" "" ; then
5921 have_membarrier=yes
5922 fi
5923 fi
5924 if test "$have_membarrier" = "no"; then
5925 feature_not_found "membarrier" "membarrier system call not available"
5926 fi
5927else
5928 # Do not enable it by default even for Mingw32, because it doesn't
5929 # work on Wine.
5930 membarrier=no
5931fi
5932
5933##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005934# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005935have_rtnetlink=no
5936cat > $TMPC << EOF
5937#include <linux/rtnetlink.h>
5938int main(void) {
5939 return IFLA_PROTO_DOWN;
5940}
5941EOF
5942if compile_prog "" "" ; then
5943 have_rtnetlink=yes
5944fi
5945
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005946##########################################
5947# check for usable AF_VSOCK environment
5948have_af_vsock=no
5949cat > $TMPC << EOF
5950#include <errno.h>
5951#include <sys/types.h>
5952#include <sys/socket.h>
5953#if !defined(AF_VSOCK)
5954# error missing AF_VSOCK flag
5955#endif
5956#include <linux/vm_sockets.h>
5957int main(void) {
5958 int sock, ret;
5959 struct sockaddr_vm svm;
5960 socklen_t len = sizeof(svm);
5961 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5962 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5963 if ((ret == -1) && (errno == ENOTCONN)) {
5964 return 0;
5965 }
5966 return -1;
5967}
5968EOF
5969if compile_prog "" "" ; then
5970 have_af_vsock=yes
5971fi
5972
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005973##########################################
5974# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005975have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005976cat > $TMPC << EOF
5977#include <errno.h>
5978#include <sys/types.h>
5979#include <sys/socket.h>
5980#include <linux/if_alg.h>
5981int main(void) {
5982 int sock;
5983 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5984 return sock;
5985}
5986EOF
5987if compile_prog "" "" ; then
5988 have_afalg=yes
5989fi
5990if test "$crypto_afalg" = "yes"
5991then
5992 if test "$have_afalg" != "yes"
5993 then
5994 error_exit "AF_ALG requested but could not be detected"
5995 fi
5996fi
5997
5998
James Clarke6969ec62016-06-06 12:02:50 +01005999#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006000# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00006001if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006002 cat > $TMPC << EOF
6003#include <Hypervisor/hv.h>
6004int main() { return 0;}
6005EOF
6006 if ! compile_object ""; then
6007 hvf='no'
6008 else
6009 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006010 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006011 fi
6012fi
6013
6014#################################################
James Clarke6969ec62016-06-06 12:02:50 +01006015# Sparc implicitly links with --relax, which is
6016# incompatible with -r, so --no-relax should be
6017# given. It does no harm to give it on other
6018# platforms too.
6019
6020# Note: the prototype is needed since QEMU_CFLAGS
6021# contains -Wmissing-prototypes
6022cat > $TMPC << EOF
6023extern int foo(void);
6024int foo(void) { return 0; }
6025EOF
6026if ! compile_object ""; then
6027 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6028fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01006029for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6030 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6031 LD_REL_FLAGS=$i
6032 break
6033 fi
6034done
6035if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6036 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006037fi
6038
Jan Vesely277abf12016-04-29 13:15:23 -04006039##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006040# check for sysmacros.h
6041
6042have_sysmacros=no
6043cat > $TMPC << EOF
6044#include <sys/sysmacros.h>
6045int main(void) {
6046 return makedev(0, 0);
6047}
6048EOF
6049if compile_prog "" "" ; then
6050 have_sysmacros=yes
6051fi
6052
6053##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006054# Veritas HyperScale block driver VxHS
6055# Check if libvxhs is installed
6056
6057if test "$vxhs" != "no" ; then
6058 cat > $TMPC <<EOF
6059#include <stdint.h>
6060#include <qnio/qnio_api.h>
6061
6062void *vxhs_callback;
6063
6064int main(void) {
6065 iio_init(QNIO_VERSION, vxhs_callback);
6066 return 0;
6067}
6068EOF
6069 vxhs_libs="-lvxhs -lssl"
6070 if compile_prog "" "$vxhs_libs" ; then
6071 vxhs=yes
6072 else
6073 if test "$vxhs" = "yes" ; then
6074 feature_not_found "vxhs block device" "Install libvxhs See github"
6075 fi
6076 vxhs=no
6077 fi
6078fi
6079
6080##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006081# check for _Static_assert()
6082
6083have_static_assert=no
6084cat > $TMPC << EOF
6085_Static_assert(1, "success");
6086int main(void) {
6087 return 0;
6088}
6089EOF
6090if compile_prog "" "" ; then
6091 have_static_assert=yes
6092fi
6093
6094##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006095# check for utmpx.h, it is missing e.g. on OpenBSD
6096
6097have_utmpx=no
6098cat > $TMPC << EOF
6099#include <utmpx.h>
6100struct utmpx user_info;
6101int main(void) {
6102 return 0;
6103}
6104EOF
6105if compile_prog "" "" ; then
6106 have_utmpx=yes
6107fi
6108
6109##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006110# check for getrandom()
6111
6112have_getrandom=no
6113cat > $TMPC << EOF
6114#include <sys/random.h>
6115int main(void) {
6116 return getrandom(0, 0, GRND_NONBLOCK);
6117}
6118EOF
6119if compile_prog "" "" ; then
6120 have_getrandom=yes
6121fi
6122
6123##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006124# checks for sanitizers
6125
Marc-André Lureau247724c2018-01-16 16:11:51 +01006126have_asan=no
6127have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006128have_asan_iface_h=no
6129have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006130
6131if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006132 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006133 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6134 have_asan=yes
6135 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006136
6137 # we could use a simple skeleton for flags checks, but this also
6138 # detect the static linking issue of ubsan, see also:
6139 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6140 cat > $TMPC << EOF
6141#include <stdlib.h>
6142int main(void) {
6143 void *tmp = malloc(10);
6144 return *(int *)(tmp + 2);
6145}
6146EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006147 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6148 have_ubsan=yes
6149 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006150
6151 if check_include "sanitizer/asan_interface.h" ; then
6152 have_asan_iface_h=yes
6153 fi
6154
6155 cat > $TMPC << EOF
6156#include <sanitizer/asan_interface.h>
6157int main(void) {
6158 __sanitizer_start_switch_fiber(0, 0, 0);
6159 return 0;
6160}
6161EOF
6162 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6163 have_asan_iface_fiber=yes
6164 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006165fi
6166
6167##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006168# checks for fuzzer
6169if test "$fuzzing" = "yes" ; then
6170 write_c_fuzzer_skeleton
6171 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6172 have_fuzzer=yes
6173 fi
6174fi
6175
6176##########################################
Junyan He17824402018-07-18 15:47:59 +08006177# check for libpmem
6178
6179if test "$libpmem" != "no"; then
6180 if $pkg_config --exists "libpmem"; then
6181 libpmem="yes"
6182 libpmem_libs=$($pkg_config --libs libpmem)
6183 libpmem_cflags=$($pkg_config --cflags libpmem)
6184 libs_softmmu="$libs_softmmu $libpmem_libs"
6185 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6186 else
6187 if test "$libpmem" = "yes" ; then
6188 feature_not_found "libpmem" "Install nvml or pmdk"
6189 fi
6190 libpmem="no"
6191 fi
6192fi
6193
6194##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006195# check for slirp
6196
Laurent Vivierd5999382019-06-21 15:05:44 +02006197# slirp is only required when building softmmu targets
6198if test -z "$slirp" -a "$softmmu" != "yes" ; then
6199 slirp="no"
6200fi
6201
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006202case "$slirp" in
6203 "" | yes)
6204 if $pkg_config slirp; then
6205 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006206 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6207 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006208 elif test -e "${source_path}/slirp/Makefile" ; then
6209 slirp=internal
6210 elif test -z "$slirp" ; then
6211 slirp=no
6212 else
6213 feature_not_found "slirp" "Install slirp devel or git submodule"
6214 fi
6215 ;;
6216
6217 system)
6218 if ! $pkg_config slirp; then
6219 feature_not_found "slirp" "Install slirp devel"
6220 fi
6221 ;;
6222esac
6223
6224case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006225 git | internal)
6226 if test "$slirp" = git; then
6227 git_submodules="${git_submodules} slirp"
6228 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006229 mkdir -p slirp
6230 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6231 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006232 if test "$mingw32" = "yes" ; then
6233 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6234 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006235 ;;
6236
6237 system)
6238 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6239 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6240 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6241 ;;
6242
6243 no)
6244 ;;
6245 *)
6246 error_exit "Unknown state for slirp: $slirp"
6247 ;;
6248esac
6249
6250
6251##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006252# End of CC checks
6253# After here, no more $cc or $ld runs
6254
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006255write_c_skeleton
6256
Blue Swirl1d728c32012-05-01 18:45:39 +00006257if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006258 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6259 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006260elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006261 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006262elif test "$debug" = "no"; then
6263 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006264fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006265
Marc-André Lureau247724c2018-01-16 16:11:51 +01006266if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006267 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6268 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006269 if test "$have_asan_iface_h" = "no" ; then
6270 echo "ASAN build enabled, but ASAN header missing." \
6271 "Without code annotation, the report may be inferior."
6272 elif test "$have_asan_iface_fiber" = "no" ; then
6273 echo "ASAN build enabled, but ASAN header is too old." \
6274 "Without code annotation, the report may be inferior."
6275 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006276fi
6277if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006278 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6279 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006280fi
6281
Peter Lieven6542aa92014-02-03 10:26:13 +01006282##########################################
6283# Do we have libnfs
6284if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006285 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006286 libnfs="yes"
6287 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006288 else
6289 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006290 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006291 fi
6292 libnfs="no"
6293 fi
6294fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006295
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006296##########################################
6297# Do we have libudev
6298if test "$libudev" != "no" ; then
6299 if $pkg_config libudev && test "$static" != "yes"; then
6300 libudev="yes"
6301 libudev_libs=$($pkg_config --libs libudev)
6302 else
6303 libudev="no"
6304 fi
6305fi
6306
Peter Maydell6ca026c2012-07-18 15:10:18 +01006307# Now we've finished running tests it's OK to add -Werror to the compiler flags
6308if test "$werror" = "yes"; then
6309 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6310fi
6311
Juan Quintelae86ecd42009-08-03 14:45:59 +02006312if test "$solaris" = "no" ; then
6313 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006314 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006315 fi
6316fi
6317
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006318# test if pod2man has --utf8 option
6319if pod2man --help | grep -q utf8; then
6320 POD2MAN="pod2man --utf8"
6321else
6322 POD2MAN="pod2man"
6323fi
6324
Blue Swirl952afb72010-09-19 08:36:34 +00006325# Use ASLR, no-SEH and DEP if available
6326if test "$mingw32" = "yes" ; then
6327 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006328 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006329 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006330 fi
6331 done
6332fi
6333
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006334# Disable OpenBSD W^X if available
6335if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6336 cat > $TMPC <<EOF
6337 int main(void) { return 0; }
6338EOF
6339 wx_ldflags="-Wl,-z,wxneeded"
6340 if compile_prog "" "$wx_ldflags"; then
6341 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6342 fi
6343fi
6344
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006345qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006346qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006347qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006348qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006349qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006350qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006351
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006352# We can only support ivshmem if we have eventfd
6353if [ "$eventfd" = "yes" ]; then
6354 ivshmem=yes
6355fi
6356
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006357tools=""
6358if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006359 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006360 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006361 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006362 fi
6363 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006364 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006365 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006366 if [ "$curl" = "yes" ]; then
6367 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006368 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006369fi
6370if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006371 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006372 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006373 virtfs=yes
6374 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6375 else
6376 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006377 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306378 fi
Andreas Färber17500372012-05-01 01:12:03 +02006379 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006380 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006381 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6382 mpath=yes
6383 else
6384 if test "$mpath" = yes; then
6385 error_exit "Multipath requires libmpathpersist devel"
6386 fi
6387 mpath=no
6388 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006389 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6390 else
6391 if test "$virtfs" = yes; then
6392 error_exit "VirtFS is supported only on Linux"
6393 fi
6394 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006395 if test "$mpath" = yes; then
6396 error_exit "Multipath is supported only on Linux"
6397 fi
6398 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306399 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006400 if test "$xkbcommon" = "yes"; then
6401 tools="qemu-keymap\$(EXESUF) $tools"
6402 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006403fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006404
6405# Probe for guest agent support/options
6406
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006407if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006408 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6409 guest_agent=no
6410 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006411 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006412 guest_agent=yes
6413 elif [ "$guest_agent" != yes ]; then
6414 guest_agent=no
6415 else
6416 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006417 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006418fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006419
Michael Roth9d6bc272015-08-26 10:49:13 -05006420# Guest agent Window MSI package
6421
6422if test "$guest_agent" != yes; then
6423 if test "$guest_agent_msi" = yes; then
6424 error_exit "MSI guest agent package requires guest agent enabled"
6425 fi
6426 guest_agent_msi=no
6427elif test "$mingw32" != "yes"; then
6428 if test "$guest_agent_msi" = "yes"; then
6429 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6430 fi
6431 guest_agent_msi=no
6432elif ! has wixl; then
6433 if test "$guest_agent_msi" = "yes"; then
6434 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6435 fi
6436 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006437else
6438 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6439 # disabled explicitly
6440 if test "$guest_agent_msi" != "no"; then
6441 guest_agent_msi=yes
6442 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006443fi
6444
Michael Roth1a349042015-08-26 11:14:31 -05006445if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006446 if test "$guest_agent_with_vss" = "yes"; then
6447 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6448 fi
6449
6450 if test "$QEMU_GA_MANUFACTURER" = ""; then
6451 QEMU_GA_MANUFACTURER=QEMU
6452 fi
6453
6454 if test "$QEMU_GA_DISTRO" = ""; then
6455 QEMU_GA_DISTRO=Linux
6456 fi
6457
6458 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006459 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006460 fi
6461
Stefan Weil89138852016-05-16 15:10:20 +02006462 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006463
6464 case "$cpu" in
6465 x86_64)
6466 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6467 ;;
6468 i386)
6469 QEMU_GA_MSI_ARCH="-D Arch=32"
6470 ;;
6471 *)
6472 error_exit "CPU $cpu not supported for building installation package"
6473 ;;
6474 esac
6475fi
6476
Paolo Bonzinica35f782010-05-26 16:08:29 +02006477# Mac OS X ships with a broken assembler
6478roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006479if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6480 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6481 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006482 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006483 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6484 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6485 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006486 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6487 ld_i386_emulation="$emu"
6488 roms="optionrom"
6489 break
6490 fi
6491 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006492fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006493
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006494# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006495if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006496 write_c_skeleton
6497 if compile_prog "-march=z900" ""; then
6498 roms="$roms s390-ccw"
6499 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006500fi
6501
Richard Henderson964c6fa2013-06-21 19:10:16 -07006502# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006503if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006504 textseg_addr=
6505 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006506 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6507 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006508 textseg_addr=0x60000000
6509 ;;
6510 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006511 # A 256M aligned address, high in the address space, with enough
6512 # room for the code_gen_buffer above it before the stack.
6513 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006514 ;;
6515 esac
6516 if [ -n "$textseg_addr" ]; then
6517 cat > $TMPC <<EOF
6518 int main(void) { return 0; }
6519EOF
6520 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6521 if ! compile_prog "" "$textseg_ldflags"; then
6522 # In case ld does not support -Ttext-segment, edit the default linker
6523 # script via sed to set the .text start addr. This is needed on FreeBSD
6524 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006525 if ! $ld --verbose >/dev/null 2>&1; then
6526 error_exit \
6527 "We need to link the QEMU user mode binaries at a" \
6528 "specific text address. Unfortunately your linker" \
6529 "doesn't support either the -Ttext-segment option or" \
6530 "printing the default linker script with --verbose." \
6531 "If you don't want the user mode binaries, pass the" \
6532 "--disable-user option to configure."
6533 fi
6534
Richard Henderson964c6fa2013-06-21 19:10:16 -07006535 $ld --verbose | sed \
6536 -e '1,/==================================================/d' \
6537 -e '/==================================================/,$d' \
6538 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6539 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6540 textseg_ldflags="-Wl,-T../config-host.ld"
6541 fi
6542 fi
6543fi
6544
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006545# Check that the C++ compiler exists and works with the C compiler.
6546# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6547if has $cxx; then
6548 cat > $TMPC <<EOF
6549int c_function(void);
6550int main(void) { return c_function(); }
6551EOF
6552
6553 compile_object
6554
6555 cat > $TMPCXX <<EOF
6556extern "C" {
6557 int c_function(void);
6558}
6559int c_function(void) { return 42; }
6560EOF
6561
6562 update_cxxflags
6563
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006564 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006565 # C++ compiler $cxx works ok with C compiler $cc
6566 :
6567 else
6568 echo "C++ compiler $cxx does not work with C compiler $cc"
6569 echo "Disabling C++ specific optional code"
6570 cxx=
6571 fi
6572else
6573 echo "No C++ compiler available; disabling C++ specific optional code"
6574 cxx=
6575fi
6576
Cole Robinson02d34f62016-05-06 14:03:09 -04006577echo_version() {
6578 if test "$1" = "yes" ; then
6579 echo "($2)"
6580 fi
6581}
6582
Jan Kiszka50e12062014-10-02 10:03:55 +02006583# prepend pixman and ftd flags after all config tests are done
6584QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006585QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006586libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006587
bellard43ce4df2003-06-09 19:53:12 +00006588echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006589echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006590echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006591echo "binary directory $(eval echo $bindir)"
6592echo "library directory $(eval echo $libdir)"
6593echo "module directory $(eval echo $qemu_moddir)"
6594echo "libexec directory $(eval echo $libexecdir)"
6595echo "include directory $(eval echo $includedir)"
6596echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006597if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006598echo "local state directory $(eval echo $local_statedir)"
6599echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006600echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006601else
6602echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006603echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006604fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006605echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006606echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006607echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006608echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006609echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006610echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006611echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006612echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006613echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006614echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006615echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006616echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006617echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006618echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006619echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006620if test "$docs" != "no"; then
6621 echo "sphinx-build $sphinx_build"
6622fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006623echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006624echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6625if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006626 echo "smbd $smbd"
6627fi
Fam Zheng17969262014-02-10 14:48:56 +08006628echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006629echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006630echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006631echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006632echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006633echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006634echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006635echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006636echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006637if test "$darwin" = "yes" ; then
6638 echo "Cocoa support $cocoa"
6639fi
Stefan Weil89138852016-05-16 15:10:20 +02006640echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006641echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006642echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006643echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006644echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006645echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006646echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006647echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006648if test "$gcrypt" = "yes"
6649then
6650 echo " hmac $gcrypt_hmac"
6651 echo " XTS $gcrypt_xts"
6652fi
Stefan Weil89138852016-05-16 15:10:20 +02006653echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006654if test "$nettle" = "yes"
6655then
6656 echo " XTS $nettle_xts"
6657fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006658echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006659echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006660echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006661echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006662echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006663echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006664echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006665echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006666echo "Block whitelist (rw) $block_drv_rw_whitelist"
6667echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306668echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006669echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006670echo "VNC support $vnc"
6671if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006672 echo "VNC SASL support $vnc_sasl"
6673 echo "VNC JPEG support $vnc_jpeg"
6674 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006675fi
aliguorie37630c2009-04-22 15:19:10 +00006676echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006677if test "$xen" = "yes" ; then
6678 echo "xen ctrl version $xen_ctrl_version"
6679fi
aurel322e4d9fb2008-04-08 06:01:02 +00006680echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006681echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006682echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006683echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006684echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006685echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006686echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006687echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006688echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006689echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006690echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006691echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006692echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006693echo "TCG support $tcg"
6694if test "$tcg" = "yes" ; then
6695 echo "TCG debug enabled $debug_tcg"
6696 echo "TCG interpreter $tcg_interpreter"
6697fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006698echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006699echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006700echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006701echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006702echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006703echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006704echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006705echo "madvise $madvise"
6706echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006707echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006708echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006709echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006710echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006711echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006712echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006713echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006714echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006715echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006716if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006717echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006718fi
Stefan Weil89138852016-05-16 15:10:20 +02006719echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006720echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006721echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006722echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006723echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006724echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006725echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006726echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006727echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006728echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006729echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006730echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006731echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006732echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006733echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006734echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006735echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006736echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006737echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006738echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306739echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006740echo "gcov $gcov_tool"
6741echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006742echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006743echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006744echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006745echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006746echo "lzo support $lzo"
6747echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006748echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006749echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006750echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006751echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006752echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006753echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006754echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006755echo "avx2 optimization $avx2_opt"
Robert Hoo6b8cd442020-02-29 20:34:34 +08006756echo "avx512f optimization $avx512f_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006757echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006758echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006759echo "bochs support $bochs"
6760echo "cloop support $cloop"
6761echo "dmg support $dmg"
6762echo "qcow v1 support $qcow1"
6763echo "vdi support $vdi"
6764echo "vvfat support $vvfat"
6765echo "qed support $qed"
6766echo "parallels support $parallels"
6767echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006768echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006769echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006770echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006771echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006772echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006773echo "fuzzing support $fuzzing"
bellard67b915a2004-03-31 23:37:16 +00006774
Peter Maydell898be3e2017-03-21 14:31:57 +00006775if test "$supported_cpu" = "no"; then
6776 echo
6777 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6778 echo
6779 echo "CPU host architecture $cpu support is not currently maintained."
6780 echo "The QEMU project intends to remove support for this host CPU in"
6781 echo "a future release if nobody volunteers to maintain it and to"
6782 echo "provide a build host for our continuous integration setup."
6783 echo "configure has succeeded and you can continue to build, but"
6784 echo "if you care about QEMU on this platform you should contact"
6785 echo "us upstream at qemu-devel@nongnu.org."
6786fi
6787
6788if test "$supported_os" = "no"; then
6789 echo
6790 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6791 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006792 echo "Host OS $targetos support is not currently maintained."
6793 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006794 echo "a future release if nobody volunteers to maintain it and to"
6795 echo "provide a build host for our continuous integration setup."
6796 echo "configure has succeeded and you can continue to build, but"
6797 echo "if you care about QEMU on this platform you should contact"
6798 echo "us upstream at qemu-devel@nongnu.org."
6799fi
6800
Juan Quintela98ec69a2009-07-16 18:34:18 +02006801config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006802
Stefan Weildbd99ae2013-01-01 18:33:44 +01006803echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6804
Juan Quintela98ec69a2009-07-16 18:34:18 +02006805echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006806echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006807
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006808echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006809echo "prefix=$prefix" >> $config_host_mak
6810echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006811echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006812echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006813echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006814echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006815echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006816echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006817echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006818echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006819echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006820echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006821if test "$mingw32" = "no" ; then
6822 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6823fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006824echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006825echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006826echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006827echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006828echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006829echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006830echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006831echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006832echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006833
Juan Quintela98ec69a2009-07-16 18:34:18 +02006834echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006835
Paolo Bonzinif3494742019-01-23 14:56:17 +08006836if test "$default_devices" = "yes" ; then
6837 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6838else
6839 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6840fi
aurel32f8393942009-04-13 18:45:38 +00006841if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006842 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006843fi
aliguori1625af82009-04-05 17:41:02 +00006844if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006845 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006846fi
bellard7d132992003-03-06 23:23:54 +00006847if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006848 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006849fi
bellard67b915a2004-03-31 23:37:16 +00006850if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006851 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006852 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006853 version_major=${rc_version%%.*}
6854 rc_version=${rc_version#*.}
6855 version_minor=${rc_version%%.*}
6856 rc_version=${rc_version#*.}
6857 version_subminor=${rc_version%%.*}
6858 version_micro=0
6859 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6860 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006861 if test "$guest_agent_with_vss" = "yes" ; then
6862 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006863 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006864 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6865 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006866 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006867 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006868 fi
Michael Roth1a349042015-08-26 11:14:31 -05006869 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006870 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006871 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6872 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6873 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6874 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6875 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6876 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6877 fi
pbrook210fa552007-02-27 21:04:49 +00006878else
Juan Quintela35f4df22009-07-27 16:13:07 +02006879 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006880fi
blueswir1128ab2f2008-08-15 18:33:42 +00006881
Mark McLoughlindffcb712009-10-22 17:49:11 +01006882if test "$linux" = "yes" ; then
6883 echo "CONFIG_LINUX=y" >> $config_host_mak
6884fi
6885
bellard83fb7ad2004-07-05 21:25:26 +00006886if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006887 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006888fi
malcb29fe3e2008-11-18 01:42:22 +00006889
bellardec530c82006-04-25 22:36:06 +00006890if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006891 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006892fi
Andreas Färber179cf402010-09-20 00:50:43 +02006893if test "$haiku" = "yes" ; then
6894 echo "CONFIG_HAIKU=y" >> $config_host_mak
6895fi
bellard97a847b2003-08-10 21:36:04 +00006896if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006897 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006898fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006899if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006900 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006901fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006902if test "$want_tools" = "yes" ; then
6903 echo "CONFIG_TOOLS=y" >> $config_host_mak
6904fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006905if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006906 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006907 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006908 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6909 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6910fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006911if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006912 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006913fi
ths8a16d272008-07-19 09:56:24 +00006914if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006915 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006916 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006917fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006918if test "$netmap" = "yes" ; then
6919 echo "CONFIG_NETMAP=y" >> $config_host_mak
6920fi
Gonglei015a33b2014-07-01 20:58:08 +08006921if test "$l2tpv3" = "yes" ; then
6922 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6923fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006924if test "$gprof" = "yes" ; then
6925 echo "CONFIG_GPROF=y" >> $config_host_mak
6926fi
Corey Bryant47e98652012-01-26 09:42:26 -05006927if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006928 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006929fi
Juan Quintela2358a492009-07-27 16:13:25 +02006930echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006931for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006932 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006933 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006934 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006935 echo "$def=m" >> $config_host_mak ;;
6936 *)
6937 echo "$def=y" >> $config_host_mak ;;
6938 esac
malc0c58ac12008-06-25 21:04:05 +00006939done
Fam Zhengb1149912017-09-07 16:29:13 +08006940echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6941echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6942echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6943echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6944echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006945if test "$audio_win_int" = "yes" ; then
6946 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6947fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006948echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6949echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006950if test "$vnc" = "yes" ; then
6951 echo "CONFIG_VNC=y" >> $config_host_mak
6952fi
aliguori2f9606b2009-03-06 20:27:28 +00006953if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006954 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006955fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006956if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006957 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006958fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006959if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006960 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006961fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006962if test "$xkbcommon" = "yes" ; then
6963 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6964 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6965fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006966if test "$xfs" = "yes" ; then
6967 echo "CONFIG_XFS=y" >> $config_host_mak
6968fi
Stefan Weil89138852016-05-16 15:10:20 +02006969qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006970echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006971echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006972echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006973echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006974if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006975 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006976fi
Fam Zheng17969262014-02-10 14:48:56 +08006977if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006978 # $shacmd can generate a hash started with digit, which the compiler doesn't
6979 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006980 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006981 echo "CONFIG_MODULES=y" >> $config_host_mak
6982fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006983if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006984 echo "CONFIG_X11=y" >> $config_host_mak
6985 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6986 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6987fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006988if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006989 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006990 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006991 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006992 if test "$sdl_image" = "yes" ; then
6993 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6994 fi
bellard49ecc3f2007-11-07 19:25:15 +00006995fi
6996if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006997 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006998fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006999if test "$iconv" = "yes" ; then
7000 echo "CONFIG_ICONV=y" >> $config_host_mak
7001 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7002 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7003fi
balrog4d3b6f62008-02-10 16:33:14 +00007004if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01007005 echo "CONFIG_CURSES=m" >> $config_host_mak
7006 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7007 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00007008fi
Riku Voipio099d6b02009-05-05 12:10:04 +03007009if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007010 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03007011fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01007012if test "$accept4" = "yes" ; then
7013 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7014fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05307015if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007016 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05307017fi
Riku Voipioc2882b92009-08-12 15:08:24 +03007018if test "$eventfd" = "yes" ; then
7019 echo "CONFIG_EVENTFD=y" >> $config_host_mak
7020fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02007021if test "$memfd" = "yes" ; then
7022 echo "CONFIG_MEMFD=y" >> $config_host_mak
7023fi
Cortland Tölva955727d2018-10-08 09:35:19 -07007024if test "$have_usbfs" = "yes" ; then
7025 echo "CONFIG_USBFS=y" >> $config_host_mak
7026fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007027if test "$fallocate" = "yes" ; then
7028 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7029fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01007030if test "$fallocate_punch_hole" = "yes" ; then
7031 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7032fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03007033if test "$fallocate_zero_range" = "yes" ; then
7034 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7035fi
Kevin Wolfed911432014-09-29 17:12:59 +02007036if test "$posix_fallocate" = "yes" ; then
7037 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7038fi
Peter Maydellc727f472011-01-06 11:05:10 +00007039if test "$sync_file_range" = "yes" ; then
7040 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7041fi
Peter Maydelldace20d2011-01-10 13:11:24 +00007042if test "$fiemap" = "yes" ; then
7043 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7044fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007045if test "$dup3" = "yes" ; then
7046 echo "CONFIG_DUP3=y" >> $config_host_mak
7047fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01007048if test "$ppoll" = "yes" ; then
7049 echo "CONFIG_PPOLL=y" >> $config_host_mak
7050fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007051if test "$prctl_pr_set_timerslack" = "yes" ; then
7052 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7053fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007054if test "$epoll" = "yes" ; then
7055 echo "CONFIG_EPOLL=y" >> $config_host_mak
7056fi
7057if test "$epoll_create1" = "yes" ; then
7058 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7059fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007060if test "$sendfile" = "yes" ; then
7061 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7062fi
Riku Voipio51834342014-06-22 11:25:42 +01007063if test "$timerfd" = "yes" ; then
7064 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7065fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007066if test "$setns" = "yes" ; then
7067 echo "CONFIG_SETNS=y" >> $config_host_mak
7068fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007069if test "$clock_adjtime" = "yes" ; then
7070 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7071fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007072if test "$syncfs" = "yes" ; then
7073 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7074fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007075if test "$kcov" = "yes" ; then
7076 echo "CONFIG_KCOV=y" >> $config_host_mak
7077fi
aurel323b3f24a2009-04-15 16:12:13 +00007078if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007079 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007080fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007081if test "$inotify1" = "yes" ; then
7082 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7083fi
Peter Maydell401bc052017-09-05 13:19:32 +01007084if test "$sem_timedwait" = "yes" ; then
7085 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7086fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007087if test "$strchrnul" = "yes" ; then
7088 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7089fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007090if test "$st_atim" = "yes" ; then
7091 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7092fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007093if test "$byteswap_h" = "yes" ; then
7094 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7095fi
7096if test "$bswap_h" = "yes" ; then
7097 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7098fi
Alexander Graf769ce762009-05-11 17:41:42 +02007099if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007100 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007101 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007102 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007103fi
aurel322e4d9fb2008-04-08 06:01:02 +00007104if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007105 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007106 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007107fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007108if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007109 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007110 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007111 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007112 if test "$gtk_gl" = "yes" ; then
7113 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7114 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007115fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007116if test "$gio" = "yes" ; then
7117 echo "CONFIG_GIO=y" >> $config_host_mak
7118 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7119 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007120 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007121fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007122echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007123if test "$gnutls" = "yes" ; then
7124 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7125fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007126if test "$gcrypt" = "yes" ; then
7127 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007128 if test "$gcrypt_hmac" = "yes" ; then
7129 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7130 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007131fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007132if test "$nettle" = "yes" ; then
7133 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007134 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007135fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007136if test "$qemu_private_xts" = "yes" ; then
7137 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7138fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007139if test "$tasn1" = "yes" ; then
7140 echo "CONFIG_TASN1=y" >> $config_host_mak
7141fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007142if test "$auth_pam" = "yes" ; then
7143 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7144fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007145if test "$have_ifaddrs_h" = "yes" ; then
7146 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7147fi
Eric Blake6b39b062016-10-11 10:46:23 -05007148if test "$have_broken_size_max" = "yes" ; then
7149 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7150fi
Jan Vesely277abf12016-04-29 13:15:23 -04007151
7152# Work around a system header bug with some kernel/XFS header
7153# versions where they both try to define 'struct fsxattr':
7154# xfs headers will not try to redefine structs from linux headers
7155# if this macro is set.
7156if test "$have_fsxattr" = "yes" ; then
7157 echo "HAVE_FSXATTR=y" >> $config_host_mak
7158fi
Fam Zheng1efad062018-06-01 17:26:43 +08007159if test "$have_copy_file_range" = "yes" ; then
7160 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7161fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007162if test "$vte" = "yes" ; then
7163 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007164 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007165 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007166fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007167if test "$virglrenderer" = "yes" ; then
7168 echo "CONFIG_VIRGL=y" >> $config_host_mak
7169 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7170 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7171fi
aliguorie37630c2009-04-22 15:19:10 +00007172if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007173 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007174 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007175fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007176if test "$linux_aio" = "yes" ; then
7177 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7178fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007179if test "$linux_io_uring" = "yes" ; then
7180 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7181 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7182 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7183fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007184if test "$attr" = "yes" ; then
7185 echo "CONFIG_ATTR=y" >> $config_host_mak
7186fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007187if test "$libattr" = "yes" ; then
7188 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7189fi
Meador Inge983eef52012-02-24 14:00:42 +05307190if test "$virtfs" = "yes" ; then
7191 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007192fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007193if test "$mpath" = "yes" ; then
7194 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007195 if test "$mpathpersist_new_api" = "yes"; then
7196 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7197 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007198fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007199if test "$vhost_scsi" = "yes" ; then
7200 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7201fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007202if test "$vhost_net" = "yes" ; then
7203 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7204fi
7205if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007206 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007207fi
Gonglei042cea22018-03-01 21:46:28 +08007208if test "$vhost_crypto" = "yes" ; then
7209 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7210fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007211if test "$vhost_vsock" = "yes" ; then
7212 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7213fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007214if test "$vhost_kernel" = "yes" ; then
7215 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7216fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007217if test "$vhost_user" = "yes" ; then
7218 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7219fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007220if test "$vhost_user_fs" = "yes" ; then
7221 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7222fi
ths77755342008-11-27 15:45:16 +00007223if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007224 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007225fi
aliguoribf9298b2008-12-05 20:05:26 +00007226if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007227 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007228fi
aliguoriceb42de2009-04-07 18:43:28 +00007229if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007230 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007231fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007232if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007233 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007234fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007235if test "$membarrier" = "yes" ; then
7236 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7237fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007238if test "$signalfd" = "yes" ; then
7239 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7240fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007241if test "$optreset" = "yes" ; then
7242 echo "HAVE_OPTRESET=y" >> $config_host_mak
7243fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007244if test "$tcg" = "yes"; then
7245 echo "CONFIG_TCG=y" >> $config_host_mak
7246 if test "$tcg_interpreter" = "yes" ; then
7247 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7248 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007249fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007250if test "$fdatasync" = "yes" ; then
7251 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7252fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007253if test "$madvise" = "yes" ; then
7254 echo "CONFIG_MADVISE=y" >> $config_host_mak
7255fi
7256if test "$posix_madvise" = "yes" ; then
7257 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7258fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007259if test "$posix_memalign" = "yes" ; then
7260 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7261fi
bellard97a847b2003-08-10 21:36:04 +00007262
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007263if test "$spice" = "yes" ; then
7264 echo "CONFIG_SPICE=y" >> $config_host_mak
7265fi
7266
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007267if test "$smartcard" = "yes" ; then
7268 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007269 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7270 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007271fi
7272
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007273if test "$libusb" = "yes" ; then
7274 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007275 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7276 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007277fi
7278
Hans de Goede69354a82011-07-19 11:04:10 +02007279if test "$usb_redir" = "yes" ; then
7280 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007281 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7282 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007283fi
7284
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007285if test "$opengl" = "yes" ; then
7286 echo "CONFIG_OPENGL=y" >> $config_host_mak
7287 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007288 if test "$opengl_dmabuf" = "yes" ; then
7289 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7290 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007291fi
7292
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007293if test "$gbm" = "yes" ; then
7294 echo "CONFIG_GBM=y" >> $config_host_mak
7295 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7296 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7297fi
7298
7299
Yang Zhong5a22ab72017-12-20 21:16:46 +08007300if test "$malloc_trim" = "yes" ; then
7301 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7302fi
7303
Liang Li99f2dbd2016-03-08 13:53:16 +08007304if test "$avx2_opt" = "yes" ; then
7305 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7306fi
7307
Robert Hoo6b8cd442020-02-29 20:34:34 +08007308if test "$avx512f_opt" = "yes" ; then
7309 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7310fi
7311
qiaonuohan607dacd2014-02-18 14:11:30 +08007312if test "$lzo" = "yes" ; then
7313 echo "CONFIG_LZO=y" >> $config_host_mak
7314fi
7315
7316if test "$snappy" = "yes" ; then
7317 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7318fi
7319
Peter Wu6b383c02015-01-06 18:48:14 +01007320if test "$bzip2" = "yes" ; then
7321 echo "CONFIG_BZIP2=y" >> $config_host_mak
7322 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7323fi
7324
Julio Faracco83bc1f92018-11-05 13:08:04 -02007325if test "$lzfse" = "yes" ; then
7326 echo "CONFIG_LZFSE=y" >> $config_host_mak
7327 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7328fi
7329
Juan Quintela3a678482019-12-17 21:15:24 +01007330if test "$zstd" = "yes" ; then
7331 echo "CONFIG_ZSTD=y" >> $config_host_mak
7332fi
7333
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007334if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007335 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007336 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7337 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007338fi
7339
Peter Lieven6542aa92014-02-03 10:26:13 +01007340if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007341 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7342 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007343fi
7344
Eduardo Otubof7945732012-08-14 18:44:05 -03007345if test "$seccomp" = "yes"; then
7346 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007347 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7348 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007349fi
7350
bellard83fb7ad2004-07-05 21:25:26 +00007351# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007352if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007353 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007354fi
7355
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007356if test "$localtime_r" = "yes" ; then
7357 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7358fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007359if test "$qom_cast_debug" = "yes" ; then
7360 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7361fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007362if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007363 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007364 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7365 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007366fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007367
Peter Maydell7c2acc72013-04-08 12:11:27 +01007368echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007369if test "$coroutine_pool" = "yes" ; then
7370 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7371else
7372 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7373fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307374
Peter Lieven7d992e42016-09-27 11:58:45 +02007375if test "$debug_stack_usage" = "yes" ; then
7376 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7377fi
7378
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007379if test "$crypto_afalg" = "yes" ; then
7380 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7381fi
7382
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307383if test "$open_by_handle_at" = "yes" ; then
7384 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7385fi
7386
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307387if test "$linux_magic_h" = "yes" ; then
7388 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7389fi
7390
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007391if test "$pragma_diagnostic_available" = "yes" ; then
7392 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007393fi
7394
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007395if test "$valgrind_h" = "yes" ; then
7396 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7397fi
7398
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007399if test "$have_asan_iface_fiber" = "yes" ; then
7400 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7401fi
7402
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007403if test "$has_environ" = "yes" ; then
7404 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7405fi
7406
Richard Henderson76a347e2012-12-28 14:17:02 -08007407if test "$cpuid_h" = "yes" ; then
7408 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7409fi
7410
Richard Hendersonf5401662013-02-16 12:46:59 -08007411if test "$int128" = "yes" ; then
7412 echo "CONFIG_INT128=y" >> $config_host_mak
7413fi
7414
Richard Henderson7ebee432016-06-29 21:10:59 -07007415if test "$atomic128" = "yes" ; then
7416 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7417fi
7418
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007419if test "$cmpxchg128" = "yes" ; then
7420 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7421fi
7422
Richard Hendersondf79b992016-09-02 12:23:57 -07007423if test "$atomic64" = "yes" ; then
7424 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7425fi
7426
Richard Hendersondb432672017-09-15 14:11:45 -07007427if test "$vector16" = "yes" ; then
7428 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7429fi
7430
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007431if test "$attralias" = "yes" ; then
7432 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7433fi
7434
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007435if test "$getauxval" = "yes" ; then
7436 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7437fi
7438
Bharata B Raoeb100392012-09-24 14:42:45 +05307439if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007440 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007441 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7442 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307443fi
7444
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007445if test "$glusterfs_xlator_opt" = "yes" ; then
7446 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7447fi
7448
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307449if test "$glusterfs_discard" = "yes" ; then
7450 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7451fi
7452
Niels de Vosdf3a4292017-05-28 12:01:14 +05307453if test "$glusterfs_fallocate" = "yes" ; then
7454 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7455fi
7456
Bharata B Rao7c815372013-12-21 14:51:25 +05307457if test "$glusterfs_zerofill" = "yes" ; then
7458 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7459fi
7460
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007461if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7462 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7463fi
7464
Niels de Vos0e3b8912019-03-05 16:46:34 +01007465if test "$glusterfs_iocb_has_stat" = "yes" ; then
7466 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7467fi
7468
Pino Toscanob10d49d2019-06-20 22:08:40 +02007469if test "$libssh" = "yes" ; then
7470 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7471 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7472 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007473fi
7474
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007475if test "$live_block_migration" = "yes" ; then
7476 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7477fi
7478
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007479if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007480 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007481fi
7482
Lluís Vilanova5b808272014-05-27 15:02:14 +02007483echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7484if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007485 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307486fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007487if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007488 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7489 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007490 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007491fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007492if have_backend "log"; then
7493 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007494fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007495if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007496 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7497fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007498if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007499 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7500 if test "$trace_backend_stap" = "yes" ; then
7501 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7502 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007503fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007504if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007505 if test "$linux" = "yes" ; then
7506 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007507 else
Stewart Smith21684af2014-01-24 12:39:10 +11007508 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007509 fi
7510fi
Paul Durrant0a852412016-08-04 14:44:14 +01007511if have_backend "syslog"; then
7512 if test "$posix_syslog" = "yes" ; then
7513 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7514 else
7515 feature_not_found "syslog(trace backend)" "syslog not available"
7516 fi
7517fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007518echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7519
Michael R. Hines2da776d2013-07-22 10:01:54 -04007520if test "$rdma" = "yes" ; then
7521 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007522 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007523fi
7524
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007525if test "$pvrdma" = "yes" ; then
7526 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7527fi
7528
Laurent Vivier575b22b2016-06-02 22:14:15 +02007529if test "$have_rtnetlink" = "yes" ; then
7530 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7531fi
7532
Klim Kireeved279a02018-01-12 12:01:19 +03007533if test "$libxml2" = "yes" ; then
7534 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7535 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7536 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7537fi
7538
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007539if test "$replication" = "yes" ; then
7540 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7541fi
7542
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007543if test "$have_af_vsock" = "yes" ; then
7544 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7545fi
7546
Christopher Covington4d043512016-12-28 15:04:33 -05007547if test "$have_sysmacros" = "yes" ; then
7548 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7549fi
7550
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007551if test "$have_static_assert" = "yes" ; then
7552 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7553fi
7554
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007555if test "$have_utmpx" = "yes" ; then
7556 echo "HAVE_UTMPX=y" >> $config_host_mak
7557fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007558if test "$have_getrandom" = "yes" ; then
7559 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7560fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007561if test "$ivshmem" = "yes" ; then
7562 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7563fi
Richard Hendersone219c492017-09-28 09:01:23 -07007564if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007565 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7566fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007567if test "$debug_mutex" = "yes" ; then
7568 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7569fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007570
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007571# Hold two types of flag:
7572# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7573# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007574# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007575# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007576if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007577 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007578 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7579elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7580 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7581 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007582fi
7583
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007584if test "$vxhs" = "yes" ; then
7585 echo "CONFIG_VXHS=y" >> $config_host_mak
7586 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7587fi
7588
Junyan He17824402018-07-18 15:47:59 +08007589if test "$libpmem" = "yes" ; then
7590 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7591fi
7592
Jeff Cody2f740132018-11-07 07:36:44 +01007593if test "$bochs" = "yes" ; then
7594 echo "CONFIG_BOCHS=y" >> $config_host_mak
7595fi
7596if test "$cloop" = "yes" ; then
7597 echo "CONFIG_CLOOP=y" >> $config_host_mak
7598fi
7599if test "$dmg" = "yes" ; then
7600 echo "CONFIG_DMG=y" >> $config_host_mak
7601fi
7602if test "$qcow1" = "yes" ; then
7603 echo "CONFIG_QCOW1=y" >> $config_host_mak
7604fi
7605if test "$vdi" = "yes" ; then
7606 echo "CONFIG_VDI=y" >> $config_host_mak
7607fi
7608if test "$vvfat" = "yes" ; then
7609 echo "CONFIG_VVFAT=y" >> $config_host_mak
7610fi
7611if test "$qed" = "yes" ; then
7612 echo "CONFIG_QED=y" >> $config_host_mak
7613fi
7614if test "$parallels" = "yes" ; then
7615 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7616fi
7617if test "$sheepdog" = "yes" ; then
7618 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7619fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007620if test "$fuzzing" = "yes" ; then
7621 if test "$have_fuzzer" = "yes"; then
7622 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7623 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7624 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7625 else
7626 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7627 exit 1
7628 fi
7629fi
Jeff Cody2f740132018-11-07 07:36:44 +01007630
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007631if test "$plugins" = "yes" ; then
7632 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7633 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007634 # Copy the export object list to the build dir
7635 if test "$ld_dynamic_list" = "yes" ; then
7636 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7637 ld_symbols=qemu-plugins-ld.symbols
7638 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7639 elif test "$ld_exported_symbols_list" = "yes" ; then
7640 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7641 ld64_symbols=qemu-plugins-ld64.symbols
7642 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7643 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7644 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7645 else
7646 error_exit \
7647 "If \$plugins=yes, either \$ld_dynamic_list or " \
7648 "\$ld_exported_symbols_list should have been set to 'yes'."
7649 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007650fi
7651
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007652if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007653 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007654elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007655 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007656elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007657 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007658elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007659 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007660elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007661 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007662elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007663 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007664else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007665 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007666fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007667
Juan Quintela98ec69a2009-07-16 18:34:18 +02007668echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007669echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007670echo "MAKE=$make" >> $config_host_mak
7671echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007672echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7673echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007674echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7675echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007676echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007677echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007678echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007679echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007680if $iasl -h > /dev/null 2>&1; then
7681 echo "IASL=$iasl" >> $config_host_mak
7682fi
Juan Quintela804edf22009-07-27 16:12:49 +02007683echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007684echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007685echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007686echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007687echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007688echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007689echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007690echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007691echo "OBJCOPY=$objcopy" >> $config_host_mak
7692echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007693echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007694echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007695echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007696echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007697echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007698echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007699echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007700echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007701echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007702if test "$sparse" = "yes" ; then
7703 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007704 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007705 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007706 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7707 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7708fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007709echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007710echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007711echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007712echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007713echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007714echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007715echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007716echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007717echo "DSOSUF=$DSOSUF" >> $config_host_mak
7718echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007719echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007720echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7721echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007722echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007723if test "$gcov" = "yes" ; then
7724 echo "CONFIG_GCOV=y" >> $config_host_mak
7725 echo "GCOV=$gcov_tool" >> $config_host_mak
7726fi
Juan Quintela804edf22009-07-27 16:12:49 +02007727
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007728if test "$libudev" != "no"; then
7729 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7730 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7731fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007732if test "$fuzzing" != "no"; then
7733 echo "CONFIG_FUZZ=y" >> $config_host_mak
7734 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7735 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7736fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007737
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007738if test "$edk2_blobs" = "yes" ; then
7739 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7740fi
7741
Peter Maydell6efd7512011-11-30 11:59:04 +00007742# use included Linux headers
7743if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007744 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007745 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007746 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007747 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007748 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007749 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007750 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007751 ;;
7752 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007753 linux_arch=s390
7754 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007755 aarch64)
7756 linux_arch=arm64
7757 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007758 mips64)
7759 linux_arch=mips
7760 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007761 *)
7762 # For most CPUs the kernel architecture name and QEMU CPU name match.
7763 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007764 ;;
7765 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007766 # For non-KVM architectures we will not have asm headers
7767 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7768 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7769 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007770fi
7771
bellard1d14ffa2005-10-30 18:58:22 +00007772for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007773target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007774config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007775target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007776target_aligned_only="no"
7777case "$target_name" in
7778 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7779 target_aligned_only="yes"
7780 ;;
7781esac
bellard97a847b2003-08-10 21:36:04 +00007782target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007783case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007784 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 +00007785 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007786 ;;
7787esac
bellard97a847b2003-08-10 21:36:04 +00007788target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007789target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007790target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007791target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007792case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007793 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007794 target_softmmu="yes"
7795 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007796 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007797 target_user_only="yes"
7798 target_linux_user="yes"
7799 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007800 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007801 target_user_only="yes"
7802 target_bsd_user="yes"
7803 ;;
pbrook9e407a82007-05-26 16:38:53 +00007804 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007805 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007806 exit 1
7807 ;;
7808esac
ths831b7822007-01-18 20:06:33 +00007809
bellard97a847b2003-08-10 21:36:04 +00007810mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007811echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007812
pbrooke5fe0c52006-06-11 13:32:59 +00007813bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007814mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007815interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007816gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007817
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007818TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007819TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007820TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007821
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007822case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007823 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007824 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307825 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007826 ;;
7827 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007828 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007829 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307830 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007831 ;;
7832 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007833 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00007834 ;;
7835 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007836 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007837 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007838 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007839 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007840 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007841 aarch64|aarch64_be)
7842 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007843 TARGET_BASE_ARCH=arm
7844 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007845 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007846 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 +01007847 ;;
aurel322408a522008-04-20 20:19:44 +00007848 cris)
aurel322408a522008-04-20 20:19:44 +00007849 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007850 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007851 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08007852 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007853 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007854 ;;
aurel322408a522008-04-20 20:19:44 +00007855 m68k)
aurel322408a522008-04-20 20:19:44 +00007856 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007857 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00007858 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007859 microblaze|microblazeel)
7860 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007861 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007862 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007863 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007864 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007865 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007866 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007867 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007868 ;;
7869 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007870 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007871 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007872 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007873 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007874 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007875 ;;
7876 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007877 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007878 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007879 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007880 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007881 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007882 moxie)
7883 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007884 nios2)
7885 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007886 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007887 TARGET_ARCH=openrisc
7888 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007889 ;;
aurel322408a522008-04-20 20:19:44 +00007890 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007891 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007892 ;;
aurel322408a522008-04-20 20:19:44 +00007893 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007894 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007895 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307896 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007897 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007898 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007899 ppc64le)
7900 TARGET_ARCH=ppc64
7901 TARGET_BASE_ARCH=ppc
7902 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307903 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007904 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 -05007905 ;;
aurel322408a522008-04-20 20:19:44 +00007906 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007907 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007908 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007909 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007910 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007911 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007912 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007913 riscv32)
7914 TARGET_BASE_ARCH=riscv
7915 TARGET_ABI_DIR=riscv
7916 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007917 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 +13007918 ;;
7919 riscv64)
7920 TARGET_BASE_ARCH=riscv
7921 TARGET_ABI_DIR=riscv
7922 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007923 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 +13007924 ;;
aurel322408a522008-04-20 20:19:44 +00007925 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007926 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007927 bflt="yes"
7928 ;;
7929 sparc)
aurel322408a522008-04-20 20:19:44 +00007930 ;;
7931 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007932 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007933 ;;
7934 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007935 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007936 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007937 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02007938 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007939 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007940 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007941 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007942 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 +01007943 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007944 tilegx)
7945 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007946 tricore)
7947 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007948 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007949 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007950 xtensa|xtensaeb)
7951 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007952 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007953 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007954 ;;
aurel322408a522008-04-20 20:19:44 +00007955 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007956 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007957 ;;
7958esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007959# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7960if [ "$TARGET_BASE_ARCH" = "" ]; then
7961 TARGET_BASE_ARCH=$TARGET_ARCH
7962fi
7963
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007964symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7965
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007966upper() {
7967 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7968}
7969
Stefan Weil89138852016-05-16 15:10:20 +02007970target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007971echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007972echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007973echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007974if [ "$TARGET_ABI_DIR" = "" ]; then
7975 TARGET_ABI_DIR=$TARGET_ARCH
7976fi
Juan Quintela25be2102009-10-07 02:41:00 +02007977echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007978if [ "$HOST_VARIANT_DIR" != "" ]; then
7979 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7980fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007981
7982if supported_xen_target $target; then
7983 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007984 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007985 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007986 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007987 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007988else
7989 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007990fi
7991if supported_kvm_target $target; then
7992 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007993 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7994else
7995 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007996fi
7997if supported_hax_target $target; then
7998 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007999fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05008000if supported_hvf_target $target; then
8001 echo "CONFIG_HVF=y" >> $config_target_mak
8002fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08008003if supported_whpx_target $target; then
8004 echo "CONFIG_WHPX=y" >> $config_target_mak
8005fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00008006if test "$target_aligned_only" = "yes" ; then
8007 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8008fi
bellardde83cd02003-06-15 20:25:43 +00008009if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008010 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00008011fi
8012if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008013 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00008014 if test "$mttcg" = "yes" ; then
8015 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8016 fi
bellardde83cd02003-06-15 20:25:43 +00008017fi
bellard997344f2003-10-27 21:10:39 +00008018if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008019 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01008020 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00008021fi
ths831b7822007-01-18 20:06:33 +00008022if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008023 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00008024fi
pbrook56aebc82008-10-11 17:55:29 +00008025list=""
8026if test ! -z "$gdb_xml_files" ; then
8027 for x in $gdb_xml_files; do
8028 list="$list $source_path/gdb-xml/$x"
8029 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02008030 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00008031fi
bellardde83cd02003-06-15 20:25:43 +00008032
Eric Blakee633a5c2019-02-04 20:39:37 -06008033if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02008034 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008035fi
blueswir184778502008-10-26 20:33:16 +00008036if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008037 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008038fi
bellard5b0753e2005-03-01 21:37:28 +00008039
Alex Bennée716a5072018-04-10 12:19:40 +01008040
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008041# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008042
Juan Quintela4afddb52009-08-03 14:46:45 +02008043cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008044ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008045
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008046disas_config() {
8047 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8048 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8049}
8050
Juan Quintela64656022009-08-03 14:46:53 +02008051for i in $ARCH $TARGET_BASE_ARCH ; do
8052 case "$i" in
8053 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008054 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008055 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008056 aarch64)
8057 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008058 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008059 fi
8060 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008061 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008062 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008063 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008064 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008065 fi
Juan Quintela64656022009-08-03 14:46:53 +02008066 ;;
8067 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008068 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008069 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008070 hppa)
8071 disas_config "HPPA"
8072 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008073 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008074 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008075 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008076 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008077 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008078 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008079 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008080 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008081 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008082 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008083 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008084 ;;
8085 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008086 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008087 if test -n "${cxx}"; then
8088 disas_config "NANOMIPS"
8089 fi
Juan Quintela64656022009-08-03 14:46:53 +02008090 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008091 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008092 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008093 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008094 nios2)
8095 disas_config "NIOS2"
8096 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008097 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008098 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008099 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008100 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008101 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008102 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008103 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008104 disas_config "RISCV"
8105 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008106 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008107 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008108 ;;
8109 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008110 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008111 ;;
8112 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008113 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008114 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008115 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008116 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008117 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008118 esac
8119done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008120if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008121 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008122fi
Juan Quintela64656022009-08-03 14:46:53 +02008123
Juan Quintela6ee71262009-08-03 14:46:47 +02008124case "$ARCH" in
8125alpha)
8126 # Ensure there's only a single GP
8127 cflags="-msmall-data $cflags"
8128;;
8129esac
8130
Juan Quintelad02c1db2009-08-03 14:46:50 +02008131if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008132 if test "$target_linux_user" = "yes" ; then
8133 cflags="-p $cflags"
8134 ldflags="-p $ldflags"
8135 fi
8136 if test "$target_softmmu" = "yes" ; then
8137 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02008138 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008139 fi
8140fi
8141
Eric Blakee633a5c2019-02-04 20:39:37 -06008142if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07008143 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02008144fi
Juan Quintelafa282482009-07-22 22:37:39 +02008145
Christian Borntraegere9a35912017-08-23 12:16:23 +02008146# Newer kernels on s390 check for an S390_PGSTE program header and
8147# enable the pgste page table extensions in that case. This makes
8148# the vm.allocate_pgste sysctl unnecessary. We enable this program
8149# header if
8150# - we build on s390x
8151# - we build the system emulation for s390x (qemu-system-s390x)
8152# - KVM is enabled
8153# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008154if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8155 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008156 if ld_has --s390-pgste ; then
8157 ldflags="-Wl,--s390-pgste $ldflags"
8158 fi
8159fi
8160
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008161echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02008162echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008163
bellard97a847b2003-08-10 21:36:04 +00008164done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008165
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008166echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8167echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8168
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008169if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008170 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008171fi
Richard Hendersone219c492017-09-28 09:01:23 -07008172if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008173 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008174fi
8175if test -n "$LIBCAPSTONE"; then
8176 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8177fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008178
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008179if test "$numa" = "yes"; then
8180 echo "CONFIG_NUMA=y" >> $config_host_mak
8181fi
8182
John Snowfd0e6052015-03-25 18:57:39 -04008183if test "$ccache_cpp2" = "yes"; then
8184 echo "export CCACHE_CPP2=y" >> $config_host_mak
8185fi
8186
Peter Maydelle29e5c62018-11-02 11:52:38 +00008187# If we're using a separate build tree, set it up now.
8188# DIRS are directories which we simply mkdir in the build tree;
8189# LINKS are things to symlink back into the source tree
8190# (these can be both files and directories).
8191# Caution: do not add files or directories here using wildcards. This
8192# will result in problems later if a new file matching the wildcard is
8193# added to the source tree -- nothing will cause configure to be rerun
8194# so the build tree will be missing the link back to the new file, and
8195# tests might fail. Prefer to keep the relevant files in their own
8196# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008197DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8198DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008199DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008200DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008201DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008202LINKS="Makefile"
8203LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8204LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008205LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008206LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008207LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8208LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8209LINKS="$LINKS pc-bios/qemu-icon.bmp"
8210LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008211LINKS="$LINKS tests/acceptance tests/data"
8212LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008213LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008214for bios_file in \
8215 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008216 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008217 $source_path/pc-bios/*.rom \
8218 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008219 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008220 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008221 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008222 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008223 $source_path/pc-bios/palcode-*
8224do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008225 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008226done
8227mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008228for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008229 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008230 symlink "$source_path/$f" "$f"
8231 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008232done
Paul Brook1ad21342009-05-19 16:17:58 +01008233
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008234(for i in $cross_cc_vars; do
8235 export $i
8236done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008237export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008238$source_path/tests/tcg/configure.sh)
8239
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008240# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008241for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008242 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008243 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008244 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008245 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008246 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008247 echo "CC=$cc" >> $config_mak
8248 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008249 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008250 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008251 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008252 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008253 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008254done
8255
Max Reitz76c75602014-05-24 23:24:56 +02008256# set up qemu-iotests in this build directory
8257iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008258
8259echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8260echo >> "$iotests_common_env"
8261echo "export PYTHON='$python'" >> "$iotests_common_env"
8262
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008263# Save the configure command line for later reuse.
8264cat <<EOD >config.status
8265#!/bin/sh
8266# Generated by configure.
8267# Run this file to recreate the current configuration.
8268# Compiler output produced by configure, useful for debugging
8269# configure, is in config.log if it exists.
8270EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008271
8272preserve_env() {
8273 envname=$1
8274
8275 eval envval=\$$envname
8276
8277 if test -n "$envval"
8278 then
8279 echo "$envname='$envval'" >> config.status
8280 echo "export $envname" >> config.status
8281 else
8282 echo "unset $envname" >> config.status
8283 fi
8284}
8285
8286# Preserve various env variables that influence what
8287# features/build target configure will detect
8288preserve_env AR
8289preserve_env AS
8290preserve_env CC
8291preserve_env CPP
8292preserve_env CXX
8293preserve_env INSTALL
8294preserve_env LD
8295preserve_env LD_LIBRARY_PATH
8296preserve_env LIBTOOL
8297preserve_env MAKE
8298preserve_env NM
8299preserve_env OBJCOPY
8300preserve_env PATH
8301preserve_env PKG_CONFIG
8302preserve_env PKG_CONFIG_LIBDIR
8303preserve_env PKG_CONFIG_PATH
8304preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008305preserve_env SDL2_CONFIG
8306preserve_env SMBD
8307preserve_env STRIP
8308preserve_env WINDRES
8309
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008310printf "exec" >>config.status
8311printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008312echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008313chmod +x config.status
8314
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008315rm -r "$TMPDIR1"