blob: 23b5e93752b6a2597b2099b502184bc5fc352bf1 [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"
Alex Bennéef48e5902020-03-16 17:21:48 +0000306gdb_bin=$(command -v "gdb")
aliguoriac0df512008-12-29 17:14:15 +0000307
Daniel P. Berrange92712822017-09-29 11:11:58 +0100308if test -e "$source_path/.git"
309then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100310 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100311 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500312 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
313 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100314else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100315 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100316 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100317
318 if ! test -f "$source_path/ui/keycodemapdb/README"
319 then
320 echo
321 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
322 echo
323 echo "This is not a GIT checkout but module content appears to"
324 echo "be missing. Do not use 'git archive' or GitHub download links"
325 echo "to acquire QEMU source archives. Non-GIT builds are only"
326 echo "supported with source archives linked from:"
327 echo
Peter Maydella3e3b522019-07-22 14:07:39 +0100328 echo " https://www.qemu.org/download/#source"
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100329 echo
330 echo "Developers working with GIT can use scripts/archive-source.sh"
331 echo "if they need to create valid source archives."
332 echo
333 exit 1
334 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100335fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100336git="git"
aliguoriac0df512008-12-29 17:14:15 +0000337
Stefan Weilafb63eb2012-09-26 22:04:38 +0200338# Don't accept a target_list environment variable.
339unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000340unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100341
342# Default value for a variable defining feature "foo".
343# * foo="no" feature will only be used if --enable-foo arg is given
344# * foo="" feature will be searched for, and if found, will be used
345# unless --disable-foo is given
346# * foo="yes" this value will only be set by --enable-foo flag.
347# feature will searched for,
348# if not found, configure exits with error
349#
350# Always add --enable-foo and --disable-foo command line args.
351# Distributions want to ensure that several features are compiled in, and it
352# is impossible without a --enable-foo that exits if a feature is not found.
353
Paolo Bonzini377529c2010-12-23 11:43:50 +0100354brlapi=""
355curl=""
356curses=""
357docs=""
358fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100359netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100360sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000361sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530362virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200363mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100364vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100367vnc_sasl=""
368vnc_jpeg=""
369vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200370xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100371xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000372xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000373xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100374linux_aio=""
Aarushi Mehtac10dd852020-01-20 14:18:44 +0000375linux_io_uring=""
Corey Bryant47e98652012-01-26 09:42:26 -0500376cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100377attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200378libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100379xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200380tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100381membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100382vhost_net=""
383vhost_crypto=""
384vhost_scsi=""
385vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200386vhost_user=""
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +0100387vhost_user_fs=""
Bradd41a75a2011-07-26 23:11:26 -0400388kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100389hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500390hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800391whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400392rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300393pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100394gprof="no"
395debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100396debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100397sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500398fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100399strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200400tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100401bigendian="no"
402mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000403gcov="no"
404gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100405EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800406DSOSUF=".so"
407LDFLAGS_SHARED="-shared"
408modules="no"
Christian Ehrhardtbd83c862020-03-10 15:58:06 +0100409module_upgrades="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100410prefix="/usr/local"
411mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300412datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200413firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300414qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100415bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300416libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400417libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200418includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100419sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300420local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100421confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100422slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100423oss_lib=""
424bsd="no"
425linux="no"
426solaris="no"
427profiler="no"
428cocoa="no"
429softmmu="yes"
430linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100431bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100432blobs="yes"
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +0100433edk2_blobs="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100434pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200435pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200436qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300437trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100438trace_file="trace"
439spice=""
440rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200441smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100442libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200443usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100444opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100445opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000446cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100447avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300448zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700449capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200450lzo=""
451snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100452bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200453lzfse=""
Juan Quintela3a678482019-12-17 21:15:24 +0100454zstd=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400455guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400456guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500457guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300458guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400459vss_win32_sdk=""
460win_sdk="no"
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +0100461want_tools=""
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100462libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100463libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100464coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200465coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200466debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400467crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300468seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530469glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400470glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530471glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530472glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530473glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100474glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100475glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600476gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200477gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100478tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100479gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100480nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100481nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100482gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800483gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100484gcrypt_xts="no"
485qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100486auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100487vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200488virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800489tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200490libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100491live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800492numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800493tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200494jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800495replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700496vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100497bochs="yes"
498cloop="yes"
499dmg="yes"
500qcow1="yes"
501vdi="yes"
502vvfat="yes"
503qed="yes"
504parallels="yes"
505sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300506libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200507debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800508libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800509default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100510plugins="no"
Alexander Bulekovadc28022020-02-19 23:11:14 -0500511fuzzing="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100512
Peter Maydell898be3e2017-03-21 14:31:57 +0000513supported_cpu="no"
514supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100515bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800516malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000517
aliguoriac0df512008-12-29 17:14:15 +0000518# parse CC options first
519for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200520 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000521 case "$opt" in
522 --cross-prefix=*) cross_prefix="$optarg"
523 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100524 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000525 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400526 --cxx=*) CXX="$optarg"
527 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200528 --cpu=*) cpu="$optarg"
529 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100530 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100531 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200532 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100533 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100534 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100535 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100536 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200537 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100538 --enable-debug-info) debug_info="yes"
539 ;;
540 --disable-debug-info) debug_info="no"
541 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100542 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
543 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100544 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
545 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200546 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100547 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100548 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200549 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100550 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200551 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100552 ;;
aliguoriac0df512008-12-29 17:14:15 +0000553 esac
554done
aliguoriac0df512008-12-29 17:14:15 +0000555# OS specific
556# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100557# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000558
Peter Maydelle49d0212012-12-07 15:39:13 +0000559# Preferred compiler:
560# ${CC} (if set)
561# ${cross_prefix}gcc (if cross-prefix specified)
562# system compiler
563if test -z "${CC}${cross_prefix}"; then
564 cc="$host_cc"
565else
566 cc="${CC-${cross_prefix}gcc}"
567fi
568
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400569if test -z "${CXX}${cross_prefix}"; then
570 cxx="c++"
571else
572 cxx="${CXX-${cross_prefix}g++}"
573fi
574
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500575ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700576as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700577ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000578cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500579objcopy="${OBJCOPY-${cross_prefix}objcopy}"
580ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800581ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200582nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500583strip="${STRIP-${cross_prefix}strip}"
584windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300585pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
586query_pkg_config() {
587 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
588}
589pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000590sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000591
Peter Maydell45d285a2013-10-21 21:03:06 +0100592# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
593ARFLAGS="${ARFLAGS-rv}"
594
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200595# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100596# We use -fwrapv to tell the compiler that we require a C dialect where
597# left shift of signed integers is well defined and has the expected
598# 2s-complement style results. (Both clang and gcc agree that it
599# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100600QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400601QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100602QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200603QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200604QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200605QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100606if test "$debug_info" = "yes"; then
607 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100608fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200609
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300610# running configure in the source tree?
611# we know that's the case if configure is there.
612if test -f "./configure"; then
613 pwd_is_source_path="y"
614else
615 pwd_is_source_path="n"
616fi
617
aliguoriac0df512008-12-29 17:14:15 +0000618check_define() {
619cat > $TMPC <<EOF
620#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000621#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000622#endif
623int main(void) { return 0; }
624EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200625 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000626}
627
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200628check_include() {
629cat > $TMPC <<EOF
630#include <$1>
631int main(void) { return 0; }
632EOF
633 compile_object
634}
635
John Snow93b25862015-03-25 18:57:37 -0400636write_c_skeleton() {
637 cat > $TMPC <<EOF
638int main(void) { return 0; }
639EOF
640}
641
Alexander Bulekovadc28022020-02-19 23:11:14 -0500642write_c_fuzzer_skeleton() {
643 cat > $TMPC <<EOF
644#include <stdint.h>
645#include <sys/types.h>
646int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
647int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
648EOF
649}
650
Peter Maydellbbea4052012-08-14 15:35:34 +0100651if check_define __linux__ ; then
652 targetos="Linux"
653elif check_define _WIN32 ; then
654 targetos='MINGW32'
655elif check_define __OpenBSD__ ; then
656 targetos='OpenBSD'
657elif check_define __sun__ ; then
658 targetos='SunOS'
659elif check_define __HAIKU__ ; then
660 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100661elif check_define __FreeBSD__ ; then
662 targetos='FreeBSD'
663elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
664 targetos='GNU/kFreeBSD'
665elif check_define __DragonFly__ ; then
666 targetos='DragonFly'
667elif check_define __NetBSD__; then
668 targetos='NetBSD'
669elif check_define __APPLE__; then
670 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100671else
Peter Maydell951fedf2017-07-13 16:15:32 +0100672 # This is a fatal error, but don't report it yet, because we
673 # might be going to just print the --help text, or it might
674 # be the result of a missing compiler.
675 targetos='bogus'
676 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100677fi
678
679# Some host OSes need non-standard checks for which CPU to use.
680# Note that these checks are broken for cross-compilation: if you're
681# cross-compiling to one of these OSes then you'll need to specify
682# the correct CPU with the --cpu option.
683case $targetos in
684Darwin)
685 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
686 # run 64-bit userspace code.
687 # If the user didn't specify a CPU explicitly and the kernel says this is
688 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
689 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
690 cpu="x86_64"
691 fi
692 ;;
693SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200694 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100695 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
696 cpu="x86_64"
697 fi
698esac
699
Juan Quintela2ff6b912009-08-03 14:45:55 +0200700if test ! -z "$cpu" ; then
701 # command line argument
702 :
703elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000704 cpu="i386"
705elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700706 if check_define __ILP32__ ; then
707 cpu="x32"
708 else
709 cpu="x86_64"
710 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000711elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000712 if check_define __arch64__ ; then
713 cpu="sparc64"
714 else
715 cpu="sparc"
716 fi
malcfdf7ed92009-01-14 18:39:52 +0000717elif check_define _ARCH_PPC ; then
718 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700719 if check_define _LITTLE_ENDIAN ; then
720 cpu="ppc64le"
721 else
722 cpu="ppc64"
723 fi
malcfdf7ed92009-01-14 18:39:52 +0000724 else
725 cpu="ppc"
726 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200727elif check_define __mips__ ; then
728 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200729elif check_define __s390__ ; then
730 if check_define __s390x__ ; then
731 cpu="s390x"
732 else
733 cpu="s390"
734 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000735elif check_define __riscv ; then
736 if check_define _LP64 ; then
737 cpu="riscv64"
738 else
739 cpu="riscv32"
740 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100741elif check_define __arm__ ; then
742 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100743elif check_define __aarch64__ ; then
744 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000745else
Stefan Weil89138852016-05-16 15:10:20 +0200746 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000747fi
748
Peter Maydell359bc952011-12-24 13:07:25 +0000749ARCH=
750# Normalise host CPU name and set ARCH.
751# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000752case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200753 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000754 supported_cpu="yes"
755 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700756 ppc64le)
757 ARCH="ppc64"
758 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700759 ;;
bellard7d132992003-03-06 23:23:54 +0000760 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000761 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000762 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000763 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000764 x86_64|amd64)
765 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000766 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000767 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100768 armv*b|armv*l|arm)
769 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000770 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000771 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100772 aarch64)
773 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000774 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100775 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200776 mips*)
777 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000778 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200779 ;;
blueswir131422552007-04-16 18:27:06 +0000780 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000781 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100782 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000783 ;;
bellard7d132992003-03-06 23:23:54 +0000784 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000785 # This will result in either an error or falling back to TCI later
786 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000787 ;;
788esac
Peter Maydell359bc952011-12-24 13:07:25 +0000789if test -z "$ARCH"; then
790 ARCH="$cpu"
791fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200792
bellard7d132992003-03-06 23:23:54 +0000793# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200794
Stacey Sonadfc3e92014-06-08 09:57:22 -0700795# host *BSD for user mode
796HOST_VARIANT_DIR=""
797
bellard7d132992003-03-06 23:23:54 +0000798case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000799MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200800 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100801 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100802 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200803 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200804 if check_include dsound.h; then
805 audio_drv_list="dsound"
806 else
807 audio_drv_list=""
808 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000809 supported_os="yes"
Alex Bennée469a7882020-04-14 21:06:22 +0100810 pie="no"
bellard67b915a2004-03-31 23:37:16 +0000811;;
ths5c40d2b2007-06-23 16:03:36 +0000812GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100813 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100814 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200815 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000816;;
bellard7d3505c2004-05-12 19:32:15 +0000817FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200818 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100819 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100820 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200821 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100822 # needed for kinfo_getvmmap(3) in libutil.h
823 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500824 # needed for kinfo_getproc
825 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100826 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700827 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000828 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000829;;
blueswir1c5e97232009-03-07 20:06:23 +0000830DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200831 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100832 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100833 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200834 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700835 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000836;;
bellard7d3505c2004-05-12 19:32:15 +0000837NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200838 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100839 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100840 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100841 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200842 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200843 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700844 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200845 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000846;;
847OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200848 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100849 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100850 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200851 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700852 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500853 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000854;;
bellard83fb7ad2004-07-05 21:25:26 +0000855Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200856 bsd="yes"
857 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100858 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500859 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800860 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200861 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200862 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100863 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200864 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200865 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100866 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200867 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100868 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200869 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100870 # Disable attempts to use ObjectiveC features in os/object.h since they
871 # won't work when we're compiling with gcc as a C compiler.
872 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700873 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000874 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000875;;
bellardec530c82006-04-25 22:36:06 +0000876SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200877 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100878 make="${MAKE-gmake}"
879 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400880 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200881 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100882 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200883 fi
884 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000885# needed for CMSG_ macros in sys/socket.h
886 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
887# needed for TIOCWIN* defines in termios.h
888 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200889 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200890 solarisnetlibs="-lsocket -lnsl -lresolv"
891 LIBS="$solarisnetlibs $LIBS"
892 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000893;;
Andreas Färber179cf402010-09-20 00:50:43 +0200894Haiku)
895 haiku="yes"
896 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
897 LIBS="-lposix_error_mapper -lnetwork $LIBS"
898;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000899Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100900 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200901 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200902 linux="yes"
903 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200904 kvm="yes"
Eduardo Habkost67cf3f52020-03-11 19:23:41 -0400905 QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000906 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200907 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000908;;
bellard7d132992003-03-06 23:23:54 +0000909esac
910
bellard7d3505c2004-05-12 19:32:15 +0000911if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000912 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200913 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000914 fi
bellard7d3505c2004-05-12 19:32:15 +0000915fi
916
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100917: ${make=${MAKE-make}}
918: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000919# We prefer python 3.x. A bare 'python' is traditionally
920# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300921# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000922python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300923for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000924do
925 if has "$binary"
926 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200927 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000928 break
929 fi
930done
Markus Armbruster903458c2020-02-14 18:18:41 +0100931
932sphinx_build=
933for binary in sphinx-build-3 sphinx-build
934do
935 if has "$binary"
936 then
937 sphinx_build=$(command -v "$binary")
938 break
939 fi
940done
941
Alex Bennée39d87c82020-03-03 15:06:20 +0000942# Check for ancillary tools used in testing
943genisoimage=
944for binary in genisoimage
945do
946 if has $binary
947 then
948 genisoimage=$(command -v "$binary")
949 break
950 fi
951done
952
Brade2d88302011-09-02 16:53:28 -0400953: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100954
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100955# Default objcc to clang if available, otherwise use CC
956if has clang; then
957 objcc=clang
958else
959 objcc="$cc"
960fi
961
Juan Quintela3457a3f2009-08-03 14:46:07 +0200962if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200963 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800964 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100965 # MinGW needs -mthreads for TLS and macro _MT.
966 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100967 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400968 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100969 if compile_prog "" "-liberty" ; then
970 LIBS="-liberty $LIBS"
971 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200972 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200973 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300974 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300975 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200976 bindir="\${prefix}"
977 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200978 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200979 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300980 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200981fi
982
Anthony Liguori487fefd2009-06-11 13:28:25 -0500983werror=""
bellard85aa5182007-11-11 20:17:03 +0000984
bellard7d132992003-03-06 23:23:54 +0000985for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200986 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000987 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000988 --help|-h) show_help=yes
989 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400990 --version|-V) exec cat $source_path/VERSION
991 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000992 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000993 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000994 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000995 ;;
aliguoriac0df512008-12-29 17:14:15 +0000996 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000997 ;;
aliguoriac0df512008-12-29 17:14:15 +0000998 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000999 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001000 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +00001001 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04001002 --cxx=*)
1003 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +02001004 --iasl=*) iasl="$optarg"
1005 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +01001006 --objcc=*) objcc="$optarg"
1007 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001008 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +00001009 ;;
pbrook6a882642006-04-17 13:57:12 +00001010 --install=*) install="$optarg"
1011 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +00001012 --python=*) python="$optarg"
1013 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001014 --sphinx-build=*) sphinx_build="$optarg"
1015 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001016 --gcov=*) gcov_tool="$optarg"
1017 ;;
Brade2d88302011-09-02 16:53:28 -04001018 --smbd=*) smbd="$optarg"
1019 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001020 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001021 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001022 --extra-cxxflags=*)
1023 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001024 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001025 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001026 --enable-debug-info)
1027 ;;
1028 --disable-debug-info)
1029 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001030 --cross-cc-*)
1031 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001032 --enable-modules)
1033 modules="yes"
1034 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001035 --disable-modules)
1036 modules="no"
1037 ;;
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01001038 --disable-module-upgrades) module_upgrades="no"
1039 ;;
1040 --enable-module-upgrades) module_upgrades="yes"
1041 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001042 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001043 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001044 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001045 if test "$target_list_exclude"; then
1046 error_exit "Can't mix --target-list with --target-list-exclude"
1047 fi
1048 ;;
1049 --target-list-exclude=*) target_list_exclude="$optarg"
1050 if test "$target_list"; then
1051 error_exit "Can't mix --target-list-exclude with --target-list"
1052 fi
bellardde83cd02003-06-15 20:25:43 +00001053 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001054 --enable-trace-backends=*) trace_backends="$optarg"
1055 ;;
1056 # XXX: backwards compatibility
1057 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001058 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001059 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001060 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001061 --with-default-devices) default_devices="yes"
1062 ;;
1063 --without-default-devices) default_devices="no"
1064 ;;
bellard7d132992003-03-06 23:23:54 +00001065 --enable-gprof) gprof="yes"
1066 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001067 --enable-gcov) gcov="yes"
1068 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001069 --static)
1070 static="yes"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001071 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001072 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001073 --mandir=*) mandir="$optarg"
1074 ;;
1075 --bindir=*) bindir="$optarg"
1076 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001077 --libdir=*) libdir="$optarg"
1078 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001079 --libexecdir=*) libexecdir="$optarg"
1080 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001081 --includedir=*) includedir="$optarg"
1082 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001083 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001084 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001085 --with-confsuffix=*) confsuffix="$optarg"
1086 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001087 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001088 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001089 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001090 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001091 --localstatedir=*) local_statedir="$optarg"
1092 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001093 --firmwarepath=*) firmwarepath="$optarg"
1094 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001095 --host=*|--build=*|\
1096 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001097 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001098 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1099 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1100 # These switches are silently ignored, for compatibility with
1101 # autoconf-generated configure scripts. This allows QEMU's
1102 # configure to be used by RPM and similar macros that set
1103 # lots of directory switches by default.
1104 ;;
bellard97a847b2003-08-10 21:36:04 +00001105 --disable-sdl) sdl="no"
1106 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001107 --enable-sdl) sdl="yes"
1108 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001109 --disable-sdl-image) sdl_image="no"
1110 ;;
1111 --enable-sdl-image) sdl_image="yes"
1112 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001113 --disable-qom-cast-debug) qom_cast_debug="no"
1114 ;;
1115 --enable-qom-cast-debug) qom_cast_debug="yes"
1116 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301117 --disable-virtfs) virtfs="no"
1118 ;;
1119 --enable-virtfs) virtfs="yes"
1120 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001121 --disable-mpath) mpath="no"
1122 ;;
1123 --enable-mpath) mpath="yes"
1124 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001125 --disable-vnc) vnc="no"
1126 ;;
1127 --enable-vnc) vnc="yes"
1128 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001129 --oss-lib=*) oss_lib="$optarg"
1130 ;;
malc0c58ac12008-06-25 21:04:05 +00001131 --audio-drv-list=*) audio_drv_list="$optarg"
1132 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001133 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001134 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001135 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001136 ;;
aurel32f8393942009-04-13 18:45:38 +00001137 --enable-debug-tcg) debug_tcg="yes"
1138 ;;
1139 --disable-debug-tcg) debug_tcg="no"
1140 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001141 --enable-debug)
1142 # Enable debugging options that aren't excessively noisy
1143 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001144 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001145 debug="yes"
1146 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001147 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001148 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001149 --enable-sanitizers) sanitizers="yes"
1150 ;;
1151 --disable-sanitizers) sanitizers="no"
1152 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001153 --enable-sparse) sparse="yes"
1154 ;;
1155 --disable-sparse) sparse="no"
1156 ;;
aliguori1625af82009-04-05 17:41:02 +00001157 --disable-strip) strip_opt="no"
1158 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001159 --disable-vnc-sasl) vnc_sasl="no"
1160 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001161 --enable-vnc-sasl) vnc_sasl="yes"
1162 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001163 --disable-vnc-jpeg) vnc_jpeg="no"
1164 ;;
1165 --enable-vnc-jpeg) vnc_jpeg="yes"
1166 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001167 --disable-vnc-png) vnc_png="no"
1168 ;;
1169 --enable-vnc-png) vnc_png="yes"
1170 ;;
bellard443f1372004-06-04 11:13:20 +00001171 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001172 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001173 --enable-slirp=git) slirp="git"
1174 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001175 --enable-slirp=system) slirp="system"
1176 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001177 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001178 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001179 --enable-vde) vde="yes"
1180 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001181 --disable-netmap) netmap="no"
1182 ;;
1183 --enable-netmap) netmap="yes"
1184 ;;
aliguorie37630c2009-04-22 15:19:10 +00001185 --disable-xen) xen="no"
1186 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001187 --enable-xen) xen="yes"
1188 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001189 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1190 ;;
1191 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1192 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001193 --disable-brlapi) brlapi="no"
1194 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001195 --enable-brlapi) brlapi="yes"
1196 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001197 --disable-kvm) kvm="no"
1198 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001199 --enable-kvm) kvm="yes"
1200 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001201 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001202 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001203 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001204 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001205 --disable-hvf) hvf="no"
1206 ;;
1207 --enable-hvf) hvf="yes"
1208 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001209 --disable-whpx) whpx="no"
1210 ;;
1211 --enable-whpx) whpx="yes"
1212 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001213 --disable-tcg-interpreter) tcg_interpreter="no"
1214 ;;
1215 --enable-tcg-interpreter) tcg_interpreter="yes"
1216 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001217 --disable-cap-ng) cap_ng="no"
1218 ;;
1219 --enable-cap-ng) cap_ng="yes"
1220 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001221 --disable-tcg) tcg="no"
1222 ;;
1223 --enable-tcg) tcg="yes"
1224 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001225 --disable-malloc-trim) malloc_trim="no"
1226 ;;
1227 --enable-malloc-trim) malloc_trim="yes"
1228 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001229 --disable-spice) spice="no"
1230 ;;
1231 --enable-spice) spice="yes"
1232 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001233 --disable-libiscsi) libiscsi="no"
1234 ;;
1235 --enable-libiscsi) libiscsi="yes"
1236 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001237 --disable-libnfs) libnfs="no"
1238 ;;
1239 --enable-libnfs) libnfs="yes"
1240 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001241 --enable-profiler) profiler="yes"
1242 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001243 --disable-cocoa) cocoa="no"
1244 ;;
malcc2de5c92008-06-28 19:13:06 +00001245 --enable-cocoa)
1246 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001247 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001248 ;;
pbrookcad25d62006-03-19 16:31:11 +00001249 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001250 ;;
pbrookcad25d62006-03-19 16:31:11 +00001251 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001252 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001253 --disable-user)
1254 linux_user="no" ;
1255 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001256 ;;
1257 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001258 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001259 ;;
ths831b7822007-01-18 20:06:33 +00001260 --enable-linux-user) linux_user="yes"
1261 ;;
blueswir184778502008-10-26 20:33:16 +00001262 --disable-bsd-user) bsd_user="no"
1263 ;;
1264 --enable-bsd-user) bsd_user="yes"
1265 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001266 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001267 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001268 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001269 ;;
bellard85aa5182007-11-11 20:17:03 +00001270 --enable-werror) werror="yes"
1271 ;;
1272 --disable-werror) werror="no"
1273 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001274 --enable-stack-protector) stack_protector="yes"
1275 ;;
1276 --disable-stack-protector) stack_protector="no"
1277 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001278 --disable-curses) curses="no"
1279 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001280 --enable-curses) curses="yes"
1281 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001282 --disable-iconv) iconv="no"
1283 ;;
1284 --enable-iconv) iconv="yes"
1285 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001286 --disable-curl) curl="no"
1287 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001288 --enable-curl) curl="yes"
1289 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001290 --disable-fdt) fdt="no"
1291 ;;
1292 --enable-fdt) fdt="yes"
1293 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001294 --disable-linux-aio) linux_aio="no"
1295 ;;
1296 --enable-linux-aio) linux_aio="yes"
1297 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001298 --disable-linux-io-uring) linux_io_uring="no"
1299 ;;
1300 --enable-linux-io-uring) linux_io_uring="yes"
1301 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001302 --disable-attr) attr="no"
1303 ;;
1304 --enable-attr) attr="yes"
1305 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001306 --disable-membarrier) membarrier="no"
1307 ;;
1308 --enable-membarrier) membarrier="yes"
1309 ;;
ths77755342008-11-27 15:45:16 +00001310 --disable-blobs) blobs="no"
1311 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001312 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001313 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001314 --with-coroutine=*) coroutine="$optarg"
1315 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001316 --disable-coroutine-pool) coroutine_pool="no"
1317 ;;
1318 --enable-coroutine-pool) coroutine_pool="yes"
1319 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001320 --enable-debug-stack-usage) debug_stack_usage="yes"
1321 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001322 --enable-crypto-afalg) crypto_afalg="yes"
1323 ;;
1324 --disable-crypto-afalg) crypto_afalg="no"
1325 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001326 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001327 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001328 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001329 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001330 --disable-vhost-net) vhost_net="no"
1331 ;;
1332 --enable-vhost-net) vhost_net="yes"
1333 ;;
Gonglei042cea22018-03-01 21:46:28 +08001334 --disable-vhost-crypto) vhost_crypto="no"
1335 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001336 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001337 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001338 --disable-vhost-scsi) vhost_scsi="no"
1339 ;;
1340 --enable-vhost-scsi) vhost_scsi="yes"
1341 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001342 --disable-vhost-vsock) vhost_vsock="no"
1343 ;;
1344 --enable-vhost-vsock) vhost_vsock="yes"
1345 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001346 --disable-vhost-user-fs) vhost_user_fs="no"
1347 ;;
1348 --enable-vhost-user-fs) vhost_user_fs="yes"
1349 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001350 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001351 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001352 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001353 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001354 --disable-rbd) rbd="no"
1355 ;;
1356 --enable-rbd) rbd="yes"
1357 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001358 --disable-xfsctl) xfs="no"
1359 ;;
1360 --enable-xfsctl) xfs="yes"
1361 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001362 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001363 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001364 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001365 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001366 --disable-libusb) libusb="no"
1367 ;;
1368 --enable-libusb) libusb="yes"
1369 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001370 --disable-usb-redir) usb_redir="no"
1371 ;;
1372 --enable-usb-redir) usb_redir="yes"
1373 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001374 --disable-zlib-test) zlib="no"
1375 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001376 --disable-lzo) lzo="no"
1377 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001378 --enable-lzo) lzo="yes"
1379 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001380 --disable-snappy) snappy="no"
1381 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001382 --enable-snappy) snappy="yes"
1383 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001384 --disable-bzip2) bzip2="no"
1385 ;;
1386 --enable-bzip2) bzip2="yes"
1387 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001388 --enable-lzfse) lzfse="yes"
1389 ;;
1390 --disable-lzfse) lzfse="no"
1391 ;;
Juan Quintela3a678482019-12-17 21:15:24 +01001392 --disable-zstd) zstd="no"
1393 ;;
1394 --enable-zstd) zstd="yes"
1395 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001396 --enable-guest-agent) guest_agent="yes"
1397 ;;
1398 --disable-guest-agent) guest_agent="no"
1399 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001400 --enable-guest-agent-msi) guest_agent_msi="yes"
1401 ;;
1402 --disable-guest-agent-msi) guest_agent_msi="no"
1403 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001404 --with-vss-sdk) vss_win32_sdk=""
1405 ;;
1406 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1407 ;;
1408 --without-vss-sdk) vss_win32_sdk="no"
1409 ;;
1410 --with-win-sdk) win_sdk=""
1411 ;;
1412 --with-win-sdk=*) win_sdk="$optarg"
1413 ;;
1414 --without-win-sdk) win_sdk="no"
1415 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001416 --enable-tools) want_tools="yes"
1417 ;;
1418 --disable-tools) want_tools="no"
1419 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001420 --enable-seccomp) seccomp="yes"
1421 ;;
1422 --disable-seccomp) seccomp="no"
1423 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301424 --disable-glusterfs) glusterfs="no"
1425 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001426 --disable-avx2) avx2_opt="no"
1427 ;;
1428 --enable-avx2) avx2_opt="yes"
1429 ;;
Robert Hoo6b8cd442020-02-29 20:34:34 +08001430 --disable-avx512f) avx512f_opt="no"
1431 ;;
1432 --enable-avx512f) avx512f_opt="yes"
1433 ;;
1434
Bharata B Raoeb100392012-09-24 14:42:45 +05301435 --enable-glusterfs) glusterfs="yes"
1436 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001437 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1438 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001439 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001440 --enable-vhdx|--disable-vhdx)
1441 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1442 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001443 --enable-uuid|--disable-uuid)
1444 echo "$0: $opt is obsolete, UUID support is always built" >&2
1445 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001446 --disable-gtk) gtk="no"
1447 ;;
1448 --enable-gtk) gtk="yes"
1449 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001450 --tls-priority=*) tls_priority="$optarg"
1451 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001452 --disable-gnutls) gnutls="no"
1453 ;;
1454 --enable-gnutls) gnutls="yes"
1455 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001456 --disable-nettle) nettle="no"
1457 ;;
1458 --enable-nettle) nettle="yes"
1459 ;;
1460 --disable-gcrypt) gcrypt="no"
1461 ;;
1462 --enable-gcrypt) gcrypt="yes"
1463 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001464 --disable-auth-pam) auth_pam="no"
1465 ;;
1466 --enable-auth-pam) auth_pam="yes"
1467 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001468 --enable-rdma) rdma="yes"
1469 ;;
1470 --disable-rdma) rdma="no"
1471 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001472 --enable-pvrdma) pvrdma="yes"
1473 ;;
1474 --disable-pvrdma) pvrdma="no"
1475 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001476 --disable-vte) vte="no"
1477 ;;
1478 --enable-vte) vte="yes"
1479 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001480 --disable-virglrenderer) virglrenderer="no"
1481 ;;
1482 --enable-virglrenderer) virglrenderer="yes"
1483 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001484 --disable-tpm) tpm="no"
1485 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001486 --enable-tpm) tpm="yes"
1487 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001488 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001489 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001490 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001491 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001492 --disable-live-block-migration) live_block_migration="no"
1493 ;;
1494 --enable-live-block-migration) live_block_migration="yes"
1495 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001496 --disable-numa) numa="no"
1497 ;;
1498 --enable-numa) numa="yes"
1499 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001500 --disable-libxml2) libxml2="no"
1501 ;;
1502 --enable-libxml2) libxml2="yes"
1503 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001504 --disable-tcmalloc) tcmalloc="no"
1505 ;;
1506 --enable-tcmalloc) tcmalloc="yes"
1507 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001508 --disable-jemalloc) jemalloc="no"
1509 ;;
1510 --enable-jemalloc) jemalloc="yes"
1511 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001512 --disable-replication) replication="no"
1513 ;;
1514 --enable-replication) replication="yes"
1515 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001516 --disable-vxhs) vxhs="no"
1517 ;;
1518 --enable-vxhs) vxhs="yes"
1519 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001520 --disable-bochs) bochs="no"
1521 ;;
1522 --enable-bochs) bochs="yes"
1523 ;;
1524 --disable-cloop) cloop="no"
1525 ;;
1526 --enable-cloop) cloop="yes"
1527 ;;
1528 --disable-dmg) dmg="no"
1529 ;;
1530 --enable-dmg) dmg="yes"
1531 ;;
1532 --disable-qcow1) qcow1="no"
1533 ;;
1534 --enable-qcow1) qcow1="yes"
1535 ;;
1536 --disable-vdi) vdi="no"
1537 ;;
1538 --enable-vdi) vdi="yes"
1539 ;;
1540 --disable-vvfat) vvfat="no"
1541 ;;
1542 --enable-vvfat) vvfat="yes"
1543 ;;
1544 --disable-qed) qed="no"
1545 ;;
1546 --enable-qed) qed="yes"
1547 ;;
1548 --disable-parallels) parallels="no"
1549 ;;
1550 --enable-parallels) parallels="yes"
1551 ;;
1552 --disable-sheepdog) sheepdog="no"
1553 ;;
1554 --enable-sheepdog) sheepdog="yes"
1555 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001556 --disable-vhost-user) vhost_user="no"
1557 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001558 --enable-vhost-user) vhost_user="yes"
1559 ;;
1560 --disable-vhost-kernel) vhost_kernel="no"
1561 ;;
1562 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001563 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001564 --disable-capstone) capstone="no"
1565 ;;
1566 --enable-capstone) capstone="yes"
1567 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001568 --enable-capstone=git) capstone="git"
1569 ;;
1570 --enable-capstone=system) capstone="system"
1571 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001572 --with-git=*) git="$optarg"
1573 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001574 --enable-git-update) git_update=yes
1575 ;;
1576 --disable-git-update) git_update=no
1577 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001578 --enable-debug-mutex) debug_mutex=yes
1579 ;;
1580 --disable-debug-mutex) debug_mutex=no
1581 ;;
Junyan He17824402018-07-18 15:47:59 +08001582 --enable-libpmem) libpmem=yes
1583 ;;
1584 --disable-libpmem) libpmem=no
1585 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001586 --enable-xkbcommon) xkbcommon=yes
1587 ;;
1588 --disable-xkbcommon) xkbcommon=no
1589 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001590 --enable-plugins) plugins="yes"
1591 ;;
1592 --disable-plugins) plugins="no"
1593 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001594 --enable-containers) use_containers="yes"
1595 ;;
1596 --disable-containers) use_containers="no"
1597 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001598 --enable-fuzzing) fuzzing=yes
1599 ;;
1600 --disable-fuzzing) fuzzing=no
1601 ;;
Alex Bennéef48e5902020-03-16 17:21:48 +00001602 --gdb=*) gdb_bin="$optarg"
1603 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001604 *)
1605 echo "ERROR: unknown option $opt"
1606 echo "Try '$0 --help' for more information"
1607 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001608 ;;
bellard7d132992003-03-06 23:23:54 +00001609 esac
1610done
1611
bellard40293e52008-01-31 11:32:10 +00001612case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001613 ppc)
1614 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001615 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001616 ;;
1617 ppc64)
1618 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001619 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001620 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001621 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001622 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001623 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001624 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001625 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001626 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001627 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001628 ;;
ths76d83bd2007-11-18 21:22:10 +00001629 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001630 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001631 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001632 ;;
1633 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001634 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001635 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001636 ;;
bellard40293e52008-01-31 11:32:10 +00001637 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001638 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001639 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001640 ;;
1641 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001642 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1643 # If we truly care, we should simply detect this case at
1644 # runtime and generate the fallback to serial emulation.
1645 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001646 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001647 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001648 x32)
1649 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001650 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001651 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001652 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001653esac
1654
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001655eval "cross_cc_${cpu}=\$host_cc"
1656cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001657QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001658
Peter Maydellaffc88c2016-06-13 11:32:24 +01001659# For user-mode emulation the host arch has to be one we explicitly
1660# support, even if we're using TCI.
1661if [ "$ARCH" = "unknown" ]; then
1662 bsd_user="no"
1663 linux_user="no"
1664fi
1665
Peter Maydell60e0df22011-05-03 14:50:13 +01001666default_target_list=""
1667
Peter Maydell6e92f822013-05-20 16:16:15 +01001668mak_wilds=""
1669
1670if [ "$softmmu" = "yes" ]; then
1671 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001672fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001673if [ "$linux_user" = "yes" ]; then
1674 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001675fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001676if [ "$bsd_user" = "yes" ]; then
1677 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001678fi
1679
Alex Bennée447e1332019-03-19 11:59:12 +00001680if test -z "$target_list_exclude"; then
1681 for config in $mak_wilds; do
1682 default_target_list="${default_target_list} $(basename "$config" .mak)"
1683 done
1684else
1685 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1686 for config in $mak_wilds; do
1687 target="$(basename "$config" .mak)"
1688 exclude="no"
1689 for excl in $exclude_list; do
1690 if test "$excl" = "$target"; then
1691 exclude="yes"
1692 break;
1693 fi
1694 done
1695 if test "$exclude" = "no"; then
1696 default_target_list="${default_target_list} $target"
1697 fi
1698 done
1699fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001700
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001701# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001702trace_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 +01001703
pbrookaf5db582006-04-08 14:26:41 +00001704if test x"$show_help" = x"yes" ; then
1705cat << EOF
1706
1707Usage: configure [options]
1708Options: [defaults in brackets after descriptions]
1709
Stefan Weil08fb77e2013-12-18 22:09:39 +01001710Standard options:
1711 --help print this message
1712 --prefix=PREFIX install in PREFIX [$prefix]
1713 --interp-prefix=PREFIX where to find shared libraries, etc.
1714 use %M for cpu name [$interp_prefix]
1715 --target-list=LIST set target list (default: build everything)
1716$(echo Available targets: $default_target_list | \
1717 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001718 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001719
1720Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001721 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1722 --cc=CC use C compiler CC [$cc]
1723 --iasl=IASL use ACPI compiler IASL [$iasl]
1724 --host-cc=CC use C compiler CC [$host_cc] for code run at
1725 build time
1726 --cxx=CXX use C++ compiler CXX [$cxx]
1727 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1728 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001729 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001730 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001731 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001732 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001733 --make=MAKE use specified make [$make]
1734 --install=INSTALL use specified install [$install]
1735 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001736 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001737 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001738 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001739 --static enable static build [$static]
1740 --mandir=PATH install man pages in PATH
1741 --datadir=PATH install firmware in PATH$confsuffix
1742 --docdir=PATH install documentation in PATH$confsuffix
1743 --bindir=PATH install binaries in PATH
1744 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001745 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001746 --sysconfdir=PATH install config in PATH$confsuffix
1747 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001748 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001749 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001750 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001751 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001752 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001753 --disable-strip disable stripping binaries
1754 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001755 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001756 --audio-drv-list=LIST set audio drivers list:
1757 Available drivers: $audio_possible_drivers
1758 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1759 --block-drv-rw-whitelist=L
1760 set block driver read-write whitelist
1761 (affects only QEMU, not qemu-img)
1762 --block-drv-ro-whitelist=L
1763 set block driver read-only whitelist
1764 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001765 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001766 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001767 --with-trace-file=NAME Full PATH,NAME of file to store traces
1768 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001769 --disable-slirp disable SLIRP userspace network connectivity
1770 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001771 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001772 --oss-lib path to OSS library
1773 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001774 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001775 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001776 --enable-gcov enable test coverage analysis with gcov
1777 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001778 --disable-blobs disable installing provided firmware blobs
1779 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1780 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001781 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001782 --enable-gprof QEMU profiling with gprof
1783 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001784 --enable-debug-stack-usage
1785 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001786 --enable-plugins
1787 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001788 --disable-containers don't use containers for cross-building
Alex Bennéef48e5902020-03-16 17:21:48 +00001789 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001790
1791Optional features, enabled with --enable-FEATURE and
1792disabled with --disable-FEATURE, default is enabled if available:
1793
1794 system all system emulation targets
1795 user supported user emulation targets
1796 linux-user all linux usermode emulation targets
1797 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001798 docs build documentation
1799 guest-agent build the QEMU Guest Agent
1800 guest-agent-msi build guest agent Windows MSI installation package
1801 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001802 modules modules support (non-Windows)
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01001803 module-upgrades try to load modules from alternate paths for upgrades
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001804 debug-tcg TCG debugging (default is disabled)
1805 debug-info debugging information
1806 sparse sparse checker
1807
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001808 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001809 nettle nettle cryptography support
1810 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001811 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001812 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001813 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001814 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001815 vte vte support for the gtk UI
1816 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001817 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001818 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001819 vnc-sasl SASL encryption for VNC server
1820 vnc-jpeg JPEG lossy compression for VNC server
1821 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001822 cocoa Cocoa UI (Mac OS X only)
1823 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001824 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001825 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001826 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001827 brlapi BrlAPI (Braile)
1828 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001829 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001830 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001831 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001832 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001833 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001834 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001835 rdma Enable RDMA-based migration
1836 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001837 vde support for vde network
1838 netmap support for netmap network
1839 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001840 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001841 cap-ng libcap-ng support
1842 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001843 vhost-net vhost-net kernel acceleration support
1844 vhost-vsock virtio sockets device support
1845 vhost-scsi vhost-scsi kernel target support
1846 vhost-crypto vhost-user-crypto backend support
1847 vhost-kernel vhost kernel backend support
1848 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001849 spice spice
1850 rbd rados block device (rbd)
1851 libiscsi iscsi support
1852 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001853 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001854 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001855 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001856 usb-redir usb network redirection support
1857 lzo support of lzo compression library
1858 snappy support of snappy compression library
1859 bzip2 support of bzip2 compression library
1860 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001861 lzfse support of lzfse compression library
1862 (for reading lzfse-compressed dmg images)
Juan Quintela3a678482019-12-17 21:15:24 +01001863 zstd support for zstd compression library
1864 (for migration compression)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001865 seccomp seccomp support
1866 coroutine-pool coroutine freelist (better performance)
1867 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001868 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001869 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001870 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001871 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001872 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001873 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001874 avx2 AVX2 optimization support
Robert Hoo6b8cd442020-02-29 20:34:34 +08001875 avx512f AVX512F optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001876 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001877 opengl opengl support
1878 virglrenderer virgl rendering support
1879 xfsctl xfsctl support
1880 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001881 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001882 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001883 bochs bochs image format support
1884 cloop cloop image format support
1885 dmg dmg image format support
1886 qcow1 qcow v1 image format support
1887 vdi vdi image format support
1888 vvfat vvfat image format support
1889 qed qed image format support
1890 parallels parallels image format support
1891 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001892 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001893 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001894 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001895 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001896 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001897
1898NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001899EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001900exit 0
pbrookaf5db582006-04-08 14:26:41 +00001901fi
1902
Thomas Huth9c790242019-03-11 11:20:34 +01001903# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001904rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001905
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001906# Remove syscall_nr.h to be sure they will be regenerated in the build
1907# directory, not in the source directory
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01001908for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
Laurent Vivier686a0fe2020-03-10 11:33:59 +01001909 i386 x86_64 mips mips64 ; do
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001910 # remove the file if it has been generated in the source directory
1911 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1912 # remove the dependency files
Laurent Vivier91e59982020-03-25 08:57:57 +01001913 for target in ${arch}*-linux-user ; do
1914 test -d "${target}" && find "${target}" -type f -name "*.d" \
1915 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1916 -print | while read file ; do rm "${file}" "${file%.d}.o" ; done
1917 done
Laurent Vivier4d6a8352020-03-10 11:33:43 +01001918done
1919
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001920if test -z "$python"
1921then
1922 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001923fi
1924
1925# Note that if the Python conditional here evaluates True we will exit
1926# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001927if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1928 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001929 "Use --python=/path/to/python to specify a supported Python."
1930fi
1931
Cleber Rosa755ee702018-11-09 10:07:07 -05001932# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001933python_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 -05001934
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001935# Suppress writing compiled files
1936python="$python -B"
1937
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001938# Check that the C compiler works. Doing this here before testing
1939# the host CPU ensures that we had a valid CC to autodetect the
1940# $cpu var (and we should bail right here if that's not the case).
1941# It also allows the help message to be printed without a CC.
1942write_c_skeleton;
1943if compile_object ; then
1944 : C compiler works ok
1945else
1946 error_exit "\"$cc\" either does not exist or does not work"
1947fi
1948if ! compile_prog ; then
1949 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1950fi
1951
Peter Maydell359bc952011-12-24 13:07:25 +00001952# Now we have handled --enable-tcg-interpreter and know we're not just
1953# printing the help message, bail out if the host CPU isn't supported.
1954if test "$ARCH" = "unknown"; then
1955 if test "$tcg_interpreter" = "yes" ; then
1956 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001957 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001958 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001959 fi
1960fi
1961
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001962# Consult white-list to determine whether to enable werror
1963# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001964if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001965 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001966 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001967 werror="yes"
1968 else
1969 werror="no"
1970 fi
1971fi
1972
Peter Maydellfb59dab2017-03-28 14:01:52 +01001973if test "$bogus_os" = "yes"; then
1974 # Now that we know that we're not printing the help and that
1975 # the compiler works (so the results of the check_defines we used
1976 # to identify the OS are reliable), if we didn't recognize the
1977 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001978 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001979fi
1980
Thomas Huthefc6c072018-12-03 10:12:32 +01001981# Check whether the compiler matches our minimum requirements:
1982cat > $TMPC << EOF
1983#if defined(__clang_major__) && defined(__clang_minor__)
1984# ifdef __apple_build_version__
1985# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1986# error You need at least XCode Clang v5.1 to compile QEMU
1987# endif
1988# else
1989# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1990# error You need at least Clang v3.4 to compile QEMU
1991# endif
1992# endif
1993#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1994# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1995# error You need at least GCC v4.8 to compile QEMU
1996# endif
1997#else
1998# error You either need GCC or Clang to compiler QEMU
1999#endif
2000int main (void) { return 0; }
2001EOF
2002if ! compile_prog "" "" ; then
2003 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2004fi
2005
Paolo Bonzini8d050952010-12-23 11:43:52 +01002006gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
2007gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00002008gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04002009gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02002010gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02002011gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01002012# Note that we do not add -Werror to gcc_flags here, because that would
2013# enable it for all configure tests. If a configure test failed due
2014# to -Werror this would just silently disable some features,
2015# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04002016
2017cc_has_warning_flag() {
2018 write_c_skeleton;
2019
Peter Maydella1d29d62012-10-27 22:19:07 +01002020 # Use the positive sense of the flag when testing for -Wno-wombat
2021 # support (gcc will happily accept the -Wno- form of unknown
2022 # warning options).
John Snow93b25862015-03-25 18:57:37 -04002023 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2024 compile_prog "-Werror $optflag" ""
2025}
2026
2027for flag in $gcc_flags; do
2028 if cc_has_warning_flag $flag ; then
2029 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01002030 fi
2031done
2032
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002033if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02002034 cat > $TMPC << EOF
2035int main(int argc, char *argv[])
2036{
2037 char arr[64], *p = arr, *c = argv[0];
2038 while (*c) {
2039 *p++ = *c++;
2040 }
2041 return 0;
2042}
2043EOF
Steven Noonan63678e12014-03-28 17:19:02 +01002044 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002045 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01002046 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01002047 # We need to check both a compile and a link, since some compiler
2048 # setups fail only on a .c->.o compile and some only at link time
2049 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2050 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01002051 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002052 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002053 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01002054 break
2055 fi
2056 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002057 if test "$stack_protector" = yes; then
2058 if test $sp_on = 0; then
2059 error_exit "Stack protector not supported"
2060 fi
2061 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01002062fi
2063
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02002064# Disable -Wmissing-braces on older compilers that warn even for
2065# the "universal" C zero initializer {0}.
2066cat > $TMPC << EOF
2067struct {
2068 int a[2];
2069} x = {0};
2070EOF
2071if compile_object "-Werror" "" ; then
2072 :
2073else
2074 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2075fi
2076
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002077# Our module code doesn't support Windows
2078if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2079 error_exit "Modules are not available for Windows"
2080fi
2081
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01002082# module_upgrades is only reasonable if modules are enabled
2083if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2084 error_exit "Can't enable module-upgrades as Modules are not enabled"
2085fi
2086
Thomas Huthd376e9d2018-12-03 11:41:38 +01002087# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002088if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002089 if test "$modules" = "yes" ; then
2090 error_exit "static and modules are mutually incompatible"
2091 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002092fi
2093
Emilio G. Cota768b7852015-04-29 13:09:02 +02002094# Unconditional check for compiler __thread support
2095 cat > $TMPC << EOF
2096static __thread int tls_var;
2097int main(void) { return tls_var; }
2098EOF
2099
2100if ! compile_prog "-Werror" "" ; then
2101 error_exit "Your compiler does not support the __thread specifier for " \
2102 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2103fi
2104
Richard Hendersonb2634122019-12-17 13:54:56 -10002105cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002106
2107#ifdef __linux__
2108# define THREAD __thread
2109#else
2110# define THREAD
2111#endif
Avi Kivity21d4a792011-11-23 11:24:25 +02002112static THREAD int tls_var;
Avi Kivity21d4a792011-11-23 11:24:25 +02002113int main(void) { return tls_var; }
Avi Kivity40d64442011-11-15 20:12:17 +02002114EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002115
Richard Hendersonb2634122019-12-17 13:54:56 -10002116# Check we support --no-pie first; we will need this for building ROMs.
2117if compile_prog "-Werror -fno-pie" "-no-pie"; then
2118 CFLAGS_NOPIE="-fno-pie"
2119 LDFLAGS_NOPIE="-no-pie"
2120fi
2121
Richard Henderson12781462019-12-17 15:30:14 -10002122if test "$static" = "yes"; then
Richard Hendersoneca7a8e2020-04-03 20:11:50 +01002123 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
Richard Henderson12781462019-12-17 15:30:14 -10002124 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2125 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2126 pie="yes"
2127 elif test "$pie" = "yes"; then
2128 error_exit "-static-pie not available due to missing toolchain support"
2129 else
2130 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2131 pie="no"
2132 fi
2133elif test "$pie" = "no"; then
Richard Henderson2c674102019-12-17 15:15:01 -10002134 QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS"
2135 QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS"
Richard Hendersoneca7a8e2020-04-03 20:11:50 +01002136elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
Richard Henderson2c674102019-12-17 15:15:01 -10002137 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2138 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
2139 pie="yes"
2140elif test "$pie" = "yes"; then
2141 error_exit "PIE not available due to missing toolchain support"
2142else
2143 echo "Disabling PIE due to missing toolchain support"
2144 pie="no"
Avi Kivity40d64442011-11-15 20:12:17 +02002145fi
2146
Richard Hendersone6cbd752019-12-17 14:00:39 -10002147# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2148# The combination is known as "full relro", because .got.plt is read-only too.
2149if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2150 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2151fi
2152
Paolo Bonzini09dada42013-04-17 16:26:47 +02002153##########################################
2154# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2155# use i686 as default anyway, but for those that don't, an explicit
2156# specification is necessary
2157
2158if test "$cpu" = "i386"; then
2159 cat > $TMPC << EOF
2160static int sfaa(int *ptr)
2161{
2162 return __sync_fetch_and_and(ptr, 0);
2163}
2164
2165int main(void)
2166{
2167 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002168 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002169 sfaa(&val);
2170 return val;
2171}
2172EOF
2173 if ! compile_prog "" "" ; then
2174 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2175 fi
2176fi
2177
2178#########################################
bellardec530c82006-04-25 22:36:06 +00002179# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002180
bellardec530c82006-04-25 22:36:06 +00002181if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002182 if has $install; then
2183 :
2184 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002185 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2186 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2187 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002188 fi
Stefan Weil89138852016-05-16 15:10:20 +02002189 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002190 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2191 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2192 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002193 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002194 if has ar; then
2195 :
2196 else
bellardec530c82006-04-25 22:36:06 +00002197 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002198 error_exit "No path includes ar" \
2199 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002200 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002201 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002202 fi
ths5fafdf22007-09-16 21:08:06 +00002203fi
bellardec530c82006-04-25 22:36:06 +00002204
Stefan Weilafb63eb2012-09-26 22:04:38 +02002205if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002206 for target in $default_target_list; do
2207 supported_target $target 2>/dev/null && \
2208 target_list="$target_list $target"
2209 done
2210 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002211else
Stefan Weil89138852016-05-16 15:10:20 +02002212 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002213 for target in $target_list; do
2214 # Check that we recognised the target name; this allows a more
2215 # friendly error message than if we let it fall through.
2216 case " $default_target_list " in
2217 *" $target "*)
2218 ;;
2219 *)
2220 error_exit "Unknown target name '$target'"
2221 ;;
2222 esac
2223 supported_target $target || exit 1
2224 done
bellard5327cf42005-01-10 23:18:50 +00002225fi
Peter Maydell25b48332013-05-20 16:16:16 +01002226
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002227# see if system emulation was really requested
2228case " $target_list " in
2229 *"-softmmu "*) softmmu=yes
2230 ;;
2231 *) softmmu=no
2232 ;;
2233esac
bellard5327cf42005-01-10 23:18:50 +00002234
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002235for target in $target_list; do
2236 case "$target" in
2237 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2238 edk2_blobs="yes"
2239 ;;
2240 esac
2241done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002242# The EDK2 binaries are compressed with bzip2
2243if test "$edk2_blobs" = "yes" && ! has bzip2; then
2244 error_exit "The bzip2 program is required for building QEMU"
2245fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002246
Juan Quintela249247c2009-08-12 18:20:25 +02002247feature_not_found() {
2248 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002249 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002250
Peter Maydell76ad07a2013-04-08 12:11:26 +01002251 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002252 "configure was not able to find it." \
2253 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002254}
2255
bellard7d132992003-03-06 23:23:54 +00002256# ---
2257# big/little endian test
2258cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002259short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2260short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2261extern int foo(short *, short *);
2262int main(int argc, char *argv[]) {
2263 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002264}
2265EOF
2266
Mike Frysinger61cc9192013-06-30 23:30:18 -04002267if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002268 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002269 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002270 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002271 bigendian="no"
2272 else
2273 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002274 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002275else
2276 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002277fi
2278
Juan Quintelab0a47e72009-08-12 18:29:49 +02002279##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002280# system tools
2281if test -z "$want_tools"; then
2282 if test "$softmmu" = "no"; then
2283 want_tools=no
2284 else
2285 want_tools=yes
2286 fi
2287fi
2288
2289##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002290# cocoa implies not SDL or GTK
2291# (the cocoa UI code currently assumes it is always the active UI
2292# and doesn't interact well with other UI frontend code)
2293if test "$cocoa" = "yes"; then
2294 if test "$sdl" = "yes"; then
2295 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2296 fi
2297 if test "$gtk" = "yes"; then
2298 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2299 fi
2300 gtk=no
2301 sdl=no
2302fi
2303
Eric Blake6b39b062016-10-11 10:46:23 -05002304# Some versions of Mac OS X incorrectly define SIZE_MAX
2305cat > $TMPC << EOF
2306#include <stdint.h>
2307#include <stdio.h>
2308int main(int argc, char *argv[]) {
2309 return printf("%zu", SIZE_MAX);
2310}
2311EOF
2312have_broken_size_max=no
2313if ! compile_object -Werror ; then
2314 have_broken_size_max=yes
2315fi
2316
Peter Maydella30878e2015-08-14 16:10:52 +01002317##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002318# L2TPV3 probe
2319
2320cat > $TMPC <<EOF
2321#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002322#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002323int main(void) { return sizeof(struct mmsghdr); }
2324EOF
2325if compile_prog "" "" ; then
2326 l2tpv3=yes
2327else
2328 l2tpv3=no
2329fi
2330
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002331#########################################
2332# vhost interdependencies and host support
2333
2334# vhost backends
2335test "$vhost_user" = "" && vhost_user=yes
2336if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2337 error_exit "vhost-user isn't available on win32"
2338fi
2339test "$vhost_kernel" = "" && vhost_kernel=$linux
2340if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2341 error_exit "vhost-kernel is only available on Linux"
2342fi
2343
2344# vhost-kernel devices
2345test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2346if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2347 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2348fi
2349test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2350if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2351 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2352fi
2353
2354# vhost-user backends
2355test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2356if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2357 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2358fi
2359test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2360if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2361 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2362fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002363test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2364if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2365 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2366fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002367
2368# OR the vhost-kernel and vhost-user values for simplicity
2369if test "$vhost_net" = ""; then
2370 test "$vhost_net_user" = "yes" && vhost_net=yes
2371 test "$vhost_kernel" = "yes" && vhost_net=yes
2372fi
2373
Gonglei015a33b2014-07-01 20:58:08 +08002374##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002375# MinGW / Mingw-w64 localtime_r/gmtime_r check
2376
2377if test "$mingw32" = "yes"; then
2378 # Some versions of MinGW / Mingw-w64 lack localtime_r
2379 # and gmtime_r entirely.
2380 #
2381 # Some versions of Mingw-w64 define a macro for
2382 # localtime_r/gmtime_r.
2383 #
2384 # Some versions of Mingw-w64 will define functions
2385 # for localtime_r/gmtime_r, but only if you have
2386 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2387 # though, unistd.h and pthread.h both define
2388 # that for you.
2389 #
2390 # So this #undef localtime_r and #include <unistd.h>
2391 # are not in fact redundant.
2392cat > $TMPC << EOF
2393#include <unistd.h>
2394#include <time.h>
2395#undef localtime_r
2396int main(void) { localtime_r(NULL, NULL); return 0; }
2397EOF
2398 if compile_prog "" "" ; then
2399 localtime_r="yes"
2400 else
2401 localtime_r="no"
2402 fi
2403fi
2404
2405##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002406# pkg-config probe
2407
2408if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002409 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002410fi
2411
2412##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002413# NPTL probe
2414
Peter Maydell24cb36a2013-07-16 18:45:00 +01002415if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002416 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002417#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002418#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002419int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002420#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2421#error bork
2422#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002423 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002424}
2425EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002426 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002427 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002428 fi
pbrookbd0c5662008-05-29 14:34:11 +00002429fi
2430
balrogac629222008-10-11 09:56:04 +00002431##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002432# lzo check
2433
2434if test "$lzo" != "no" ; then
2435 cat > $TMPC << EOF
2436#include <lzo/lzo1x.h>
2437int main(void) { lzo_version(); return 0; }
2438EOF
2439 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002440 libs_softmmu="$libs_softmmu -llzo2"
2441 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002442 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002443 if test "$lzo" = "yes"; then
2444 feature_not_found "liblzo2" "Install liblzo2 devel"
2445 fi
2446 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002447 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002448fi
2449
2450##########################################
2451# snappy check
2452
2453if test "$snappy" != "no" ; then
2454 cat > $TMPC << EOF
2455#include <snappy-c.h>
2456int main(void) { snappy_max_compressed_length(4096); return 0; }
2457EOF
2458 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002459 libs_softmmu="$libs_softmmu -lsnappy"
2460 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002461 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002462 if test "$snappy" = "yes"; then
2463 feature_not_found "libsnappy" "Install libsnappy devel"
2464 fi
2465 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002466 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002467fi
2468
2469##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002470# bzip2 check
2471
2472if test "$bzip2" != "no" ; then
2473 cat > $TMPC << EOF
2474#include <bzlib.h>
2475int main(void) { BZ2_bzlibVersion(); return 0; }
2476EOF
2477 if compile_prog "" "-lbz2" ; then
2478 bzip2="yes"
2479 else
2480 if test "$bzip2" = "yes"; then
2481 feature_not_found "libbzip2" "Install libbzip2 devel"
2482 fi
2483 bzip2="no"
2484 fi
2485fi
2486
2487##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002488# lzfse check
2489
2490if test "$lzfse" != "no" ; then
2491 cat > $TMPC << EOF
2492#include <lzfse.h>
2493int main(void) { lzfse_decode_scratch_size(); return 0; }
2494EOF
2495 if compile_prog "" "-llzfse" ; then
2496 lzfse="yes"
2497 else
2498 if test "$lzfse" = "yes"; then
2499 feature_not_found "lzfse" "Install lzfse devel"
2500 fi
2501 lzfse="no"
2502 fi
2503fi
2504
2505##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002506# zstd check
2507
2508if test "$zstd" != "no" ; then
Juan Quintela297254c2020-03-10 12:14:31 +01002509 libzstd_minver="1.4.0"
2510 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
Juan Quintela3a678482019-12-17 21:15:24 +01002511 zstd_cflags="$($pkg_config --cflags libzstd)"
2512 zstd_libs="$($pkg_config --libs libzstd)"
2513 LIBS="$zstd_libs $LIBS"
2514 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2515 zstd="yes"
2516 else
2517 if test "$zstd" = "yes" ; then
2518 feature_not_found "libzstd" "Install libzstd devel"
2519 fi
2520 zstd="no"
2521 fi
2522fi
2523
2524##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002525# libseccomp check
2526
2527if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002528 libseccomp_minver="2.3.0"
2529 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002530 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2531 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002532 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002533 else
Andrew Jones693e5912015-09-30 11:59:18 -04002534 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002535 feature_not_found "libseccomp" \
2536 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002537 fi
2538 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002539 fi
2540fi
2541##########################################
aliguorie37630c2009-04-22 15:19:10 +00002542# xen probe
2543
Juan Quintelafc321b42009-08-12 18:29:55 +02002544if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002545 # Check whether Xen library path is specified via --extra-ldflags to avoid
2546 # overriding this setting with pkg-config output. If not, try pkg-config
2547 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002548
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002549 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2550 $pkg_config --exists xencontrol ; then
2551 xen_ctrl_version="$(printf '%d%02d%02d' \
2552 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2553 xen=yes
2554 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2555 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002556 if $pkg_config --exists xentoolcore; then
2557 xen_pc="$xen_pc xentoolcore"
2558 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002559 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2560 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002561 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002562
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002563 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002564 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002565
2566 # First we test whether Xen headers and libraries are available.
2567 # If no, we are done and there is no Xen support.
2568 # If yes, more tests are run to detect the Xen version.
2569
2570 # Xen (any)
2571 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002572#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002573int main(void) {
2574 return 0;
2575}
2576EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002577 if ! compile_prog "" "$xen_libs" ; then
2578 # Xen not found
2579 if test "$xen" = "yes" ; then
2580 feature_not_found "xen" "Install xen devel"
2581 fi
2582 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002583
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002584 # Xen unstable
2585 elif
2586 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002587#undef XC_WANT_COMPAT_DEVICEMODEL_API
2588#define __XEN_TOOLS__
2589#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002590#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002591int main(void) {
2592 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002593 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002594
2595 xd = xendevicemodel_open(0, 0);
2596 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2597
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002598 xfmem = xenforeignmemory_open(0, 0);
2599 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2600
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002601 return 0;
2602}
2603EOF
2604 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2605 then
2606 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2607 xen_ctrl_version=41100
2608 xen=yes
2609 elif
2610 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002611#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2612#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002613#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002614int main(void) {
2615 xenforeignmemory_handle *xfmem;
2616
2617 xfmem = xenforeignmemory_open(0, 0);
2618 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002619 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002620
2621 return 0;
2622}
2623EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002624 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002625 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002626 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002627 xen_ctrl_version=41000
2628 xen=yes
2629 elif
2630 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002631#undef XC_WANT_COMPAT_DEVICEMODEL_API
2632#define __XEN_TOOLS__
2633#include <xendevicemodel.h>
2634int main(void) {
2635 xendevicemodel_handle *xd;
2636
2637 xd = xendevicemodel_open(0, 0);
2638 xendevicemodel_close(xd);
2639
2640 return 0;
2641}
2642EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002643 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2644 then
2645 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2646 xen_ctrl_version=40900
2647 xen=yes
2648 elif
2649 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002650/*
2651 * If we have stable libs the we don't want the libxc compat
2652 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002653 *
2654 * Also, check if xengnttab_grant_copy_segment_t is defined and
2655 * grant copy operation is implemented.
2656 */
2657#undef XC_WANT_COMPAT_EVTCHN_API
2658#undef XC_WANT_COMPAT_GNTTAB_API
2659#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2660#include <xenctrl.h>
2661#include <xenstore.h>
2662#include <xenevtchn.h>
2663#include <xengnttab.h>
2664#include <xenforeignmemory.h>
2665#include <stdint.h>
2666#include <xen/hvm/hvm_info_table.h>
2667#if !defined(HVM_MAX_VCPUS)
2668# error HVM_MAX_VCPUS not defined
2669#endif
2670int main(void) {
2671 xc_interface *xc = NULL;
2672 xenforeignmemory_handle *xfmem;
2673 xenevtchn_handle *xe;
2674 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002675 xengnttab_grant_copy_segment_t* seg = NULL;
2676
2677 xs_daemon_open();
2678
2679 xc = xc_interface_open(0, 0, 0);
2680 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2681 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2682 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2683 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002684
2685 xfmem = xenforeignmemory_open(0, 0);
2686 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2687
2688 xe = xenevtchn_open(0, 0);
2689 xenevtchn_fd(xe);
2690
2691 xg = xengnttab_open(0, 0);
2692 xengnttab_grant_copy(xg, 0, seg);
2693
2694 return 0;
2695}
2696EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002697 compile_prog "" "$xen_libs $xen_stable_libs"
2698 then
2699 xen_ctrl_version=40800
2700 xen=yes
2701 elif
2702 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002703/*
2704 * If we have stable libs the we don't want the libxc compat
2705 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002706 */
2707#undef XC_WANT_COMPAT_EVTCHN_API
2708#undef XC_WANT_COMPAT_GNTTAB_API
2709#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2710#include <xenctrl.h>
2711#include <xenstore.h>
2712#include <xenevtchn.h>
2713#include <xengnttab.h>
2714#include <xenforeignmemory.h>
2715#include <stdint.h>
2716#include <xen/hvm/hvm_info_table.h>
2717#if !defined(HVM_MAX_VCPUS)
2718# error HVM_MAX_VCPUS not defined
2719#endif
2720int main(void) {
2721 xc_interface *xc = NULL;
2722 xenforeignmemory_handle *xfmem;
2723 xenevtchn_handle *xe;
2724 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002725
2726 xs_daemon_open();
2727
2728 xc = xc_interface_open(0, 0, 0);
2729 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2730 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2731 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2732 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002733
2734 xfmem = xenforeignmemory_open(0, 0);
2735 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2736
2737 xe = xenevtchn_open(0, 0);
2738 xenevtchn_fd(xe);
2739
2740 xg = xengnttab_open(0, 0);
2741 xengnttab_map_grant_ref(xg, 0, 0, 0);
2742
2743 return 0;
2744}
2745EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002746 compile_prog "" "$xen_libs $xen_stable_libs"
2747 then
2748 xen_ctrl_version=40701
2749 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002750
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002751 # Xen 4.6
2752 elif
2753 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002754#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002755#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002756#include <stdint.h>
2757#include <xen/hvm/hvm_info_table.h>
2758#if !defined(HVM_MAX_VCPUS)
2759# error HVM_MAX_VCPUS not defined
2760#endif
2761int main(void) {
2762 xc_interface *xc;
2763 xs_daemon_open();
2764 xc = xc_interface_open(0, 0, 0);
2765 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2766 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002767 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002768 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002769 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002770 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002771 return 0;
2772}
2773EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002774 compile_prog "" "$xen_libs"
2775 then
2776 xen_ctrl_version=40600
2777 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002778
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002779 # Xen 4.5
2780 elif
2781 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002782#include <xenctrl.h>
2783#include <xenstore.h>
2784#include <stdint.h>
2785#include <xen/hvm/hvm_info_table.h>
2786#if !defined(HVM_MAX_VCPUS)
2787# error HVM_MAX_VCPUS not defined
2788#endif
2789int main(void) {
2790 xc_interface *xc;
2791 xs_daemon_open();
2792 xc = xc_interface_open(0, 0, 0);
2793 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2794 xc_gnttab_open(NULL, 0);
2795 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2796 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002797 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2798 return 0;
2799}
2800EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002801 compile_prog "" "$xen_libs"
2802 then
2803 xen_ctrl_version=40500
2804 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002805
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002806 elif
2807 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002808#include <xenctrl.h>
2809#include <xenstore.h>
2810#include <stdint.h>
2811#include <xen/hvm/hvm_info_table.h>
2812#if !defined(HVM_MAX_VCPUS)
2813# error HVM_MAX_VCPUS not defined
2814#endif
2815int main(void) {
2816 xc_interface *xc;
2817 xs_daemon_open();
2818 xc = xc_interface_open(0, 0, 0);
2819 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2820 xc_gnttab_open(NULL, 0);
2821 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2822 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002823 return 0;
2824}
2825EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002826 compile_prog "" "$xen_libs"
2827 then
2828 xen_ctrl_version=40200
2829 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002830
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002831 else
2832 if test "$xen" = "yes" ; then
2833 feature_not_found "xen (unsupported version)" \
2834 "Install a supported xen (xen 4.2 or newer)"
2835 fi
2836 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002837 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002838
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002839 if test "$xen" = yes; then
2840 if test $xen_ctrl_version -ge 40701 ; then
2841 libs_softmmu="$xen_stable_libs $libs_softmmu"
2842 fi
2843 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002844 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002845 fi
aliguorie37630c2009-04-22 15:19:10 +00002846fi
2847
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002848if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002849 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002850 xen_pci_passthrough=yes
2851 else
2852 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002853 error_exit "User requested feature Xen PCI Passthrough" \
2854 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002855 fi
2856 xen_pci_passthrough=no
2857 fi
2858fi
2859
aliguorie37630c2009-04-22 15:19:10 +00002860##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002861# Windows Hypervisor Platform accelerator (WHPX) check
2862if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002863 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002864 whpx="yes"
2865 else
2866 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002867 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002868 fi
2869 whpx="no"
2870 fi
2871fi
2872
2873##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002874# Sparse probe
2875if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002876 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002877 sparse=yes
2878 else
2879 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002880 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002881 fi
2882 sparse=no
2883 fi
2884fi
2885
2886##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002887# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002888if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002889 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002890 x11_cflags=$($pkg_config --cflags x11)
2891 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002892fi
2893
2894##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002895# GTK probe
2896
2897if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002898 gtkpackage="gtk+-3.0"
2899 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002900 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002901 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002902 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2903 gtk_libs=$($pkg_config --libs $gtkpackage)
2904 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002905 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002906 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002907 gtk_cflags="$gtk_cflags $x11_cflags"
2908 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002909 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002910 gtk="yes"
2911 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002912 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002913 else
2914 gtk="no"
2915 fi
2916fi
2917
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002918
2919##########################################
2920# GNUTLS probe
2921
2922if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002923 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002924 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002925 gnutls_cflags=$($pkg_config --cflags gnutls)
2926 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002927 # Packaging for the static libraries is not always correct.
2928 # At least ubuntu 18.04 ships only shared libraries.
2929 write_c_skeleton
2930 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002931 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002932 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2933 pass="yes"
2934 fi
2935 fi
2936 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002937 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002938 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002939 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002940 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002941fi
2942
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002943
2944# If user didn't give a --disable/enable-gcrypt flag,
2945# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002946# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002947if test -z "$gcrypt"
2948then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002949 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002950 then
2951 gcrypt="no"
2952 fi
2953fi
2954
2955# If user didn't give a --disable/enable-nettle flag,
2956# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002957# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002958if test -z "$nettle"
2959then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002960 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002961 then
2962 nettle="no"
2963 fi
2964fi
2965
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002966has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002967 if ! has "libgcrypt-config"
2968 then
2969 return 1
2970 fi
2971
2972 if test -n "$cross_prefix"
2973 then
Stefan Weil89138852016-05-16 15:10:20 +02002974 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002975 if test "$host-" != $cross_prefix
2976 then
2977 return 1
2978 fi
2979 fi
2980
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002981 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2982 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2983
2984 if test $maj != 1 || test $min -lt 5
2985 then
2986 return 1
2987 fi
2988
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002989 return 0
2990}
2991
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002992
2993if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002994 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002995 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002996 nettle_cflags=$($pkg_config --cflags nettle)
2997 nettle_libs=$($pkg_config --libs nettle)
2998 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002999 # Link test to make sure the given libraries work (e.g for static).
3000 write_c_skeleton
3001 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003002 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003003 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3004 if test -z "$gcrypt"; then
3005 gcrypt="no"
3006 fi
3007 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003008 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003009 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01003010 if test "$pass" = "yes"
3011 then
3012 cat > $TMPC << EOF
3013#include <nettle/xts.h>
3014int main(void) {
3015 return 0;
3016}
3017EOF
3018 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3019 nettle_xts=yes
3020 qemu_private_xts=no
3021 fi
3022 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003023 if test "$pass" = "no" && test "$nettle" = "yes"; then
3024 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003025 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003026 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003027 fi
3028fi
3029
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003030if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003031 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003032 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003033 gcrypt_cflags=$(libgcrypt-config --cflags)
3034 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003035 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003036 # as it "spreads unnecessary dependencies" which in
3037 # turn breaks static builds...
3038 if test "$static" = "yes"
3039 then
3040 gcrypt_libs="$gcrypt_libs -lgpg-error"
3041 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003042
Richard Hendersona73e82e2019-05-09 18:24:35 -07003043 # Link test to make sure the given libraries work (e.g for static).
3044 write_c_skeleton
3045 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003046 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003047 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3048 pass="yes"
3049 fi
3050 fi
3051 if test "$pass" = "yes"; then
3052 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003053 cat > $TMPC << EOF
3054#include <gcrypt.h>
3055int main(void) {
3056 gcry_mac_hd_t handle;
3057 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3058 GCRY_MAC_FLAG_SECURE, NULL);
3059 return 0;
3060}
3061EOF
3062 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3063 gcrypt_hmac=yes
3064 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003065 cat > $TMPC << EOF
3066#include <gcrypt.h>
3067int main(void) {
3068 gcry_cipher_hd_t handle;
3069 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3070 return 0;
3071}
3072EOF
3073 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3074 gcrypt_xts=yes
3075 qemu_private_xts=no
3076 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003077 elif test "$gcrypt" = "yes"; then
3078 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003079 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003080 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003081 fi
3082fi
3083
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003084
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003085if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3086then
3087 error_exit "Only one of gcrypt & nettle can be enabled"
3088fi
3089
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003090##########################################
3091# libtasn1 - only for the TLS creds/session test suite
3092
3093tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003094tasn1_cflags=""
3095tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003096if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003097 tasn1_cflags=$($pkg_config --cflags libtasn1)
3098 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003099else
3100 tasn1=no
3101fi
3102
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003103
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003104##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003105# PAM probe
3106
3107if test "$auth_pam" != "no"; then
3108 cat > $TMPC <<EOF
3109#include <security/pam_appl.h>
3110#include <stdio.h>
3111int main(void) {
3112 const char *service_name = "qemu";
3113 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003114 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003115 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003116 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003117 return 0;
3118}
3119EOF
3120 if compile_prog "" "-lpam" ; then
3121 auth_pam=yes
3122 else
3123 if test "$auth_pam" = "yes"; then
3124 feature_not_found "PAM" "Install PAM development package"
3125 else
3126 auth_pam=no
3127 fi
3128 fi
3129fi
3130
3131##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003132# getifaddrs (for tests/test-io-channel-socket )
3133
3134have_ifaddrs_h=yes
3135if ! check_include "ifaddrs.h" ; then
3136 have_ifaddrs_h=no
3137fi
3138
3139##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003140# VTE probe
3141
3142if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003143 vteminversion="0.32.0"
3144 if $pkg_config --exists "vte-2.91"; then
3145 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003146 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003147 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003148 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003149 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003150 vte_cflags=$($pkg_config --cflags $vtepackage)
3151 vte_libs=$($pkg_config --libs $vtepackage)
3152 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003153 vte="yes"
3154 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003155 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003156 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003157 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003158 fi
3159fi
3160
3161##########################################
bellard11d9f692004-04-02 20:55:59 +00003162# SDL probe
3163
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003164# Look for sdl configuration program (pkg-config or sdl2-config). Try
3165# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003166
Peter Xuc6093a02018-04-10 13:40:34 +08003167sdl_probe ()
3168{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003169 if $pkg_config sdl2 --exists; then
3170 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003171 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003172 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003173 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003174 sdlversion=$($sdlconfig --version)
3175 else
3176 if test "$sdl" = "yes" ; then
3177 feature_not_found "sdl" "Install SDL2-devel"
3178 fi
3179 sdl=no
3180 # no need to do the rest
3181 return
3182 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003183 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003184 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3185 fi
3186
Juan Quintelaac119f92009-07-27 16:13:15 +02003187 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003188#include <SDL.h>
3189#undef main /* We don't want SDL to override our main() */
3190int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3191EOF
Stefan Weil89138852016-05-16 15:10:20 +02003192 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003193 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003194 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003195 if $pkg_config sdl2 --exists; then
3196 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003197 else
3198 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3199 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003200 else
Stefan Weil89138852016-05-16 15:10:20 +02003201 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003202 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003203 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003204 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003205
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003206 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003207 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003208 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003209 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3210 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003211 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003212 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003213 :
3214 else
3215 sdl=no
3216 fi
3217 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003218 else # sdl not found
3219 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003220 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003221 fi
3222 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003223 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003224}
3225
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003226sdl_image_probe ()
3227{
3228 if test "$sdl_image" != "no" ; then
3229 if $pkg_config SDL2_image --exists; then
3230 if test "$static" = "yes"; then
3231 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3232 else
3233 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3234 fi
3235 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3236 sdl_image=yes
3237
3238 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3239 sdl_libs="$sdl_libs $sdl_image_libs"
3240 else
3241 if test "$sdl_image" = "yes" ; then
3242 feature_not_found "sdl_image" "Install SDL Image devel"
3243 else
3244 sdl_image=no
3245 fi
3246 fi
3247 fi
3248}
3249
Peter Xuc6093a02018-04-10 13:40:34 +08003250if test "$sdl" != "no" ; then
3251 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003252fi
bellard11d9f692004-04-02 20:55:59 +00003253
aliguori5368a422009-03-03 17:37:21 +00003254if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003255 sdl_image_probe
3256else
3257 if test "$sdl_image" = "yes"; then
3258 echo "warning: SDL Image requested, but SDL is not available, disabling"
3259 fi
3260 sdl_image=no
3261fi
3262
3263if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003264 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003265#include <SDL.h>
3266#if defined(SDL_VIDEO_DRIVER_X11)
3267#include <X11/XKBlib.h>
3268#else
3269#error No x11 support
3270#endif
3271int main(void) { return 0; }
3272EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003273 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003274 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003275 sdl_cflags="$sdl_cflags $x11_cflags"
3276 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003277 fi
aliguori5368a422009-03-03 17:37:21 +00003278fi
3279
ths8f28f3f2007-01-05 21:25:54 +00003280##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003281# RDMA needs OpenFabrics libraries
3282if test "$rdma" != "no" ; then
3283 cat > $TMPC <<EOF
3284#include <rdma/rdma_cma.h>
3285int main(void) { return 0; }
3286EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003287 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003288 if compile_prog "" "$rdma_libs" ; then
3289 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003290 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003291 else
3292 if test "$rdma" = "yes" ; then
3293 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003294 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003295 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003296 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003297 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3298 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3299 fi
3300 rdma="no"
3301 fi
3302fi
3303
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003304##########################################
3305# PVRDMA detection
3306
3307cat > $TMPC <<EOF &&
3308#include <sys/mman.h>
3309
3310int
3311main(void)
3312{
3313 char buf = 0;
3314 void *addr = &buf;
3315 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3316
3317 return 0;
3318}
3319EOF
3320
3321if test "$rdma" = "yes" ; then
3322 case "$pvrdma" in
3323 "")
3324 if compile_prog "" ""; then
3325 pvrdma="yes"
3326 else
3327 pvrdma="no"
3328 fi
3329 ;;
3330 "yes")
3331 if ! compile_prog "" ""; then
3332 error_exit "PVRDMA is not supported since mremap is not implemented"
3333 fi
3334 pvrdma="yes"
3335 ;;
3336 "no")
3337 pvrdma="no"
3338 ;;
3339 esac
3340else
3341 if test "$pvrdma" = "yes" ; then
3342 error_exit "PVRDMA requires rdma suppport"
3343 fi
3344 pvrdma="no"
3345fi
ths8d5d2d42007-08-25 01:37:51 +00003346
Yuval Shaiaee108582019-08-18 16:21:06 +03003347# Let's see if enhanced reg_mr is supported
3348if test "$pvrdma" = "yes" ; then
3349
3350cat > $TMPC <<EOF &&
3351#include <infiniband/verbs.h>
3352
3353int
3354main(void)
3355{
3356 struct ibv_mr *mr;
3357 struct ibv_pd *pd = NULL;
3358 size_t length = 10;
3359 uint64_t iova = 0;
3360 int access = 0;
3361 void *addr = NULL;
3362
3363 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3364
3365 ibv_dereg_mr(mr);
3366
3367 return 0;
3368}
3369EOF
3370 if ! compile_prog "" "-libverbs"; then
3371 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3372 fi
3373fi
3374
ths8d5d2d42007-08-25 01:37:51 +00003375##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003376# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003377if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003378 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003379#include <sasl/sasl.h>
3380#include <stdio.h>
3381int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3382EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003383 # Assuming Cyrus-SASL installed in /usr prefix
Philippe Mathieu-Daudébd702ff2020-03-09 13:24:53 +01003384 # QEMU defines struct iovec in "qemu/osdep.h",
3385 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3386 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
Juan Quintelaea784e32009-08-12 18:20:29 +02003387 vnc_sasl_libs="-lsasl2"
3388 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3389 vnc_sasl=yes
3390 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003391 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003392 else
3393 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003394 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003395 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003396 vnc_sasl=no
3397 fi
aliguori2f9606b2009-03-06 20:27:28 +00003398fi
3399
3400##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003401# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003402if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003403cat > $TMPC <<EOF
3404#include <stdio.h>
3405#include <jpeglib.h>
3406int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3407EOF
3408 vnc_jpeg_cflags=""
3409 vnc_jpeg_libs="-ljpeg"
3410 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3411 vnc_jpeg=yes
3412 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003413 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003414 else
3415 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003416 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003417 fi
3418 vnc_jpeg=no
3419 fi
3420fi
3421
3422##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003423# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003424if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003425cat > $TMPC <<EOF
3426//#include <stdio.h>
3427#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003428#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003429int main(void) {
3430 png_structp png_ptr;
3431 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003432 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003433}
3434EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003435 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003436 vnc_png_cflags=$($pkg_config libpng --cflags)
3437 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003438 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003439 vnc_png_cflags=""
3440 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003441 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003442 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3443 vnc_png=yes
3444 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003445 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003446 else
3447 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003448 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003449 fi
3450 vnc_png=no
3451 fi
3452fi
3453
3454##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003455# xkbcommon probe
3456if test "$xkbcommon" != "no" ; then
3457 if $pkg_config xkbcommon --exists; then
3458 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3459 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3460 xkbcommon=yes
3461 else
3462 if test "$xkbcommon" = "yes" ; then
3463 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3464 fi
3465 xkbcommon=no
3466 fi
3467fi
3468
aliguori76655d62009-03-06 20:27:37 +00003469
3470##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003471# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003472if test "$xfs" != "no" ; then
3473 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003474#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003475#include <xfs/xfs.h>
3476int main(void)
3477{
3478 xfsctl(NULL, 0, 0, NULL);
3479 return 0;
3480}
3481EOF
3482 if compile_prog "" "" ; then
3483 xfs="yes"
3484 else
3485 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003486 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003487 fi
3488 xfs=no
3489 fi
3490fi
3491
3492##########################################
ths8a16d272008-07-19 09:56:24 +00003493# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003494if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003495 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003496 cat > $TMPC << EOF
3497#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003498int main(void)
3499{
3500 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003501 char s[] = "";
3502 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003503 return 0;
3504}
ths8a16d272008-07-19 09:56:24 +00003505EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003506 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003507 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003508 else
3509 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003510 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003511 fi
3512 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003513 fi
ths8a16d272008-07-19 09:56:24 +00003514fi
3515
3516##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003517# netmap support probe
3518# Apart from looking for netmap headers, we make sure that the host API version
3519# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3520# a minor/major version number. Minor new features will be marked with values up
3521# to 15, and if something happens that requires a change to the backend we will
3522# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003523if test "$netmap" != "no" ; then
3524 cat > $TMPC << EOF
3525#include <inttypes.h>
3526#include <net/if.h>
3527#include <net/netmap.h>
3528#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003529#if (NETMAP_API < 11) || (NETMAP_API > 15)
3530#error
3531#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003532int main(void) { return 0; }
3533EOF
3534 if compile_prog "" "" ; then
3535 netmap=yes
3536 else
3537 if test "$netmap" = "yes" ; then
3538 feature_not_found "netmap"
3539 fi
3540 netmap=no
3541 fi
3542fi
3543
3544##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003545# libcap-ng library probe
3546if test "$cap_ng" != "no" ; then
3547 cap_libs="-lcap-ng"
3548 cat > $TMPC << EOF
3549#include <cap-ng.h>
3550int main(void)
3551{
3552 capng_capability_to_name(CAPNG_EFFECTIVE);
3553 return 0;
3554}
3555EOF
3556 if compile_prog "" "$cap_libs" ; then
3557 cap_ng=yes
3558 libs_tools="$cap_libs $libs_tools"
3559 else
3560 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003561 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003562 fi
3563 cap_ng=no
3564 fi
3565fi
3566
3567##########################################
malcc2de5c92008-06-28 19:13:06 +00003568# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003569
Stefan Weil89138852016-05-16 15:10:20 +02003570audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003571for drv in $audio_drv_list; do
3572 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003573 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003574 if $pkg_config alsa --exists; then
3575 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003576 if test "$drv" = "try-alsa"; then
3577 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3578 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003579 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003580 if test "$drv" = "try-alsa"; then
3581 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3582 else
3583 error_exit "$drv check failed" \
3584 "Make sure to have the $drv libs and headers installed."
3585 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003586 fi
malcc2de5c92008-06-28 19:13:06 +00003587 ;;
3588
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003589 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003590 if $pkg_config libpulse --exists; then
3591 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003592 if test "$drv" = "try-pa"; then
3593 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3594 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003595 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003596 if test "$drv" = "try-pa"; then
3597 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3598 else
3599 error_exit "$drv check failed" \
3600 "Make sure to have the $drv libs and headers installed."
3601 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003602 fi
malcb8e59f12008-07-02 21:03:08 +00003603 ;;
3604
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003605 sdl)
3606 if test "$sdl" = "no"; then
3607 error_exit "sdl not found or disabled, can not use sdl audio driver"
3608 fi
3609 ;;
3610
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003611 try-sdl)
3612 if test "$sdl" = "no"; then
3613 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3614 else
3615 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3616 fi
3617 ;;
3618
Juan Quintela997e6902009-08-03 14:46:29 +02003619 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003620 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003621 ;;
3622
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003623 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003624 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003625 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003626 ;;
3627
3628 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003629 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003630 ;;
3631
malce4c63a62008-07-19 16:15:16 +00003632 *)
malc1c9b2a52008-07-19 16:57:30 +00003633 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003634 error_exit "Unknown driver '$drv' selected" \
3635 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003636 }
3637 ;;
malcc2de5c92008-06-28 19:13:06 +00003638 esac
3639done
ths8f28f3f2007-01-05 21:25:54 +00003640
balrog4d3b6f62008-02-10 16:33:14 +00003641##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003642# BrlAPI probe
3643
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003644if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003645 brlapi_libs="-lbrlapi"
3646 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003647#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003648#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003649int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3650EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003651 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003652 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003653 else
3654 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003655 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003656 fi
3657 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003658 fi
3659fi
aurel322e4d9fb2008-04-08 06:01:02 +00003660
3661##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003662# iconv probe
3663if test "$iconv" != "no" ; then
3664 cat > $TMPC << EOF
3665#include <iconv.h>
3666int main(void) {
3667 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3668 return conv != (iconv_t) -1;
3669}
3670EOF
3671 iconv_prefix_list="/usr/local:/usr"
3672 iconv_lib_list=":-liconv"
3673 IFS=:
3674 for iconv_prefix in $iconv_prefix_list; do
3675 IFS=:
3676 iconv_cflags="-I$iconv_prefix/include"
3677 iconv_ldflags="-L$iconv_prefix/lib"
3678 for iconv_link in $iconv_lib_list; do
3679 unset IFS
3680 iconv_lib="$iconv_ldflags $iconv_link"
3681 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3682 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3683 iconv_found=yes
3684 break
3685 fi
3686 done
3687 if test "$iconv_found" = yes ; then
3688 break
3689 fi
3690 done
3691 if test "$iconv_found" = "yes" ; then
3692 iconv=yes
3693 else
3694 if test "$iconv" = "yes" ; then
3695 feature_not_found "iconv" "Install iconv devel"
3696 fi
3697 iconv=no
3698 fi
3699fi
3700
3701##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003702# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003703if test "$iconv" = "no" ; then
3704 # curses will need iconv
3705 curses=no
3706fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003707if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003708 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003709 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3710 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003711 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003712 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003713 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003714 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003715 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003716 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003717#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003718#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003719#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003720#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003721int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003722 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003723 wchar_t wch = L'w';
3724 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003725 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003726 addwstr(L"wide chars\n");
3727 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003728 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003729 codeset = nl_langinfo(CODESET);
3730 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003731}
balrog4d3b6f62008-02-10 16:33:14 +00003732EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003733 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003734 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003735 # Make sure we get the wide character prototypes
3736 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003737 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003738 for curses_lib in $curses_lib_list; do
3739 unset IFS
3740 if compile_prog "$curses_inc" "$curses_lib" ; then
3741 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003742 break
3743 fi
3744 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003745 if test "$curses_found" = yes ; then
3746 break
3747 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003748 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003749 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003750 if test "$curses_found" = "yes" ; then
3751 curses=yes
3752 else
3753 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003754 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003755 fi
3756 curses=no
3757 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003758fi
balrog4d3b6f62008-02-10 16:33:14 +00003759
blueswir1414f0da2008-08-15 18:20:52 +00003760##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003761# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003762if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003763 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003764 curlconfig="$pkg_config libcurl"
3765 else
3766 curlconfig=curl-config
3767 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003768 cat > $TMPC << EOF
3769#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003770int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003771EOF
Stefan Weil89138852016-05-16 15:10:20 +02003772 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3773 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003774 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003775 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003776 else
3777 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003778 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003779 fi
3780 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003781 fi
3782fi # test "$curl"
3783
3784##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003785# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003786
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003787glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003788glib_modules=gthread-2.0
3789if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003790 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003791fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003792if test "$plugins" = yes; then
3793 glib_modules="$glib_modules gmodule-2.0"
3794fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003795
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003796# This workaround is required due to a bug in pkg-config file for glib as it
3797# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3798
Eric Blakee633a5c2019-02-04 20:39:37 -06003799if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003800 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3801fi
3802
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003803for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003804 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003805 glib_cflags=$($pkg_config --cflags $i)
3806 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003807 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003808 LIBS="$glib_libs $LIBS"
3809 libs_qga="$glib_libs $libs_qga"
3810 else
3811 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3812 fi
3813done
3814
Marc-André Lureauf876b762019-02-21 12:07:00 +01003815if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3816 gio=yes
3817 gio_cflags=$($pkg_config --cflags gio-2.0)
3818 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003819 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003820 if [ ! -x "$gdbus_codegen" ]; then
3821 gdbus_codegen=
3822 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003823else
3824 gio=no
3825fi
3826
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003827if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3828 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3829 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3830fi
3831
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003832# Sanity check that the current size_t matches the
3833# size that glib thinks it should be. This catches
3834# problems on multi-arch where people try to build
3835# 32-bit QEMU while pointing at 64-bit glib headers
3836cat > $TMPC <<EOF
3837#include <glib.h>
3838#include <unistd.h>
3839
3840#define QEMU_BUILD_BUG_ON(x) \
3841 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3842
3843int main(void) {
3844 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3845 return 0;
3846}
3847EOF
3848
Stefan Weil5919e032016-04-28 23:33:41 +02003849if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003850 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3851 "You probably need to set PKG_CONFIG_LIBDIR"\
3852 "to point to the right pkg-config files for your"\
3853 "build target"
3854fi
3855
John Snowbbbf2e02015-03-25 18:57:38 -04003856# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3857cat > $TMPC << EOF
3858#include <glib.h>
3859int main(void) { return 0; }
3860EOF
3861if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3862 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3863 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3864 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3865 fi
3866fi
3867
Eric Blake9bda6002020-03-17 12:55:34 -05003868# Silence clang warnings triggered by glib < 2.57.2
3869cat > $TMPC << EOF
3870#include <glib.h>
3871typedef struct Foo {
3872 int i;
3873} Foo;
3874static void foo_free(Foo *f)
3875{
3876 g_free(f);
3877}
3878G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3879int main(void) { return 0; }
3880EOF
3881if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3882 if cc_has_warning_flag "-Wno-unused-function"; then
3883 glib_cflags="$glib_cflags -Wno-unused-function"
3884 CFLAGS="$CFLAGS -Wno-unused-function"
3885 fi
3886fi
3887
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003888#########################################
3889# zlib check
3890
3891if test "$zlib" != "no" ; then
3892 if $pkg_config --exists zlib; then
3893 zlib_cflags=$($pkg_config --cflags zlib)
3894 zlib_libs=$($pkg_config --libs zlib)
3895 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3896 LIBS="$zlib_libs $LIBS"
3897 else
3898 cat > $TMPC << EOF
3899#include <zlib.h>
3900int main(void) { zlibVersion(); return 0; }
3901EOF
3902 if compile_prog "" "-lz" ; then
3903 LIBS="$LIBS -lz"
3904 else
3905 error_exit "zlib check failed" \
3906 "Make sure to have the zlib libs and headers installed."
3907 fi
3908 fi
3909fi
3910
Fam Zhenge26110c2014-02-10 14:48:57 +08003911##########################################
3912# SHA command probe for modules
3913if test "$modules" = yes; then
3914 shacmd_probe="sha1sum sha1 shasum"
3915 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003916 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003917 shacmd="$c"
3918 break
3919 fi
3920 done
3921 if test "$shacmd" = ""; then
3922 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3923 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003924fi
3925
3926##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003927# pixman support probe
3928
Eric Blakee633a5c2019-02-04 20:39:37 -06003929if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003930 pixman_cflags=
3931 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003932elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003933 pixman_cflags=$($pkg_config --cflags pixman-1)
3934 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003935else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003936 error_exit "pixman >= 0.21.8 not present." \
3937 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003938fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003939
3940##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003941# libmpathpersist probe
3942
3943if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003944 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003945 cat > $TMPC <<EOF
3946#include <libudev.h>
3947#include <mpath_persist.h>
3948unsigned mpath_mx_alloc_len = 1024;
3949int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003950static struct config *multipath_conf;
3951extern struct udev *udev;
3952extern struct config *get_multipath_config(void);
3953extern void put_multipath_config(struct config *conf);
3954struct udev *udev;
3955struct config *get_multipath_config(void) { return multipath_conf; }
3956void put_multipath_config(struct config *conf) { }
3957
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003958int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003959 udev = udev_new();
3960 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003961 return 0;
3962}
3963EOF
3964 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3965 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003966 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003967 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003968 # probe for the old API
3969 cat > $TMPC <<EOF
3970#include <libudev.h>
3971#include <mpath_persist.h>
3972unsigned mpath_mx_alloc_len = 1024;
3973int logsink;
3974int main(void) {
3975 struct udev *udev = udev_new();
3976 mpath_lib_init(udev);
3977 return 0;
3978}
3979EOF
3980 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3981 mpathpersist=yes
3982 mpathpersist_new_api=no
3983 else
3984 mpathpersist=no
3985 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003986 fi
3987else
3988 mpathpersist=no
3989fi
3990
3991##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003992# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003993PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003994
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003995pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003996cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003997#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003998static void *f(void *p) { return NULL; }
3999int main(void) {
4000 pthread_t thread;
4001 pthread_create(&thread, 0, f, 0);
4002 return 0;
4003}
blueswir1414f0da2008-08-15 18:20:52 +00004004EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02004005if compile_prog "" "" ; then
4006 pthread=yes
4007else
4008 for pthread_lib in $PTHREADLIBS_LIST; do
4009 if compile_prog "" "$pthread_lib" ; then
4010 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04004011 found=no
4012 for lib_entry in $LIBS; do
4013 if test "$lib_entry" = "$pthread_lib"; then
4014 found=yes
4015 break
4016 fi
4017 done
4018 if test "$found" = "no"; then
4019 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01004020 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04004021 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01004022 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02004023 break
4024 fi
4025 done
4026fi
blueswir1414f0da2008-08-15 18:20:52 +00004027
Eric Blakee633a5c2019-02-04 20:39:37 -06004028if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004029 error_exit "pthread check failed" \
4030 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00004031fi
4032
Roman Bolshakov479a5742018-12-17 23:26:01 +03004033# check for pthread_setname_np with thread id
4034pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004035cat > $TMPC << EOF
4036#include <pthread.h>
4037
4038static void *f(void *p) { return NULL; }
4039int main(void)
4040{
4041 pthread_t thread;
4042 pthread_create(&thread, 0, f, 0);
4043 pthread_setname_np(thread, "QEMU");
4044 return 0;
4045}
4046EOF
4047if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03004048 pthread_setname_np_w_tid=yes
4049fi
4050
4051# check for pthread_setname_np without thread id
4052pthread_setname_np_wo_tid=no
4053cat > $TMPC << EOF
4054#include <pthread.h>
4055
4056static void *f(void *p) { pthread_setname_np("QEMU"); }
4057int main(void)
4058{
4059 pthread_t thread;
4060 pthread_create(&thread, 0, f, 0);
4061 return 0;
4062}
4063EOF
4064if compile_prog "" "$pthread_lib" ; then
4065 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004066fi
4067
aliguoribf9298b2008-12-05 20:05:26 +00004068##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004069# rbd probe
4070if test "$rbd" != "no" ; then
4071 cat > $TMPC <<EOF
4072#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004073#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004074int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004075 rados_t cluster;
4076 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004077 return 0;
4078}
4079EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004080 rbd_libs="-lrbd -lrados"
4081 if compile_prog "" "$rbd_libs" ; then
4082 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004083 else
4084 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004085 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004086 fi
4087 rbd=no
4088 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004089fi
4090
4091##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004092# libssh probe
4093if test "$libssh" != "no" ; then
4094 if $pkg_config --exists libssh; then
4095 libssh_cflags=$($pkg_config libssh --cflags)
4096 libssh_libs=$($pkg_config libssh --libs)
4097 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004098 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004099 if test "$libssh" = "yes" ; then
4100 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004101 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004102 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004103 fi
4104fi
4105
4106##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004107# Check for libssh 0.8
4108# This is done like this instead of using the LIBSSH_VERSION_* and
4109# SSH_VERSION_* macros because some distributions in the past shipped
4110# snapshots of the future 0.8 from Git, and those snapshots did not
4111# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004112
Pino Toscanob10d49d2019-06-20 22:08:40 +02004113if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004114 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004115#include <libssh/libssh.h>
4116int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004117EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004118 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4119 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004120 fi
4121fi
4122
4123##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004124# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004125
4126if test "$linux_aio" != "no" ; then
4127 cat > $TMPC <<EOF
4128#include <libaio.h>
4129#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004130#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004131int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4132EOF
4133 if compile_prog "" "-laio" ; then
4134 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004135 else
4136 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004137 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004138 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004139 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004140 fi
4141fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004142##########################################
4143# linux-io-uring probe
4144
4145if test "$linux_io_uring" != "no" ; then
4146 if $pkg_config liburing; then
4147 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4148 linux_io_uring_libs=$($pkg_config --libs liburing)
4149 linux_io_uring=yes
Stefan Hajnoczi73fd2822020-03-05 17:08:04 +00004150
4151 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4152 # seen by programs linking the archive. It's not ideal, but just add the
4153 # library dependency globally.
4154 LIBS="$linux_io_uring_libs $LIBS"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004155 else
4156 if test "$linux_io_uring" = "yes" ; then
4157 feature_not_found "linux io_uring" "Install liburing devel"
4158 fi
4159 linux_io_uring=no
4160 fi
4161fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004162
4163##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004164# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004165
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004166if test "$tpm" = ""; then
4167 if test "$mingw32" = "yes"; then
4168 tpm=no
4169 else
4170 tpm=yes
4171 fi
4172elif test "$tpm" = "yes"; then
4173 if test "$mingw32" = "yes" ; then
4174 error_exit "TPM emulation only available on POSIX systems"
4175 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004176fi
4177
4178##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004179# attr probe
4180
4181if test "$attr" != "no" ; then
4182 cat > $TMPC <<EOF
4183#include <stdio.h>
4184#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004185#ifdef CONFIG_LIBATTR
4186#include <attr/xattr.h>
4187#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004188#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004189#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004190int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4191EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004192 if compile_prog "" "" ; then
4193 attr=yes
4194 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004195 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004196 attr=yes
4197 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004198 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004199 else
4200 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004201 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004202 fi
4203 attr=no
4204 fi
4205fi
4206
4207##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004208# iovec probe
4209cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004210#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004211#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004212#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004213int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004214EOF
4215iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004216if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004217 iovec=yes
4218fi
4219
aurel32f652e6a2008-12-16 10:43:48 +00004220##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004221# preadv probe
4222cat > $TMPC <<EOF
4223#include <sys/types.h>
4224#include <sys/uio.h>
4225#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004226int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004227EOF
4228preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004229if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004230 preadv=yes
4231fi
4232
4233##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004234# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004235# fdt support is mandatory for at least some target architectures,
4236# so insist on it if we're building those system emulators.
4237fdt_required=no
4238for target in $target_list; do
4239 case $target in
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08004240 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004241 fdt_required=yes
4242 ;;
4243 esac
4244done
4245
4246if test "$fdt_required" = "yes"; then
4247 if test "$fdt" = "no"; then
4248 error_exit "fdt disabled but some requested targets require it." \
4249 "You can turn off fdt only if you also disable all the system emulation" \
4250 "targets which need it (by specifying a cut down --target-list)."
4251 fi
4252 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004253elif test "$fdt" != "yes" ; then
4254 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004255fi
4256
Laurent Vivierd5999382019-06-21 15:05:44 +02004257# fdt is only required when building softmmu targets
4258if test -z "$fdt" -a "$softmmu" != "yes" ; then
4259 fdt="no"
4260fi
4261
Juan Quintela2df87df2009-08-12 18:29:54 +02004262if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004263 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004264 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004265 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004266 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004267#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004268#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004269int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004270EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004271 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004272 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004273 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004274 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004275 # have GIT checkout, so activate dtc submodule
4276 if test -e "${source_path}/.git" ; then
4277 git_submodules="${git_submodules} dtc"
4278 fi
4279 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004280 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004281 mkdir -p dtc
4282 if [ "$pwd_is_source_path" != "y" ] ; then
4283 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4284 symlink "$source_path/dtc/scripts" "dtc/scripts"
4285 fi
4286 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004287 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4288 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004289 elif test "$fdt" = "yes" ; then
4290 # Not a git build & no libfdt found, prompt for system install
4291 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4292 "Please install the DTC (libfdt) devel package"
4293 else
4294 # don't have and don't want
4295 fdt_libs=
4296 fdt=no
4297 fi
aurel32f652e6a2008-12-16 10:43:48 +00004298 fi
4299fi
4300
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004301libs_softmmu="$libs_softmmu $fdt_libs"
4302
Michael Walle20ff0752011-03-07 23:32:39 +01004303##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004304# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004305
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004306gbm="no"
4307if $pkg_config gbm; then
4308 gbm_cflags="$($pkg_config --cflags gbm)"
4309 gbm_libs="$($pkg_config --libs gbm)"
4310 gbm="yes"
4311fi
4312
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004313if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004314 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004315 if $pkg_config $opengl_pkgs; then
4316 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4317 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004318 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004319 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4320 gtk_gl="yes"
4321 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004322 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004323 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004324 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004325 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004326 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004327 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004328 opengl_libs=""
4329 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004330 fi
4331fi
4332
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004333if test "$opengl" = "yes"; then
4334 cat > $TMPC << EOF
4335#include <epoxy/egl.h>
4336#ifndef EGL_MESA_image_dma_buf_export
4337# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4338#endif
4339int main(void) { return 0; }
4340EOF
4341 if compile_prog "" "" ; then
4342 opengl_dmabuf=yes
4343 fi
4344fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004345
Eric Blakee633a5c2019-02-04 20:39:37 -06004346if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004347 for target in $target_list; do
4348 case $target in
4349 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4350 need_x11=yes
4351 ;;
4352 esac
4353 done
4354fi
4355
Klim Kireeved279a02018-01-12 12:01:19 +03004356##########################################
4357# libxml2 probe
4358if test "$libxml2" != "no" ; then
4359 if $pkg_config --exists libxml-2.0; then
4360 libxml2="yes"
4361 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4362 libxml2_libs=$($pkg_config --libs libxml-2.0)
4363 else
4364 if test "$libxml2" = "yes"; then
4365 feature_not_found "libxml2" "Install libxml2 devel"
4366 fi
4367 libxml2="no"
4368 fi
4369fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004370
Bharata B Raoeb100392012-09-24 14:42:45 +05304371##########################################
4372# glusterfs probe
4373if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004374 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304375 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004376 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4377 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004378 if $pkg_config --atleast-version=4 glusterfs-api; then
4379 glusterfs_xlator_opt="yes"
4380 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004381 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304382 glusterfs_discard="yes"
4383 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304384 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304385 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304386 glusterfs_zerofill="yes"
4387 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004388 cat > $TMPC << EOF
4389#include <glusterfs/api/glfs.h>
4390
4391int
4392main(void)
4393{
4394 /* new glfs_ftruncate() passes two additional args */
4395 return glfs_ftruncate(NULL, 0, NULL, NULL);
4396}
4397EOF
4398 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4399 glusterfs_ftruncate_has_stat="yes"
4400 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004401 cat > $TMPC << EOF
4402#include <glusterfs/api/glfs.h>
4403
4404/* new glfs_io_cbk() passes two additional glfs_stat structs */
4405static void
4406glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4407{}
4408
4409int
4410main(void)
4411{
4412 glfs_io_cbk iocb = &glusterfs_iocb;
4413 iocb(NULL, 0 , NULL, NULL, NULL);
4414 return 0;
4415}
4416EOF
4417 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4418 glusterfs_iocb_has_stat="yes"
4419 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304420 else
4421 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004422 feature_not_found "GlusterFS backend support" \
4423 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304424 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304425 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304426 fi
4427fi
4428
aurel3239386ac2009-04-15 19:48:17 +00004429# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004430# emulator. This is done because older glibc versions don't
4431# have syscall stubs for these implemented. In that case we
4432# don't provide them even if kernel supports them.
4433#
4434inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004435cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004436#include <sys/inotify.h>
4437
4438int
4439main(void)
4440{
4441 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004442 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004443}
4444EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004445if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004446 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004447fi
4448
Riku Voipioc05c7a72010-03-26 15:25:11 +00004449inotify1=no
4450cat > $TMPC << EOF
4451#include <sys/inotify.h>
4452
4453int
4454main(void)
4455{
4456 /* try to start inotify */
4457 return inotify_init1(0);
4458}
4459EOF
4460if compile_prog "" "" ; then
4461 inotify1=yes
4462fi
4463
Riku Voipio099d6b02009-05-05 12:10:04 +03004464# check if pipe2 is there
4465pipe2=no
4466cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004467#include <unistd.h>
4468#include <fcntl.h>
4469
4470int main(void)
4471{
4472 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004473 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004474}
4475EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004476if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004477 pipe2=yes
4478fi
4479
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004480# check if accept4 is there
4481accept4=no
4482cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004483#include <sys/socket.h>
4484#include <stddef.h>
4485
4486int main(void)
4487{
4488 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4489 return 0;
4490}
4491EOF
4492if compile_prog "" "" ; then
4493 accept4=yes
4494fi
4495
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304496# check if tee/splice is there. vmsplice was added same time.
4497splice=no
4498cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304499#include <unistd.h>
4500#include <fcntl.h>
4501#include <limits.h>
4502
4503int main(void)
4504{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004505 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304506 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4507 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4508 return 0;
4509}
4510EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004511if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304512 splice=yes
4513fi
4514
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004515##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004516# libnuma probe
4517
4518if test "$numa" != "no" ; then
4519 cat > $TMPC << EOF
4520#include <numa.h>
4521int main(void) { return numa_available(); }
4522EOF
4523
4524 if compile_prog "" "-lnuma" ; then
4525 numa=yes
4526 libs_softmmu="-lnuma $libs_softmmu"
4527 else
4528 if test "$numa" = "yes" ; then
4529 feature_not_found "numa" "install numactl devel"
4530 fi
4531 numa=no
4532 fi
4533fi
4534
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004535if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4536 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4537 exit 1
4538fi
4539
Yang Zhong5a22ab72017-12-20 21:16:46 +08004540# Even if malloc_trim() is available, these non-libc memory allocators
4541# do not support it.
4542if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4543 if test "$malloc_trim" = "yes" ; then
4544 echo "Disabling malloc_trim with non-libc memory allocator"
4545 fi
4546 malloc_trim="no"
4547fi
4548
4549#######################################
4550# malloc_trim
4551
4552if test "$malloc_trim" != "no" ; then
4553 cat > $TMPC << EOF
4554#include <malloc.h>
4555int main(void) { malloc_trim(0); return 0; }
4556EOF
4557 if compile_prog "" "" ; then
4558 malloc_trim="yes"
4559 else
4560 malloc_trim="no"
4561 fi
4562fi
4563
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004564##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004565# tcmalloc probe
4566
4567if test "$tcmalloc" = "yes" ; then
4568 cat > $TMPC << EOF
4569#include <stdlib.h>
4570int main(void) { malloc(1); return 0; }
4571EOF
4572
4573 if compile_prog "" "-ltcmalloc" ; then
4574 LIBS="-ltcmalloc $LIBS"
4575 else
4576 feature_not_found "tcmalloc" "install gperftools devel"
4577 fi
4578fi
4579
4580##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004581# jemalloc probe
4582
4583if test "$jemalloc" = "yes" ; then
4584 cat > $TMPC << EOF
4585#include <stdlib.h>
4586int main(void) { malloc(1); return 0; }
4587EOF
4588
4589 if compile_prog "" "-ljemalloc" ; then
4590 LIBS="-ljemalloc $LIBS"
4591 else
4592 feature_not_found "jemalloc" "install jemalloc devel"
4593 fi
4594fi
4595
4596##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004597# signalfd probe
4598signalfd="no"
4599cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004600#include <unistd.h>
4601#include <sys/syscall.h>
4602#include <signal.h>
4603int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4604EOF
4605
4606if compile_prog "" "" ; then
4607 signalfd=yes
4608fi
4609
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004610# check if optreset global is declared by <getopt.h>
4611optreset="no"
4612cat > $TMPC << EOF
4613#include <getopt.h>
4614int main(void) { return optreset; }
4615EOF
4616
4617if compile_prog "" "" ; then
4618 optreset=yes
4619fi
4620
Riku Voipioc2882b92009-08-12 15:08:24 +03004621# check if eventfd is supported
4622eventfd=no
4623cat > $TMPC << EOF
4624#include <sys/eventfd.h>
4625
4626int main(void)
4627{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004628 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004629}
4630EOF
4631if compile_prog "" "" ; then
4632 eventfd=yes
4633fi
4634
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004635# check if memfd is supported
4636memfd=no
4637cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004638#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004639
4640int main(void)
4641{
4642 return memfd_create("foo", MFD_ALLOW_SEALING);
4643}
4644EOF
4645if compile_prog "" "" ; then
4646 memfd=yes
4647fi
4648
Cortland Tölva955727d2018-10-08 09:35:19 -07004649# check for usbfs
4650have_usbfs=no
4651if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004652 cat > $TMPC << EOF
4653#include <linux/usbdevice_fs.h>
4654
4655#ifndef USBDEVFS_GET_CAPABILITIES
4656#error "USBDEVFS_GET_CAPABILITIES undefined"
4657#endif
4658
4659#ifndef USBDEVFS_DISCONNECT_CLAIM
4660#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4661#endif
4662
4663int main(void)
4664{
4665 return 0;
4666}
4667EOF
4668 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004669 have_usbfs=yes
4670 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004671fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004672
Ulrich Hechtd0927932009-09-17 20:22:14 +03004673# check for fallocate
4674fallocate=no
4675cat > $TMPC << EOF
4676#include <fcntl.h>
4677
4678int main(void)
4679{
4680 fallocate(0, 0, 0, 0);
4681 return 0;
4682}
4683EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004684if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004685 fallocate=yes
4686fi
4687
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004688# check for fallocate hole punching
4689fallocate_punch_hole=no
4690cat > $TMPC << EOF
4691#include <fcntl.h>
4692#include <linux/falloc.h>
4693
4694int main(void)
4695{
4696 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4697 return 0;
4698}
4699EOF
4700if compile_prog "" "" ; then
4701 fallocate_punch_hole=yes
4702fi
4703
Denis V. Lunevb953f072015-01-30 11:42:14 +03004704# check that fallocate supports range zeroing inside the file
4705fallocate_zero_range=no
4706cat > $TMPC << EOF
4707#include <fcntl.h>
4708#include <linux/falloc.h>
4709
4710int main(void)
4711{
4712 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4713 return 0;
4714}
4715EOF
4716if compile_prog "" "" ; then
4717 fallocate_zero_range=yes
4718fi
4719
Kevin Wolfed911432014-09-29 17:12:59 +02004720# check for posix_fallocate
4721posix_fallocate=no
4722cat > $TMPC << EOF
4723#include <fcntl.h>
4724
4725int main(void)
4726{
4727 posix_fallocate(0, 0, 0);
4728 return 0;
4729}
4730EOF
4731if compile_prog "" "" ; then
4732 posix_fallocate=yes
4733fi
4734
Peter Maydellc727f472011-01-06 11:05:10 +00004735# check for sync_file_range
4736sync_file_range=no
4737cat > $TMPC << EOF
4738#include <fcntl.h>
4739
4740int main(void)
4741{
4742 sync_file_range(0, 0, 0, 0);
4743 return 0;
4744}
4745EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004746if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004747 sync_file_range=yes
4748fi
4749
Peter Maydelldace20d2011-01-10 13:11:24 +00004750# check for linux/fiemap.h and FS_IOC_FIEMAP
4751fiemap=no
4752cat > $TMPC << EOF
4753#include <sys/ioctl.h>
4754#include <linux/fs.h>
4755#include <linux/fiemap.h>
4756
4757int main(void)
4758{
4759 ioctl(0, FS_IOC_FIEMAP, 0);
4760 return 0;
4761}
4762EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004763if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004764 fiemap=yes
4765fi
4766
Ulrich Hechtd0927932009-09-17 20:22:14 +03004767# check for dup3
4768dup3=no
4769cat > $TMPC << EOF
4770#include <unistd.h>
4771
4772int main(void)
4773{
4774 dup3(0, 0, 0);
4775 return 0;
4776}
4777EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004778if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004779 dup3=yes
4780fi
4781
Alex Bligh4e0c6522013-08-21 16:02:43 +01004782# check for ppoll support
4783ppoll=no
4784cat > $TMPC << EOF
4785#include <poll.h>
4786
4787int main(void)
4788{
4789 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4790 ppoll(&pfd, 1, 0, 0);
4791 return 0;
4792}
4793EOF
4794if compile_prog "" "" ; then
4795 ppoll=yes
4796fi
4797
Alex Blighcd758dd2013-08-21 16:02:44 +01004798# check for prctl(PR_SET_TIMERSLACK , ... ) support
4799prctl_pr_set_timerslack=no
4800cat > $TMPC << EOF
4801#include <sys/prctl.h>
4802
4803int main(void)
4804{
4805 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4806 return 0;
4807}
4808EOF
4809if compile_prog "" "" ; then
4810 prctl_pr_set_timerslack=yes
4811fi
4812
Peter Maydell3b6edd12011-02-15 18:35:05 +00004813# check for epoll support
4814epoll=no
4815cat > $TMPC << EOF
4816#include <sys/epoll.h>
4817
4818int main(void)
4819{
4820 epoll_create(0);
4821 return 0;
4822}
4823EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004824if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004825 epoll=yes
4826fi
4827
Peter Maydell227f0212016-06-06 19:58:11 +01004828# epoll_create1 is a later addition
4829# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004830epoll_create1=no
4831cat > $TMPC << EOF
4832#include <sys/epoll.h>
4833
4834int main(void)
4835{
Peter Maydell19e83f62011-04-26 16:56:40 +01004836 /* Note that we use epoll_create1 as a value, not as
4837 * a function being called. This is necessary so that on
4838 * old SPARC glibc versions where the function was present in
4839 * the library but not declared in the header file we will
4840 * fail the configure check. (Otherwise we will get a compiler
4841 * warning but not an error, and will proceed to fail the
4842 * qemu compile where we compile with -Werror.)
4843 */
Blue Swirlc075a722012-08-09 20:21:25 +00004844 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004845}
4846EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004847if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004848 epoll_create1=yes
4849fi
4850
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004851# check for sendfile support
4852sendfile=no
4853cat > $TMPC << EOF
4854#include <sys/sendfile.h>
4855
4856int main(void)
4857{
4858 return sendfile(0, 0, 0, 0);
4859}
4860EOF
4861if compile_prog "" "" ; then
4862 sendfile=yes
4863fi
4864
Riku Voipio51834342014-06-22 11:25:42 +01004865# check for timerfd support (glibc 2.8 and newer)
4866timerfd=no
4867cat > $TMPC << EOF
4868#include <sys/timerfd.h>
4869
4870int main(void)
4871{
4872 return(timerfd_create(CLOCK_REALTIME, 0));
4873}
4874EOF
4875if compile_prog "" "" ; then
4876 timerfd=yes
4877fi
4878
Riku Voipio9af5c902014-08-12 15:58:57 +03004879# check for setns and unshare support
4880setns=no
4881cat > $TMPC << EOF
4882#include <sched.h>
4883
4884int main(void)
4885{
4886 int ret;
4887 ret = setns(0, 0);
4888 ret = unshare(0);
4889 return ret;
4890}
4891EOF
4892if compile_prog "" "" ; then
4893 setns=yes
4894fi
4895
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004896# clock_adjtime probe
4897clock_adjtime=no
4898cat > $TMPC <<EOF
4899#include <time.h>
4900
4901int main(void)
4902{
4903 return clock_adjtime(0, 0);
4904}
4905EOF
4906clock_adjtime=no
4907if compile_prog "" "" ; then
4908 clock_adjtime=yes
4909fi
4910
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004911# syncfs probe
4912syncfs=no
4913cat > $TMPC <<EOF
4914#include <unistd.h>
4915
4916int main(void)
4917{
4918 return syncfs(0);
4919}
4920EOF
4921syncfs=no
4922if compile_prog "" "" ; then
4923 syncfs=yes
4924fi
4925
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004926# check for kcov support (kernel must be 4.4+, compiled with certain options)
4927kcov=no
4928if check_include sys/kcov.h ; then
4929 kcov=yes
4930fi
4931
Peter Maydell516e8b72020-04-11 19:29:32 +01004932# If we're making warnings fatal, apply this to Sphinx runs as well
4933sphinx_werror=""
4934if test "$werror" = "yes"; then
4935 sphinx_werror="-W"
4936fi
4937
Peter Maydell5f71eac2019-03-07 14:26:46 +00004938# Check we have a new enough version of sphinx-build
4939has_sphinx_build() {
4940 # This is a bit awkward but works: create a trivial document and
4941 # try to run it with our configuration file (which enforces a
4942 # version requirement). This will fail if either
4943 # sphinx-build doesn't exist at all or if it is too old.
4944 mkdir -p "$TMPDIR1/sphinx"
4945 touch "$TMPDIR1/sphinx/index.rst"
Alex Bennée988ae6c2020-04-14 21:06:21 +01004946 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
4947 -b html "$TMPDIR1/sphinx" \
4948 "$TMPDIR1/sphinx/out" >> config.log 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004949}
4950
pbrookcc8ae6d2006-04-23 17:57:59 +00004951# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004952if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004953 if has_sphinx_build; then
4954 sphinx_ok=yes
4955 else
4956 sphinx_ok=no
4957 fi
4958 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004959 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004960 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004961 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004962 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4963 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4964 fi
4965 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004966 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004967 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004968 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004969fi
4970
Stefan Weilf514f412009-10-11 12:44:07 +02004971# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004972byteswap_h=no
4973cat > $TMPC << EOF
4974#include <byteswap.h>
4975int main(void) { return bswap_32(0); }
4976EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004977if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004978 byteswap_h=yes
4979fi
4980
Stefan Weil75f13592013-01-05 12:17:38 +01004981# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004982bswap_h=no
4983cat > $TMPC << EOF
4984#include <sys/endian.h>
4985#include <sys/types.h>
4986#include <machine/bswap.h>
4987int main(void) { return bswap32(0); }
4988EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004989if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004990 bswap_h=yes
4991fi
4992
aliguorida93a1f2008-12-12 20:02:52 +00004993##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004994# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004995if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004996 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004997 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004998 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4999 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005000 else
5001 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02005002 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005003 fi
5004 libiscsi="no"
5005 fi
5006fi
5007
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005008##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00005009# Do we need libm
5010cat > $TMPC << EOF
5011#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10005012int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00005013EOF
5014if compile_prog "" "" ; then
5015 :
5016elif compile_prog "" "-lm" ; then
5017 LIBS="-lm $LIBS"
5018 libs_qga="-lm $libs_qga"
5019else
Peter Maydell76ad07a2013-04-08 12:11:26 +01005020 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00005021fi
5022
5023##########################################
aliguorida93a1f2008-12-12 20:02:52 +00005024# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00005025# uClibc provides 2 versions of clock_gettime(), one with realtime
5026# support and one without. This means that the clock_gettime() don't
5027# need -lrt. We still need it for timer_create() so we check for this
5028# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00005029cat > $TMPC <<EOF
5030#include <signal.h>
5031#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00005032int main(void) {
5033 timer_create(CLOCK_REALTIME, NULL, NULL);
5034 return clock_gettime(CLOCK_REALTIME, NULL);
5035}
aliguorida93a1f2008-12-12 20:02:52 +00005036EOF
5037
Juan Quintela52166aa2009-08-03 14:46:03 +02005038if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02005039 :
Natanael Copa8bacde82012-09-12 09:06:51 +00005040# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07005041elif compile_prog "" "$pthread_lib -lrt" ; then
5042 LIBS="$LIBS -lrt"
5043 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00005044fi
5045
Thomas Huthd99e97e2019-01-17 18:14:08 +01005046# Check whether we need to link libutil for openpty()
5047cat > $TMPC << EOF
5048extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5049int main(void) { return openpty(0, 0, 0, 0, 0); }
5050EOF
5051
5052if ! compile_prog "" "" ; then
5053 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02005054 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01005055 libs_tools="-lutil $libs_tools"
5056 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005057fi
5058
Blue Swirlde5071c2009-09-12 09:58:46 +00005059##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005060# spice probe
5061if test "$spice" != "no" ; then
5062 cat > $TMPC << EOF
5063#include <spice.h>
5064int main(void) { spice_server_new(); return 0; }
5065EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005066 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5067 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005068 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005069 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005070 compile_prog "$spice_cflags" "$spice_libs" ; then
5071 spice="yes"
5072 libs_softmmu="$libs_softmmu $spice_libs"
5073 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005074 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5075 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005076 else
5077 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005078 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005079 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005080 fi
5081 spice="no"
5082 fi
5083fi
5084
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005085# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005086if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005087 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005088 libcacard_cflags=$($pkg_config --cflags libcacard)
5089 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005090 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005091 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005092 if test "$smartcard" = "yes"; then
5093 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005094 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005095 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005096 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005097fi
5098
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005099# check for libusb
5100if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005101 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005102 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005103 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5104 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005105 else
5106 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005107 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005108 fi
5109 libusb="no"
5110 fi
5111fi
5112
Hans de Goede69354a82011-07-19 11:04:10 +02005113# check for usbredirparser for usb network redirection support
5114if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005115 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005116 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005117 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5118 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005119 else
5120 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005121 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005122 fi
5123 usb_redir="no"
5124 fi
5125fi
5126
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005127##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005128# check if we have VSS SDK headers for win
5129
Eric Blakee633a5c2019-02-04 20:39:37 -06005130if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5131 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005132 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005133 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005134 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5135 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005136 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005137 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5138 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005139 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005140 esac
5141 cat > $TMPC << EOF
5142#define __MIDL_user_allocate_free_DEFINED__
5143#include <inc/win2003/vss.h>
5144int main(void) { return VSS_CTX_BACKUP; }
5145EOF
5146 if compile_prog "$vss_win32_include" "" ; then
5147 guest_agent_with_vss="yes"
5148 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005149 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005150 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005151 else
5152 if test "$vss_win32_sdk" != "" ; then
5153 echo "ERROR: Please download and install Microsoft VSS SDK:"
5154 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5155 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5156 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5157 echo "ERROR: The headers are extracted in the directory \`inc'."
5158 feature_not_found "VSS support"
5159 fi
5160 guest_agent_with_vss="no"
5161 fi
5162fi
5163
5164##########################################
5165# lookup Windows platform SDK (if not specified)
5166# The SDK is needed only to build .tlb (type library) file of guest agent
5167# VSS provider from the source. It is usually unnecessary because the
5168# pre-compiled .tlb file is included.
5169
Eric Blakee633a5c2019-02-04 20:39:37 -06005170if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5171 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005172 if test -z "$win_sdk"; then
5173 programfiles="$PROGRAMFILES"
5174 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5175 if test -n "$programfiles"; then
5176 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5177 else
5178 feature_not_found "Windows SDK"
5179 fi
5180 elif test "$win_sdk" = "no"; then
5181 win_sdk=""
5182 fi
5183fi
5184
5185##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005186# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005187if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005188 cat > $TMPC << EOF
5189#include <windows.h>
5190#include <ntddscsi.h>
5191int main(void) {
5192#if !defined(IOCTL_SCSI_GET_ADDRESS)
5193#error Missing required ioctl definitions
5194#endif
5195 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5196 return addr.Lun;
5197}
5198EOF
5199 if compile_prog "" "" ; then
5200 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005201 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005202 fi
5203fi
5204
5205##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005206# virgl renderer probe
5207
5208if test "$virglrenderer" != "no" ; then
5209 cat > $TMPC << EOF
5210#include <virglrenderer.h>
5211int main(void) { virgl_renderer_poll(); return 0; }
5212EOF
5213 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5214 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005215 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005216 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5217 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5218 virglrenderer="yes"
5219 else
5220 if test "$virglrenderer" = "yes" ; then
5221 feature_not_found "virglrenderer"
5222 fi
5223 virglrenderer="no"
5224 fi
5225fi
5226
5227##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005228# capstone
5229
Richard Hendersone219c492017-09-28 09:01:23 -07005230case "$capstone" in
5231 "" | yes)
5232 if $pkg_config capstone; then
5233 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005234 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005235 capstone=git
5236 elif test -e "${source_path}/capstone/Makefile" ; then
5237 capstone=internal
5238 elif test -z "$capstone" ; then
5239 capstone=no
5240 else
5241 feature_not_found "capstone" "Install capstone devel or git submodule"
5242 fi
5243 ;;
5244
5245 system)
5246 if ! $pkg_config capstone; then
5247 feature_not_found "capstone" "Install capstone devel"
5248 fi
5249 ;;
5250esac
5251
5252case "$capstone" in
5253 git | internal)
5254 if test "$capstone" = git; then
5255 git_submodules="${git_submodules} capstone"
5256 fi
5257 mkdir -p capstone
5258 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5259 if test "$mingw32" = "yes"; then
5260 LIBCAPSTONE=capstone.lib
5261 else
5262 LIBCAPSTONE=libcapstone.a
5263 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005264 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005265 ;;
5266
5267 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005268 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005269 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005270 ;;
5271
5272 no)
5273 ;;
5274 *)
5275 error_exit "Unknown state for capstone: $capstone"
5276 ;;
5277esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005278
5279##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005280# check if we have fdatasync
5281
5282fdatasync=no
5283cat > $TMPC << EOF
5284#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005285int main(void) {
5286#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5287return fdatasync(0);
5288#else
Stefan Weile172fe12012-04-06 21:33:20 +02005289#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005290#endif
5291}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005292EOF
5293if compile_prog "" "" ; then
5294 fdatasync=yes
5295fi
5296
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005297##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005298# check if we have madvise
5299
5300madvise=no
5301cat > $TMPC << EOF
5302#include <sys/types.h>
5303#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005304#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005305int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5306EOF
5307if compile_prog "" "" ; then
5308 madvise=yes
5309fi
5310
5311##########################################
5312# check if we have posix_madvise
5313
5314posix_madvise=no
5315cat > $TMPC << EOF
5316#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005317#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005318int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5319EOF
5320if compile_prog "" "" ; then
5321 posix_madvise=yes
5322fi
5323
5324##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005325# check if we have posix_memalign()
5326
5327posix_memalign=no
5328cat > $TMPC << EOF
5329#include <stdlib.h>
5330int main(void) {
5331 void *p;
5332 return posix_memalign(&p, 8, 8);
5333}
5334EOF
5335if compile_prog "" "" ; then
5336 posix_memalign=yes
5337fi
5338
5339##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005340# check if we have posix_syslog
5341
5342posix_syslog=no
5343cat > $TMPC << EOF
5344#include <syslog.h>
5345int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5346EOF
5347if compile_prog "" "" ; then
5348 posix_syslog=yes
5349fi
5350
5351##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005352# check if we have sem_timedwait
5353
5354sem_timedwait=no
5355cat > $TMPC << EOF
5356#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005357int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005358EOF
5359if compile_prog "" "" ; then
5360 sem_timedwait=yes
5361fi
5362
5363##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005364# check if we have strchrnul
5365
5366strchrnul=no
5367cat > $TMPC << EOF
5368#include <string.h>
5369int main(void);
5370// Use a haystack that the compiler shouldn't be able to constant fold
5371char *haystack = (char*)&main;
5372int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5373EOF
5374if compile_prog "" "" ; then
5375 strchrnul=yes
5376fi
5377
Jiufei Xue8a792b02019-04-17 03:08:56 +08005378#########################################
5379# check if we have st_atim
5380
5381st_atim=no
5382cat > $TMPC << EOF
5383#include <sys/stat.h>
5384#include <stddef.h>
5385int main(void) { return offsetof(struct stat, st_atim); }
5386EOF
5387if compile_prog "" "" ; then
5388 st_atim=yes
5389fi
5390
Keno Fischer5c99fa32018-06-29 12:32:10 +02005391##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005392# check if trace backend exists
5393
Lluís Vilanova5b808272014-05-27 15:02:14 +02005394$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005395if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005396 error_exit "invalid trace backends" \
5397 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005398fi
5399
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005400##########################################
5401# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005402if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005403 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005404#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005405int main(void) { return 0; }
5406EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005407 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005408 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005409 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005410 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005411 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005412 fi
5413 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005414 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005415 else
5416 urcu_bp_libs="-lurcu-bp"
5417 fi
5418
5419 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5420 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005421 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005422 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005423 fi
5424fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005425
5426##########################################
5427# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005428if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005429 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005430 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005431 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005432 trace_backend_stap="no"
5433 if has 'stap' ; then
5434 trace_backend_stap="yes"
5435 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005436fi
5437
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005438##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005439# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305440
Peter Maydell7c2acc72013-04-08 12:11:27 +01005441# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005442# is sigcontext. On Windows the only valid backend is the Windows
5443# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005444
5445ucontext_works=no
5446if test "$darwin" != "yes"; then
5447 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305448#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005449#ifdef __stub_makecontext
5450#error Ignoring glibc stub makecontext which will always fail
5451#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005452int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305453EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005454 if compile_prog "" "" ; then
5455 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305456 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005457fi
5458
5459if test "$coroutine" = ""; then
5460 if test "$mingw32" = "yes"; then
5461 coroutine=win32
5462 elif test "$ucontext_works" = "yes"; then
5463 coroutine=ucontext
5464 else
5465 coroutine=sigaltstack
5466 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005467else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005468 case $coroutine in
5469 windows)
5470 if test "$mingw32" != "yes"; then
5471 error_exit "'windows' coroutine backend only valid for Windows"
5472 fi
5473 # Unfortunately the user visible backend name doesn't match the
5474 # coroutine-*.c filename for this case, so we have to adjust it here.
5475 coroutine=win32
5476 ;;
5477 ucontext)
5478 if test "$ucontext_works" != "yes"; then
5479 feature_not_found "ucontext"
5480 fi
5481 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005482 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005483 if test "$mingw32" = "yes"; then
5484 error_exit "only the 'windows' coroutine backend is valid for Windows"
5485 fi
5486 ;;
5487 *)
5488 error_exit "unknown coroutine backend $coroutine"
5489 ;;
5490 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305491fi
5492
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005493if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005494 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005495fi
5496
Peter Lieven7d992e42016-09-27 11:58:45 +02005497if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005498 if test "$coroutine_pool" = "yes"; then
5499 echo "WARN: disabling coroutine pool for stack usage debugging"
5500 coroutine_pool=no
5501 fi
5502fi
5503
5504
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305505##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305506# check if we have open_by_handle_at
5507
Stefan Weil4e1797f2012-06-18 22:11:06 +02005508open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305509cat > $TMPC << EOF
5510#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005511#if !defined(AT_EMPTY_PATH)
5512# error missing definition
5513#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005514int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005515#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305516EOF
5517if compile_prog "" "" ; then
5518 open_by_handle_at=yes
5519fi
5520
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305521########################################
5522# check if we have linux/magic.h
5523
5524linux_magic_h=no
5525cat > $TMPC << EOF
5526#include <linux/magic.h>
5527int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005528 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305529}
5530EOF
5531if compile_prog "" "" ; then
5532 linux_magic_h=yes
5533fi
5534
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005535########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005536# check whether we can disable warning option with a pragma (this is needed
5537# to silence warnings in the headers of some versions of external libraries).
5538# This test has to be compiled with -Werror as otherwise an unknown pragma is
5539# only a warning.
5540#
5541# If we can't selectively disable warning in the code, disable -Werror so that
5542# the build doesn't fail anyway.
5543
Peter Maydell06d71fa2012-07-30 16:13:07 +01005544pragma_disable_unused_but_set=no
5545cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005546#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005547#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005548#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005549
Peter Maydell06d71fa2012-07-30 16:13:07 +01005550int main(void) {
5551 return 0;
5552}
5553EOF
5554if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005555 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005556else
5557 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005558fi
5559
5560########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005561# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005562
5563valgrind_h=no
5564cat > $TMPC << EOF
5565#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005566int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005567 return 0;
5568}
5569EOF
5570if compile_prog "" "" ; then
5571 valgrind_h=yes
5572fi
5573
5574########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005575# check if environ is declared
5576
5577has_environ=no
5578cat > $TMPC << EOF
5579#include <unistd.h>
5580int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005581 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005582 return 0;
5583}
5584EOF
5585if compile_prog "" "" ; then
5586 has_environ=yes
5587fi
5588
Richard Henderson76a347e2012-12-28 14:17:02 -08005589########################################
5590# check if cpuid.h is usable.
5591
Richard Henderson76a347e2012-12-28 14:17:02 -08005592cat > $TMPC << EOF
5593#include <cpuid.h>
5594int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005595 unsigned a, b, c, d;
5596 int max = __get_cpuid_max(0, 0);
5597
5598 if (max >= 1) {
5599 __cpuid(1, a, b, c, d);
5600 }
5601
5602 if (max >= 7) {
5603 __cpuid_count(7, 0, a, b, c, d);
5604 }
5605
5606 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005607}
5608EOF
5609if compile_prog "" "" ; then
5610 cpuid_h=yes
5611fi
5612
Richard Henderson5dd89902017-07-18 18:40:18 -10005613##########################################
5614# avx2 optimization requirement check
5615#
5616# There is no point enabling this if cpuid.h is not usable,
5617# since we won't be able to select the new routines.
5618
Eric Blakee633a5c2019-02-04 20:39:37 -06005619if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005620 cat > $TMPC << EOF
5621#pragma GCC push_options
5622#pragma GCC target("avx2")
5623#include <cpuid.h>
5624#include <immintrin.h>
5625static int bar(void *a) {
5626 __m256i x = *(__m256i *)a;
5627 return _mm256_testz_si256(x, x);
5628}
5629int main(int argc, char *argv[]) { return bar(argv[0]); }
5630EOF
5631 if compile_object "" ; then
5632 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005633 else
5634 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005635 fi
5636fi
5637
Robert Hoo6b8cd442020-02-29 20:34:34 +08005638##########################################
5639# avx512f optimization requirement check
5640#
5641# There is no point enabling this if cpuid.h is not usable,
5642# since we won't be able to select the new routines.
5643# by default, it is turned off.
5644# if user explicitly want to enable it, check environment
5645
5646if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5647 cat > $TMPC << EOF
5648#pragma GCC push_options
5649#pragma GCC target("avx512f")
5650#include <cpuid.h>
5651#include <immintrin.h>
5652static int bar(void *a) {
5653 __m512i x = *(__m512i *)a;
5654 return _mm512_test_epi64_mask(x, x);
5655}
5656int main(int argc, char *argv[])
5657{
5658 return bar(argv[0]);
5659}
5660EOF
5661 if ! compile_object "" ; then
5662 avx512f_opt="no"
5663 fi
5664else
5665 avx512f_opt="no"
5666fi
5667
Richard Hendersonf5401662013-02-16 12:46:59 -08005668########################################
5669# check if __[u]int128_t is usable.
5670
5671int128=no
5672cat > $TMPC << EOF
5673__int128_t a;
5674__uint128_t b;
5675int main (void) {
5676 a = a + b;
5677 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005678 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005679 return 0;
5680}
5681EOF
5682if compile_prog "" "" ; then
5683 int128=yes
5684fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005685
Richard Henderson7ebee432016-06-29 21:10:59 -07005686#########################################
5687# See if 128-bit atomic operations are supported.
5688
5689atomic128=no
5690if test "$int128" = "yes"; then
5691 cat > $TMPC << EOF
5692int main(void)
5693{
5694 unsigned __int128 x = 0, y = 0;
5695 y = __atomic_load_16(&x, 0);
5696 __atomic_store_16(&x, y, 0);
5697 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5698 return 0;
5699}
5700EOF
5701 if compile_prog "" "" ; then
5702 atomic128=yes
5703 fi
5704fi
5705
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005706cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005707if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005708 cat > $TMPC << EOF
5709int main(void)
5710{
5711 unsigned __int128 x = 0, y = 0;
5712 __sync_val_compare_and_swap_16(&x, y, x);
5713 return 0;
5714}
5715EOF
5716 if compile_prog "" "" ; then
5717 cmpxchg128=yes
5718 fi
5719fi
5720
Richard Hendersondf79b992016-09-02 12:23:57 -07005721#########################################
5722# See if 64-bit atomic operations are supported.
5723# Note that without __atomic builtins, we can only
5724# assume atomic loads/stores max at pointer size.
5725
5726cat > $TMPC << EOF
5727#include <stdint.h>
5728int main(void)
5729{
5730 uint64_t x = 0, y = 0;
5731#ifdef __ATOMIC_RELAXED
5732 y = __atomic_load_8(&x, 0);
5733 __atomic_store_8(&x, y, 0);
5734 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5735 __atomic_exchange_8(&x, y, 0);
5736 __atomic_fetch_add_8(&x, y, 0);
5737#else
5738 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5739 __sync_lock_test_and_set(&x, y);
5740 __sync_val_compare_and_swap(&x, y, 0);
5741 __sync_fetch_and_add(&x, y);
5742#endif
5743 return 0;
5744}
5745EOF
5746if compile_prog "" "" ; then
5747 atomic64=yes
5748fi
5749
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005750#########################################
5751# See if --dynamic-list is supported by the linker
5752ld_dynamic_list="no"
5753if test "$static" = "no" ; then
5754 cat > $TMPTXT <<EOF
5755{
5756 foo;
5757};
5758EOF
5759
5760 cat > $TMPC <<EOF
5761#include <stdio.h>
5762void foo(void);
5763
5764void foo(void)
5765{
5766 printf("foo\n");
5767}
5768
5769int main(void)
5770{
5771 foo();
5772 return 0;
5773}
5774EOF
5775
5776 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5777 ld_dynamic_list="yes"
5778 fi
5779fi
5780
5781#########################################
5782# See if -exported_symbols_list is supported by the linker
5783
5784ld_exported_symbols_list="no"
5785if test "$static" = "no" ; then
5786 cat > $TMPTXT <<EOF
5787 _foo
5788EOF
5789
5790 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5791 ld_exported_symbols_list="yes"
5792 fi
5793fi
5794
5795if test "$plugins" = "yes" &&
5796 test "$ld_dynamic_list" = "no" &&
5797 test "$ld_exported_symbols_list" = "no" ; then
5798 error_exit \
5799 "Plugin support requires dynamic linking and specifying a set of symbols " \
5800 "that are exported to plugins. Unfortunately your linker doesn't " \
5801 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5802 "for this purpose. You can't build with --static."
5803fi
5804
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005805########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005806# See if __attribute__((alias)) is supported.
5807# This false for Xcode 9, but has been remedied for Xcode 10.
5808# Unfortunately, travis uses Xcode 9 by default.
5809
5810attralias=no
5811cat > $TMPC << EOF
5812int x = 1;
5813extern const int y __attribute__((alias("x")));
5814int main(void) { return 0; }
5815EOF
5816if compile_prog "" "" ; then
5817 attralias=yes
5818fi
5819
5820########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005821# check if getauxval is available.
5822
5823getauxval=no
5824cat > $TMPC << EOF
5825#include <sys/auxv.h>
5826int main(void) {
5827 return getauxval(AT_HWCAP) == 0;
5828}
5829EOF
5830if compile_prog "" "" ; then
5831 getauxval=yes
5832fi
5833
John Snowfd0e6052015-03-25 18:57:39 -04005834########################################
5835# check if ccache is interfering with
5836# semantic analysis of macros
5837
John Snow5e4dfd32015-10-28 13:56:40 -04005838unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005839ccache_cpp2=no
5840cat > $TMPC << EOF
5841static const int Z = 1;
5842#define fn() ({ Z; })
5843#define TAUT(X) ((X) == Z)
5844#define PAREN(X, Y) (X == Y)
5845#define ID(X) (X)
5846int main(int argc, char *argv[])
5847{
5848 int x = 0, y = 0;
5849 x = ID(x);
5850 x = fn();
5851 fn();
5852 if (PAREN(x, y)) return 0;
5853 if (TAUT(Z)) return 0;
5854 return 0;
5855}
5856EOF
5857
5858if ! compile_object "-Werror"; then
5859 ccache_cpp2=yes
5860fi
5861
John Snowb553a042015-11-03 15:43:42 -05005862#################################################
5863# clang does not support glibc + FORTIFY_SOURCE.
5864
5865if test "$fortify_source" != "no"; then
5866 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5867 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005868 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005869 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005870 fortify_source="no";
5871 else
5872 fortify_source="yes"
5873 fi
5874fi
5875
Fam Zheng1efad062018-06-01 17:26:43 +08005876###############################################
5877# Check if copy_file_range is provided by glibc
5878have_copy_file_range=no
5879cat > $TMPC << EOF
5880#include <unistd.h>
5881int main(void) {
5882 copy_file_range(0, NULL, 0, NULL, 0, 0);
5883 return 0;
5884}
5885EOF
5886if compile_prog "" "" ; then
5887 have_copy_file_range=yes
5888fi
5889
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305890##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005891# check if struct fsxattr is available via linux/fs.h
5892
5893have_fsxattr=no
5894cat > $TMPC << EOF
5895#include <linux/fs.h>
5896struct fsxattr foo;
5897int main(void) {
5898 return 0;
5899}
5900EOF
5901if compile_prog "" "" ; then
5902 have_fsxattr=yes
5903fi
5904
Peter Maydellb66e10e2016-06-08 18:34:32 +01005905##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005906# check for usable membarrier system call
5907if test "$membarrier" = "yes"; then
5908 have_membarrier=no
5909 if test "$mingw32" = "yes" ; then
5910 have_membarrier=yes
5911 elif test "$linux" = "yes" ; then
5912 cat > $TMPC << EOF
5913 #include <linux/membarrier.h>
5914 #include <sys/syscall.h>
5915 #include <unistd.h>
5916 #include <stdlib.h>
5917 int main(void) {
5918 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5919 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5920 exit(0);
5921 }
5922EOF
5923 if compile_prog "" "" ; then
5924 have_membarrier=yes
5925 fi
5926 fi
5927 if test "$have_membarrier" = "no"; then
5928 feature_not_found "membarrier" "membarrier system call not available"
5929 fi
5930else
5931 # Do not enable it by default even for Mingw32, because it doesn't
5932 # work on Wine.
5933 membarrier=no
5934fi
5935
5936##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005937# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005938have_rtnetlink=no
5939cat > $TMPC << EOF
5940#include <linux/rtnetlink.h>
5941int main(void) {
5942 return IFLA_PROTO_DOWN;
5943}
5944EOF
5945if compile_prog "" "" ; then
5946 have_rtnetlink=yes
5947fi
5948
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005949##########################################
5950# check for usable AF_VSOCK environment
5951have_af_vsock=no
5952cat > $TMPC << EOF
5953#include <errno.h>
5954#include <sys/types.h>
5955#include <sys/socket.h>
5956#if !defined(AF_VSOCK)
5957# error missing AF_VSOCK flag
5958#endif
5959#include <linux/vm_sockets.h>
5960int main(void) {
5961 int sock, ret;
5962 struct sockaddr_vm svm;
5963 socklen_t len = sizeof(svm);
5964 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5965 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5966 if ((ret == -1) && (errno == ENOTCONN)) {
5967 return 0;
5968 }
5969 return -1;
5970}
5971EOF
5972if compile_prog "" "" ; then
5973 have_af_vsock=yes
5974fi
5975
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005976##########################################
5977# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005978have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005979cat > $TMPC << EOF
5980#include <errno.h>
5981#include <sys/types.h>
5982#include <sys/socket.h>
5983#include <linux/if_alg.h>
5984int main(void) {
5985 int sock;
5986 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5987 return sock;
5988}
5989EOF
5990if compile_prog "" "" ; then
5991 have_afalg=yes
5992fi
5993if test "$crypto_afalg" = "yes"
5994then
5995 if test "$have_afalg" != "yes"
5996 then
5997 error_exit "AF_ALG requested but could not be detected"
5998 fi
5999fi
6000
6001
James Clarke6969ec62016-06-06 12:02:50 +01006002#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006003# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00006004if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006005 cat > $TMPC << EOF
6006#include <Hypervisor/hv.h>
6007int main() { return 0;}
6008EOF
6009 if ! compile_object ""; then
6010 hvf='no'
6011 else
6012 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006013 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006014 fi
6015fi
6016
6017#################################################
James Clarke6969ec62016-06-06 12:02:50 +01006018# Sparc implicitly links with --relax, which is
6019# incompatible with -r, so --no-relax should be
6020# given. It does no harm to give it on other
6021# platforms too.
6022
6023# Note: the prototype is needed since QEMU_CFLAGS
6024# contains -Wmissing-prototypes
6025cat > $TMPC << EOF
6026extern int foo(void);
6027int foo(void) { return 0; }
6028EOF
6029if ! compile_object ""; then
6030 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6031fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01006032for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6033 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6034 LD_REL_FLAGS=$i
6035 break
6036 fi
6037done
6038if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6039 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006040fi
6041
Jan Vesely277abf12016-04-29 13:15:23 -04006042##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006043# check for sysmacros.h
6044
6045have_sysmacros=no
6046cat > $TMPC << EOF
6047#include <sys/sysmacros.h>
6048int main(void) {
6049 return makedev(0, 0);
6050}
6051EOF
6052if compile_prog "" "" ; then
6053 have_sysmacros=yes
6054fi
6055
6056##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006057# Veritas HyperScale block driver VxHS
6058# Check if libvxhs is installed
6059
6060if test "$vxhs" != "no" ; then
6061 cat > $TMPC <<EOF
6062#include <stdint.h>
6063#include <qnio/qnio_api.h>
6064
6065void *vxhs_callback;
6066
6067int main(void) {
6068 iio_init(QNIO_VERSION, vxhs_callback);
6069 return 0;
6070}
6071EOF
6072 vxhs_libs="-lvxhs -lssl"
6073 if compile_prog "" "$vxhs_libs" ; then
6074 vxhs=yes
6075 else
6076 if test "$vxhs" = "yes" ; then
6077 feature_not_found "vxhs block device" "Install libvxhs See github"
6078 fi
6079 vxhs=no
6080 fi
6081fi
6082
6083##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006084# check for _Static_assert()
6085
6086have_static_assert=no
6087cat > $TMPC << EOF
6088_Static_assert(1, "success");
6089int main(void) {
6090 return 0;
6091}
6092EOF
6093if compile_prog "" "" ; then
6094 have_static_assert=yes
6095fi
6096
6097##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006098# check for utmpx.h, it is missing e.g. on OpenBSD
6099
6100have_utmpx=no
6101cat > $TMPC << EOF
6102#include <utmpx.h>
6103struct utmpx user_info;
6104int main(void) {
6105 return 0;
6106}
6107EOF
6108if compile_prog "" "" ; then
6109 have_utmpx=yes
6110fi
6111
6112##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006113# check for getrandom()
6114
6115have_getrandom=no
6116cat > $TMPC << EOF
6117#include <sys/random.h>
6118int main(void) {
6119 return getrandom(0, 0, GRND_NONBLOCK);
6120}
6121EOF
6122if compile_prog "" "" ; then
6123 have_getrandom=yes
6124fi
6125
6126##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006127# checks for sanitizers
6128
Marc-André Lureau247724c2018-01-16 16:11:51 +01006129have_asan=no
6130have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006131have_asan_iface_h=no
6132have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006133
6134if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006135 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006136 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6137 have_asan=yes
6138 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006139
6140 # we could use a simple skeleton for flags checks, but this also
6141 # detect the static linking issue of ubsan, see also:
6142 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6143 cat > $TMPC << EOF
6144#include <stdlib.h>
6145int main(void) {
6146 void *tmp = malloc(10);
6147 return *(int *)(tmp + 2);
6148}
6149EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006150 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6151 have_ubsan=yes
6152 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006153
6154 if check_include "sanitizer/asan_interface.h" ; then
6155 have_asan_iface_h=yes
6156 fi
6157
6158 cat > $TMPC << EOF
6159#include <sanitizer/asan_interface.h>
6160int main(void) {
6161 __sanitizer_start_switch_fiber(0, 0, 0);
6162 return 0;
6163}
6164EOF
6165 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6166 have_asan_iface_fiber=yes
6167 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006168fi
6169
6170##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006171# checks for fuzzer
6172if test "$fuzzing" = "yes" ; then
6173 write_c_fuzzer_skeleton
6174 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6175 have_fuzzer=yes
6176 fi
6177fi
6178
6179##########################################
Junyan He17824402018-07-18 15:47:59 +08006180# check for libpmem
6181
6182if test "$libpmem" != "no"; then
6183 if $pkg_config --exists "libpmem"; then
6184 libpmem="yes"
6185 libpmem_libs=$($pkg_config --libs libpmem)
6186 libpmem_cflags=$($pkg_config --cflags libpmem)
6187 libs_softmmu="$libs_softmmu $libpmem_libs"
6188 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6189 else
6190 if test "$libpmem" = "yes" ; then
6191 feature_not_found "libpmem" "Install nvml or pmdk"
6192 fi
6193 libpmem="no"
6194 fi
6195fi
6196
6197##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006198# check for slirp
6199
Laurent Vivierd5999382019-06-21 15:05:44 +02006200# slirp is only required when building softmmu targets
6201if test -z "$slirp" -a "$softmmu" != "yes" ; then
6202 slirp="no"
6203fi
6204
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006205case "$slirp" in
6206 "" | yes)
6207 if $pkg_config slirp; then
6208 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006209 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6210 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006211 elif test -e "${source_path}/slirp/Makefile" ; then
6212 slirp=internal
6213 elif test -z "$slirp" ; then
6214 slirp=no
6215 else
6216 feature_not_found "slirp" "Install slirp devel or git submodule"
6217 fi
6218 ;;
6219
6220 system)
6221 if ! $pkg_config slirp; then
6222 feature_not_found "slirp" "Install slirp devel"
6223 fi
6224 ;;
6225esac
6226
6227case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006228 git | internal)
6229 if test "$slirp" = git; then
6230 git_submodules="${git_submodules} slirp"
6231 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006232 mkdir -p slirp
6233 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6234 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006235 if test "$mingw32" = "yes" ; then
6236 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6237 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006238 ;;
6239
6240 system)
6241 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6242 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6243 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6244 ;;
6245
6246 no)
6247 ;;
6248 *)
6249 error_exit "Unknown state for slirp: $slirp"
6250 ;;
6251esac
6252
6253
6254##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006255# End of CC checks
6256# After here, no more $cc or $ld runs
6257
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006258write_c_skeleton
6259
Blue Swirl1d728c32012-05-01 18:45:39 +00006260if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006261 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6262 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006263elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006264 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006265elif test "$debug" = "no"; then
6266 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006267fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006268
Marc-André Lureau247724c2018-01-16 16:11:51 +01006269if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006270 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6271 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006272 if test "$have_asan_iface_h" = "no" ; then
6273 echo "ASAN build enabled, but ASAN header missing." \
6274 "Without code annotation, the report may be inferior."
6275 elif test "$have_asan_iface_fiber" = "no" ; then
6276 echo "ASAN build enabled, but ASAN header is too old." \
6277 "Without code annotation, the report may be inferior."
6278 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006279fi
6280if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006281 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6282 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006283fi
6284
Peter Lieven6542aa92014-02-03 10:26:13 +01006285##########################################
6286# Do we have libnfs
6287if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006288 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006289 libnfs="yes"
6290 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006291 else
6292 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006293 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006294 fi
6295 libnfs="no"
6296 fi
6297fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006298
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006299##########################################
6300# Do we have libudev
6301if test "$libudev" != "no" ; then
6302 if $pkg_config libudev && test "$static" != "yes"; then
6303 libudev="yes"
6304 libudev_libs=$($pkg_config --libs libudev)
6305 else
6306 libudev="no"
6307 fi
6308fi
6309
Peter Maydell6ca026c2012-07-18 15:10:18 +01006310# Now we've finished running tests it's OK to add -Werror to the compiler flags
6311if test "$werror" = "yes"; then
6312 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6313fi
6314
Juan Quintelae86ecd42009-08-03 14:45:59 +02006315if test "$solaris" = "no" ; then
6316 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006317 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006318 fi
6319fi
6320
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006321# test if pod2man has --utf8 option
6322if pod2man --help | grep -q utf8; then
6323 POD2MAN="pod2man --utf8"
6324else
6325 POD2MAN="pod2man"
6326fi
6327
Blue Swirl952afb72010-09-19 08:36:34 +00006328# Use ASLR, no-SEH and DEP if available
6329if test "$mingw32" = "yes" ; then
6330 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006331 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006332 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006333 fi
6334 done
6335fi
6336
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006337# Disable OpenBSD W^X if available
6338if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6339 cat > $TMPC <<EOF
6340 int main(void) { return 0; }
6341EOF
6342 wx_ldflags="-Wl,-z,wxneeded"
6343 if compile_prog "" "$wx_ldflags"; then
6344 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6345 fi
6346fi
6347
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006348qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006349qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006350qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006351qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006352qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006353qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006354
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006355# We can only support ivshmem if we have eventfd
6356if [ "$eventfd" = "yes" ]; then
6357 ivshmem=yes
6358fi
6359
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006360tools=""
6361if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006362 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006363 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006364 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006365 fi
6366 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006367 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006368 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006369 if [ "$curl" = "yes" ]; then
6370 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006371 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006372fi
6373if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006374 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006375 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006376 virtfs=yes
6377 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6378 else
6379 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006380 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306381 fi
Andreas Färber17500372012-05-01 01:12:03 +02006382 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006383 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006384 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6385 mpath=yes
6386 else
6387 if test "$mpath" = yes; then
6388 error_exit "Multipath requires libmpathpersist devel"
6389 fi
6390 mpath=no
6391 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006392 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6393 else
6394 if test "$virtfs" = yes; then
6395 error_exit "VirtFS is supported only on Linux"
6396 fi
6397 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006398 if test "$mpath" = yes; then
6399 error_exit "Multipath is supported only on Linux"
6400 fi
6401 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306402 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006403 if test "$xkbcommon" = "yes"; then
6404 tools="qemu-keymap\$(EXESUF) $tools"
6405 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006406fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006407
6408# Probe for guest agent support/options
6409
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006410if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006411 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6412 guest_agent=no
6413 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006414 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006415 guest_agent=yes
6416 elif [ "$guest_agent" != yes ]; then
6417 guest_agent=no
6418 else
6419 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006420 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006421fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006422
Michael Roth9d6bc272015-08-26 10:49:13 -05006423# Guest agent Window MSI package
6424
6425if test "$guest_agent" != yes; then
6426 if test "$guest_agent_msi" = yes; then
6427 error_exit "MSI guest agent package requires guest agent enabled"
6428 fi
6429 guest_agent_msi=no
6430elif test "$mingw32" != "yes"; then
6431 if test "$guest_agent_msi" = "yes"; then
6432 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6433 fi
6434 guest_agent_msi=no
6435elif ! has wixl; then
6436 if test "$guest_agent_msi" = "yes"; then
6437 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6438 fi
6439 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006440else
6441 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6442 # disabled explicitly
6443 if test "$guest_agent_msi" != "no"; then
6444 guest_agent_msi=yes
6445 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006446fi
6447
Michael Roth1a349042015-08-26 11:14:31 -05006448if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006449 if test "$guest_agent_with_vss" = "yes"; then
6450 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6451 fi
6452
6453 if test "$QEMU_GA_MANUFACTURER" = ""; then
6454 QEMU_GA_MANUFACTURER=QEMU
6455 fi
6456
6457 if test "$QEMU_GA_DISTRO" = ""; then
6458 QEMU_GA_DISTRO=Linux
6459 fi
6460
6461 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006462 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006463 fi
6464
Stefan Weil89138852016-05-16 15:10:20 +02006465 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006466
6467 case "$cpu" in
6468 x86_64)
6469 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6470 ;;
6471 i386)
6472 QEMU_GA_MSI_ARCH="-D Arch=32"
6473 ;;
6474 *)
6475 error_exit "CPU $cpu not supported for building installation package"
6476 ;;
6477 esac
6478fi
6479
Paolo Bonzinica35f782010-05-26 16:08:29 +02006480# Mac OS X ships with a broken assembler
6481roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006482if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6483 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6484 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006485 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006486 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6487 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6488 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006489 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6490 ld_i386_emulation="$emu"
6491 roms="optionrom"
6492 break
6493 fi
6494 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006495fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006496
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006497# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006498if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006499 write_c_skeleton
6500 if compile_prog "-march=z900" ""; then
6501 roms="$roms s390-ccw"
6502 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006503fi
6504
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006505# Check that the C++ compiler exists and works with the C compiler.
6506# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6507if has $cxx; then
6508 cat > $TMPC <<EOF
6509int c_function(void);
6510int main(void) { return c_function(); }
6511EOF
6512
6513 compile_object
6514
6515 cat > $TMPCXX <<EOF
6516extern "C" {
6517 int c_function(void);
6518}
6519int c_function(void) { return 42; }
6520EOF
6521
6522 update_cxxflags
6523
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006524 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006525 # C++ compiler $cxx works ok with C compiler $cc
6526 :
6527 else
6528 echo "C++ compiler $cxx does not work with C compiler $cc"
6529 echo "Disabling C++ specific optional code"
6530 cxx=
6531 fi
6532else
6533 echo "No C++ compiler available; disabling C++ specific optional code"
6534 cxx=
6535fi
6536
Cole Robinson02d34f62016-05-06 14:03:09 -04006537echo_version() {
6538 if test "$1" = "yes" ; then
6539 echo "($2)"
6540 fi
6541}
6542
Jan Kiszka50e12062014-10-02 10:03:55 +02006543# prepend pixman and ftd flags after all config tests are done
6544QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006545QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006546libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006547
bellard43ce4df2003-06-09 19:53:12 +00006548echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006549echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006550echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006551echo "binary directory $(eval echo $bindir)"
6552echo "library directory $(eval echo $libdir)"
6553echo "module directory $(eval echo $qemu_moddir)"
6554echo "libexec directory $(eval echo $libexecdir)"
6555echo "include directory $(eval echo $includedir)"
6556echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006557if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006558echo "local state directory $(eval echo $local_statedir)"
6559echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006560echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006561else
6562echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006563echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006564fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006565echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006566echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006567echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006568echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006569echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006570echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006571echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006572echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006573echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006574echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006575echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006576echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006577echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006578echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006579echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006580if test "$docs" != "no"; then
6581 echo "sphinx-build $sphinx_build"
6582fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006583echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006584echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6585if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006586 echo "smbd $smbd"
6587fi
Fam Zheng17969262014-02-10 14:48:56 +08006588echo "module support $modules"
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006589echo "alt path mod load $module_upgrades"
bellard43ce4df2003-06-09 19:53:12 +00006590echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006591echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006592echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006593echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006594echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006595echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006596echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006597echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006598if test "$darwin" = "yes" ; then
6599 echo "Cocoa support $cocoa"
6600fi
Stefan Weil89138852016-05-16 15:10:20 +02006601echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006602echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006603echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006604echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006605echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006606echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006607echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006608echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006609if test "$gcrypt" = "yes"
6610then
6611 echo " hmac $gcrypt_hmac"
6612 echo " XTS $gcrypt_xts"
6613fi
Stefan Weil89138852016-05-16 15:10:20 +02006614echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006615if test "$nettle" = "yes"
6616then
6617 echo " XTS $nettle_xts"
6618fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006619echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006620echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006621echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006622echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006623echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006624echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006625echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006626echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006627echo "Block whitelist (rw) $block_drv_rw_whitelist"
6628echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306629echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006630echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006631echo "VNC support $vnc"
6632if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006633 echo "VNC SASL support $vnc_sasl"
6634 echo "VNC JPEG support $vnc_jpeg"
6635 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006636fi
aliguorie37630c2009-04-22 15:19:10 +00006637echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006638if test "$xen" = "yes" ; then
6639 echo "xen ctrl version $xen_ctrl_version"
6640fi
aurel322e4d9fb2008-04-08 06:01:02 +00006641echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006642echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006643echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006644echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006645echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006646echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006647echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006648echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006649echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006650echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006651echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006652echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006653echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006654echo "TCG support $tcg"
6655if test "$tcg" = "yes" ; then
6656 echo "TCG debug enabled $debug_tcg"
6657 echo "TCG interpreter $tcg_interpreter"
6658fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006659echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006660echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006661echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006662echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006663echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006664echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006665echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006666echo "madvise $madvise"
6667echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006668echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006669echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006670echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006671echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006672echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006673echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006674echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006675echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006676echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006677if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006678echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006679fi
Stefan Weil89138852016-05-16 15:10:20 +02006680echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006681echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006682echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006683echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006684echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006685echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006686echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006687echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006688echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006689echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006690echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006691echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006692echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006693echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006694echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006695echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006696echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006697echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006698echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006699echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306700echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006701echo "gcov $gcov_tool"
6702echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006703echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006704echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006705echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006706echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006707echo "lzo support $lzo"
6708echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006709echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006710echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006711echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006712echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006713echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006714echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006715echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006716echo "avx2 optimization $avx2_opt"
Robert Hoo6b8cd442020-02-29 20:34:34 +08006717echo "avx512f optimization $avx512f_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006718echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006719echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006720echo "bochs support $bochs"
6721echo "cloop support $cloop"
6722echo "dmg support $dmg"
6723echo "qcow v1 support $qcow1"
6724echo "vdi support $vdi"
6725echo "vvfat support $vvfat"
6726echo "qed support $qed"
6727echo "parallels support $parallels"
6728echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006729echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006730echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006731echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006732echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006733echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006734echo "fuzzing support $fuzzing"
Alex Bennéef48e5902020-03-16 17:21:48 +00006735echo "gdb $gdb_bin"
bellard67b915a2004-03-31 23:37:16 +00006736
Peter Maydell898be3e2017-03-21 14:31:57 +00006737if test "$supported_cpu" = "no"; then
6738 echo
6739 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6740 echo
6741 echo "CPU host architecture $cpu support is not currently maintained."
6742 echo "The QEMU project intends to remove support for this host CPU in"
6743 echo "a future release if nobody volunteers to maintain it and to"
6744 echo "provide a build host for our continuous integration setup."
6745 echo "configure has succeeded and you can continue to build, but"
6746 echo "if you care about QEMU on this platform you should contact"
6747 echo "us upstream at qemu-devel@nongnu.org."
6748fi
6749
6750if test "$supported_os" = "no"; then
6751 echo
6752 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6753 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006754 echo "Host OS $targetos support is not currently maintained."
6755 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006756 echo "a future release if nobody volunteers to maintain it and to"
6757 echo "provide a build host for our continuous integration setup."
6758 echo "configure has succeeded and you can continue to build, but"
6759 echo "if you care about QEMU on this platform you should contact"
6760 echo "us upstream at qemu-devel@nongnu.org."
6761fi
6762
Juan Quintela98ec69a2009-07-16 18:34:18 +02006763config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006764
Stefan Weildbd99ae2013-01-01 18:33:44 +01006765echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6766
Juan Quintela98ec69a2009-07-16 18:34:18 +02006767echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006768echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006769
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006770echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006771echo "prefix=$prefix" >> $config_host_mak
6772echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006773echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006774echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006775echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006776echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006777echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006778echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006779echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006780echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006781echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006782echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006783if test "$mingw32" = "no" ; then
6784 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6785fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006786echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006787echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006788echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006789echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006790echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006791echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006792echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006793echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006794echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006795
Juan Quintela98ec69a2009-07-16 18:34:18 +02006796echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006797
Paolo Bonzinif3494742019-01-23 14:56:17 +08006798if test "$default_devices" = "yes" ; then
6799 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6800else
6801 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6802fi
aurel32f8393942009-04-13 18:45:38 +00006803if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006804 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006805fi
aliguori1625af82009-04-05 17:41:02 +00006806if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006807 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006808fi
bellard7d132992003-03-06 23:23:54 +00006809if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006810 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006811fi
bellard67b915a2004-03-31 23:37:16 +00006812if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006813 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006814 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006815 version_major=${rc_version%%.*}
6816 rc_version=${rc_version#*.}
6817 version_minor=${rc_version%%.*}
6818 rc_version=${rc_version#*.}
6819 version_subminor=${rc_version%%.*}
6820 version_micro=0
6821 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6822 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006823 if test "$guest_agent_with_vss" = "yes" ; then
6824 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006825 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006826 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6827 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006828 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006829 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006830 fi
Michael Roth1a349042015-08-26 11:14:31 -05006831 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006832 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006833 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6834 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6835 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6836 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6837 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6838 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6839 fi
pbrook210fa552007-02-27 21:04:49 +00006840else
Juan Quintela35f4df22009-07-27 16:13:07 +02006841 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006842fi
blueswir1128ab2f2008-08-15 18:33:42 +00006843
Mark McLoughlindffcb712009-10-22 17:49:11 +01006844if test "$linux" = "yes" ; then
6845 echo "CONFIG_LINUX=y" >> $config_host_mak
6846fi
6847
bellard83fb7ad2004-07-05 21:25:26 +00006848if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006849 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006850fi
malcb29fe3e2008-11-18 01:42:22 +00006851
bellardec530c82006-04-25 22:36:06 +00006852if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006853 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006854fi
Andreas Färber179cf402010-09-20 00:50:43 +02006855if test "$haiku" = "yes" ; then
6856 echo "CONFIG_HAIKU=y" >> $config_host_mak
6857fi
bellard97a847b2003-08-10 21:36:04 +00006858if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006859 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006860fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006861if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006862 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006863fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006864if test "$want_tools" = "yes" ; then
6865 echo "CONFIG_TOOLS=y" >> $config_host_mak
6866fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006867if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006868 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006869 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006870 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6871 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6872fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006873if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006874 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006875fi
ths8a16d272008-07-19 09:56:24 +00006876if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006877 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006878 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006879fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006880if test "$netmap" = "yes" ; then
6881 echo "CONFIG_NETMAP=y" >> $config_host_mak
6882fi
Gonglei015a33b2014-07-01 20:58:08 +08006883if test "$l2tpv3" = "yes" ; then
6884 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6885fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006886if test "$gprof" = "yes" ; then
6887 echo "CONFIG_GPROF=y" >> $config_host_mak
6888fi
Corey Bryant47e98652012-01-26 09:42:26 -05006889if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006890 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006891fi
Juan Quintela2358a492009-07-27 16:13:25 +02006892echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006893for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006894 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006895 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006896 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006897 echo "$def=m" >> $config_host_mak ;;
6898 *)
6899 echo "$def=y" >> $config_host_mak ;;
6900 esac
malc0c58ac12008-06-25 21:04:05 +00006901done
Fam Zhengb1149912017-09-07 16:29:13 +08006902echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6903echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6904echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6905echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6906echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006907if test "$audio_win_int" = "yes" ; then
6908 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6909fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006910echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6911echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006912if test "$vnc" = "yes" ; then
6913 echo "CONFIG_VNC=y" >> $config_host_mak
6914fi
aliguori2f9606b2009-03-06 20:27:28 +00006915if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006916 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006917fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006918if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006919 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006920fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006921if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006922 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006923fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006924if test "$xkbcommon" = "yes" ; then
6925 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6926 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6927fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006928if test "$xfs" = "yes" ; then
6929 echo "CONFIG_XFS=y" >> $config_host_mak
6930fi
Stefan Weil89138852016-05-16 15:10:20 +02006931qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006932echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006933echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006934echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006935echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006936if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006937 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006938fi
Fam Zheng17969262014-02-10 14:48:56 +08006939if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006940 # $shacmd can generate a hash started with digit, which the compiler doesn't
6941 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006942 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006943 echo "CONFIG_MODULES=y" >> $config_host_mak
6944fi
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006945if test "$module_upgrades" = "yes"; then
6946 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6947fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006948if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006949 echo "CONFIG_X11=y" >> $config_host_mak
6950 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6951 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6952fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006953if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006954 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006955 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006956 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006957 if test "$sdl_image" = "yes" ; then
6958 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6959 fi
bellard49ecc3f2007-11-07 19:25:15 +00006960fi
6961if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006962 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006963fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006964if test "$iconv" = "yes" ; then
6965 echo "CONFIG_ICONV=y" >> $config_host_mak
6966 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6967 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6968fi
balrog4d3b6f62008-02-10 16:33:14 +00006969if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006970 echo "CONFIG_CURSES=m" >> $config_host_mak
6971 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6972 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006973fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006974if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006975 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006976fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006977if test "$accept4" = "yes" ; then
6978 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6979fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306980if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006981 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306982fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006983if test "$eventfd" = "yes" ; then
6984 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6985fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006986if test "$memfd" = "yes" ; then
6987 echo "CONFIG_MEMFD=y" >> $config_host_mak
6988fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006989if test "$have_usbfs" = "yes" ; then
6990 echo "CONFIG_USBFS=y" >> $config_host_mak
6991fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006992if test "$fallocate" = "yes" ; then
6993 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6994fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006995if test "$fallocate_punch_hole" = "yes" ; then
6996 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6997fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006998if test "$fallocate_zero_range" = "yes" ; then
6999 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7000fi
Kevin Wolfed911432014-09-29 17:12:59 +02007001if test "$posix_fallocate" = "yes" ; then
7002 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7003fi
Peter Maydellc727f472011-01-06 11:05:10 +00007004if test "$sync_file_range" = "yes" ; then
7005 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7006fi
Peter Maydelldace20d2011-01-10 13:11:24 +00007007if test "$fiemap" = "yes" ; then
7008 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7009fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007010if test "$dup3" = "yes" ; then
7011 echo "CONFIG_DUP3=y" >> $config_host_mak
7012fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01007013if test "$ppoll" = "yes" ; then
7014 echo "CONFIG_PPOLL=y" >> $config_host_mak
7015fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007016if test "$prctl_pr_set_timerslack" = "yes" ; then
7017 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7018fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007019if test "$epoll" = "yes" ; then
7020 echo "CONFIG_EPOLL=y" >> $config_host_mak
7021fi
7022if test "$epoll_create1" = "yes" ; then
7023 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7024fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007025if test "$sendfile" = "yes" ; then
7026 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7027fi
Riku Voipio51834342014-06-22 11:25:42 +01007028if test "$timerfd" = "yes" ; then
7029 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7030fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007031if test "$setns" = "yes" ; then
7032 echo "CONFIG_SETNS=y" >> $config_host_mak
7033fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007034if test "$clock_adjtime" = "yes" ; then
7035 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7036fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007037if test "$syncfs" = "yes" ; then
7038 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7039fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007040if test "$kcov" = "yes" ; then
7041 echo "CONFIG_KCOV=y" >> $config_host_mak
7042fi
aurel323b3f24a2009-04-15 16:12:13 +00007043if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007044 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007045fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007046if test "$inotify1" = "yes" ; then
7047 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7048fi
Peter Maydell401bc052017-09-05 13:19:32 +01007049if test "$sem_timedwait" = "yes" ; then
7050 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7051fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007052if test "$strchrnul" = "yes" ; then
7053 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7054fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007055if test "$st_atim" = "yes" ; then
7056 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7057fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007058if test "$byteswap_h" = "yes" ; then
7059 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7060fi
7061if test "$bswap_h" = "yes" ; then
7062 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7063fi
Alexander Graf769ce762009-05-11 17:41:42 +02007064if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007065 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007066 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007067 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007068fi
aurel322e4d9fb2008-04-08 06:01:02 +00007069if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007070 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007071 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007072fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007073if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007074 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007075 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007076 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007077 if test "$gtk_gl" = "yes" ; then
7078 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7079 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007080fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007081if test "$gio" = "yes" ; then
7082 echo "CONFIG_GIO=y" >> $config_host_mak
7083 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7084 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007085 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007086fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007087echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007088if test "$gnutls" = "yes" ; then
7089 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7090fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007091if test "$gcrypt" = "yes" ; then
7092 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007093 if test "$gcrypt_hmac" = "yes" ; then
7094 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7095 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007096fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007097if test "$nettle" = "yes" ; then
7098 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007099 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007100fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007101if test "$qemu_private_xts" = "yes" ; then
7102 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7103fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007104if test "$tasn1" = "yes" ; then
7105 echo "CONFIG_TASN1=y" >> $config_host_mak
7106fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007107if test "$auth_pam" = "yes" ; then
7108 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7109fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007110if test "$have_ifaddrs_h" = "yes" ; then
7111 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7112fi
Eric Blake6b39b062016-10-11 10:46:23 -05007113if test "$have_broken_size_max" = "yes" ; then
7114 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7115fi
Jan Vesely277abf12016-04-29 13:15:23 -04007116
7117# Work around a system header bug with some kernel/XFS header
7118# versions where they both try to define 'struct fsxattr':
7119# xfs headers will not try to redefine structs from linux headers
7120# if this macro is set.
7121if test "$have_fsxattr" = "yes" ; then
7122 echo "HAVE_FSXATTR=y" >> $config_host_mak
7123fi
Fam Zheng1efad062018-06-01 17:26:43 +08007124if test "$have_copy_file_range" = "yes" ; then
7125 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7126fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007127if test "$vte" = "yes" ; then
7128 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007129 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007130 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007131fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007132if test "$virglrenderer" = "yes" ; then
7133 echo "CONFIG_VIRGL=y" >> $config_host_mak
7134 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7135 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7136fi
aliguorie37630c2009-04-22 15:19:10 +00007137if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007138 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007139 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007140fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007141if test "$linux_aio" = "yes" ; then
7142 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7143fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007144if test "$linux_io_uring" = "yes" ; then
7145 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7146 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7147 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7148fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007149if test "$attr" = "yes" ; then
7150 echo "CONFIG_ATTR=y" >> $config_host_mak
7151fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007152if test "$libattr" = "yes" ; then
7153 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7154fi
Meador Inge983eef52012-02-24 14:00:42 +05307155if test "$virtfs" = "yes" ; then
7156 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007157fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007158if test "$mpath" = "yes" ; then
7159 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007160 if test "$mpathpersist_new_api" = "yes"; then
7161 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7162 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007163fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007164if test "$vhost_scsi" = "yes" ; then
7165 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7166fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007167if test "$vhost_net" = "yes" ; then
7168 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7169fi
7170if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007171 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007172fi
Gonglei042cea22018-03-01 21:46:28 +08007173if test "$vhost_crypto" = "yes" ; then
7174 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7175fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007176if test "$vhost_vsock" = "yes" ; then
7177 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7178fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007179if test "$vhost_kernel" = "yes" ; then
7180 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7181fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007182if test "$vhost_user" = "yes" ; then
7183 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7184fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007185if test "$vhost_user_fs" = "yes" ; then
7186 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7187fi
ths77755342008-11-27 15:45:16 +00007188if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007189 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007190fi
aliguoribf9298b2008-12-05 20:05:26 +00007191if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007192 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007193fi
aliguoriceb42de2009-04-07 18:43:28 +00007194if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007195 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007196fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007197if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007198 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007199fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007200if test "$membarrier" = "yes" ; then
7201 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7202fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007203if test "$signalfd" = "yes" ; then
7204 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7205fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007206if test "$optreset" = "yes" ; then
7207 echo "HAVE_OPTRESET=y" >> $config_host_mak
7208fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007209if test "$tcg" = "yes"; then
7210 echo "CONFIG_TCG=y" >> $config_host_mak
7211 if test "$tcg_interpreter" = "yes" ; then
7212 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7213 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007214fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007215if test "$fdatasync" = "yes" ; then
7216 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7217fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007218if test "$madvise" = "yes" ; then
7219 echo "CONFIG_MADVISE=y" >> $config_host_mak
7220fi
7221if test "$posix_madvise" = "yes" ; then
7222 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7223fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007224if test "$posix_memalign" = "yes" ; then
7225 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7226fi
bellard97a847b2003-08-10 21:36:04 +00007227
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007228if test "$spice" = "yes" ; then
7229 echo "CONFIG_SPICE=y" >> $config_host_mak
7230fi
7231
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007232if test "$smartcard" = "yes" ; then
7233 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007234 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7235 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007236fi
7237
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007238if test "$libusb" = "yes" ; then
7239 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007240 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7241 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007242fi
7243
Hans de Goede69354a82011-07-19 11:04:10 +02007244if test "$usb_redir" = "yes" ; then
7245 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007246 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7247 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007248fi
7249
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007250if test "$opengl" = "yes" ; then
7251 echo "CONFIG_OPENGL=y" >> $config_host_mak
7252 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007253 if test "$opengl_dmabuf" = "yes" ; then
7254 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7255 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007256fi
7257
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007258if test "$gbm" = "yes" ; then
7259 echo "CONFIG_GBM=y" >> $config_host_mak
7260 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7261 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7262fi
7263
7264
Yang Zhong5a22ab72017-12-20 21:16:46 +08007265if test "$malloc_trim" = "yes" ; then
7266 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7267fi
7268
Liang Li99f2dbd2016-03-08 13:53:16 +08007269if test "$avx2_opt" = "yes" ; then
7270 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7271fi
7272
Robert Hoo6b8cd442020-02-29 20:34:34 +08007273if test "$avx512f_opt" = "yes" ; then
7274 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7275fi
7276
qiaonuohan607dacd2014-02-18 14:11:30 +08007277if test "$lzo" = "yes" ; then
7278 echo "CONFIG_LZO=y" >> $config_host_mak
7279fi
7280
7281if test "$snappy" = "yes" ; then
7282 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7283fi
7284
Peter Wu6b383c02015-01-06 18:48:14 +01007285if test "$bzip2" = "yes" ; then
7286 echo "CONFIG_BZIP2=y" >> $config_host_mak
7287 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7288fi
7289
Julio Faracco83bc1f92018-11-05 13:08:04 -02007290if test "$lzfse" = "yes" ; then
7291 echo "CONFIG_LZFSE=y" >> $config_host_mak
7292 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7293fi
7294
Juan Quintela3a678482019-12-17 21:15:24 +01007295if test "$zstd" = "yes" ; then
7296 echo "CONFIG_ZSTD=y" >> $config_host_mak
7297fi
7298
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007299if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007300 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007301 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7302 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007303fi
7304
Peter Lieven6542aa92014-02-03 10:26:13 +01007305if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007306 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7307 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007308fi
7309
Eduardo Otubof7945732012-08-14 18:44:05 -03007310if test "$seccomp" = "yes"; then
7311 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007312 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7313 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007314fi
7315
bellard83fb7ad2004-07-05 21:25:26 +00007316# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007317if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007318 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007319fi
7320
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007321if test "$localtime_r" = "yes" ; then
7322 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7323fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007324if test "$qom_cast_debug" = "yes" ; then
7325 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7326fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007327if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007328 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007329 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7330 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007331fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007332
Peter Maydell7c2acc72013-04-08 12:11:27 +01007333echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007334if test "$coroutine_pool" = "yes" ; then
7335 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7336else
7337 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7338fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307339
Peter Lieven7d992e42016-09-27 11:58:45 +02007340if test "$debug_stack_usage" = "yes" ; then
7341 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7342fi
7343
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007344if test "$crypto_afalg" = "yes" ; then
7345 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7346fi
7347
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307348if test "$open_by_handle_at" = "yes" ; then
7349 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7350fi
7351
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307352if test "$linux_magic_h" = "yes" ; then
7353 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7354fi
7355
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007356if test "$pragma_diagnostic_available" = "yes" ; then
7357 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007358fi
7359
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007360if test "$valgrind_h" = "yes" ; then
7361 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7362fi
7363
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007364if test "$have_asan_iface_fiber" = "yes" ; then
7365 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7366fi
7367
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007368if test "$has_environ" = "yes" ; then
7369 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7370fi
7371
Richard Henderson76a347e2012-12-28 14:17:02 -08007372if test "$cpuid_h" = "yes" ; then
7373 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7374fi
7375
Richard Hendersonf5401662013-02-16 12:46:59 -08007376if test "$int128" = "yes" ; then
7377 echo "CONFIG_INT128=y" >> $config_host_mak
7378fi
7379
Richard Henderson7ebee432016-06-29 21:10:59 -07007380if test "$atomic128" = "yes" ; then
7381 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7382fi
7383
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007384if test "$cmpxchg128" = "yes" ; then
7385 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7386fi
7387
Richard Hendersondf79b992016-09-02 12:23:57 -07007388if test "$atomic64" = "yes" ; then
7389 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7390fi
7391
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007392if test "$attralias" = "yes" ; then
7393 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7394fi
7395
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007396if test "$getauxval" = "yes" ; then
7397 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7398fi
7399
Bharata B Raoeb100392012-09-24 14:42:45 +05307400if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007401 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007402 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7403 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307404fi
7405
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007406if test "$glusterfs_xlator_opt" = "yes" ; then
7407 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7408fi
7409
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307410if test "$glusterfs_discard" = "yes" ; then
7411 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7412fi
7413
Niels de Vosdf3a4292017-05-28 12:01:14 +05307414if test "$glusterfs_fallocate" = "yes" ; then
7415 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7416fi
7417
Bharata B Rao7c815372013-12-21 14:51:25 +05307418if test "$glusterfs_zerofill" = "yes" ; then
7419 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7420fi
7421
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007422if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7423 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7424fi
7425
Niels de Vos0e3b8912019-03-05 16:46:34 +01007426if test "$glusterfs_iocb_has_stat" = "yes" ; then
7427 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7428fi
7429
Pino Toscanob10d49d2019-06-20 22:08:40 +02007430if test "$libssh" = "yes" ; then
7431 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7432 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7433 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007434fi
7435
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007436if test "$live_block_migration" = "yes" ; then
7437 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7438fi
7439
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007440if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007441 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007442fi
7443
Lluís Vilanova5b808272014-05-27 15:02:14 +02007444echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7445if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007446 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307447fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007448if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007449 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7450 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007451 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007452fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007453if have_backend "log"; then
7454 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007455fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007456if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007457 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7458fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007459if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007460 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7461 if test "$trace_backend_stap" = "yes" ; then
7462 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7463 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007464fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007465if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007466 if test "$linux" = "yes" ; then
7467 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007468 else
Stewart Smith21684af2014-01-24 12:39:10 +11007469 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007470 fi
7471fi
Paul Durrant0a852412016-08-04 14:44:14 +01007472if have_backend "syslog"; then
7473 if test "$posix_syslog" = "yes" ; then
7474 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7475 else
7476 feature_not_found "syslog(trace backend)" "syslog not available"
7477 fi
7478fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007479echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7480
Michael R. Hines2da776d2013-07-22 10:01:54 -04007481if test "$rdma" = "yes" ; then
7482 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007483 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007484fi
7485
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007486if test "$pvrdma" = "yes" ; then
7487 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7488fi
7489
Laurent Vivier575b22b2016-06-02 22:14:15 +02007490if test "$have_rtnetlink" = "yes" ; then
7491 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7492fi
7493
Klim Kireeved279a02018-01-12 12:01:19 +03007494if test "$libxml2" = "yes" ; then
7495 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7496 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7497 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7498fi
7499
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007500if test "$replication" = "yes" ; then
7501 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7502fi
7503
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007504if test "$have_af_vsock" = "yes" ; then
7505 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7506fi
7507
Christopher Covington4d043512016-12-28 15:04:33 -05007508if test "$have_sysmacros" = "yes" ; then
7509 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7510fi
7511
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007512if test "$have_static_assert" = "yes" ; then
7513 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7514fi
7515
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007516if test "$have_utmpx" = "yes" ; then
7517 echo "HAVE_UTMPX=y" >> $config_host_mak
7518fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007519if test "$have_getrandom" = "yes" ; then
7520 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7521fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007522if test "$ivshmem" = "yes" ; then
7523 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7524fi
Richard Hendersone219c492017-09-28 09:01:23 -07007525if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007526 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7527fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007528if test "$debug_mutex" = "yes" ; then
7529 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7530fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007531
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007532# Hold two types of flag:
7533# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7534# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007535# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007536# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007537if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007538 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007539 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7540elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7541 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7542 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007543fi
7544
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007545if test "$vxhs" = "yes" ; then
7546 echo "CONFIG_VXHS=y" >> $config_host_mak
7547 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7548fi
7549
Junyan He17824402018-07-18 15:47:59 +08007550if test "$libpmem" = "yes" ; then
7551 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7552fi
7553
Jeff Cody2f740132018-11-07 07:36:44 +01007554if test "$bochs" = "yes" ; then
7555 echo "CONFIG_BOCHS=y" >> $config_host_mak
7556fi
7557if test "$cloop" = "yes" ; then
7558 echo "CONFIG_CLOOP=y" >> $config_host_mak
7559fi
7560if test "$dmg" = "yes" ; then
7561 echo "CONFIG_DMG=y" >> $config_host_mak
7562fi
7563if test "$qcow1" = "yes" ; then
7564 echo "CONFIG_QCOW1=y" >> $config_host_mak
7565fi
7566if test "$vdi" = "yes" ; then
7567 echo "CONFIG_VDI=y" >> $config_host_mak
7568fi
7569if test "$vvfat" = "yes" ; then
7570 echo "CONFIG_VVFAT=y" >> $config_host_mak
7571fi
7572if test "$qed" = "yes" ; then
7573 echo "CONFIG_QED=y" >> $config_host_mak
7574fi
7575if test "$parallels" = "yes" ; then
7576 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7577fi
7578if test "$sheepdog" = "yes" ; then
7579 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7580fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007581if test "$fuzzing" = "yes" ; then
7582 if test "$have_fuzzer" = "yes"; then
7583 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7584 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7585 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7586 else
7587 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7588 exit 1
7589 fi
7590fi
Jeff Cody2f740132018-11-07 07:36:44 +01007591
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007592if test "$plugins" = "yes" ; then
7593 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7594 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007595 # Copy the export object list to the build dir
7596 if test "$ld_dynamic_list" = "yes" ; then
7597 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7598 ld_symbols=qemu-plugins-ld.symbols
7599 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7600 elif test "$ld_exported_symbols_list" = "yes" ; then
7601 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7602 ld64_symbols=qemu-plugins-ld64.symbols
7603 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7604 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7605 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7606 else
7607 error_exit \
7608 "If \$plugins=yes, either \$ld_dynamic_list or " \
7609 "\$ld_exported_symbols_list should have been set to 'yes'."
7610 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007611fi
7612
Alex Bennéef48e5902020-03-16 17:21:48 +00007613if test -n "$gdb_bin" ; then
7614 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7615fi
7616
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007617if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007618 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007619elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007620 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007621elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007622 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007623elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007624 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007625elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007626 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007627elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007628 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007629else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007630 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007631fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007632
Juan Quintela98ec69a2009-07-16 18:34:18 +02007633echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007634echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007635echo "MAKE=$make" >> $config_host_mak
7636echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007637echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7638echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007639echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7640echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007641echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007642echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Peter Maydell516e8b72020-04-11 19:29:32 +01007643echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007644echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007645echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007646if $iasl -h > /dev/null 2>&1; then
7647 echo "IASL=$iasl" >> $config_host_mak
7648fi
Juan Quintela804edf22009-07-27 16:12:49 +02007649echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007650echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007651echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007652echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007653echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007654echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007655echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007656echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007657echo "OBJCOPY=$objcopy" >> $config_host_mak
7658echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007659echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007660echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007661echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007662echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007663echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007664echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007665echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007666echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007667echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007668if test "$sparse" = "yes" ; then
7669 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007670 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007671 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007672 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7673 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7674fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007675echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007676echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007677echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007678echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007679echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007680echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007681echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007682echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007683echo "DSOSUF=$DSOSUF" >> $config_host_mak
7684echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007685echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007686echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7687echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007688echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007689if test "$gcov" = "yes" ; then
7690 echo "CONFIG_GCOV=y" >> $config_host_mak
7691 echo "GCOV=$gcov_tool" >> $config_host_mak
7692fi
Juan Quintela804edf22009-07-27 16:12:49 +02007693
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007694if test "$libudev" != "no"; then
7695 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7696 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7697fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007698if test "$fuzzing" != "no"; then
7699 echo "CONFIG_FUZZ=y" >> $config_host_mak
7700 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7701 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7702fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007703
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007704if test "$edk2_blobs" = "yes" ; then
7705 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7706fi
7707
Peter Maydell6efd7512011-11-30 11:59:04 +00007708# use included Linux headers
7709if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007710 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007711 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007712 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007713 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007714 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007715 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007716 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007717 ;;
7718 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007719 linux_arch=s390
7720 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007721 aarch64)
7722 linux_arch=arm64
7723 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007724 mips64)
7725 linux_arch=mips
7726 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007727 *)
7728 # For most CPUs the kernel architecture name and QEMU CPU name match.
7729 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007730 ;;
7731 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007732 # For non-KVM architectures we will not have asm headers
7733 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7734 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7735 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007736fi
7737
bellard1d14ffa2005-10-30 18:58:22 +00007738for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007739target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007740config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007741target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007742target_aligned_only="no"
7743case "$target_name" in
7744 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7745 target_aligned_only="yes"
7746 ;;
7747esac
bellard97a847b2003-08-10 21:36:04 +00007748target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007749case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007750 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 +00007751 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007752 ;;
7753esac
bellard97a847b2003-08-10 21:36:04 +00007754target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007755target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007756target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007757target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007758case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007759 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007760 target_softmmu="yes"
7761 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007762 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007763 target_user_only="yes"
7764 target_linux_user="yes"
7765 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007766 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007767 target_user_only="yes"
7768 target_bsd_user="yes"
7769 ;;
pbrook9e407a82007-05-26 16:38:53 +00007770 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007771 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007772 exit 1
7773 ;;
7774esac
ths831b7822007-01-18 20:06:33 +00007775
bellard97a847b2003-08-10 21:36:04 +00007776mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007777echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007778
pbrooke5fe0c52006-06-11 13:32:59 +00007779bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007780mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007781interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007782gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007783
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007784TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007785TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007786TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007787
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007788case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007789 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007790 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307791 gdb_xml_files="i386-32bit.xml"
Laurent Vivier28988112020-03-10 11:33:56 +01007792 TARGET_SYSTBL_ABI=i386
aurel322408a522008-04-20 20:19:44 +00007793 ;;
7794 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007795 TARGET_BASE_ARCH=i386
Laurent Vivier8d62f352020-03-10 11:33:57 +01007796 TARGET_SYSTBL_ABI=common,64
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007797 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307798 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007799 ;;
7800 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007801 mttcg="yes"
Laurent Vivier6116aea2020-03-10 11:33:44 +01007802 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007803 ;;
7804 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007805 TARGET_ARCH=arm
Laurent Vivier5bcb4982020-03-10 11:33:50 +01007806 TARGET_SYSTBL_ABI=common,oabi
aurel322408a522008-04-20 20:19:44 +00007807 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007808 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007809 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007810 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007811 aarch64|aarch64_be)
7812 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007813 TARGET_BASE_ARCH=arm
7814 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007815 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007816 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 +01007817 ;;
aurel322408a522008-04-20 20:19:44 +00007818 cris)
aurel322408a522008-04-20 20:19:44 +00007819 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007820 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007821 mttcg="yes"
Laurent Vivier9566f4c2020-03-10 11:33:45 +01007822 TARGET_SYSTBL_ABI=common,32
Richard Henderson61766fe2016-12-15 11:26:14 -08007823 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007824 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007825 ;;
aurel322408a522008-04-20 20:19:44 +00007826 m68k)
aurel322408a522008-04-20 20:19:44 +00007827 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007828 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Laurent Vivier5b85cae2020-03-10 11:33:46 +01007829 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007830 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007831 microblaze|microblazeel)
7832 TARGET_ARCH=microblaze
Laurent Vivierddf0c4c2020-03-10 11:33:49 +01007833 TARGET_SYSTBL_ABI=common
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007834 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007835 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007836 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007837 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007838 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007839 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007840 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
Laurent Vivierc59716f2020-03-10 11:33:58 +01007841 TARGET_SYSTBL_ABI=o32
aurel322408a522008-04-20 20:19:44 +00007842 ;;
7843 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007844 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007845 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007846 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007847 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007848 echo "TARGET_ABI32=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007849 TARGET_SYSTBL_ABI=n32
aurel322408a522008-04-20 20:19:44 +00007850 ;;
7851 mips64|mips64el)
Alex Bennéea092a952020-03-23 16:15:09 +00007852 mttcg="no"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007853 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007854 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007855 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007856 TARGET_SYSTBL_ABI=n64
aurel322408a522008-04-20 20:19:44 +00007857 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007858 moxie)
7859 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007860 nios2)
7861 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007862 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007863 TARGET_ARCH=openrisc
7864 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007865 ;;
aurel322408a522008-04-20 20:19:44 +00007866 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007867 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Laurent Vivier76a691f2020-03-10 11:33:51 +01007868 TARGET_SYSTBL_ABI=common,nospu,32
aurel322408a522008-04-20 20:19:44 +00007869 ;;
aurel322408a522008-04-20 20:19:44 +00007870 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007871 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007872 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007873 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307874 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007875 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007876 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007877 ppc64le)
7878 TARGET_ARCH=ppc64
7879 TARGET_BASE_ARCH=ppc
7880 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007881 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307882 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007883 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 -05007884 ;;
aurel322408a522008-04-20 20:19:44 +00007885 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007886 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007887 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007888 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007889 TARGET_SYSTBL_ABI=common,nospu,32
Juan Quintela25be2102009-10-07 02:41:00 +02007890 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007891 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007892 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007893 riscv32)
7894 TARGET_BASE_ARCH=riscv
7895 TARGET_ABI_DIR=riscv
7896 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007897 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 +13007898 ;;
7899 riscv64)
7900 TARGET_BASE_ARCH=riscv
7901 TARGET_ABI_DIR=riscv
7902 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007903 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 +13007904 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08007905 rx)
7906 TARGET_ARCH=rx
7907 bflt="yes"
7908 target_compiler=$cross_cc_rx
7909 gdb_xml_files="rx-core.xml"
7910 ;;
aurel322408a522008-04-20 20:19:44 +00007911 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007912 TARGET_ARCH=sh4
Laurent Vivierd0c832f2020-03-10 11:33:48 +01007913 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007914 bflt="yes"
7915 ;;
7916 sparc)
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007917 TARGET_SYSTBL_ABI=common,32
aurel322408a522008-04-20 20:19:44 +00007918 ;;
7919 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007920 TARGET_BASE_ARCH=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007921 TARGET_SYSTBL_ABI=common,64
aurel322408a522008-04-20 20:19:44 +00007922 ;;
7923 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007924 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007925 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007926 TARGET_ABI_DIR=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007927 TARGET_SYSTBL_ABI=common,32
Juan Quintela25be2102009-10-07 02:41:00 +02007928 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007929 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007930 s390x)
Laurent Vivier318f3712020-03-10 11:33:53 +01007931 TARGET_SYSTBL_ABI=common,64
David Hildenbrand63685bc2018-01-29 13:56:20 +01007932 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007933 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 +01007934 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007935 tilegx)
7936 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007937 tricore)
7938 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007939 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007940 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007941 xtensa|xtensaeb)
7942 TARGET_ARCH=xtensa
Laurent Viviera4a93592020-03-10 11:33:47 +01007943 TARGET_SYSTBL_ABI=common
Max Filippov02e33e92018-10-19 18:40:20 -07007944 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007945 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007946 ;;
aurel322408a522008-04-20 20:19:44 +00007947 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007948 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007949 ;;
7950esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007951# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7952if [ "$TARGET_BASE_ARCH" = "" ]; then
7953 TARGET_BASE_ARCH=$TARGET_ARCH
7954fi
7955
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007956symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7957
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007958upper() {
7959 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7960}
7961
Stefan Weil89138852016-05-16 15:10:20 +02007962target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007963echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007964echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007965echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007966if [ "$TARGET_ABI_DIR" = "" ]; then
7967 TARGET_ABI_DIR=$TARGET_ARCH
7968fi
Juan Quintela25be2102009-10-07 02:41:00 +02007969echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007970if [ "$HOST_VARIANT_DIR" != "" ]; then
7971 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7972fi
Laurent Vivier4d6a8352020-03-10 11:33:43 +01007973if [ "$TARGET_SYSTBL_ABI" != "" ]; then
7974 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
7975fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007976
7977if supported_xen_target $target; then
7978 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007979 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007980 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007981 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007982 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007983else
7984 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007985fi
7986if supported_kvm_target $target; then
7987 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007988 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7989else
7990 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007991fi
7992if supported_hax_target $target; then
7993 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007994fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007995if supported_hvf_target $target; then
7996 echo "CONFIG_HVF=y" >> $config_target_mak
7997fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007998if supported_whpx_target $target; then
7999 echo "CONFIG_WHPX=y" >> $config_target_mak
8000fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00008001if test "$target_aligned_only" = "yes" ; then
8002 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8003fi
bellardde83cd02003-06-15 20:25:43 +00008004if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008005 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00008006fi
8007if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008008 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00008009 if test "$mttcg" = "yes" ; then
8010 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8011 fi
bellardde83cd02003-06-15 20:25:43 +00008012fi
bellard997344f2003-10-27 21:10:39 +00008013if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008014 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01008015 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00008016fi
ths831b7822007-01-18 20:06:33 +00008017if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008018 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00008019fi
pbrook56aebc82008-10-11 17:55:29 +00008020list=""
8021if test ! -z "$gdb_xml_files" ; then
8022 for x in $gdb_xml_files; do
8023 list="$list $source_path/gdb-xml/$x"
8024 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02008025 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00008026fi
bellardde83cd02003-06-15 20:25:43 +00008027
Eric Blakee633a5c2019-02-04 20:39:37 -06008028if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02008029 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008030fi
blueswir184778502008-10-26 20:33:16 +00008031if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008032 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008033fi
bellard5b0753e2005-03-01 21:37:28 +00008034
Alex Bennée716a5072018-04-10 12:19:40 +01008035
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008036# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008037
Juan Quintela4afddb52009-08-03 14:46:45 +02008038cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008039ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008040
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008041disas_config() {
8042 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8043 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8044}
8045
Juan Quintela64656022009-08-03 14:46:53 +02008046for i in $ARCH $TARGET_BASE_ARCH ; do
8047 case "$i" in
8048 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008049 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008050 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008051 aarch64)
8052 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008053 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008054 fi
8055 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008056 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008057 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008058 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008059 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008060 fi
Juan Quintela64656022009-08-03 14:46:53 +02008061 ;;
8062 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008063 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008064 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008065 hppa)
8066 disas_config "HPPA"
8067 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008068 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008069 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008070 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008071 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008072 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008073 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008074 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008075 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008076 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008077 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008078 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008079 ;;
8080 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008081 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008082 if test -n "${cxx}"; then
8083 disas_config "NANOMIPS"
8084 fi
Juan Quintela64656022009-08-03 14:46:53 +02008085 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008086 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008087 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008088 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008089 nios2)
8090 disas_config "NIOS2"
8091 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008092 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008093 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008094 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008095 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008096 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008097 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008098 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008099 disas_config "RISCV"
8100 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08008101 rx)
8102 disas_config "RX"
8103 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008104 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008105 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008106 ;;
8107 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008108 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008109 ;;
8110 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008111 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008112 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008113 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008114 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008115 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008116 esac
8117done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008118if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008119 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008120fi
Juan Quintela64656022009-08-03 14:46:53 +02008121
Juan Quintela6ee71262009-08-03 14:46:47 +02008122case "$ARCH" in
8123alpha)
8124 # Ensure there's only a single GP
8125 cflags="-msmall-data $cflags"
8126;;
8127esac
8128
Juan Quintelad02c1db2009-08-03 14:46:50 +02008129if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008130 if test "$target_linux_user" = "yes" ; then
8131 cflags="-p $cflags"
8132 ldflags="-p $ldflags"
8133 fi
8134 if test "$target_softmmu" = "yes" ; then
8135 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02008136 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008137 fi
8138fi
8139
Christian Borntraegere9a35912017-08-23 12:16:23 +02008140# Newer kernels on s390 check for an S390_PGSTE program header and
8141# enable the pgste page table extensions in that case. This makes
8142# the vm.allocate_pgste sysctl unnecessary. We enable this program
8143# header if
8144# - we build on s390x
8145# - we build the system emulation for s390x (qemu-system-s390x)
8146# - KVM is enabled
8147# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008148if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8149 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008150 if ld_has --s390-pgste ; then
8151 ldflags="-Wl,--s390-pgste $ldflags"
8152 fi
8153fi
8154
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008155echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02008156echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008157
bellard97a847b2003-08-10 21:36:04 +00008158done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008159
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008160echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8161echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8162
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008163if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008164 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008165fi
Richard Hendersone219c492017-09-28 09:01:23 -07008166if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008167 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008168fi
8169if test -n "$LIBCAPSTONE"; then
8170 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8171fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008172
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008173if test "$numa" = "yes"; then
8174 echo "CONFIG_NUMA=y" >> $config_host_mak
8175fi
8176
John Snowfd0e6052015-03-25 18:57:39 -04008177if test "$ccache_cpp2" = "yes"; then
8178 echo "export CCACHE_CPP2=y" >> $config_host_mak
8179fi
8180
Peter Maydelle29e5c62018-11-02 11:52:38 +00008181# If we're using a separate build tree, set it up now.
8182# DIRS are directories which we simply mkdir in the build tree;
8183# LINKS are things to symlink back into the source tree
8184# (these can be both files and directories).
8185# Caution: do not add files or directories here using wildcards. This
8186# will result in problems later if a new file matching the wildcard is
8187# added to the source tree -- nothing will cause configure to be rerun
8188# so the build tree will be missing the link back to the new file, and
8189# tests might fail. Prefer to keep the relevant files in their own
8190# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008191DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8192DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008193DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008194DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008195DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008196LINKS="Makefile"
8197LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8198LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008199LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008200LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008201LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8202LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8203LINKS="$LINKS pc-bios/qemu-icon.bmp"
8204LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008205LINKS="$LINKS tests/acceptance tests/data"
8206LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008207LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008208for bios_file in \
8209 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008210 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008211 $source_path/pc-bios/*.rom \
8212 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008213 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008214 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008215 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008216 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008217 $source_path/pc-bios/palcode-*
8218do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008219 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008220done
8221mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008222for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008223 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008224 symlink "$source_path/$f" "$f"
8225 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008226done
Paul Brook1ad21342009-05-19 16:17:58 +01008227
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008228(for i in $cross_cc_vars; do
8229 export $i
8230done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008231export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008232$source_path/tests/tcg/configure.sh)
8233
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008234# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008235for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008236 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008237 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008238 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008239 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008240 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008241 echo "CC=$cc" >> $config_mak
8242 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008243 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008244 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008245 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008246 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008247 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008248done
8249
Max Reitz76c75602014-05-24 23:24:56 +02008250# set up qemu-iotests in this build directory
8251iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008252
8253echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8254echo >> "$iotests_common_env"
8255echo "export PYTHON='$python'" >> "$iotests_common_env"
8256
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008257# Save the configure command line for later reuse.
8258cat <<EOD >config.status
8259#!/bin/sh
8260# Generated by configure.
8261# Run this file to recreate the current configuration.
8262# Compiler output produced by configure, useful for debugging
8263# configure, is in config.log if it exists.
8264EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008265
8266preserve_env() {
8267 envname=$1
8268
8269 eval envval=\$$envname
8270
8271 if test -n "$envval"
8272 then
8273 echo "$envname='$envval'" >> config.status
8274 echo "export $envname" >> config.status
8275 else
8276 echo "unset $envname" >> config.status
8277 fi
8278}
8279
8280# Preserve various env variables that influence what
8281# features/build target configure will detect
8282preserve_env AR
8283preserve_env AS
8284preserve_env CC
8285preserve_env CPP
8286preserve_env CXX
8287preserve_env INSTALL
8288preserve_env LD
8289preserve_env LD_LIBRARY_PATH
8290preserve_env LIBTOOL
8291preserve_env MAKE
8292preserve_env NM
8293preserve_env OBJCOPY
8294preserve_env PATH
8295preserve_env PKG_CONFIG
8296preserve_env PKG_CONFIG_LIBDIR
8297preserve_env PKG_CONFIG_PATH
8298preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008299preserve_env SDL2_CONFIG
8300preserve_env SMBD
8301preserve_env STRIP
8302preserve_env WINDRES
8303
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008304printf "exec" >>config.status
8305printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008306echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008307chmod +x config.status
8308
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008309rm -r "$TMPDIR1"