blob: 1e622f5acb2eb9ba45e97dd3c882933e429f5524 [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"
bellard67b915a2004-03-31 23:37:16 +0000810;;
ths5c40d2b2007-06-23 16:03:36 +0000811GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100812 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100813 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200814 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000815;;
bellard7d3505c2004-05-12 19:32:15 +0000816FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200817 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100818 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100819 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200820 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100821 # needed for kinfo_getvmmap(3) in libutil.h
822 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500823 # needed for kinfo_getproc
824 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100825 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700826 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000827 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000828;;
blueswir1c5e97232009-03-07 20:06:23 +0000829DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200830 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100831 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100832 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200833 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700834 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000835;;
bellard7d3505c2004-05-12 19:32:15 +0000836NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200837 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100838 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100839 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100840 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200841 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200842 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700843 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200844 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000845;;
846OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200847 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100848 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100849 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200850 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700851 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500852 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000853;;
bellard83fb7ad2004-07-05 21:25:26 +0000854Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200855 bsd="yes"
856 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100857 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500858 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800859 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200860 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200861 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100862 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200863 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200864 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100865 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200866 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100867 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200868 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100869 # Disable attempts to use ObjectiveC features in os/object.h since they
870 # won't work when we're compiling with gcc as a C compiler.
871 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700872 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000873 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000874;;
bellardec530c82006-04-25 22:36:06 +0000875SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200876 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100877 make="${MAKE-gmake}"
878 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400879 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200880 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100881 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200882 fi
883 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000884# needed for CMSG_ macros in sys/socket.h
885 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
886# needed for TIOCWIN* defines in termios.h
887 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200888 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200889 solarisnetlibs="-lsocket -lnsl -lresolv"
890 LIBS="$solarisnetlibs $LIBS"
891 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000892;;
Andreas Färber179cf402010-09-20 00:50:43 +0200893Haiku)
894 haiku="yes"
895 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
896 LIBS="-lposix_error_mapper -lnetwork $LIBS"
897;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000898Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100899 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200900 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200901 linux="yes"
902 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200903 kvm="yes"
Eduardo Habkost67cf3f52020-03-11 19:23:41 -0400904 QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000905 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200906 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000907;;
bellard7d132992003-03-06 23:23:54 +0000908esac
909
bellard7d3505c2004-05-12 19:32:15 +0000910if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000911 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200912 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000913 fi
bellard7d3505c2004-05-12 19:32:15 +0000914fi
915
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100916: ${make=${MAKE-make}}
917: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000918# We prefer python 3.x. A bare 'python' is traditionally
919# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300920# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000921python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300922for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000923do
924 if has "$binary"
925 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200926 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000927 break
928 fi
929done
Markus Armbruster903458c2020-02-14 18:18:41 +0100930
931sphinx_build=
932for binary in sphinx-build-3 sphinx-build
933do
934 if has "$binary"
935 then
936 sphinx_build=$(command -v "$binary")
937 break
938 fi
939done
940
Alex Bennée39d87c82020-03-03 15:06:20 +0000941# Check for ancillary tools used in testing
942genisoimage=
943for binary in genisoimage
944do
945 if has $binary
946 then
947 genisoimage=$(command -v "$binary")
948 break
949 fi
950done
951
Brade2d88302011-09-02 16:53:28 -0400952: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100953
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100954# Default objcc to clang if available, otherwise use CC
955if has clang; then
956 objcc=clang
957else
958 objcc="$cc"
959fi
960
Juan Quintela3457a3f2009-08-03 14:46:07 +0200961if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200962 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800963 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100964 # MinGW needs -mthreads for TLS and macro _MT.
965 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100966 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400967 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100968 if compile_prog "" "-liberty" ; then
969 LIBS="-liberty $LIBS"
970 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200971 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200972 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300973 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300974 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200975 bindir="\${prefix}"
976 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200977 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200978 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300979 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200980fi
981
Anthony Liguori487fefd2009-06-11 13:28:25 -0500982werror=""
bellard85aa5182007-11-11 20:17:03 +0000983
bellard7d132992003-03-06 23:23:54 +0000984for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200985 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000986 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000987 --help|-h) show_help=yes
988 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400989 --version|-V) exec cat $source_path/VERSION
990 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000991 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000992 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000993 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000994 ;;
aliguoriac0df512008-12-29 17:14:15 +0000995 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000996 ;;
aliguoriac0df512008-12-29 17:14:15 +0000997 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000998 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000999 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +00001000 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04001001 --cxx=*)
1002 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +02001003 --iasl=*) iasl="$optarg"
1004 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +01001005 --objcc=*) objcc="$optarg"
1006 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001007 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +00001008 ;;
pbrook6a882642006-04-17 13:57:12 +00001009 --install=*) install="$optarg"
1010 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +00001011 --python=*) python="$optarg"
1012 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001013 --sphinx-build=*) sphinx_build="$optarg"
1014 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001015 --gcov=*) gcov_tool="$optarg"
1016 ;;
Brade2d88302011-09-02 16:53:28 -04001017 --smbd=*) smbd="$optarg"
1018 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001019 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001020 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001021 --extra-cxxflags=*)
1022 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001023 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001024 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001025 --enable-debug-info)
1026 ;;
1027 --disable-debug-info)
1028 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001029 --cross-cc-*)
1030 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001031 --enable-modules)
1032 modules="yes"
1033 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001034 --disable-modules)
1035 modules="no"
1036 ;;
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01001037 --disable-module-upgrades) module_upgrades="no"
1038 ;;
1039 --enable-module-upgrades) module_upgrades="yes"
1040 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001041 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001042 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001043 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001044 if test "$target_list_exclude"; then
1045 error_exit "Can't mix --target-list with --target-list-exclude"
1046 fi
1047 ;;
1048 --target-list-exclude=*) target_list_exclude="$optarg"
1049 if test "$target_list"; then
1050 error_exit "Can't mix --target-list-exclude with --target-list"
1051 fi
bellardde83cd02003-06-15 20:25:43 +00001052 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001053 --enable-trace-backends=*) trace_backends="$optarg"
1054 ;;
1055 # XXX: backwards compatibility
1056 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001057 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001058 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001059 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001060 --with-default-devices) default_devices="yes"
1061 ;;
1062 --without-default-devices) default_devices="no"
1063 ;;
bellard7d132992003-03-06 23:23:54 +00001064 --enable-gprof) gprof="yes"
1065 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001066 --enable-gcov) gcov="yes"
1067 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001068 --static)
1069 static="yes"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001070 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
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 +02002092 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002093 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002094 else
2095 pie="no"
2096 fi
2097fi
2098
Emilio G. Cota768b7852015-04-29 13:09:02 +02002099# Unconditional check for compiler __thread support
2100 cat > $TMPC << EOF
2101static __thread int tls_var;
2102int main(void) { return tls_var; }
2103EOF
2104
2105if ! compile_prog "-Werror" "" ; then
2106 error_exit "Your compiler does not support the __thread specifier for " \
2107 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2108fi
2109
Richard Hendersonb2634122019-12-17 13:54:56 -10002110cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002111
2112#ifdef __linux__
2113# define THREAD __thread
2114#else
2115# define THREAD
2116#endif
Avi Kivity21d4a792011-11-23 11:24:25 +02002117static THREAD int tls_var;
Avi Kivity21d4a792011-11-23 11:24:25 +02002118int main(void) { return tls_var; }
Avi Kivity40d64442011-11-15 20:12:17 +02002119EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002120
Richard Hendersonb2634122019-12-17 13:54:56 -10002121# Check we support --no-pie first; we will need this for building ROMs.
2122if compile_prog "-Werror -fno-pie" "-no-pie"; then
2123 CFLAGS_NOPIE="-fno-pie"
2124 LDFLAGS_NOPIE="-no-pie"
2125fi
2126
2127if test "$pie" != "no" ; then
Avi Kivity40d64442011-11-15 20:12:17 +02002128 if compile_prog "-fPIE -DPIE" "-pie"; then
2129 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002130 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002131 pie="yes"
Avi Kivity40d64442011-11-15 20:12:17 +02002132 else
2133 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002134 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002135 else
2136 echo "Disabling PIE due to missing toolchain support"
2137 pie="no"
2138 fi
2139 fi
2140fi
2141
Richard Hendersone6cbd752019-12-17 14:00:39 -10002142# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2143# The combination is known as "full relro", because .got.plt is read-only too.
2144if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2145 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2146fi
2147
Paolo Bonzini09dada42013-04-17 16:26:47 +02002148##########################################
2149# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2150# use i686 as default anyway, but for those that don't, an explicit
2151# specification is necessary
2152
2153if test "$cpu" = "i386"; then
2154 cat > $TMPC << EOF
2155static int sfaa(int *ptr)
2156{
2157 return __sync_fetch_and_and(ptr, 0);
2158}
2159
2160int main(void)
2161{
2162 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002163 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002164 sfaa(&val);
2165 return val;
2166}
2167EOF
2168 if ! compile_prog "" "" ; then
2169 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2170 fi
2171fi
2172
2173#########################################
bellardec530c82006-04-25 22:36:06 +00002174# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002175
bellardec530c82006-04-25 22:36:06 +00002176if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002177 if has $install; then
2178 :
2179 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002180 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2181 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2182 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002183 fi
Stefan Weil89138852016-05-16 15:10:20 +02002184 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002185 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2186 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2187 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002188 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002189 if has ar; then
2190 :
2191 else
bellardec530c82006-04-25 22:36:06 +00002192 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002193 error_exit "No path includes ar" \
2194 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002195 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002196 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002197 fi
ths5fafdf22007-09-16 21:08:06 +00002198fi
bellardec530c82006-04-25 22:36:06 +00002199
Stefan Weilafb63eb2012-09-26 22:04:38 +02002200if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002201 for target in $default_target_list; do
2202 supported_target $target 2>/dev/null && \
2203 target_list="$target_list $target"
2204 done
2205 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002206else
Stefan Weil89138852016-05-16 15:10:20 +02002207 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002208 for target in $target_list; do
2209 # Check that we recognised the target name; this allows a more
2210 # friendly error message than if we let it fall through.
2211 case " $default_target_list " in
2212 *" $target "*)
2213 ;;
2214 *)
2215 error_exit "Unknown target name '$target'"
2216 ;;
2217 esac
2218 supported_target $target || exit 1
2219 done
bellard5327cf42005-01-10 23:18:50 +00002220fi
Peter Maydell25b48332013-05-20 16:16:16 +01002221
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002222# see if system emulation was really requested
2223case " $target_list " in
2224 *"-softmmu "*) softmmu=yes
2225 ;;
2226 *) softmmu=no
2227 ;;
2228esac
bellard5327cf42005-01-10 23:18:50 +00002229
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002230for target in $target_list; do
2231 case "$target" in
2232 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2233 edk2_blobs="yes"
2234 ;;
2235 esac
2236done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002237# The EDK2 binaries are compressed with bzip2
2238if test "$edk2_blobs" = "yes" && ! has bzip2; then
2239 error_exit "The bzip2 program is required for building QEMU"
2240fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002241
Juan Quintela249247c2009-08-12 18:20:25 +02002242feature_not_found() {
2243 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002244 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002245
Peter Maydell76ad07a2013-04-08 12:11:26 +01002246 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002247 "configure was not able to find it." \
2248 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002249}
2250
bellard7d132992003-03-06 23:23:54 +00002251# ---
2252# big/little endian test
2253cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002254short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2255short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2256extern int foo(short *, short *);
2257int main(int argc, char *argv[]) {
2258 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002259}
2260EOF
2261
Mike Frysinger61cc9192013-06-30 23:30:18 -04002262if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002263 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002264 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002265 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002266 bigendian="no"
2267 else
2268 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002269 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002270else
2271 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002272fi
2273
Juan Quintelab0a47e72009-08-12 18:29:49 +02002274##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002275# system tools
2276if test -z "$want_tools"; then
2277 if test "$softmmu" = "no"; then
2278 want_tools=no
2279 else
2280 want_tools=yes
2281 fi
2282fi
2283
2284##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002285# cocoa implies not SDL or GTK
2286# (the cocoa UI code currently assumes it is always the active UI
2287# and doesn't interact well with other UI frontend code)
2288if test "$cocoa" = "yes"; then
2289 if test "$sdl" = "yes"; then
2290 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2291 fi
2292 if test "$gtk" = "yes"; then
2293 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2294 fi
2295 gtk=no
2296 sdl=no
2297fi
2298
Eric Blake6b39b062016-10-11 10:46:23 -05002299# Some versions of Mac OS X incorrectly define SIZE_MAX
2300cat > $TMPC << EOF
2301#include <stdint.h>
2302#include <stdio.h>
2303int main(int argc, char *argv[]) {
2304 return printf("%zu", SIZE_MAX);
2305}
2306EOF
2307have_broken_size_max=no
2308if ! compile_object -Werror ; then
2309 have_broken_size_max=yes
2310fi
2311
Peter Maydella30878e2015-08-14 16:10:52 +01002312##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002313# L2TPV3 probe
2314
2315cat > $TMPC <<EOF
2316#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002317#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002318int main(void) { return sizeof(struct mmsghdr); }
2319EOF
2320if compile_prog "" "" ; then
2321 l2tpv3=yes
2322else
2323 l2tpv3=no
2324fi
2325
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002326#########################################
2327# vhost interdependencies and host support
2328
2329# vhost backends
2330test "$vhost_user" = "" && vhost_user=yes
2331if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2332 error_exit "vhost-user isn't available on win32"
2333fi
2334test "$vhost_kernel" = "" && vhost_kernel=$linux
2335if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2336 error_exit "vhost-kernel is only available on Linux"
2337fi
2338
2339# vhost-kernel devices
2340test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2341if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2342 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2343fi
2344test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2345if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2346 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2347fi
2348
2349# vhost-user backends
2350test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2351if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2352 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2353fi
2354test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2355if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2356 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2357fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002358test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2359if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2360 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2361fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002362
2363# OR the vhost-kernel and vhost-user values for simplicity
2364if test "$vhost_net" = ""; then
2365 test "$vhost_net_user" = "yes" && vhost_net=yes
2366 test "$vhost_kernel" = "yes" && vhost_net=yes
2367fi
2368
Gonglei015a33b2014-07-01 20:58:08 +08002369##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002370# MinGW / Mingw-w64 localtime_r/gmtime_r check
2371
2372if test "$mingw32" = "yes"; then
2373 # Some versions of MinGW / Mingw-w64 lack localtime_r
2374 # and gmtime_r entirely.
2375 #
2376 # Some versions of Mingw-w64 define a macro for
2377 # localtime_r/gmtime_r.
2378 #
2379 # Some versions of Mingw-w64 will define functions
2380 # for localtime_r/gmtime_r, but only if you have
2381 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2382 # though, unistd.h and pthread.h both define
2383 # that for you.
2384 #
2385 # So this #undef localtime_r and #include <unistd.h>
2386 # are not in fact redundant.
2387cat > $TMPC << EOF
2388#include <unistd.h>
2389#include <time.h>
2390#undef localtime_r
2391int main(void) { localtime_r(NULL, NULL); return 0; }
2392EOF
2393 if compile_prog "" "" ; then
2394 localtime_r="yes"
2395 else
2396 localtime_r="no"
2397 fi
2398fi
2399
2400##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002401# pkg-config probe
2402
2403if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002404 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002405fi
2406
2407##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002408# NPTL probe
2409
Peter Maydell24cb36a2013-07-16 18:45:00 +01002410if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002411 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002412#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002413#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002414int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002415#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2416#error bork
2417#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002418 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002419}
2420EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002421 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002422 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002423 fi
pbrookbd0c5662008-05-29 14:34:11 +00002424fi
2425
balrogac629222008-10-11 09:56:04 +00002426##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002427# lzo check
2428
2429if test "$lzo" != "no" ; then
2430 cat > $TMPC << EOF
2431#include <lzo/lzo1x.h>
2432int main(void) { lzo_version(); return 0; }
2433EOF
2434 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002435 libs_softmmu="$libs_softmmu -llzo2"
2436 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002437 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002438 if test "$lzo" = "yes"; then
2439 feature_not_found "liblzo2" "Install liblzo2 devel"
2440 fi
2441 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002442 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002443fi
2444
2445##########################################
2446# snappy check
2447
2448if test "$snappy" != "no" ; then
2449 cat > $TMPC << EOF
2450#include <snappy-c.h>
2451int main(void) { snappy_max_compressed_length(4096); return 0; }
2452EOF
2453 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002454 libs_softmmu="$libs_softmmu -lsnappy"
2455 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002456 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002457 if test "$snappy" = "yes"; then
2458 feature_not_found "libsnappy" "Install libsnappy devel"
2459 fi
2460 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002461 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002462fi
2463
2464##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002465# bzip2 check
2466
2467if test "$bzip2" != "no" ; then
2468 cat > $TMPC << EOF
2469#include <bzlib.h>
2470int main(void) { BZ2_bzlibVersion(); return 0; }
2471EOF
2472 if compile_prog "" "-lbz2" ; then
2473 bzip2="yes"
2474 else
2475 if test "$bzip2" = "yes"; then
2476 feature_not_found "libbzip2" "Install libbzip2 devel"
2477 fi
2478 bzip2="no"
2479 fi
2480fi
2481
2482##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002483# lzfse check
2484
2485if test "$lzfse" != "no" ; then
2486 cat > $TMPC << EOF
2487#include <lzfse.h>
2488int main(void) { lzfse_decode_scratch_size(); return 0; }
2489EOF
2490 if compile_prog "" "-llzfse" ; then
2491 lzfse="yes"
2492 else
2493 if test "$lzfse" = "yes"; then
2494 feature_not_found "lzfse" "Install lzfse devel"
2495 fi
2496 lzfse="no"
2497 fi
2498fi
2499
2500##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002501# zstd check
2502
2503if test "$zstd" != "no" ; then
Juan Quintela297254c2020-03-10 12:14:31 +01002504 libzstd_minver="1.4.0"
2505 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
Juan Quintela3a678482019-12-17 21:15:24 +01002506 zstd_cflags="$($pkg_config --cflags libzstd)"
2507 zstd_libs="$($pkg_config --libs libzstd)"
2508 LIBS="$zstd_libs $LIBS"
2509 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2510 zstd="yes"
2511 else
2512 if test "$zstd" = "yes" ; then
2513 feature_not_found "libzstd" "Install libzstd devel"
2514 fi
2515 zstd="no"
2516 fi
2517fi
2518
2519##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002520# libseccomp check
2521
2522if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002523 libseccomp_minver="2.3.0"
2524 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002525 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2526 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002527 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002528 else
Andrew Jones693e5912015-09-30 11:59:18 -04002529 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002530 feature_not_found "libseccomp" \
2531 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002532 fi
2533 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002534 fi
2535fi
2536##########################################
aliguorie37630c2009-04-22 15:19:10 +00002537# xen probe
2538
Juan Quintelafc321b42009-08-12 18:29:55 +02002539if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002540 # Check whether Xen library path is specified via --extra-ldflags to avoid
2541 # overriding this setting with pkg-config output. If not, try pkg-config
2542 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002543
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002544 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2545 $pkg_config --exists xencontrol ; then
2546 xen_ctrl_version="$(printf '%d%02d%02d' \
2547 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2548 xen=yes
2549 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2550 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002551 if $pkg_config --exists xentoolcore; then
2552 xen_pc="$xen_pc xentoolcore"
2553 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002554 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2555 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002556 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002557
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002558 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002559 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002560
2561 # First we test whether Xen headers and libraries are available.
2562 # If no, we are done and there is no Xen support.
2563 # If yes, more tests are run to detect the Xen version.
2564
2565 # Xen (any)
2566 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002567#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002568int main(void) {
2569 return 0;
2570}
2571EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002572 if ! compile_prog "" "$xen_libs" ; then
2573 # Xen not found
2574 if test "$xen" = "yes" ; then
2575 feature_not_found "xen" "Install xen devel"
2576 fi
2577 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002578
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002579 # Xen unstable
2580 elif
2581 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002582#undef XC_WANT_COMPAT_DEVICEMODEL_API
2583#define __XEN_TOOLS__
2584#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002585#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002586int main(void) {
2587 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002588 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002589
2590 xd = xendevicemodel_open(0, 0);
2591 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2592
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002593 xfmem = xenforeignmemory_open(0, 0);
2594 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2595
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002596 return 0;
2597}
2598EOF
2599 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2600 then
2601 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2602 xen_ctrl_version=41100
2603 xen=yes
2604 elif
2605 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002606#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2607#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002608#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002609int main(void) {
2610 xenforeignmemory_handle *xfmem;
2611
2612 xfmem = xenforeignmemory_open(0, 0);
2613 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002614 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002615
2616 return 0;
2617}
2618EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002619 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002620 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002621 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002622 xen_ctrl_version=41000
2623 xen=yes
2624 elif
2625 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002626#undef XC_WANT_COMPAT_DEVICEMODEL_API
2627#define __XEN_TOOLS__
2628#include <xendevicemodel.h>
2629int main(void) {
2630 xendevicemodel_handle *xd;
2631
2632 xd = xendevicemodel_open(0, 0);
2633 xendevicemodel_close(xd);
2634
2635 return 0;
2636}
2637EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002638 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2639 then
2640 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2641 xen_ctrl_version=40900
2642 xen=yes
2643 elif
2644 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002645/*
2646 * If we have stable libs the we don't want the libxc compat
2647 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002648 *
2649 * Also, check if xengnttab_grant_copy_segment_t is defined and
2650 * grant copy operation is implemented.
2651 */
2652#undef XC_WANT_COMPAT_EVTCHN_API
2653#undef XC_WANT_COMPAT_GNTTAB_API
2654#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2655#include <xenctrl.h>
2656#include <xenstore.h>
2657#include <xenevtchn.h>
2658#include <xengnttab.h>
2659#include <xenforeignmemory.h>
2660#include <stdint.h>
2661#include <xen/hvm/hvm_info_table.h>
2662#if !defined(HVM_MAX_VCPUS)
2663# error HVM_MAX_VCPUS not defined
2664#endif
2665int main(void) {
2666 xc_interface *xc = NULL;
2667 xenforeignmemory_handle *xfmem;
2668 xenevtchn_handle *xe;
2669 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002670 xengnttab_grant_copy_segment_t* seg = NULL;
2671
2672 xs_daemon_open();
2673
2674 xc = xc_interface_open(0, 0, 0);
2675 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2676 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2677 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2678 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002679
2680 xfmem = xenforeignmemory_open(0, 0);
2681 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2682
2683 xe = xenevtchn_open(0, 0);
2684 xenevtchn_fd(xe);
2685
2686 xg = xengnttab_open(0, 0);
2687 xengnttab_grant_copy(xg, 0, seg);
2688
2689 return 0;
2690}
2691EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002692 compile_prog "" "$xen_libs $xen_stable_libs"
2693 then
2694 xen_ctrl_version=40800
2695 xen=yes
2696 elif
2697 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002698/*
2699 * If we have stable libs the we don't want the libxc compat
2700 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002701 */
2702#undef XC_WANT_COMPAT_EVTCHN_API
2703#undef XC_WANT_COMPAT_GNTTAB_API
2704#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2705#include <xenctrl.h>
2706#include <xenstore.h>
2707#include <xenevtchn.h>
2708#include <xengnttab.h>
2709#include <xenforeignmemory.h>
2710#include <stdint.h>
2711#include <xen/hvm/hvm_info_table.h>
2712#if !defined(HVM_MAX_VCPUS)
2713# error HVM_MAX_VCPUS not defined
2714#endif
2715int main(void) {
2716 xc_interface *xc = NULL;
2717 xenforeignmemory_handle *xfmem;
2718 xenevtchn_handle *xe;
2719 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002720
2721 xs_daemon_open();
2722
2723 xc = xc_interface_open(0, 0, 0);
2724 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2725 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2726 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2727 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002728
2729 xfmem = xenforeignmemory_open(0, 0);
2730 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2731
2732 xe = xenevtchn_open(0, 0);
2733 xenevtchn_fd(xe);
2734
2735 xg = xengnttab_open(0, 0);
2736 xengnttab_map_grant_ref(xg, 0, 0, 0);
2737
2738 return 0;
2739}
2740EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002741 compile_prog "" "$xen_libs $xen_stable_libs"
2742 then
2743 xen_ctrl_version=40701
2744 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002745
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002746 # Xen 4.6
2747 elif
2748 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002749#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002750#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002751#include <stdint.h>
2752#include <xen/hvm/hvm_info_table.h>
2753#if !defined(HVM_MAX_VCPUS)
2754# error HVM_MAX_VCPUS not defined
2755#endif
2756int main(void) {
2757 xc_interface *xc;
2758 xs_daemon_open();
2759 xc = xc_interface_open(0, 0, 0);
2760 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2761 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002762 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002763 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002764 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002765 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002766 return 0;
2767}
2768EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002769 compile_prog "" "$xen_libs"
2770 then
2771 xen_ctrl_version=40600
2772 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002773
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002774 # Xen 4.5
2775 elif
2776 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002777#include <xenctrl.h>
2778#include <xenstore.h>
2779#include <stdint.h>
2780#include <xen/hvm/hvm_info_table.h>
2781#if !defined(HVM_MAX_VCPUS)
2782# error HVM_MAX_VCPUS not defined
2783#endif
2784int main(void) {
2785 xc_interface *xc;
2786 xs_daemon_open();
2787 xc = xc_interface_open(0, 0, 0);
2788 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2789 xc_gnttab_open(NULL, 0);
2790 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2791 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002792 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2793 return 0;
2794}
2795EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002796 compile_prog "" "$xen_libs"
2797 then
2798 xen_ctrl_version=40500
2799 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002800
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002801 elif
2802 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002803#include <xenctrl.h>
2804#include <xenstore.h>
2805#include <stdint.h>
2806#include <xen/hvm/hvm_info_table.h>
2807#if !defined(HVM_MAX_VCPUS)
2808# error HVM_MAX_VCPUS not defined
2809#endif
2810int main(void) {
2811 xc_interface *xc;
2812 xs_daemon_open();
2813 xc = xc_interface_open(0, 0, 0);
2814 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2815 xc_gnttab_open(NULL, 0);
2816 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2817 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002818 return 0;
2819}
2820EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002821 compile_prog "" "$xen_libs"
2822 then
2823 xen_ctrl_version=40200
2824 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002825
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002826 else
2827 if test "$xen" = "yes" ; then
2828 feature_not_found "xen (unsupported version)" \
2829 "Install a supported xen (xen 4.2 or newer)"
2830 fi
2831 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002832 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002833
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002834 if test "$xen" = yes; then
2835 if test $xen_ctrl_version -ge 40701 ; then
2836 libs_softmmu="$xen_stable_libs $libs_softmmu"
2837 fi
2838 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002839 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002840 fi
aliguorie37630c2009-04-22 15:19:10 +00002841fi
2842
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002843if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002844 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002845 xen_pci_passthrough=yes
2846 else
2847 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002848 error_exit "User requested feature Xen PCI Passthrough" \
2849 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002850 fi
2851 xen_pci_passthrough=no
2852 fi
2853fi
2854
aliguorie37630c2009-04-22 15:19:10 +00002855##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002856# Windows Hypervisor Platform accelerator (WHPX) check
2857if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002858 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002859 whpx="yes"
2860 else
2861 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002862 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002863 fi
2864 whpx="no"
2865 fi
2866fi
2867
2868##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002869# Sparse probe
2870if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002871 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002872 sparse=yes
2873 else
2874 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002875 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002876 fi
2877 sparse=no
2878 fi
2879fi
2880
2881##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002882# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002883if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002884 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002885 x11_cflags=$($pkg_config --cflags x11)
2886 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002887fi
2888
2889##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002890# GTK probe
2891
2892if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002893 gtkpackage="gtk+-3.0"
2894 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002895 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002896 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002897 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2898 gtk_libs=$($pkg_config --libs $gtkpackage)
2899 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002900 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002901 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002902 gtk_cflags="$gtk_cflags $x11_cflags"
2903 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002904 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002905 gtk="yes"
2906 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002907 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002908 else
2909 gtk="no"
2910 fi
2911fi
2912
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002913
2914##########################################
2915# GNUTLS probe
2916
2917if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002918 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002919 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002920 gnutls_cflags=$($pkg_config --cflags gnutls)
2921 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002922 # Packaging for the static libraries is not always correct.
2923 # At least ubuntu 18.04 ships only shared libraries.
2924 write_c_skeleton
2925 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002926 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002927 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2928 pass="yes"
2929 fi
2930 fi
2931 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002932 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002933 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002934 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002935 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002936fi
2937
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002938
2939# If user didn't give a --disable/enable-gcrypt flag,
2940# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002941# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002942if test -z "$gcrypt"
2943then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002944 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002945 then
2946 gcrypt="no"
2947 fi
2948fi
2949
2950# If user didn't give a --disable/enable-nettle flag,
2951# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002952# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002953if test -z "$nettle"
2954then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002955 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002956 then
2957 nettle="no"
2958 fi
2959fi
2960
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002961has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002962 if ! has "libgcrypt-config"
2963 then
2964 return 1
2965 fi
2966
2967 if test -n "$cross_prefix"
2968 then
Stefan Weil89138852016-05-16 15:10:20 +02002969 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002970 if test "$host-" != $cross_prefix
2971 then
2972 return 1
2973 fi
2974 fi
2975
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002976 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2977 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2978
2979 if test $maj != 1 || test $min -lt 5
2980 then
2981 return 1
2982 fi
2983
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002984 return 0
2985}
2986
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002987
2988if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002989 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002990 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002991 nettle_cflags=$($pkg_config --cflags nettle)
2992 nettle_libs=$($pkg_config --libs nettle)
2993 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002994 # Link test to make sure the given libraries work (e.g for static).
2995 write_c_skeleton
2996 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002997 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002998 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2999 if test -z "$gcrypt"; then
3000 gcrypt="no"
3001 fi
3002 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003003 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003004 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01003005 if test "$pass" = "yes"
3006 then
3007 cat > $TMPC << EOF
3008#include <nettle/xts.h>
3009int main(void) {
3010 return 0;
3011}
3012EOF
3013 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3014 nettle_xts=yes
3015 qemu_private_xts=no
3016 fi
3017 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003018 if test "$pass" = "no" && test "$nettle" = "yes"; then
3019 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003020 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003021 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003022 fi
3023fi
3024
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003025if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003026 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003027 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003028 gcrypt_cflags=$(libgcrypt-config --cflags)
3029 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003030 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003031 # as it "spreads unnecessary dependencies" which in
3032 # turn breaks static builds...
3033 if test "$static" = "yes"
3034 then
3035 gcrypt_libs="$gcrypt_libs -lgpg-error"
3036 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003037
Richard Hendersona73e82e2019-05-09 18:24:35 -07003038 # Link test to make sure the given libraries work (e.g for static).
3039 write_c_skeleton
3040 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003041 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003042 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3043 pass="yes"
3044 fi
3045 fi
3046 if test "$pass" = "yes"; then
3047 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003048 cat > $TMPC << EOF
3049#include <gcrypt.h>
3050int main(void) {
3051 gcry_mac_hd_t handle;
3052 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3053 GCRY_MAC_FLAG_SECURE, NULL);
3054 return 0;
3055}
3056EOF
3057 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3058 gcrypt_hmac=yes
3059 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003060 cat > $TMPC << EOF
3061#include <gcrypt.h>
3062int main(void) {
3063 gcry_cipher_hd_t handle;
3064 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3065 return 0;
3066}
3067EOF
3068 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3069 gcrypt_xts=yes
3070 qemu_private_xts=no
3071 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003072 elif test "$gcrypt" = "yes"; then
3073 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003074 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003075 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003076 fi
3077fi
3078
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003079
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003080if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3081then
3082 error_exit "Only one of gcrypt & nettle can be enabled"
3083fi
3084
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003085##########################################
3086# libtasn1 - only for the TLS creds/session test suite
3087
3088tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003089tasn1_cflags=""
3090tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003091if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003092 tasn1_cflags=$($pkg_config --cflags libtasn1)
3093 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003094else
3095 tasn1=no
3096fi
3097
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003098
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003099##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003100# PAM probe
3101
3102if test "$auth_pam" != "no"; then
3103 cat > $TMPC <<EOF
3104#include <security/pam_appl.h>
3105#include <stdio.h>
3106int main(void) {
3107 const char *service_name = "qemu";
3108 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003109 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003110 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003111 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003112 return 0;
3113}
3114EOF
3115 if compile_prog "" "-lpam" ; then
3116 auth_pam=yes
3117 else
3118 if test "$auth_pam" = "yes"; then
3119 feature_not_found "PAM" "Install PAM development package"
3120 else
3121 auth_pam=no
3122 fi
3123 fi
3124fi
3125
3126##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003127# getifaddrs (for tests/test-io-channel-socket )
3128
3129have_ifaddrs_h=yes
3130if ! check_include "ifaddrs.h" ; then
3131 have_ifaddrs_h=no
3132fi
3133
3134##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003135# VTE probe
3136
3137if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003138 vteminversion="0.32.0"
3139 if $pkg_config --exists "vte-2.91"; then
3140 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003141 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003142 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003143 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003144 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003145 vte_cflags=$($pkg_config --cflags $vtepackage)
3146 vte_libs=$($pkg_config --libs $vtepackage)
3147 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003148 vte="yes"
3149 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003150 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003151 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003152 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003153 fi
3154fi
3155
3156##########################################
bellard11d9f692004-04-02 20:55:59 +00003157# SDL probe
3158
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003159# Look for sdl configuration program (pkg-config or sdl2-config). Try
3160# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003161
Peter Xuc6093a02018-04-10 13:40:34 +08003162sdl_probe ()
3163{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003164 if $pkg_config sdl2 --exists; then
3165 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003166 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003167 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003168 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003169 sdlversion=$($sdlconfig --version)
3170 else
3171 if test "$sdl" = "yes" ; then
3172 feature_not_found "sdl" "Install SDL2-devel"
3173 fi
3174 sdl=no
3175 # no need to do the rest
3176 return
3177 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003178 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003179 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3180 fi
3181
Juan Quintelaac119f92009-07-27 16:13:15 +02003182 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003183#include <SDL.h>
3184#undef main /* We don't want SDL to override our main() */
3185int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3186EOF
Stefan Weil89138852016-05-16 15:10:20 +02003187 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003188 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003189 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003190 if $pkg_config sdl2 --exists; then
3191 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003192 else
3193 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3194 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003195 else
Stefan Weil89138852016-05-16 15:10:20 +02003196 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003197 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003198 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003199 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003200
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003201 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003202 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003203 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003204 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3205 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003206 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003207 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003208 :
3209 else
3210 sdl=no
3211 fi
3212 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003213 else # sdl not found
3214 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003215 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003216 fi
3217 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003218 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003219}
3220
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003221sdl_image_probe ()
3222{
3223 if test "$sdl_image" != "no" ; then
3224 if $pkg_config SDL2_image --exists; then
3225 if test "$static" = "yes"; then
3226 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3227 else
3228 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3229 fi
3230 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3231 sdl_image=yes
3232
3233 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3234 sdl_libs="$sdl_libs $sdl_image_libs"
3235 else
3236 if test "$sdl_image" = "yes" ; then
3237 feature_not_found "sdl_image" "Install SDL Image devel"
3238 else
3239 sdl_image=no
3240 fi
3241 fi
3242 fi
3243}
3244
Peter Xuc6093a02018-04-10 13:40:34 +08003245if test "$sdl" != "no" ; then
3246 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003247fi
bellard11d9f692004-04-02 20:55:59 +00003248
aliguori5368a422009-03-03 17:37:21 +00003249if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003250 sdl_image_probe
3251else
3252 if test "$sdl_image" = "yes"; then
3253 echo "warning: SDL Image requested, but SDL is not available, disabling"
3254 fi
3255 sdl_image=no
3256fi
3257
3258if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003259 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003260#include <SDL.h>
3261#if defined(SDL_VIDEO_DRIVER_X11)
3262#include <X11/XKBlib.h>
3263#else
3264#error No x11 support
3265#endif
3266int main(void) { return 0; }
3267EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003268 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003269 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003270 sdl_cflags="$sdl_cflags $x11_cflags"
3271 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003272 fi
aliguori5368a422009-03-03 17:37:21 +00003273fi
3274
ths8f28f3f2007-01-05 21:25:54 +00003275##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003276# RDMA needs OpenFabrics libraries
3277if test "$rdma" != "no" ; then
3278 cat > $TMPC <<EOF
3279#include <rdma/rdma_cma.h>
3280int main(void) { return 0; }
3281EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003282 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003283 if compile_prog "" "$rdma_libs" ; then
3284 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003285 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003286 else
3287 if test "$rdma" = "yes" ; then
3288 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003289 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003290 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003291 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003292 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3293 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3294 fi
3295 rdma="no"
3296 fi
3297fi
3298
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003299##########################################
3300# PVRDMA detection
3301
3302cat > $TMPC <<EOF &&
3303#include <sys/mman.h>
3304
3305int
3306main(void)
3307{
3308 char buf = 0;
3309 void *addr = &buf;
3310 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3311
3312 return 0;
3313}
3314EOF
3315
3316if test "$rdma" = "yes" ; then
3317 case "$pvrdma" in
3318 "")
3319 if compile_prog "" ""; then
3320 pvrdma="yes"
3321 else
3322 pvrdma="no"
3323 fi
3324 ;;
3325 "yes")
3326 if ! compile_prog "" ""; then
3327 error_exit "PVRDMA is not supported since mremap is not implemented"
3328 fi
3329 pvrdma="yes"
3330 ;;
3331 "no")
3332 pvrdma="no"
3333 ;;
3334 esac
3335else
3336 if test "$pvrdma" = "yes" ; then
3337 error_exit "PVRDMA requires rdma suppport"
3338 fi
3339 pvrdma="no"
3340fi
ths8d5d2d42007-08-25 01:37:51 +00003341
Yuval Shaiaee108582019-08-18 16:21:06 +03003342# Let's see if enhanced reg_mr is supported
3343if test "$pvrdma" = "yes" ; then
3344
3345cat > $TMPC <<EOF &&
3346#include <infiniband/verbs.h>
3347
3348int
3349main(void)
3350{
3351 struct ibv_mr *mr;
3352 struct ibv_pd *pd = NULL;
3353 size_t length = 10;
3354 uint64_t iova = 0;
3355 int access = 0;
3356 void *addr = NULL;
3357
3358 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3359
3360 ibv_dereg_mr(mr);
3361
3362 return 0;
3363}
3364EOF
3365 if ! compile_prog "" "-libverbs"; then
3366 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3367 fi
3368fi
3369
ths8d5d2d42007-08-25 01:37:51 +00003370##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003371# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003372if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003373 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003374#include <sasl/sasl.h>
3375#include <stdio.h>
3376int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3377EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003378 # Assuming Cyrus-SASL installed in /usr prefix
Philippe Mathieu-Daudébd702ff2020-03-09 13:24:53 +01003379 # QEMU defines struct iovec in "qemu/osdep.h",
3380 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3381 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
Juan Quintelaea784e32009-08-12 18:20:29 +02003382 vnc_sasl_libs="-lsasl2"
3383 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3384 vnc_sasl=yes
3385 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003386 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003387 else
3388 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003389 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003390 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003391 vnc_sasl=no
3392 fi
aliguori2f9606b2009-03-06 20:27:28 +00003393fi
3394
3395##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003396# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003397if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003398cat > $TMPC <<EOF
3399#include <stdio.h>
3400#include <jpeglib.h>
3401int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3402EOF
3403 vnc_jpeg_cflags=""
3404 vnc_jpeg_libs="-ljpeg"
3405 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3406 vnc_jpeg=yes
3407 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003408 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003409 else
3410 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003411 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003412 fi
3413 vnc_jpeg=no
3414 fi
3415fi
3416
3417##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003418# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003419if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003420cat > $TMPC <<EOF
3421//#include <stdio.h>
3422#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003423#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003424int main(void) {
3425 png_structp png_ptr;
3426 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003427 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003428}
3429EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003430 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003431 vnc_png_cflags=$($pkg_config libpng --cflags)
3432 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003433 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003434 vnc_png_cflags=""
3435 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003436 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003437 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3438 vnc_png=yes
3439 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003440 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003441 else
3442 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003443 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003444 fi
3445 vnc_png=no
3446 fi
3447fi
3448
3449##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003450# xkbcommon probe
3451if test "$xkbcommon" != "no" ; then
3452 if $pkg_config xkbcommon --exists; then
3453 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3454 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3455 xkbcommon=yes
3456 else
3457 if test "$xkbcommon" = "yes" ; then
3458 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3459 fi
3460 xkbcommon=no
3461 fi
3462fi
3463
aliguori76655d62009-03-06 20:27:37 +00003464
3465##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003466# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003467if test "$xfs" != "no" ; then
3468 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003469#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003470#include <xfs/xfs.h>
3471int main(void)
3472{
3473 xfsctl(NULL, 0, 0, NULL);
3474 return 0;
3475}
3476EOF
3477 if compile_prog "" "" ; then
3478 xfs="yes"
3479 else
3480 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003481 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003482 fi
3483 xfs=no
3484 fi
3485fi
3486
3487##########################################
ths8a16d272008-07-19 09:56:24 +00003488# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003489if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003490 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003491 cat > $TMPC << EOF
3492#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003493int main(void)
3494{
3495 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003496 char s[] = "";
3497 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003498 return 0;
3499}
ths8a16d272008-07-19 09:56:24 +00003500EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003501 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003502 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003503 else
3504 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003505 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003506 fi
3507 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003508 fi
ths8a16d272008-07-19 09:56:24 +00003509fi
3510
3511##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003512# netmap support probe
3513# Apart from looking for netmap headers, we make sure that the host API version
3514# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3515# a minor/major version number. Minor new features will be marked with values up
3516# to 15, and if something happens that requires a change to the backend we will
3517# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003518if test "$netmap" != "no" ; then
3519 cat > $TMPC << EOF
3520#include <inttypes.h>
3521#include <net/if.h>
3522#include <net/netmap.h>
3523#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003524#if (NETMAP_API < 11) || (NETMAP_API > 15)
3525#error
3526#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003527int main(void) { return 0; }
3528EOF
3529 if compile_prog "" "" ; then
3530 netmap=yes
3531 else
3532 if test "$netmap" = "yes" ; then
3533 feature_not_found "netmap"
3534 fi
3535 netmap=no
3536 fi
3537fi
3538
3539##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003540# libcap-ng library probe
3541if test "$cap_ng" != "no" ; then
3542 cap_libs="-lcap-ng"
3543 cat > $TMPC << EOF
3544#include <cap-ng.h>
3545int main(void)
3546{
3547 capng_capability_to_name(CAPNG_EFFECTIVE);
3548 return 0;
3549}
3550EOF
3551 if compile_prog "" "$cap_libs" ; then
3552 cap_ng=yes
3553 libs_tools="$cap_libs $libs_tools"
3554 else
3555 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003556 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003557 fi
3558 cap_ng=no
3559 fi
3560fi
3561
3562##########################################
malcc2de5c92008-06-28 19:13:06 +00003563# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003564
Stefan Weil89138852016-05-16 15:10:20 +02003565audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003566for drv in $audio_drv_list; do
3567 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003568 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003569 if $pkg_config alsa --exists; then
3570 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003571 if test "$drv" = "try-alsa"; then
3572 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3573 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003574 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003575 if test "$drv" = "try-alsa"; then
3576 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3577 else
3578 error_exit "$drv check failed" \
3579 "Make sure to have the $drv libs and headers installed."
3580 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003581 fi
malcc2de5c92008-06-28 19:13:06 +00003582 ;;
3583
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003584 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003585 if $pkg_config libpulse --exists; then
3586 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003587 if test "$drv" = "try-pa"; then
3588 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3589 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003590 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003591 if test "$drv" = "try-pa"; then
3592 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3593 else
3594 error_exit "$drv check failed" \
3595 "Make sure to have the $drv libs and headers installed."
3596 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003597 fi
malcb8e59f12008-07-02 21:03:08 +00003598 ;;
3599
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003600 sdl)
3601 if test "$sdl" = "no"; then
3602 error_exit "sdl not found or disabled, can not use sdl audio driver"
3603 fi
3604 ;;
3605
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003606 try-sdl)
3607 if test "$sdl" = "no"; then
3608 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3609 else
3610 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3611 fi
3612 ;;
3613
Juan Quintela997e6902009-08-03 14:46:29 +02003614 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003615 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003616 ;;
3617
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003618 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003619 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003620 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003621 ;;
3622
3623 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003624 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003625 ;;
3626
malce4c63a62008-07-19 16:15:16 +00003627 *)
malc1c9b2a52008-07-19 16:57:30 +00003628 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003629 error_exit "Unknown driver '$drv' selected" \
3630 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003631 }
3632 ;;
malcc2de5c92008-06-28 19:13:06 +00003633 esac
3634done
ths8f28f3f2007-01-05 21:25:54 +00003635
balrog4d3b6f62008-02-10 16:33:14 +00003636##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003637# BrlAPI probe
3638
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003639if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003640 brlapi_libs="-lbrlapi"
3641 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003642#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003643#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003644int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3645EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003646 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003647 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003648 else
3649 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003650 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003651 fi
3652 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003653 fi
3654fi
aurel322e4d9fb2008-04-08 06:01:02 +00003655
3656##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003657# iconv probe
3658if test "$iconv" != "no" ; then
3659 cat > $TMPC << EOF
3660#include <iconv.h>
3661int main(void) {
3662 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3663 return conv != (iconv_t) -1;
3664}
3665EOF
3666 iconv_prefix_list="/usr/local:/usr"
3667 iconv_lib_list=":-liconv"
3668 IFS=:
3669 for iconv_prefix in $iconv_prefix_list; do
3670 IFS=:
3671 iconv_cflags="-I$iconv_prefix/include"
3672 iconv_ldflags="-L$iconv_prefix/lib"
3673 for iconv_link in $iconv_lib_list; do
3674 unset IFS
3675 iconv_lib="$iconv_ldflags $iconv_link"
3676 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3677 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3678 iconv_found=yes
3679 break
3680 fi
3681 done
3682 if test "$iconv_found" = yes ; then
3683 break
3684 fi
3685 done
3686 if test "$iconv_found" = "yes" ; then
3687 iconv=yes
3688 else
3689 if test "$iconv" = "yes" ; then
3690 feature_not_found "iconv" "Install iconv devel"
3691 fi
3692 iconv=no
3693 fi
3694fi
3695
3696##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003697# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003698if test "$iconv" = "no" ; then
3699 # curses will need iconv
3700 curses=no
3701fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003702if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003703 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003704 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3705 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003706 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003707 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003708 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003709 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003710 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003711 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003712#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003713#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003714#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003715#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003716int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003717 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003718 wchar_t wch = L'w';
3719 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003720 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003721 addwstr(L"wide chars\n");
3722 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003723 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003724 codeset = nl_langinfo(CODESET);
3725 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003726}
balrog4d3b6f62008-02-10 16:33:14 +00003727EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003728 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003729 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003730 # Make sure we get the wide character prototypes
3731 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003732 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003733 for curses_lib in $curses_lib_list; do
3734 unset IFS
3735 if compile_prog "$curses_inc" "$curses_lib" ; then
3736 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003737 break
3738 fi
3739 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003740 if test "$curses_found" = yes ; then
3741 break
3742 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003743 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003744 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003745 if test "$curses_found" = "yes" ; then
3746 curses=yes
3747 else
3748 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003749 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003750 fi
3751 curses=no
3752 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003753fi
balrog4d3b6f62008-02-10 16:33:14 +00003754
blueswir1414f0da2008-08-15 18:20:52 +00003755##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003756# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003757if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003758 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003759 curlconfig="$pkg_config libcurl"
3760 else
3761 curlconfig=curl-config
3762 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003763 cat > $TMPC << EOF
3764#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003765int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003766EOF
Stefan Weil89138852016-05-16 15:10:20 +02003767 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3768 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003769 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003770 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003771 else
3772 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003773 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003774 fi
3775 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003776 fi
3777fi # test "$curl"
3778
3779##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003780# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003781
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003782glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003783glib_modules=gthread-2.0
3784if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003785 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003786fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003787if test "$plugins" = yes; then
3788 glib_modules="$glib_modules gmodule-2.0"
3789fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003790
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003791# This workaround is required due to a bug in pkg-config file for glib as it
3792# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3793
Eric Blakee633a5c2019-02-04 20:39:37 -06003794if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003795 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3796fi
3797
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003798for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003799 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003800 glib_cflags=$($pkg_config --cflags $i)
3801 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003802 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003803 LIBS="$glib_libs $LIBS"
3804 libs_qga="$glib_libs $libs_qga"
3805 else
3806 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3807 fi
3808done
3809
Marc-André Lureauf876b762019-02-21 12:07:00 +01003810if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3811 gio=yes
3812 gio_cflags=$($pkg_config --cflags gio-2.0)
3813 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003814 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003815 if [ ! -x "$gdbus_codegen" ]; then
3816 gdbus_codegen=
3817 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003818else
3819 gio=no
3820fi
3821
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003822if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3823 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3824 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3825fi
3826
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003827# Sanity check that the current size_t matches the
3828# size that glib thinks it should be. This catches
3829# problems on multi-arch where people try to build
3830# 32-bit QEMU while pointing at 64-bit glib headers
3831cat > $TMPC <<EOF
3832#include <glib.h>
3833#include <unistd.h>
3834
3835#define QEMU_BUILD_BUG_ON(x) \
3836 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3837
3838int main(void) {
3839 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3840 return 0;
3841}
3842EOF
3843
Stefan Weil5919e032016-04-28 23:33:41 +02003844if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003845 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3846 "You probably need to set PKG_CONFIG_LIBDIR"\
3847 "to point to the right pkg-config files for your"\
3848 "build target"
3849fi
3850
John Snowbbbf2e02015-03-25 18:57:38 -04003851# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3852cat > $TMPC << EOF
3853#include <glib.h>
3854int main(void) { return 0; }
3855EOF
3856if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3857 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3858 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3859 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3860 fi
3861fi
3862
Eric Blake9bda6002020-03-17 12:55:34 -05003863# Silence clang warnings triggered by glib < 2.57.2
3864cat > $TMPC << EOF
3865#include <glib.h>
3866typedef struct Foo {
3867 int i;
3868} Foo;
3869static void foo_free(Foo *f)
3870{
3871 g_free(f);
3872}
3873G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3874int main(void) { return 0; }
3875EOF
3876if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3877 if cc_has_warning_flag "-Wno-unused-function"; then
3878 glib_cflags="$glib_cflags -Wno-unused-function"
3879 CFLAGS="$CFLAGS -Wno-unused-function"
3880 fi
3881fi
3882
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003883#########################################
3884# zlib check
3885
3886if test "$zlib" != "no" ; then
3887 if $pkg_config --exists zlib; then
3888 zlib_cflags=$($pkg_config --cflags zlib)
3889 zlib_libs=$($pkg_config --libs zlib)
3890 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3891 LIBS="$zlib_libs $LIBS"
3892 else
3893 cat > $TMPC << EOF
3894#include <zlib.h>
3895int main(void) { zlibVersion(); return 0; }
3896EOF
3897 if compile_prog "" "-lz" ; then
3898 LIBS="$LIBS -lz"
3899 else
3900 error_exit "zlib check failed" \
3901 "Make sure to have the zlib libs and headers installed."
3902 fi
3903 fi
3904fi
3905
Fam Zhenge26110c2014-02-10 14:48:57 +08003906##########################################
3907# SHA command probe for modules
3908if test "$modules" = yes; then
3909 shacmd_probe="sha1sum sha1 shasum"
3910 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003911 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003912 shacmd="$c"
3913 break
3914 fi
3915 done
3916 if test "$shacmd" = ""; then
3917 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3918 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003919fi
3920
3921##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003922# pixman support probe
3923
Eric Blakee633a5c2019-02-04 20:39:37 -06003924if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003925 pixman_cflags=
3926 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003927elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003928 pixman_cflags=$($pkg_config --cflags pixman-1)
3929 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003930else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003931 error_exit "pixman >= 0.21.8 not present." \
3932 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003933fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003934
3935##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003936# libmpathpersist probe
3937
3938if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003939 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003940 cat > $TMPC <<EOF
3941#include <libudev.h>
3942#include <mpath_persist.h>
3943unsigned mpath_mx_alloc_len = 1024;
3944int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003945static struct config *multipath_conf;
3946extern struct udev *udev;
3947extern struct config *get_multipath_config(void);
3948extern void put_multipath_config(struct config *conf);
3949struct udev *udev;
3950struct config *get_multipath_config(void) { return multipath_conf; }
3951void put_multipath_config(struct config *conf) { }
3952
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003953int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003954 udev = udev_new();
3955 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003956 return 0;
3957}
3958EOF
3959 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3960 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003961 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003962 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003963 # probe for the old API
3964 cat > $TMPC <<EOF
3965#include <libudev.h>
3966#include <mpath_persist.h>
3967unsigned mpath_mx_alloc_len = 1024;
3968int logsink;
3969int main(void) {
3970 struct udev *udev = udev_new();
3971 mpath_lib_init(udev);
3972 return 0;
3973}
3974EOF
3975 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3976 mpathpersist=yes
3977 mpathpersist_new_api=no
3978 else
3979 mpathpersist=no
3980 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003981 fi
3982else
3983 mpathpersist=no
3984fi
3985
3986##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003987# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003988PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003989
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003990pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003991cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003992#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003993static void *f(void *p) { return NULL; }
3994int main(void) {
3995 pthread_t thread;
3996 pthread_create(&thread, 0, f, 0);
3997 return 0;
3998}
blueswir1414f0da2008-08-15 18:20:52 +00003999EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02004000if compile_prog "" "" ; then
4001 pthread=yes
4002else
4003 for pthread_lib in $PTHREADLIBS_LIST; do
4004 if compile_prog "" "$pthread_lib" ; then
4005 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04004006 found=no
4007 for lib_entry in $LIBS; do
4008 if test "$lib_entry" = "$pthread_lib"; then
4009 found=yes
4010 break
4011 fi
4012 done
4013 if test "$found" = "no"; then
4014 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01004015 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04004016 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01004017 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02004018 break
4019 fi
4020 done
4021fi
blueswir1414f0da2008-08-15 18:20:52 +00004022
Eric Blakee633a5c2019-02-04 20:39:37 -06004023if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004024 error_exit "pthread check failed" \
4025 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00004026fi
4027
Roman Bolshakov479a5742018-12-17 23:26:01 +03004028# check for pthread_setname_np with thread id
4029pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004030cat > $TMPC << EOF
4031#include <pthread.h>
4032
4033static void *f(void *p) { return NULL; }
4034int main(void)
4035{
4036 pthread_t thread;
4037 pthread_create(&thread, 0, f, 0);
4038 pthread_setname_np(thread, "QEMU");
4039 return 0;
4040}
4041EOF
4042if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03004043 pthread_setname_np_w_tid=yes
4044fi
4045
4046# check for pthread_setname_np without thread id
4047pthread_setname_np_wo_tid=no
4048cat > $TMPC << EOF
4049#include <pthread.h>
4050
4051static void *f(void *p) { pthread_setname_np("QEMU"); }
4052int main(void)
4053{
4054 pthread_t thread;
4055 pthread_create(&thread, 0, f, 0);
4056 return 0;
4057}
4058EOF
4059if compile_prog "" "$pthread_lib" ; then
4060 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004061fi
4062
aliguoribf9298b2008-12-05 20:05:26 +00004063##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004064# rbd probe
4065if test "$rbd" != "no" ; then
4066 cat > $TMPC <<EOF
4067#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004068#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004069int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004070 rados_t cluster;
4071 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004072 return 0;
4073}
4074EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004075 rbd_libs="-lrbd -lrados"
4076 if compile_prog "" "$rbd_libs" ; then
4077 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004078 else
4079 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004080 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004081 fi
4082 rbd=no
4083 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004084fi
4085
4086##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004087# libssh probe
4088if test "$libssh" != "no" ; then
4089 if $pkg_config --exists libssh; then
4090 libssh_cflags=$($pkg_config libssh --cflags)
4091 libssh_libs=$($pkg_config libssh --libs)
4092 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004093 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004094 if test "$libssh" = "yes" ; then
4095 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004096 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004097 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004098 fi
4099fi
4100
4101##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004102# Check for libssh 0.8
4103# This is done like this instead of using the LIBSSH_VERSION_* and
4104# SSH_VERSION_* macros because some distributions in the past shipped
4105# snapshots of the future 0.8 from Git, and those snapshots did not
4106# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004107
Pino Toscanob10d49d2019-06-20 22:08:40 +02004108if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004109 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004110#include <libssh/libssh.h>
4111int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004112EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004113 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4114 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004115 fi
4116fi
4117
4118##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004119# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004120
4121if test "$linux_aio" != "no" ; then
4122 cat > $TMPC <<EOF
4123#include <libaio.h>
4124#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004125#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004126int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4127EOF
4128 if compile_prog "" "-laio" ; then
4129 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004130 else
4131 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004132 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004133 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004134 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004135 fi
4136fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004137##########################################
4138# linux-io-uring probe
4139
4140if test "$linux_io_uring" != "no" ; then
4141 if $pkg_config liburing; then
4142 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4143 linux_io_uring_libs=$($pkg_config --libs liburing)
4144 linux_io_uring=yes
Stefan Hajnoczi73fd2822020-03-05 17:08:04 +00004145
4146 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4147 # seen by programs linking the archive. It's not ideal, but just add the
4148 # library dependency globally.
4149 LIBS="$linux_io_uring_libs $LIBS"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004150 else
4151 if test "$linux_io_uring" = "yes" ; then
4152 feature_not_found "linux io_uring" "Install liburing devel"
4153 fi
4154 linux_io_uring=no
4155 fi
4156fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004157
4158##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004159# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004160
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004161if test "$tpm" = ""; then
4162 if test "$mingw32" = "yes"; then
4163 tpm=no
4164 else
4165 tpm=yes
4166 fi
4167elif test "$tpm" = "yes"; then
4168 if test "$mingw32" = "yes" ; then
4169 error_exit "TPM emulation only available on POSIX systems"
4170 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004171fi
4172
4173##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004174# attr probe
4175
4176if test "$attr" != "no" ; then
4177 cat > $TMPC <<EOF
4178#include <stdio.h>
4179#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004180#ifdef CONFIG_LIBATTR
4181#include <attr/xattr.h>
4182#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004183#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004184#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004185int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4186EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004187 if compile_prog "" "" ; then
4188 attr=yes
4189 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004190 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004191 attr=yes
4192 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004193 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004194 else
4195 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004196 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004197 fi
4198 attr=no
4199 fi
4200fi
4201
4202##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004203# iovec probe
4204cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004205#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004206#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004207#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004208int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004209EOF
4210iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004211if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004212 iovec=yes
4213fi
4214
aurel32f652e6a2008-12-16 10:43:48 +00004215##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004216# preadv probe
4217cat > $TMPC <<EOF
4218#include <sys/types.h>
4219#include <sys/uio.h>
4220#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004221int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004222EOF
4223preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004224if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004225 preadv=yes
4226fi
4227
4228##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004229# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004230# fdt support is mandatory for at least some target architectures,
4231# so insist on it if we're building those system emulators.
4232fdt_required=no
4233for target in $target_list; do
4234 case $target in
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08004235 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004236 fdt_required=yes
4237 ;;
4238 esac
4239done
4240
4241if test "$fdt_required" = "yes"; then
4242 if test "$fdt" = "no"; then
4243 error_exit "fdt disabled but some requested targets require it." \
4244 "You can turn off fdt only if you also disable all the system emulation" \
4245 "targets which need it (by specifying a cut down --target-list)."
4246 fi
4247 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004248elif test "$fdt" != "yes" ; then
4249 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004250fi
4251
Laurent Vivierd5999382019-06-21 15:05:44 +02004252# fdt is only required when building softmmu targets
4253if test -z "$fdt" -a "$softmmu" != "yes" ; then
4254 fdt="no"
4255fi
4256
Juan Quintela2df87df2009-08-12 18:29:54 +02004257if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004258 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004259 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004260 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004261 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004262#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004263#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004264int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004265EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004266 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004267 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004268 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004269 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004270 # have GIT checkout, so activate dtc submodule
4271 if test -e "${source_path}/.git" ; then
4272 git_submodules="${git_submodules} dtc"
4273 fi
4274 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004275 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004276 mkdir -p dtc
4277 if [ "$pwd_is_source_path" != "y" ] ; then
4278 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4279 symlink "$source_path/dtc/scripts" "dtc/scripts"
4280 fi
4281 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004282 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4283 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004284 elif test "$fdt" = "yes" ; then
4285 # Not a git build & no libfdt found, prompt for system install
4286 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4287 "Please install the DTC (libfdt) devel package"
4288 else
4289 # don't have and don't want
4290 fdt_libs=
4291 fdt=no
4292 fi
aurel32f652e6a2008-12-16 10:43:48 +00004293 fi
4294fi
4295
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004296libs_softmmu="$libs_softmmu $fdt_libs"
4297
Michael Walle20ff0752011-03-07 23:32:39 +01004298##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004299# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004300
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004301gbm="no"
4302if $pkg_config gbm; then
4303 gbm_cflags="$($pkg_config --cflags gbm)"
4304 gbm_libs="$($pkg_config --libs gbm)"
4305 gbm="yes"
4306fi
4307
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004308if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004309 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004310 if $pkg_config $opengl_pkgs; then
4311 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4312 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004313 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004314 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4315 gtk_gl="yes"
4316 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004317 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004318 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004319 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004320 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004321 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004322 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004323 opengl_libs=""
4324 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004325 fi
4326fi
4327
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004328if test "$opengl" = "yes"; then
4329 cat > $TMPC << EOF
4330#include <epoxy/egl.h>
4331#ifndef EGL_MESA_image_dma_buf_export
4332# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4333#endif
4334int main(void) { return 0; }
4335EOF
4336 if compile_prog "" "" ; then
4337 opengl_dmabuf=yes
4338 fi
4339fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004340
Eric Blakee633a5c2019-02-04 20:39:37 -06004341if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004342 for target in $target_list; do
4343 case $target in
4344 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4345 need_x11=yes
4346 ;;
4347 esac
4348 done
4349fi
4350
Klim Kireeved279a02018-01-12 12:01:19 +03004351##########################################
4352# libxml2 probe
4353if test "$libxml2" != "no" ; then
4354 if $pkg_config --exists libxml-2.0; then
4355 libxml2="yes"
4356 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4357 libxml2_libs=$($pkg_config --libs libxml-2.0)
4358 else
4359 if test "$libxml2" = "yes"; then
4360 feature_not_found "libxml2" "Install libxml2 devel"
4361 fi
4362 libxml2="no"
4363 fi
4364fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004365
Bharata B Raoeb100392012-09-24 14:42:45 +05304366##########################################
4367# glusterfs probe
4368if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004369 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304370 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004371 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4372 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004373 if $pkg_config --atleast-version=4 glusterfs-api; then
4374 glusterfs_xlator_opt="yes"
4375 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004376 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304377 glusterfs_discard="yes"
4378 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304379 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304380 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304381 glusterfs_zerofill="yes"
4382 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004383 cat > $TMPC << EOF
4384#include <glusterfs/api/glfs.h>
4385
4386int
4387main(void)
4388{
4389 /* new glfs_ftruncate() passes two additional args */
4390 return glfs_ftruncate(NULL, 0, NULL, NULL);
4391}
4392EOF
4393 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4394 glusterfs_ftruncate_has_stat="yes"
4395 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004396 cat > $TMPC << EOF
4397#include <glusterfs/api/glfs.h>
4398
4399/* new glfs_io_cbk() passes two additional glfs_stat structs */
4400static void
4401glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4402{}
4403
4404int
4405main(void)
4406{
4407 glfs_io_cbk iocb = &glusterfs_iocb;
4408 iocb(NULL, 0 , NULL, NULL, NULL);
4409 return 0;
4410}
4411EOF
4412 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4413 glusterfs_iocb_has_stat="yes"
4414 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304415 else
4416 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004417 feature_not_found "GlusterFS backend support" \
4418 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304419 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304420 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304421 fi
4422fi
4423
aurel3239386ac2009-04-15 19:48:17 +00004424# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004425# emulator. This is done because older glibc versions don't
4426# have syscall stubs for these implemented. In that case we
4427# don't provide them even if kernel supports them.
4428#
4429inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004430cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004431#include <sys/inotify.h>
4432
4433int
4434main(void)
4435{
4436 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004437 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004438}
4439EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004440if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004441 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004442fi
4443
Riku Voipioc05c7a72010-03-26 15:25:11 +00004444inotify1=no
4445cat > $TMPC << EOF
4446#include <sys/inotify.h>
4447
4448int
4449main(void)
4450{
4451 /* try to start inotify */
4452 return inotify_init1(0);
4453}
4454EOF
4455if compile_prog "" "" ; then
4456 inotify1=yes
4457fi
4458
Riku Voipio099d6b02009-05-05 12:10:04 +03004459# check if pipe2 is there
4460pipe2=no
4461cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004462#include <unistd.h>
4463#include <fcntl.h>
4464
4465int main(void)
4466{
4467 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004468 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004469}
4470EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004471if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004472 pipe2=yes
4473fi
4474
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004475# check if accept4 is there
4476accept4=no
4477cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004478#include <sys/socket.h>
4479#include <stddef.h>
4480
4481int main(void)
4482{
4483 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4484 return 0;
4485}
4486EOF
4487if compile_prog "" "" ; then
4488 accept4=yes
4489fi
4490
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304491# check if tee/splice is there. vmsplice was added same time.
4492splice=no
4493cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304494#include <unistd.h>
4495#include <fcntl.h>
4496#include <limits.h>
4497
4498int main(void)
4499{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004500 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304501 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4502 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4503 return 0;
4504}
4505EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004506if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304507 splice=yes
4508fi
4509
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004510##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004511# libnuma probe
4512
4513if test "$numa" != "no" ; then
4514 cat > $TMPC << EOF
4515#include <numa.h>
4516int main(void) { return numa_available(); }
4517EOF
4518
4519 if compile_prog "" "-lnuma" ; then
4520 numa=yes
4521 libs_softmmu="-lnuma $libs_softmmu"
4522 else
4523 if test "$numa" = "yes" ; then
4524 feature_not_found "numa" "install numactl devel"
4525 fi
4526 numa=no
4527 fi
4528fi
4529
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004530if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4531 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4532 exit 1
4533fi
4534
Yang Zhong5a22ab72017-12-20 21:16:46 +08004535# Even if malloc_trim() is available, these non-libc memory allocators
4536# do not support it.
4537if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4538 if test "$malloc_trim" = "yes" ; then
4539 echo "Disabling malloc_trim with non-libc memory allocator"
4540 fi
4541 malloc_trim="no"
4542fi
4543
4544#######################################
4545# malloc_trim
4546
4547if test "$malloc_trim" != "no" ; then
4548 cat > $TMPC << EOF
4549#include <malloc.h>
4550int main(void) { malloc_trim(0); return 0; }
4551EOF
4552 if compile_prog "" "" ; then
4553 malloc_trim="yes"
4554 else
4555 malloc_trim="no"
4556 fi
4557fi
4558
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004559##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004560# tcmalloc probe
4561
4562if test "$tcmalloc" = "yes" ; then
4563 cat > $TMPC << EOF
4564#include <stdlib.h>
4565int main(void) { malloc(1); return 0; }
4566EOF
4567
4568 if compile_prog "" "-ltcmalloc" ; then
4569 LIBS="-ltcmalloc $LIBS"
4570 else
4571 feature_not_found "tcmalloc" "install gperftools devel"
4572 fi
4573fi
4574
4575##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004576# jemalloc probe
4577
4578if test "$jemalloc" = "yes" ; then
4579 cat > $TMPC << EOF
4580#include <stdlib.h>
4581int main(void) { malloc(1); return 0; }
4582EOF
4583
4584 if compile_prog "" "-ljemalloc" ; then
4585 LIBS="-ljemalloc $LIBS"
4586 else
4587 feature_not_found "jemalloc" "install jemalloc devel"
4588 fi
4589fi
4590
4591##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004592# signalfd probe
4593signalfd="no"
4594cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004595#include <unistd.h>
4596#include <sys/syscall.h>
4597#include <signal.h>
4598int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4599EOF
4600
4601if compile_prog "" "" ; then
4602 signalfd=yes
4603fi
4604
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004605# check if optreset global is declared by <getopt.h>
4606optreset="no"
4607cat > $TMPC << EOF
4608#include <getopt.h>
4609int main(void) { return optreset; }
4610EOF
4611
4612if compile_prog "" "" ; then
4613 optreset=yes
4614fi
4615
Riku Voipioc2882b92009-08-12 15:08:24 +03004616# check if eventfd is supported
4617eventfd=no
4618cat > $TMPC << EOF
4619#include <sys/eventfd.h>
4620
4621int main(void)
4622{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004623 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004624}
4625EOF
4626if compile_prog "" "" ; then
4627 eventfd=yes
4628fi
4629
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004630# check if memfd is supported
4631memfd=no
4632cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004633#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004634
4635int main(void)
4636{
4637 return memfd_create("foo", MFD_ALLOW_SEALING);
4638}
4639EOF
4640if compile_prog "" "" ; then
4641 memfd=yes
4642fi
4643
Cortland Tölva955727d2018-10-08 09:35:19 -07004644# check for usbfs
4645have_usbfs=no
4646if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004647 cat > $TMPC << EOF
4648#include <linux/usbdevice_fs.h>
4649
4650#ifndef USBDEVFS_GET_CAPABILITIES
4651#error "USBDEVFS_GET_CAPABILITIES undefined"
4652#endif
4653
4654#ifndef USBDEVFS_DISCONNECT_CLAIM
4655#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4656#endif
4657
4658int main(void)
4659{
4660 return 0;
4661}
4662EOF
4663 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004664 have_usbfs=yes
4665 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004666fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004667
Ulrich Hechtd0927932009-09-17 20:22:14 +03004668# check for fallocate
4669fallocate=no
4670cat > $TMPC << EOF
4671#include <fcntl.h>
4672
4673int main(void)
4674{
4675 fallocate(0, 0, 0, 0);
4676 return 0;
4677}
4678EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004679if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004680 fallocate=yes
4681fi
4682
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004683# check for fallocate hole punching
4684fallocate_punch_hole=no
4685cat > $TMPC << EOF
4686#include <fcntl.h>
4687#include <linux/falloc.h>
4688
4689int main(void)
4690{
4691 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4692 return 0;
4693}
4694EOF
4695if compile_prog "" "" ; then
4696 fallocate_punch_hole=yes
4697fi
4698
Denis V. Lunevb953f072015-01-30 11:42:14 +03004699# check that fallocate supports range zeroing inside the file
4700fallocate_zero_range=no
4701cat > $TMPC << EOF
4702#include <fcntl.h>
4703#include <linux/falloc.h>
4704
4705int main(void)
4706{
4707 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4708 return 0;
4709}
4710EOF
4711if compile_prog "" "" ; then
4712 fallocate_zero_range=yes
4713fi
4714
Kevin Wolfed911432014-09-29 17:12:59 +02004715# check for posix_fallocate
4716posix_fallocate=no
4717cat > $TMPC << EOF
4718#include <fcntl.h>
4719
4720int main(void)
4721{
4722 posix_fallocate(0, 0, 0);
4723 return 0;
4724}
4725EOF
4726if compile_prog "" "" ; then
4727 posix_fallocate=yes
4728fi
4729
Peter Maydellc727f472011-01-06 11:05:10 +00004730# check for sync_file_range
4731sync_file_range=no
4732cat > $TMPC << EOF
4733#include <fcntl.h>
4734
4735int main(void)
4736{
4737 sync_file_range(0, 0, 0, 0);
4738 return 0;
4739}
4740EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004741if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004742 sync_file_range=yes
4743fi
4744
Peter Maydelldace20d2011-01-10 13:11:24 +00004745# check for linux/fiemap.h and FS_IOC_FIEMAP
4746fiemap=no
4747cat > $TMPC << EOF
4748#include <sys/ioctl.h>
4749#include <linux/fs.h>
4750#include <linux/fiemap.h>
4751
4752int main(void)
4753{
4754 ioctl(0, FS_IOC_FIEMAP, 0);
4755 return 0;
4756}
4757EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004758if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004759 fiemap=yes
4760fi
4761
Ulrich Hechtd0927932009-09-17 20:22:14 +03004762# check for dup3
4763dup3=no
4764cat > $TMPC << EOF
4765#include <unistd.h>
4766
4767int main(void)
4768{
4769 dup3(0, 0, 0);
4770 return 0;
4771}
4772EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004773if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004774 dup3=yes
4775fi
4776
Alex Bligh4e0c6522013-08-21 16:02:43 +01004777# check for ppoll support
4778ppoll=no
4779cat > $TMPC << EOF
4780#include <poll.h>
4781
4782int main(void)
4783{
4784 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4785 ppoll(&pfd, 1, 0, 0);
4786 return 0;
4787}
4788EOF
4789if compile_prog "" "" ; then
4790 ppoll=yes
4791fi
4792
Alex Blighcd758dd2013-08-21 16:02:44 +01004793# check for prctl(PR_SET_TIMERSLACK , ... ) support
4794prctl_pr_set_timerslack=no
4795cat > $TMPC << EOF
4796#include <sys/prctl.h>
4797
4798int main(void)
4799{
4800 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4801 return 0;
4802}
4803EOF
4804if compile_prog "" "" ; then
4805 prctl_pr_set_timerslack=yes
4806fi
4807
Peter Maydell3b6edd12011-02-15 18:35:05 +00004808# check for epoll support
4809epoll=no
4810cat > $TMPC << EOF
4811#include <sys/epoll.h>
4812
4813int main(void)
4814{
4815 epoll_create(0);
4816 return 0;
4817}
4818EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004819if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004820 epoll=yes
4821fi
4822
Peter Maydell227f0212016-06-06 19:58:11 +01004823# epoll_create1 is a later addition
4824# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004825epoll_create1=no
4826cat > $TMPC << EOF
4827#include <sys/epoll.h>
4828
4829int main(void)
4830{
Peter Maydell19e83f62011-04-26 16:56:40 +01004831 /* Note that we use epoll_create1 as a value, not as
4832 * a function being called. This is necessary so that on
4833 * old SPARC glibc versions where the function was present in
4834 * the library but not declared in the header file we will
4835 * fail the configure check. (Otherwise we will get a compiler
4836 * warning but not an error, and will proceed to fail the
4837 * qemu compile where we compile with -Werror.)
4838 */
Blue Swirlc075a722012-08-09 20:21:25 +00004839 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004840}
4841EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004842if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004843 epoll_create1=yes
4844fi
4845
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004846# check for sendfile support
4847sendfile=no
4848cat > $TMPC << EOF
4849#include <sys/sendfile.h>
4850
4851int main(void)
4852{
4853 return sendfile(0, 0, 0, 0);
4854}
4855EOF
4856if compile_prog "" "" ; then
4857 sendfile=yes
4858fi
4859
Riku Voipio51834342014-06-22 11:25:42 +01004860# check for timerfd support (glibc 2.8 and newer)
4861timerfd=no
4862cat > $TMPC << EOF
4863#include <sys/timerfd.h>
4864
4865int main(void)
4866{
4867 return(timerfd_create(CLOCK_REALTIME, 0));
4868}
4869EOF
4870if compile_prog "" "" ; then
4871 timerfd=yes
4872fi
4873
Riku Voipio9af5c902014-08-12 15:58:57 +03004874# check for setns and unshare support
4875setns=no
4876cat > $TMPC << EOF
4877#include <sched.h>
4878
4879int main(void)
4880{
4881 int ret;
4882 ret = setns(0, 0);
4883 ret = unshare(0);
4884 return ret;
4885}
4886EOF
4887if compile_prog "" "" ; then
4888 setns=yes
4889fi
4890
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004891# clock_adjtime probe
4892clock_adjtime=no
4893cat > $TMPC <<EOF
4894#include <time.h>
4895
4896int main(void)
4897{
4898 return clock_adjtime(0, 0);
4899}
4900EOF
4901clock_adjtime=no
4902if compile_prog "" "" ; then
4903 clock_adjtime=yes
4904fi
4905
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004906# syncfs probe
4907syncfs=no
4908cat > $TMPC <<EOF
4909#include <unistd.h>
4910
4911int main(void)
4912{
4913 return syncfs(0);
4914}
4915EOF
4916syncfs=no
4917if compile_prog "" "" ; then
4918 syncfs=yes
4919fi
4920
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004921# check for kcov support (kernel must be 4.4+, compiled with certain options)
4922kcov=no
4923if check_include sys/kcov.h ; then
4924 kcov=yes
4925fi
4926
Peter Maydell5f71eac2019-03-07 14:26:46 +00004927# Check we have a new enough version of sphinx-build
4928has_sphinx_build() {
4929 # This is a bit awkward but works: create a trivial document and
4930 # try to run it with our configuration file (which enforces a
4931 # version requirement). This will fail if either
4932 # sphinx-build doesn't exist at all or if it is too old.
4933 mkdir -p "$TMPDIR1/sphinx"
4934 touch "$TMPDIR1/sphinx/index.rst"
Markus Armbruster903458c2020-02-14 18:18:41 +01004935 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004936}
4937
pbrookcc8ae6d2006-04-23 17:57:59 +00004938# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004939if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004940 if has_sphinx_build; then
4941 sphinx_ok=yes
4942 else
4943 sphinx_ok=no
4944 fi
4945 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004946 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004947 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004948 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004949 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4950 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4951 fi
4952 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004953 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004954 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004955 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004956fi
4957
Stefan Weilf514f412009-10-11 12:44:07 +02004958# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004959byteswap_h=no
4960cat > $TMPC << EOF
4961#include <byteswap.h>
4962int main(void) { return bswap_32(0); }
4963EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004964if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004965 byteswap_h=yes
4966fi
4967
Stefan Weil75f13592013-01-05 12:17:38 +01004968# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004969bswap_h=no
4970cat > $TMPC << EOF
4971#include <sys/endian.h>
4972#include <sys/types.h>
4973#include <machine/bswap.h>
4974int main(void) { return bswap32(0); }
4975EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004976if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004977 bswap_h=yes
4978fi
4979
aliguorida93a1f2008-12-12 20:02:52 +00004980##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004981# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004982if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004983 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004984 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004985 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4986 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004987 else
4988 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004989 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004990 fi
4991 libiscsi="no"
4992 fi
4993fi
4994
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004995##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004996# Do we need libm
4997cat > $TMPC << EOF
4998#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004999int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00005000EOF
5001if compile_prog "" "" ; then
5002 :
5003elif compile_prog "" "-lm" ; then
5004 LIBS="-lm $LIBS"
5005 libs_qga="-lm $libs_qga"
5006else
Peter Maydell76ad07a2013-04-08 12:11:26 +01005007 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00005008fi
5009
5010##########################################
aliguorida93a1f2008-12-12 20:02:52 +00005011# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00005012# uClibc provides 2 versions of clock_gettime(), one with realtime
5013# support and one without. This means that the clock_gettime() don't
5014# need -lrt. We still need it for timer_create() so we check for this
5015# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00005016cat > $TMPC <<EOF
5017#include <signal.h>
5018#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00005019int main(void) {
5020 timer_create(CLOCK_REALTIME, NULL, NULL);
5021 return clock_gettime(CLOCK_REALTIME, NULL);
5022}
aliguorida93a1f2008-12-12 20:02:52 +00005023EOF
5024
Juan Quintela52166aa2009-08-03 14:46:03 +02005025if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02005026 :
Natanael Copa8bacde82012-09-12 09:06:51 +00005027# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07005028elif compile_prog "" "$pthread_lib -lrt" ; then
5029 LIBS="$LIBS -lrt"
5030 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00005031fi
5032
Thomas Huthd99e97e2019-01-17 18:14:08 +01005033# Check whether we need to link libutil for openpty()
5034cat > $TMPC << EOF
5035extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5036int main(void) { return openpty(0, 0, 0, 0, 0); }
5037EOF
5038
5039if ! compile_prog "" "" ; then
5040 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02005041 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01005042 libs_tools="-lutil $libs_tools"
5043 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005044fi
5045
Blue Swirlde5071c2009-09-12 09:58:46 +00005046##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005047# spice probe
5048if test "$spice" != "no" ; then
5049 cat > $TMPC << EOF
5050#include <spice.h>
5051int main(void) { spice_server_new(); return 0; }
5052EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005053 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5054 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005055 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005056 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005057 compile_prog "$spice_cflags" "$spice_libs" ; then
5058 spice="yes"
5059 libs_softmmu="$libs_softmmu $spice_libs"
5060 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005061 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5062 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005063 else
5064 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005065 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005066 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005067 fi
5068 spice="no"
5069 fi
5070fi
5071
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005072# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005073if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005074 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005075 libcacard_cflags=$($pkg_config --cflags libcacard)
5076 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005077 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005078 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005079 if test "$smartcard" = "yes"; then
5080 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005081 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005082 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005083 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005084fi
5085
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005086# check for libusb
5087if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005088 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005089 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005090 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5091 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005092 else
5093 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005094 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005095 fi
5096 libusb="no"
5097 fi
5098fi
5099
Hans de Goede69354a82011-07-19 11:04:10 +02005100# check for usbredirparser for usb network redirection support
5101if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005102 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005103 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005104 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5105 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005106 else
5107 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005108 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005109 fi
5110 usb_redir="no"
5111 fi
5112fi
5113
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005114##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005115# check if we have VSS SDK headers for win
5116
Eric Blakee633a5c2019-02-04 20:39:37 -06005117if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5118 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005119 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005120 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005121 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5122 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005123 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005124 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5125 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005126 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005127 esac
5128 cat > $TMPC << EOF
5129#define __MIDL_user_allocate_free_DEFINED__
5130#include <inc/win2003/vss.h>
5131int main(void) { return VSS_CTX_BACKUP; }
5132EOF
5133 if compile_prog "$vss_win32_include" "" ; then
5134 guest_agent_with_vss="yes"
5135 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005136 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005137 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005138 else
5139 if test "$vss_win32_sdk" != "" ; then
5140 echo "ERROR: Please download and install Microsoft VSS SDK:"
5141 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5142 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5143 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5144 echo "ERROR: The headers are extracted in the directory \`inc'."
5145 feature_not_found "VSS support"
5146 fi
5147 guest_agent_with_vss="no"
5148 fi
5149fi
5150
5151##########################################
5152# lookup Windows platform SDK (if not specified)
5153# The SDK is needed only to build .tlb (type library) file of guest agent
5154# VSS provider from the source. It is usually unnecessary because the
5155# pre-compiled .tlb file is included.
5156
Eric Blakee633a5c2019-02-04 20:39:37 -06005157if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5158 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005159 if test -z "$win_sdk"; then
5160 programfiles="$PROGRAMFILES"
5161 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5162 if test -n "$programfiles"; then
5163 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5164 else
5165 feature_not_found "Windows SDK"
5166 fi
5167 elif test "$win_sdk" = "no"; then
5168 win_sdk=""
5169 fi
5170fi
5171
5172##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005173# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005174if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005175 cat > $TMPC << EOF
5176#include <windows.h>
5177#include <ntddscsi.h>
5178int main(void) {
5179#if !defined(IOCTL_SCSI_GET_ADDRESS)
5180#error Missing required ioctl definitions
5181#endif
5182 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5183 return addr.Lun;
5184}
5185EOF
5186 if compile_prog "" "" ; then
5187 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005188 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005189 fi
5190fi
5191
5192##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005193# virgl renderer probe
5194
5195if test "$virglrenderer" != "no" ; then
5196 cat > $TMPC << EOF
5197#include <virglrenderer.h>
5198int main(void) { virgl_renderer_poll(); return 0; }
5199EOF
5200 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5201 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005202 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005203 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5204 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5205 virglrenderer="yes"
5206 else
5207 if test "$virglrenderer" = "yes" ; then
5208 feature_not_found "virglrenderer"
5209 fi
5210 virglrenderer="no"
5211 fi
5212fi
5213
5214##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005215# capstone
5216
Richard Hendersone219c492017-09-28 09:01:23 -07005217case "$capstone" in
5218 "" | yes)
5219 if $pkg_config capstone; then
5220 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005221 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005222 capstone=git
5223 elif test -e "${source_path}/capstone/Makefile" ; then
5224 capstone=internal
5225 elif test -z "$capstone" ; then
5226 capstone=no
5227 else
5228 feature_not_found "capstone" "Install capstone devel or git submodule"
5229 fi
5230 ;;
5231
5232 system)
5233 if ! $pkg_config capstone; then
5234 feature_not_found "capstone" "Install capstone devel"
5235 fi
5236 ;;
5237esac
5238
5239case "$capstone" in
5240 git | internal)
5241 if test "$capstone" = git; then
5242 git_submodules="${git_submodules} capstone"
5243 fi
5244 mkdir -p capstone
5245 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5246 if test "$mingw32" = "yes"; then
5247 LIBCAPSTONE=capstone.lib
5248 else
5249 LIBCAPSTONE=libcapstone.a
5250 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005251 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005252 ;;
5253
5254 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005255 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005256 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005257 ;;
5258
5259 no)
5260 ;;
5261 *)
5262 error_exit "Unknown state for capstone: $capstone"
5263 ;;
5264esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005265
5266##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005267# check if we have fdatasync
5268
5269fdatasync=no
5270cat > $TMPC << EOF
5271#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005272int main(void) {
5273#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5274return fdatasync(0);
5275#else
Stefan Weile172fe12012-04-06 21:33:20 +02005276#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005277#endif
5278}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005279EOF
5280if compile_prog "" "" ; then
5281 fdatasync=yes
5282fi
5283
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005284##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005285# check if we have madvise
5286
5287madvise=no
5288cat > $TMPC << EOF
5289#include <sys/types.h>
5290#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005291#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005292int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5293EOF
5294if compile_prog "" "" ; then
5295 madvise=yes
5296fi
5297
5298##########################################
5299# check if we have posix_madvise
5300
5301posix_madvise=no
5302cat > $TMPC << EOF
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 posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5306EOF
5307if compile_prog "" "" ; then
5308 posix_madvise=yes
5309fi
5310
5311##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005312# check if we have posix_memalign()
5313
5314posix_memalign=no
5315cat > $TMPC << EOF
5316#include <stdlib.h>
5317int main(void) {
5318 void *p;
5319 return posix_memalign(&p, 8, 8);
5320}
5321EOF
5322if compile_prog "" "" ; then
5323 posix_memalign=yes
5324fi
5325
5326##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005327# check if we have posix_syslog
5328
5329posix_syslog=no
5330cat > $TMPC << EOF
5331#include <syslog.h>
5332int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5333EOF
5334if compile_prog "" "" ; then
5335 posix_syslog=yes
5336fi
5337
5338##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005339# check if we have sem_timedwait
5340
5341sem_timedwait=no
5342cat > $TMPC << EOF
5343#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005344int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005345EOF
5346if compile_prog "" "" ; then
5347 sem_timedwait=yes
5348fi
5349
5350##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005351# check if we have strchrnul
5352
5353strchrnul=no
5354cat > $TMPC << EOF
5355#include <string.h>
5356int main(void);
5357// Use a haystack that the compiler shouldn't be able to constant fold
5358char *haystack = (char*)&main;
5359int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5360EOF
5361if compile_prog "" "" ; then
5362 strchrnul=yes
5363fi
5364
Jiufei Xue8a792b02019-04-17 03:08:56 +08005365#########################################
5366# check if we have st_atim
5367
5368st_atim=no
5369cat > $TMPC << EOF
5370#include <sys/stat.h>
5371#include <stddef.h>
5372int main(void) { return offsetof(struct stat, st_atim); }
5373EOF
5374if compile_prog "" "" ; then
5375 st_atim=yes
5376fi
5377
Keno Fischer5c99fa32018-06-29 12:32:10 +02005378##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005379# check if trace backend exists
5380
Lluís Vilanova5b808272014-05-27 15:02:14 +02005381$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005382if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005383 error_exit "invalid trace backends" \
5384 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005385fi
5386
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005387##########################################
5388# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005389if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005390 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005391#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005392int main(void) { return 0; }
5393EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005394 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005395 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005396 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005397 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005398 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005399 fi
5400 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005401 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005402 else
5403 urcu_bp_libs="-lurcu-bp"
5404 fi
5405
5406 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5407 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005408 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005409 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005410 fi
5411fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005412
5413##########################################
5414# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005415if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005416 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005417 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005418 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005419 trace_backend_stap="no"
5420 if has 'stap' ; then
5421 trace_backend_stap="yes"
5422 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005423fi
5424
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005425##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005426# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305427
Peter Maydell7c2acc72013-04-08 12:11:27 +01005428# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005429# is sigcontext. On Windows the only valid backend is the Windows
5430# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005431
5432ucontext_works=no
5433if test "$darwin" != "yes"; then
5434 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305435#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005436#ifdef __stub_makecontext
5437#error Ignoring glibc stub makecontext which will always fail
5438#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005439int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305440EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005441 if compile_prog "" "" ; then
5442 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305443 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005444fi
5445
5446if test "$coroutine" = ""; then
5447 if test "$mingw32" = "yes"; then
5448 coroutine=win32
5449 elif test "$ucontext_works" = "yes"; then
5450 coroutine=ucontext
5451 else
5452 coroutine=sigaltstack
5453 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005454else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005455 case $coroutine in
5456 windows)
5457 if test "$mingw32" != "yes"; then
5458 error_exit "'windows' coroutine backend only valid for Windows"
5459 fi
5460 # Unfortunately the user visible backend name doesn't match the
5461 # coroutine-*.c filename for this case, so we have to adjust it here.
5462 coroutine=win32
5463 ;;
5464 ucontext)
5465 if test "$ucontext_works" != "yes"; then
5466 feature_not_found "ucontext"
5467 fi
5468 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005469 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005470 if test "$mingw32" = "yes"; then
5471 error_exit "only the 'windows' coroutine backend is valid for Windows"
5472 fi
5473 ;;
5474 *)
5475 error_exit "unknown coroutine backend $coroutine"
5476 ;;
5477 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305478fi
5479
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005480if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005481 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005482fi
5483
Peter Lieven7d992e42016-09-27 11:58:45 +02005484if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005485 if test "$coroutine_pool" = "yes"; then
5486 echo "WARN: disabling coroutine pool for stack usage debugging"
5487 coroutine_pool=no
5488 fi
5489fi
5490
5491
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305492##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305493# check if we have open_by_handle_at
5494
Stefan Weil4e1797f2012-06-18 22:11:06 +02005495open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305496cat > $TMPC << EOF
5497#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005498#if !defined(AT_EMPTY_PATH)
5499# error missing definition
5500#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005501int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005502#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305503EOF
5504if compile_prog "" "" ; then
5505 open_by_handle_at=yes
5506fi
5507
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305508########################################
5509# check if we have linux/magic.h
5510
5511linux_magic_h=no
5512cat > $TMPC << EOF
5513#include <linux/magic.h>
5514int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005515 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305516}
5517EOF
5518if compile_prog "" "" ; then
5519 linux_magic_h=yes
5520fi
5521
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005522########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005523# check whether we can disable warning option with a pragma (this is needed
5524# to silence warnings in the headers of some versions of external libraries).
5525# This test has to be compiled with -Werror as otherwise an unknown pragma is
5526# only a warning.
5527#
5528# If we can't selectively disable warning in the code, disable -Werror so that
5529# the build doesn't fail anyway.
5530
Peter Maydell06d71fa2012-07-30 16:13:07 +01005531pragma_disable_unused_but_set=no
5532cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005533#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005534#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005535#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005536
Peter Maydell06d71fa2012-07-30 16:13:07 +01005537int main(void) {
5538 return 0;
5539}
5540EOF
5541if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005542 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005543else
5544 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005545fi
5546
5547########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005548# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005549
5550valgrind_h=no
5551cat > $TMPC << EOF
5552#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005553int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005554 return 0;
5555}
5556EOF
5557if compile_prog "" "" ; then
5558 valgrind_h=yes
5559fi
5560
5561########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005562# check if environ is declared
5563
5564has_environ=no
5565cat > $TMPC << EOF
5566#include <unistd.h>
5567int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005568 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005569 return 0;
5570}
5571EOF
5572if compile_prog "" "" ; then
5573 has_environ=yes
5574fi
5575
Richard Henderson76a347e2012-12-28 14:17:02 -08005576########################################
5577# check if cpuid.h is usable.
5578
Richard Henderson76a347e2012-12-28 14:17:02 -08005579cat > $TMPC << EOF
5580#include <cpuid.h>
5581int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005582 unsigned a, b, c, d;
5583 int max = __get_cpuid_max(0, 0);
5584
5585 if (max >= 1) {
5586 __cpuid(1, a, b, c, d);
5587 }
5588
5589 if (max >= 7) {
5590 __cpuid_count(7, 0, a, b, c, d);
5591 }
5592
5593 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005594}
5595EOF
5596if compile_prog "" "" ; then
5597 cpuid_h=yes
5598fi
5599
Richard Henderson5dd89902017-07-18 18:40:18 -10005600##########################################
5601# avx2 optimization requirement check
5602#
5603# There is no point enabling this if cpuid.h is not usable,
5604# since we won't be able to select the new routines.
5605
Eric Blakee633a5c2019-02-04 20:39:37 -06005606if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005607 cat > $TMPC << EOF
5608#pragma GCC push_options
5609#pragma GCC target("avx2")
5610#include <cpuid.h>
5611#include <immintrin.h>
5612static int bar(void *a) {
5613 __m256i x = *(__m256i *)a;
5614 return _mm256_testz_si256(x, x);
5615}
5616int main(int argc, char *argv[]) { return bar(argv[0]); }
5617EOF
5618 if compile_object "" ; then
5619 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005620 else
5621 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005622 fi
5623fi
5624
Robert Hoo6b8cd442020-02-29 20:34:34 +08005625##########################################
5626# avx512f optimization requirement check
5627#
5628# There is no point enabling this if cpuid.h is not usable,
5629# since we won't be able to select the new routines.
5630# by default, it is turned off.
5631# if user explicitly want to enable it, check environment
5632
5633if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5634 cat > $TMPC << EOF
5635#pragma GCC push_options
5636#pragma GCC target("avx512f")
5637#include <cpuid.h>
5638#include <immintrin.h>
5639static int bar(void *a) {
5640 __m512i x = *(__m512i *)a;
5641 return _mm512_test_epi64_mask(x, x);
5642}
5643int main(int argc, char *argv[])
5644{
5645 return bar(argv[0]);
5646}
5647EOF
5648 if ! compile_object "" ; then
5649 avx512f_opt="no"
5650 fi
5651else
5652 avx512f_opt="no"
5653fi
5654
Richard Hendersonf5401662013-02-16 12:46:59 -08005655########################################
5656# check if __[u]int128_t is usable.
5657
5658int128=no
5659cat > $TMPC << EOF
5660__int128_t a;
5661__uint128_t b;
5662int main (void) {
5663 a = a + b;
5664 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005665 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005666 return 0;
5667}
5668EOF
5669if compile_prog "" "" ; then
5670 int128=yes
5671fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005672
Richard Henderson7ebee432016-06-29 21:10:59 -07005673#########################################
5674# See if 128-bit atomic operations are supported.
5675
5676atomic128=no
5677if test "$int128" = "yes"; then
5678 cat > $TMPC << EOF
5679int main(void)
5680{
5681 unsigned __int128 x = 0, y = 0;
5682 y = __atomic_load_16(&x, 0);
5683 __atomic_store_16(&x, y, 0);
5684 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5685 return 0;
5686}
5687EOF
5688 if compile_prog "" "" ; then
5689 atomic128=yes
5690 fi
5691fi
5692
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005693cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005694if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005695 cat > $TMPC << EOF
5696int main(void)
5697{
5698 unsigned __int128 x = 0, y = 0;
5699 __sync_val_compare_and_swap_16(&x, y, x);
5700 return 0;
5701}
5702EOF
5703 if compile_prog "" "" ; then
5704 cmpxchg128=yes
5705 fi
5706fi
5707
Richard Hendersondf79b992016-09-02 12:23:57 -07005708#########################################
5709# See if 64-bit atomic operations are supported.
5710# Note that without __atomic builtins, we can only
5711# assume atomic loads/stores max at pointer size.
5712
5713cat > $TMPC << EOF
5714#include <stdint.h>
5715int main(void)
5716{
5717 uint64_t x = 0, y = 0;
5718#ifdef __ATOMIC_RELAXED
5719 y = __atomic_load_8(&x, 0);
5720 __atomic_store_8(&x, y, 0);
5721 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5722 __atomic_exchange_8(&x, y, 0);
5723 __atomic_fetch_add_8(&x, y, 0);
5724#else
5725 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5726 __sync_lock_test_and_set(&x, y);
5727 __sync_val_compare_and_swap(&x, y, 0);
5728 __sync_fetch_and_add(&x, y);
5729#endif
5730 return 0;
5731}
5732EOF
5733if compile_prog "" "" ; then
5734 atomic64=yes
5735fi
5736
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005737#########################################
5738# See if --dynamic-list is supported by the linker
5739ld_dynamic_list="no"
5740if test "$static" = "no" ; then
5741 cat > $TMPTXT <<EOF
5742{
5743 foo;
5744};
5745EOF
5746
5747 cat > $TMPC <<EOF
5748#include <stdio.h>
5749void foo(void);
5750
5751void foo(void)
5752{
5753 printf("foo\n");
5754}
5755
5756int main(void)
5757{
5758 foo();
5759 return 0;
5760}
5761EOF
5762
5763 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5764 ld_dynamic_list="yes"
5765 fi
5766fi
5767
5768#########################################
5769# See if -exported_symbols_list is supported by the linker
5770
5771ld_exported_symbols_list="no"
5772if test "$static" = "no" ; then
5773 cat > $TMPTXT <<EOF
5774 _foo
5775EOF
5776
5777 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5778 ld_exported_symbols_list="yes"
5779 fi
5780fi
5781
5782if test "$plugins" = "yes" &&
5783 test "$ld_dynamic_list" = "no" &&
5784 test "$ld_exported_symbols_list" = "no" ; then
5785 error_exit \
5786 "Plugin support requires dynamic linking and specifying a set of symbols " \
5787 "that are exported to plugins. Unfortunately your linker doesn't " \
5788 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5789 "for this purpose. You can't build with --static."
5790fi
5791
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005792########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005793# See if __attribute__((alias)) is supported.
5794# This false for Xcode 9, but has been remedied for Xcode 10.
5795# Unfortunately, travis uses Xcode 9 by default.
5796
5797attralias=no
5798cat > $TMPC << EOF
5799int x = 1;
5800extern const int y __attribute__((alias("x")));
5801int main(void) { return 0; }
5802EOF
5803if compile_prog "" "" ; then
5804 attralias=yes
5805fi
5806
5807########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005808# check if getauxval is available.
5809
5810getauxval=no
5811cat > $TMPC << EOF
5812#include <sys/auxv.h>
5813int main(void) {
5814 return getauxval(AT_HWCAP) == 0;
5815}
5816EOF
5817if compile_prog "" "" ; then
5818 getauxval=yes
5819fi
5820
John Snowfd0e6052015-03-25 18:57:39 -04005821########################################
5822# check if ccache is interfering with
5823# semantic analysis of macros
5824
John Snow5e4dfd32015-10-28 13:56:40 -04005825unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005826ccache_cpp2=no
5827cat > $TMPC << EOF
5828static const int Z = 1;
5829#define fn() ({ Z; })
5830#define TAUT(X) ((X) == Z)
5831#define PAREN(X, Y) (X == Y)
5832#define ID(X) (X)
5833int main(int argc, char *argv[])
5834{
5835 int x = 0, y = 0;
5836 x = ID(x);
5837 x = fn();
5838 fn();
5839 if (PAREN(x, y)) return 0;
5840 if (TAUT(Z)) return 0;
5841 return 0;
5842}
5843EOF
5844
5845if ! compile_object "-Werror"; then
5846 ccache_cpp2=yes
5847fi
5848
John Snowb553a042015-11-03 15:43:42 -05005849#################################################
5850# clang does not support glibc + FORTIFY_SOURCE.
5851
5852if test "$fortify_source" != "no"; then
5853 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5854 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005855 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005856 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005857 fortify_source="no";
5858 else
5859 fortify_source="yes"
5860 fi
5861fi
5862
Fam Zheng1efad062018-06-01 17:26:43 +08005863###############################################
5864# Check if copy_file_range is provided by glibc
5865have_copy_file_range=no
5866cat > $TMPC << EOF
5867#include <unistd.h>
5868int main(void) {
5869 copy_file_range(0, NULL, 0, NULL, 0, 0);
5870 return 0;
5871}
5872EOF
5873if compile_prog "" "" ; then
5874 have_copy_file_range=yes
5875fi
5876
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305877##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005878# check if struct fsxattr is available via linux/fs.h
5879
5880have_fsxattr=no
5881cat > $TMPC << EOF
5882#include <linux/fs.h>
5883struct fsxattr foo;
5884int main(void) {
5885 return 0;
5886}
5887EOF
5888if compile_prog "" "" ; then
5889 have_fsxattr=yes
5890fi
5891
Peter Maydellb66e10e2016-06-08 18:34:32 +01005892##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005893# check for usable membarrier system call
5894if test "$membarrier" = "yes"; then
5895 have_membarrier=no
5896 if test "$mingw32" = "yes" ; then
5897 have_membarrier=yes
5898 elif test "$linux" = "yes" ; then
5899 cat > $TMPC << EOF
5900 #include <linux/membarrier.h>
5901 #include <sys/syscall.h>
5902 #include <unistd.h>
5903 #include <stdlib.h>
5904 int main(void) {
5905 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5906 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5907 exit(0);
5908 }
5909EOF
5910 if compile_prog "" "" ; then
5911 have_membarrier=yes
5912 fi
5913 fi
5914 if test "$have_membarrier" = "no"; then
5915 feature_not_found "membarrier" "membarrier system call not available"
5916 fi
5917else
5918 # Do not enable it by default even for Mingw32, because it doesn't
5919 # work on Wine.
5920 membarrier=no
5921fi
5922
5923##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005924# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005925have_rtnetlink=no
5926cat > $TMPC << EOF
5927#include <linux/rtnetlink.h>
5928int main(void) {
5929 return IFLA_PROTO_DOWN;
5930}
5931EOF
5932if compile_prog "" "" ; then
5933 have_rtnetlink=yes
5934fi
5935
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005936##########################################
5937# check for usable AF_VSOCK environment
5938have_af_vsock=no
5939cat > $TMPC << EOF
5940#include <errno.h>
5941#include <sys/types.h>
5942#include <sys/socket.h>
5943#if !defined(AF_VSOCK)
5944# error missing AF_VSOCK flag
5945#endif
5946#include <linux/vm_sockets.h>
5947int main(void) {
5948 int sock, ret;
5949 struct sockaddr_vm svm;
5950 socklen_t len = sizeof(svm);
5951 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5952 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5953 if ((ret == -1) && (errno == ENOTCONN)) {
5954 return 0;
5955 }
5956 return -1;
5957}
5958EOF
5959if compile_prog "" "" ; then
5960 have_af_vsock=yes
5961fi
5962
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005963##########################################
5964# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005965have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005966cat > $TMPC << EOF
5967#include <errno.h>
5968#include <sys/types.h>
5969#include <sys/socket.h>
5970#include <linux/if_alg.h>
5971int main(void) {
5972 int sock;
5973 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5974 return sock;
5975}
5976EOF
5977if compile_prog "" "" ; then
5978 have_afalg=yes
5979fi
5980if test "$crypto_afalg" = "yes"
5981then
5982 if test "$have_afalg" != "yes"
5983 then
5984 error_exit "AF_ALG requested but could not be detected"
5985 fi
5986fi
5987
5988
James Clarke6969ec62016-06-06 12:02:50 +01005989#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005990# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005991if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005992 cat > $TMPC << EOF
5993#include <Hypervisor/hv.h>
5994int main() { return 0;}
5995EOF
5996 if ! compile_object ""; then
5997 hvf='no'
5998 else
5999 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006000 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006001 fi
6002fi
6003
6004#################################################
James Clarke6969ec62016-06-06 12:02:50 +01006005# Sparc implicitly links with --relax, which is
6006# incompatible with -r, so --no-relax should be
6007# given. It does no harm to give it on other
6008# platforms too.
6009
6010# Note: the prototype is needed since QEMU_CFLAGS
6011# contains -Wmissing-prototypes
6012cat > $TMPC << EOF
6013extern int foo(void);
6014int foo(void) { return 0; }
6015EOF
6016if ! compile_object ""; then
6017 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6018fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01006019for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6020 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6021 LD_REL_FLAGS=$i
6022 break
6023 fi
6024done
6025if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6026 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006027fi
6028
Jan Vesely277abf12016-04-29 13:15:23 -04006029##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006030# check for sysmacros.h
6031
6032have_sysmacros=no
6033cat > $TMPC << EOF
6034#include <sys/sysmacros.h>
6035int main(void) {
6036 return makedev(0, 0);
6037}
6038EOF
6039if compile_prog "" "" ; then
6040 have_sysmacros=yes
6041fi
6042
6043##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006044# Veritas HyperScale block driver VxHS
6045# Check if libvxhs is installed
6046
6047if test "$vxhs" != "no" ; then
6048 cat > $TMPC <<EOF
6049#include <stdint.h>
6050#include <qnio/qnio_api.h>
6051
6052void *vxhs_callback;
6053
6054int main(void) {
6055 iio_init(QNIO_VERSION, vxhs_callback);
6056 return 0;
6057}
6058EOF
6059 vxhs_libs="-lvxhs -lssl"
6060 if compile_prog "" "$vxhs_libs" ; then
6061 vxhs=yes
6062 else
6063 if test "$vxhs" = "yes" ; then
6064 feature_not_found "vxhs block device" "Install libvxhs See github"
6065 fi
6066 vxhs=no
6067 fi
6068fi
6069
6070##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006071# check for _Static_assert()
6072
6073have_static_assert=no
6074cat > $TMPC << EOF
6075_Static_assert(1, "success");
6076int main(void) {
6077 return 0;
6078}
6079EOF
6080if compile_prog "" "" ; then
6081 have_static_assert=yes
6082fi
6083
6084##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006085# check for utmpx.h, it is missing e.g. on OpenBSD
6086
6087have_utmpx=no
6088cat > $TMPC << EOF
6089#include <utmpx.h>
6090struct utmpx user_info;
6091int main(void) {
6092 return 0;
6093}
6094EOF
6095if compile_prog "" "" ; then
6096 have_utmpx=yes
6097fi
6098
6099##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006100# check for getrandom()
6101
6102have_getrandom=no
6103cat > $TMPC << EOF
6104#include <sys/random.h>
6105int main(void) {
6106 return getrandom(0, 0, GRND_NONBLOCK);
6107}
6108EOF
6109if compile_prog "" "" ; then
6110 have_getrandom=yes
6111fi
6112
6113##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006114# checks for sanitizers
6115
Marc-André Lureau247724c2018-01-16 16:11:51 +01006116have_asan=no
6117have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006118have_asan_iface_h=no
6119have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006120
6121if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006122 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006123 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6124 have_asan=yes
6125 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006126
6127 # we could use a simple skeleton for flags checks, but this also
6128 # detect the static linking issue of ubsan, see also:
6129 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6130 cat > $TMPC << EOF
6131#include <stdlib.h>
6132int main(void) {
6133 void *tmp = malloc(10);
6134 return *(int *)(tmp + 2);
6135}
6136EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006137 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6138 have_ubsan=yes
6139 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006140
6141 if check_include "sanitizer/asan_interface.h" ; then
6142 have_asan_iface_h=yes
6143 fi
6144
6145 cat > $TMPC << EOF
6146#include <sanitizer/asan_interface.h>
6147int main(void) {
6148 __sanitizer_start_switch_fiber(0, 0, 0);
6149 return 0;
6150}
6151EOF
6152 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6153 have_asan_iface_fiber=yes
6154 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006155fi
6156
6157##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006158# checks for fuzzer
6159if test "$fuzzing" = "yes" ; then
6160 write_c_fuzzer_skeleton
6161 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6162 have_fuzzer=yes
6163 fi
6164fi
6165
6166##########################################
Junyan He17824402018-07-18 15:47:59 +08006167# check for libpmem
6168
6169if test "$libpmem" != "no"; then
6170 if $pkg_config --exists "libpmem"; then
6171 libpmem="yes"
6172 libpmem_libs=$($pkg_config --libs libpmem)
6173 libpmem_cflags=$($pkg_config --cflags libpmem)
6174 libs_softmmu="$libs_softmmu $libpmem_libs"
6175 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6176 else
6177 if test "$libpmem" = "yes" ; then
6178 feature_not_found "libpmem" "Install nvml or pmdk"
6179 fi
6180 libpmem="no"
6181 fi
6182fi
6183
6184##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006185# check for slirp
6186
Laurent Vivierd5999382019-06-21 15:05:44 +02006187# slirp is only required when building softmmu targets
6188if test -z "$slirp" -a "$softmmu" != "yes" ; then
6189 slirp="no"
6190fi
6191
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006192case "$slirp" in
6193 "" | yes)
6194 if $pkg_config slirp; then
6195 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006196 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6197 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006198 elif test -e "${source_path}/slirp/Makefile" ; then
6199 slirp=internal
6200 elif test -z "$slirp" ; then
6201 slirp=no
6202 else
6203 feature_not_found "slirp" "Install slirp devel or git submodule"
6204 fi
6205 ;;
6206
6207 system)
6208 if ! $pkg_config slirp; then
6209 feature_not_found "slirp" "Install slirp devel"
6210 fi
6211 ;;
6212esac
6213
6214case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006215 git | internal)
6216 if test "$slirp" = git; then
6217 git_submodules="${git_submodules} slirp"
6218 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006219 mkdir -p slirp
6220 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6221 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006222 if test "$mingw32" = "yes" ; then
6223 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6224 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006225 ;;
6226
6227 system)
6228 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6229 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6230 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6231 ;;
6232
6233 no)
6234 ;;
6235 *)
6236 error_exit "Unknown state for slirp: $slirp"
6237 ;;
6238esac
6239
6240
6241##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006242# End of CC checks
6243# After here, no more $cc or $ld runs
6244
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006245write_c_skeleton
6246
Blue Swirl1d728c32012-05-01 18:45:39 +00006247if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006248 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6249 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006250elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006251 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006252elif test "$debug" = "no"; then
6253 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006254fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006255
Marc-André Lureau247724c2018-01-16 16:11:51 +01006256if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006257 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6258 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006259 if test "$have_asan_iface_h" = "no" ; then
6260 echo "ASAN build enabled, but ASAN header missing." \
6261 "Without code annotation, the report may be inferior."
6262 elif test "$have_asan_iface_fiber" = "no" ; then
6263 echo "ASAN build enabled, but ASAN header is too old." \
6264 "Without code annotation, the report may be inferior."
6265 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006266fi
6267if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006268 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6269 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006270fi
6271
Peter Lieven6542aa92014-02-03 10:26:13 +01006272##########################################
6273# Do we have libnfs
6274if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006275 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006276 libnfs="yes"
6277 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006278 else
6279 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006280 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006281 fi
6282 libnfs="no"
6283 fi
6284fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006285
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006286##########################################
6287# Do we have libudev
6288if test "$libudev" != "no" ; then
6289 if $pkg_config libudev && test "$static" != "yes"; then
6290 libudev="yes"
6291 libudev_libs=$($pkg_config --libs libudev)
6292 else
6293 libudev="no"
6294 fi
6295fi
6296
Peter Maydell6ca026c2012-07-18 15:10:18 +01006297# Now we've finished running tests it's OK to add -Werror to the compiler flags
6298if test "$werror" = "yes"; then
6299 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6300fi
6301
Juan Quintelae86ecd42009-08-03 14:45:59 +02006302if test "$solaris" = "no" ; then
6303 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006304 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006305 fi
6306fi
6307
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006308# test if pod2man has --utf8 option
6309if pod2man --help | grep -q utf8; then
6310 POD2MAN="pod2man --utf8"
6311else
6312 POD2MAN="pod2man"
6313fi
6314
Blue Swirl952afb72010-09-19 08:36:34 +00006315# Use ASLR, no-SEH and DEP if available
6316if test "$mingw32" = "yes" ; then
6317 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006318 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006319 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006320 fi
6321 done
6322fi
6323
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006324# Disable OpenBSD W^X if available
6325if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6326 cat > $TMPC <<EOF
6327 int main(void) { return 0; }
6328EOF
6329 wx_ldflags="-Wl,-z,wxneeded"
6330 if compile_prog "" "$wx_ldflags"; then
6331 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6332 fi
6333fi
6334
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006335qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006336qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006337qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006338qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006339qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006340qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006341
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006342# We can only support ivshmem if we have eventfd
6343if [ "$eventfd" = "yes" ]; then
6344 ivshmem=yes
6345fi
6346
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006347tools=""
6348if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006349 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006350 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006351 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006352 fi
6353 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006354 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006355 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006356 if [ "$curl" = "yes" ]; then
6357 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006358 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006359fi
6360if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006361 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006362 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006363 virtfs=yes
6364 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6365 else
6366 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006367 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306368 fi
Andreas Färber17500372012-05-01 01:12:03 +02006369 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006370 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006371 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6372 mpath=yes
6373 else
6374 if test "$mpath" = yes; then
6375 error_exit "Multipath requires libmpathpersist devel"
6376 fi
6377 mpath=no
6378 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006379 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6380 else
6381 if test "$virtfs" = yes; then
6382 error_exit "VirtFS is supported only on Linux"
6383 fi
6384 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006385 if test "$mpath" = yes; then
6386 error_exit "Multipath is supported only on Linux"
6387 fi
6388 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306389 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006390 if test "$xkbcommon" = "yes"; then
6391 tools="qemu-keymap\$(EXESUF) $tools"
6392 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006393fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006394
6395# Probe for guest agent support/options
6396
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006397if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006398 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6399 guest_agent=no
6400 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006401 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006402 guest_agent=yes
6403 elif [ "$guest_agent" != yes ]; then
6404 guest_agent=no
6405 else
6406 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006407 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006408fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006409
Michael Roth9d6bc272015-08-26 10:49:13 -05006410# Guest agent Window MSI package
6411
6412if test "$guest_agent" != yes; then
6413 if test "$guest_agent_msi" = yes; then
6414 error_exit "MSI guest agent package requires guest agent enabled"
6415 fi
6416 guest_agent_msi=no
6417elif test "$mingw32" != "yes"; then
6418 if test "$guest_agent_msi" = "yes"; then
6419 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6420 fi
6421 guest_agent_msi=no
6422elif ! has wixl; then
6423 if test "$guest_agent_msi" = "yes"; then
6424 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6425 fi
6426 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006427else
6428 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6429 # disabled explicitly
6430 if test "$guest_agent_msi" != "no"; then
6431 guest_agent_msi=yes
6432 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006433fi
6434
Michael Roth1a349042015-08-26 11:14:31 -05006435if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006436 if test "$guest_agent_with_vss" = "yes"; then
6437 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6438 fi
6439
6440 if test "$QEMU_GA_MANUFACTURER" = ""; then
6441 QEMU_GA_MANUFACTURER=QEMU
6442 fi
6443
6444 if test "$QEMU_GA_DISTRO" = ""; then
6445 QEMU_GA_DISTRO=Linux
6446 fi
6447
6448 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006449 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006450 fi
6451
Stefan Weil89138852016-05-16 15:10:20 +02006452 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006453
6454 case "$cpu" in
6455 x86_64)
6456 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6457 ;;
6458 i386)
6459 QEMU_GA_MSI_ARCH="-D Arch=32"
6460 ;;
6461 *)
6462 error_exit "CPU $cpu not supported for building installation package"
6463 ;;
6464 esac
6465fi
6466
Paolo Bonzinica35f782010-05-26 16:08:29 +02006467# Mac OS X ships with a broken assembler
6468roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006469if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6470 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6471 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006472 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006473 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6474 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6475 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006476 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6477 ld_i386_emulation="$emu"
6478 roms="optionrom"
6479 break
6480 fi
6481 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006482fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006483
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006484# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006485if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006486 write_c_skeleton
6487 if compile_prog "-march=z900" ""; then
6488 roms="$roms s390-ccw"
6489 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006490fi
6491
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006492# Check that the C++ compiler exists and works with the C compiler.
6493# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6494if has $cxx; then
6495 cat > $TMPC <<EOF
6496int c_function(void);
6497int main(void) { return c_function(); }
6498EOF
6499
6500 compile_object
6501
6502 cat > $TMPCXX <<EOF
6503extern "C" {
6504 int c_function(void);
6505}
6506int c_function(void) { return 42; }
6507EOF
6508
6509 update_cxxflags
6510
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006511 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006512 # C++ compiler $cxx works ok with C compiler $cc
6513 :
6514 else
6515 echo "C++ compiler $cxx does not work with C compiler $cc"
6516 echo "Disabling C++ specific optional code"
6517 cxx=
6518 fi
6519else
6520 echo "No C++ compiler available; disabling C++ specific optional code"
6521 cxx=
6522fi
6523
Cole Robinson02d34f62016-05-06 14:03:09 -04006524echo_version() {
6525 if test "$1" = "yes" ; then
6526 echo "($2)"
6527 fi
6528}
6529
Jan Kiszka50e12062014-10-02 10:03:55 +02006530# prepend pixman and ftd flags after all config tests are done
6531QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006532QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006533libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006534
bellard43ce4df2003-06-09 19:53:12 +00006535echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006536echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006537echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006538echo "binary directory $(eval echo $bindir)"
6539echo "library directory $(eval echo $libdir)"
6540echo "module directory $(eval echo $qemu_moddir)"
6541echo "libexec directory $(eval echo $libexecdir)"
6542echo "include directory $(eval echo $includedir)"
6543echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006544if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006545echo "local state directory $(eval echo $local_statedir)"
6546echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006547echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006548else
6549echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006550echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006551fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006552echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006553echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006554echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006555echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006556echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006557echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006558echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006559echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006560echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006561echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006562echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006563echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006564echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006565echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006566echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006567if test "$docs" != "no"; then
6568 echo "sphinx-build $sphinx_build"
6569fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006570echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006571echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6572if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006573 echo "smbd $smbd"
6574fi
Fam Zheng17969262014-02-10 14:48:56 +08006575echo "module support $modules"
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006576echo "alt path mod load $module_upgrades"
bellard43ce4df2003-06-09 19:53:12 +00006577echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006578echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006579echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006580echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006581echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006582echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006583echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006584echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006585if test "$darwin" = "yes" ; then
6586 echo "Cocoa support $cocoa"
6587fi
Stefan Weil89138852016-05-16 15:10:20 +02006588echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006589echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006590echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006591echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006592echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006593echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006594echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006595echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006596if test "$gcrypt" = "yes"
6597then
6598 echo " hmac $gcrypt_hmac"
6599 echo " XTS $gcrypt_xts"
6600fi
Stefan Weil89138852016-05-16 15:10:20 +02006601echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006602if test "$nettle" = "yes"
6603then
6604 echo " XTS $nettle_xts"
6605fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006606echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006607echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006608echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006609echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006610echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006611echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006612echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006613echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006614echo "Block whitelist (rw) $block_drv_rw_whitelist"
6615echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306616echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006617echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006618echo "VNC support $vnc"
6619if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006620 echo "VNC SASL support $vnc_sasl"
6621 echo "VNC JPEG support $vnc_jpeg"
6622 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006623fi
aliguorie37630c2009-04-22 15:19:10 +00006624echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006625if test "$xen" = "yes" ; then
6626 echo "xen ctrl version $xen_ctrl_version"
6627fi
aurel322e4d9fb2008-04-08 06:01:02 +00006628echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006629echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006630echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006631echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006632echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006633echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006634echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006635echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006636echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006637echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006638echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006639echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006640echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006641echo "TCG support $tcg"
6642if test "$tcg" = "yes" ; then
6643 echo "TCG debug enabled $debug_tcg"
6644 echo "TCG interpreter $tcg_interpreter"
6645fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006646echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006647echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006648echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006649echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006650echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006651echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006652echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006653echo "madvise $madvise"
6654echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006655echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006656echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006657echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006658echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006659echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006660echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006661echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006662echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006663echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006664if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006665echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006666fi
Stefan Weil89138852016-05-16 15:10:20 +02006667echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006668echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006669echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006670echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006671echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006672echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006673echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006674echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006675echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006676echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006677echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006678echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006679echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006680echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006681echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006682echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006683echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006684echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006685echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006686echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306687echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006688echo "gcov $gcov_tool"
6689echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006690echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006691echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006692echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006693echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006694echo "lzo support $lzo"
6695echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006696echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006697echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006698echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006699echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006700echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006701echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006702echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006703echo "avx2 optimization $avx2_opt"
Robert Hoo6b8cd442020-02-29 20:34:34 +08006704echo "avx512f optimization $avx512f_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006705echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006706echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006707echo "bochs support $bochs"
6708echo "cloop support $cloop"
6709echo "dmg support $dmg"
6710echo "qcow v1 support $qcow1"
6711echo "vdi support $vdi"
6712echo "vvfat support $vvfat"
6713echo "qed support $qed"
6714echo "parallels support $parallels"
6715echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006716echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006717echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006718echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006719echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006720echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006721echo "fuzzing support $fuzzing"
Alex Bennéef48e5902020-03-16 17:21:48 +00006722echo "gdb $gdb_bin"
bellard67b915a2004-03-31 23:37:16 +00006723
Peter Maydell898be3e2017-03-21 14:31:57 +00006724if test "$supported_cpu" = "no"; then
6725 echo
6726 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6727 echo
6728 echo "CPU host architecture $cpu support is not currently maintained."
6729 echo "The QEMU project intends to remove support for this host CPU in"
6730 echo "a future release if nobody volunteers to maintain it and to"
6731 echo "provide a build host for our continuous integration setup."
6732 echo "configure has succeeded and you can continue to build, but"
6733 echo "if you care about QEMU on this platform you should contact"
6734 echo "us upstream at qemu-devel@nongnu.org."
6735fi
6736
6737if test "$supported_os" = "no"; then
6738 echo
6739 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6740 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006741 echo "Host OS $targetos support is not currently maintained."
6742 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006743 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
Juan Quintela98ec69a2009-07-16 18:34:18 +02006750config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006751
Stefan Weildbd99ae2013-01-01 18:33:44 +01006752echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6753
Juan Quintela98ec69a2009-07-16 18:34:18 +02006754echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006755echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006756
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006757echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006758echo "prefix=$prefix" >> $config_host_mak
6759echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006760echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006761echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006762echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006763echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006764echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006765echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006766echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006767echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006768echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006769echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006770if test "$mingw32" = "no" ; then
6771 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6772fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006773echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006774echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006775echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006776echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006777echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006778echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006779echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006780echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006781echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006782
Juan Quintela98ec69a2009-07-16 18:34:18 +02006783echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006784
Paolo Bonzinif3494742019-01-23 14:56:17 +08006785if test "$default_devices" = "yes" ; then
6786 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6787else
6788 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6789fi
aurel32f8393942009-04-13 18:45:38 +00006790if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006791 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006792fi
aliguori1625af82009-04-05 17:41:02 +00006793if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006794 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006795fi
bellard7d132992003-03-06 23:23:54 +00006796if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006797 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006798fi
bellard67b915a2004-03-31 23:37:16 +00006799if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006800 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006801 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006802 version_major=${rc_version%%.*}
6803 rc_version=${rc_version#*.}
6804 version_minor=${rc_version%%.*}
6805 rc_version=${rc_version#*.}
6806 version_subminor=${rc_version%%.*}
6807 version_micro=0
6808 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6809 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006810 if test "$guest_agent_with_vss" = "yes" ; then
6811 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006812 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006813 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6814 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006815 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006816 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006817 fi
Michael Roth1a349042015-08-26 11:14:31 -05006818 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006819 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006820 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6821 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6822 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6823 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6824 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6825 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6826 fi
pbrook210fa552007-02-27 21:04:49 +00006827else
Juan Quintela35f4df22009-07-27 16:13:07 +02006828 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006829fi
blueswir1128ab2f2008-08-15 18:33:42 +00006830
Mark McLoughlindffcb712009-10-22 17:49:11 +01006831if test "$linux" = "yes" ; then
6832 echo "CONFIG_LINUX=y" >> $config_host_mak
6833fi
6834
bellard83fb7ad2004-07-05 21:25:26 +00006835if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006836 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006837fi
malcb29fe3e2008-11-18 01:42:22 +00006838
bellardec530c82006-04-25 22:36:06 +00006839if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006840 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006841fi
Andreas Färber179cf402010-09-20 00:50:43 +02006842if test "$haiku" = "yes" ; then
6843 echo "CONFIG_HAIKU=y" >> $config_host_mak
6844fi
bellard97a847b2003-08-10 21:36:04 +00006845if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006846 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006847fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006848if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006849 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006850fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006851if test "$want_tools" = "yes" ; then
6852 echo "CONFIG_TOOLS=y" >> $config_host_mak
6853fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006854if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006855 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006856 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006857 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6858 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6859fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006860if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006861 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006862fi
ths8a16d272008-07-19 09:56:24 +00006863if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006864 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006865 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006866fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006867if test "$netmap" = "yes" ; then
6868 echo "CONFIG_NETMAP=y" >> $config_host_mak
6869fi
Gonglei015a33b2014-07-01 20:58:08 +08006870if test "$l2tpv3" = "yes" ; then
6871 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6872fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006873if test "$gprof" = "yes" ; then
6874 echo "CONFIG_GPROF=y" >> $config_host_mak
6875fi
Corey Bryant47e98652012-01-26 09:42:26 -05006876if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006877 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006878fi
Juan Quintela2358a492009-07-27 16:13:25 +02006879echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006880for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006881 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006882 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006883 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006884 echo "$def=m" >> $config_host_mak ;;
6885 *)
6886 echo "$def=y" >> $config_host_mak ;;
6887 esac
malc0c58ac12008-06-25 21:04:05 +00006888done
Fam Zhengb1149912017-09-07 16:29:13 +08006889echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6890echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6891echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6892echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6893echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006894if test "$audio_win_int" = "yes" ; then
6895 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6896fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006897echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6898echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006899if test "$vnc" = "yes" ; then
6900 echo "CONFIG_VNC=y" >> $config_host_mak
6901fi
aliguori2f9606b2009-03-06 20:27:28 +00006902if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006903 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006904fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006905if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006906 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006907fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006908if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006909 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006910fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006911if test "$xkbcommon" = "yes" ; then
6912 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6913 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6914fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006915if test "$xfs" = "yes" ; then
6916 echo "CONFIG_XFS=y" >> $config_host_mak
6917fi
Stefan Weil89138852016-05-16 15:10:20 +02006918qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006919echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006920echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006921echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006922echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006923if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006924 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006925fi
Fam Zheng17969262014-02-10 14:48:56 +08006926if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006927 # $shacmd can generate a hash started with digit, which the compiler doesn't
6928 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006929 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006930 echo "CONFIG_MODULES=y" >> $config_host_mak
6931fi
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006932if test "$module_upgrades" = "yes"; then
6933 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6934fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006935if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006936 echo "CONFIG_X11=y" >> $config_host_mak
6937 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6938 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6939fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006940if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006941 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006942 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006943 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006944 if test "$sdl_image" = "yes" ; then
6945 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6946 fi
bellard49ecc3f2007-11-07 19:25:15 +00006947fi
6948if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006949 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006950fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006951if test "$iconv" = "yes" ; then
6952 echo "CONFIG_ICONV=y" >> $config_host_mak
6953 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6954 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6955fi
balrog4d3b6f62008-02-10 16:33:14 +00006956if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006957 echo "CONFIG_CURSES=m" >> $config_host_mak
6958 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6959 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006960fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006961if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006962 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006963fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006964if test "$accept4" = "yes" ; then
6965 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6966fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306967if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006968 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306969fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006970if test "$eventfd" = "yes" ; then
6971 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6972fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006973if test "$memfd" = "yes" ; then
6974 echo "CONFIG_MEMFD=y" >> $config_host_mak
6975fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006976if test "$have_usbfs" = "yes" ; then
6977 echo "CONFIG_USBFS=y" >> $config_host_mak
6978fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006979if test "$fallocate" = "yes" ; then
6980 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6981fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006982if test "$fallocate_punch_hole" = "yes" ; then
6983 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6984fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006985if test "$fallocate_zero_range" = "yes" ; then
6986 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6987fi
Kevin Wolfed911432014-09-29 17:12:59 +02006988if test "$posix_fallocate" = "yes" ; then
6989 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6990fi
Peter Maydellc727f472011-01-06 11:05:10 +00006991if test "$sync_file_range" = "yes" ; then
6992 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6993fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006994if test "$fiemap" = "yes" ; then
6995 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6996fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006997if test "$dup3" = "yes" ; then
6998 echo "CONFIG_DUP3=y" >> $config_host_mak
6999fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01007000if test "$ppoll" = "yes" ; then
7001 echo "CONFIG_PPOLL=y" >> $config_host_mak
7002fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007003if test "$prctl_pr_set_timerslack" = "yes" ; then
7004 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7005fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007006if test "$epoll" = "yes" ; then
7007 echo "CONFIG_EPOLL=y" >> $config_host_mak
7008fi
7009if test "$epoll_create1" = "yes" ; then
7010 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7011fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007012if test "$sendfile" = "yes" ; then
7013 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7014fi
Riku Voipio51834342014-06-22 11:25:42 +01007015if test "$timerfd" = "yes" ; then
7016 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7017fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007018if test "$setns" = "yes" ; then
7019 echo "CONFIG_SETNS=y" >> $config_host_mak
7020fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007021if test "$clock_adjtime" = "yes" ; then
7022 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7023fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007024if test "$syncfs" = "yes" ; then
7025 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7026fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007027if test "$kcov" = "yes" ; then
7028 echo "CONFIG_KCOV=y" >> $config_host_mak
7029fi
aurel323b3f24a2009-04-15 16:12:13 +00007030if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007031 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007032fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007033if test "$inotify1" = "yes" ; then
7034 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7035fi
Peter Maydell401bc052017-09-05 13:19:32 +01007036if test "$sem_timedwait" = "yes" ; then
7037 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7038fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007039if test "$strchrnul" = "yes" ; then
7040 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7041fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007042if test "$st_atim" = "yes" ; then
7043 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7044fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007045if test "$byteswap_h" = "yes" ; then
7046 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7047fi
7048if test "$bswap_h" = "yes" ; then
7049 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7050fi
Alexander Graf769ce762009-05-11 17:41:42 +02007051if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007052 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007053 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007054 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007055fi
aurel322e4d9fb2008-04-08 06:01:02 +00007056if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007057 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007058 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007059fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007060if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007061 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007062 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007063 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007064 if test "$gtk_gl" = "yes" ; then
7065 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7066 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007067fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007068if test "$gio" = "yes" ; then
7069 echo "CONFIG_GIO=y" >> $config_host_mak
7070 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7071 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007072 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007073fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007074echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007075if test "$gnutls" = "yes" ; then
7076 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7077fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007078if test "$gcrypt" = "yes" ; then
7079 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007080 if test "$gcrypt_hmac" = "yes" ; then
7081 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7082 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007083fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007084if test "$nettle" = "yes" ; then
7085 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007086 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007087fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007088if test "$qemu_private_xts" = "yes" ; then
7089 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7090fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007091if test "$tasn1" = "yes" ; then
7092 echo "CONFIG_TASN1=y" >> $config_host_mak
7093fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007094if test "$auth_pam" = "yes" ; then
7095 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7096fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007097if test "$have_ifaddrs_h" = "yes" ; then
7098 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7099fi
Eric Blake6b39b062016-10-11 10:46:23 -05007100if test "$have_broken_size_max" = "yes" ; then
7101 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7102fi
Jan Vesely277abf12016-04-29 13:15:23 -04007103
7104# Work around a system header bug with some kernel/XFS header
7105# versions where they both try to define 'struct fsxattr':
7106# xfs headers will not try to redefine structs from linux headers
7107# if this macro is set.
7108if test "$have_fsxattr" = "yes" ; then
7109 echo "HAVE_FSXATTR=y" >> $config_host_mak
7110fi
Fam Zheng1efad062018-06-01 17:26:43 +08007111if test "$have_copy_file_range" = "yes" ; then
7112 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7113fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007114if test "$vte" = "yes" ; then
7115 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007116 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007117 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007118fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007119if test "$virglrenderer" = "yes" ; then
7120 echo "CONFIG_VIRGL=y" >> $config_host_mak
7121 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7122 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7123fi
aliguorie37630c2009-04-22 15:19:10 +00007124if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007125 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007126 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007127fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007128if test "$linux_aio" = "yes" ; then
7129 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7130fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007131if test "$linux_io_uring" = "yes" ; then
7132 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7133 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7134 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7135fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007136if test "$attr" = "yes" ; then
7137 echo "CONFIG_ATTR=y" >> $config_host_mak
7138fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007139if test "$libattr" = "yes" ; then
7140 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7141fi
Meador Inge983eef52012-02-24 14:00:42 +05307142if test "$virtfs" = "yes" ; then
7143 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007144fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007145if test "$mpath" = "yes" ; then
7146 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007147 if test "$mpathpersist_new_api" = "yes"; then
7148 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7149 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007150fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007151if test "$vhost_scsi" = "yes" ; then
7152 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7153fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007154if test "$vhost_net" = "yes" ; then
7155 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7156fi
7157if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007158 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007159fi
Gonglei042cea22018-03-01 21:46:28 +08007160if test "$vhost_crypto" = "yes" ; then
7161 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7162fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007163if test "$vhost_vsock" = "yes" ; then
7164 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7165fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007166if test "$vhost_kernel" = "yes" ; then
7167 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7168fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007169if test "$vhost_user" = "yes" ; then
7170 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7171fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007172if test "$vhost_user_fs" = "yes" ; then
7173 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7174fi
ths77755342008-11-27 15:45:16 +00007175if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007176 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007177fi
aliguoribf9298b2008-12-05 20:05:26 +00007178if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007179 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007180fi
aliguoriceb42de2009-04-07 18:43:28 +00007181if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007182 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007183fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007184if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007185 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007186fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007187if test "$membarrier" = "yes" ; then
7188 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7189fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007190if test "$signalfd" = "yes" ; then
7191 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7192fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007193if test "$optreset" = "yes" ; then
7194 echo "HAVE_OPTRESET=y" >> $config_host_mak
7195fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007196if test "$tcg" = "yes"; then
7197 echo "CONFIG_TCG=y" >> $config_host_mak
7198 if test "$tcg_interpreter" = "yes" ; then
7199 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7200 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007201fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007202if test "$fdatasync" = "yes" ; then
7203 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7204fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007205if test "$madvise" = "yes" ; then
7206 echo "CONFIG_MADVISE=y" >> $config_host_mak
7207fi
7208if test "$posix_madvise" = "yes" ; then
7209 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7210fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007211if test "$posix_memalign" = "yes" ; then
7212 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7213fi
bellard97a847b2003-08-10 21:36:04 +00007214
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007215if test "$spice" = "yes" ; then
7216 echo "CONFIG_SPICE=y" >> $config_host_mak
7217fi
7218
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007219if test "$smartcard" = "yes" ; then
7220 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007221 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7222 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007223fi
7224
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007225if test "$libusb" = "yes" ; then
7226 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007227 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7228 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007229fi
7230
Hans de Goede69354a82011-07-19 11:04:10 +02007231if test "$usb_redir" = "yes" ; then
7232 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007233 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7234 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007235fi
7236
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007237if test "$opengl" = "yes" ; then
7238 echo "CONFIG_OPENGL=y" >> $config_host_mak
7239 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007240 if test "$opengl_dmabuf" = "yes" ; then
7241 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7242 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007243fi
7244
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007245if test "$gbm" = "yes" ; then
7246 echo "CONFIG_GBM=y" >> $config_host_mak
7247 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7248 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7249fi
7250
7251
Yang Zhong5a22ab72017-12-20 21:16:46 +08007252if test "$malloc_trim" = "yes" ; then
7253 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7254fi
7255
Liang Li99f2dbd2016-03-08 13:53:16 +08007256if test "$avx2_opt" = "yes" ; then
7257 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7258fi
7259
Robert Hoo6b8cd442020-02-29 20:34:34 +08007260if test "$avx512f_opt" = "yes" ; then
7261 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7262fi
7263
qiaonuohan607dacd2014-02-18 14:11:30 +08007264if test "$lzo" = "yes" ; then
7265 echo "CONFIG_LZO=y" >> $config_host_mak
7266fi
7267
7268if test "$snappy" = "yes" ; then
7269 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7270fi
7271
Peter Wu6b383c02015-01-06 18:48:14 +01007272if test "$bzip2" = "yes" ; then
7273 echo "CONFIG_BZIP2=y" >> $config_host_mak
7274 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7275fi
7276
Julio Faracco83bc1f92018-11-05 13:08:04 -02007277if test "$lzfse" = "yes" ; then
7278 echo "CONFIG_LZFSE=y" >> $config_host_mak
7279 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7280fi
7281
Juan Quintela3a678482019-12-17 21:15:24 +01007282if test "$zstd" = "yes" ; then
7283 echo "CONFIG_ZSTD=y" >> $config_host_mak
7284fi
7285
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007286if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007287 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007288 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7289 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007290fi
7291
Peter Lieven6542aa92014-02-03 10:26:13 +01007292if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007293 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7294 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007295fi
7296
Eduardo Otubof7945732012-08-14 18:44:05 -03007297if test "$seccomp" = "yes"; then
7298 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007299 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7300 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007301fi
7302
bellard83fb7ad2004-07-05 21:25:26 +00007303# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007304if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007305 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007306fi
7307
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007308if test "$localtime_r" = "yes" ; then
7309 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7310fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007311if test "$qom_cast_debug" = "yes" ; then
7312 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7313fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007314if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007315 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007316 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7317 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007318fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007319
Peter Maydell7c2acc72013-04-08 12:11:27 +01007320echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007321if test "$coroutine_pool" = "yes" ; then
7322 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7323else
7324 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7325fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307326
Peter Lieven7d992e42016-09-27 11:58:45 +02007327if test "$debug_stack_usage" = "yes" ; then
7328 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7329fi
7330
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007331if test "$crypto_afalg" = "yes" ; then
7332 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7333fi
7334
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307335if test "$open_by_handle_at" = "yes" ; then
7336 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7337fi
7338
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307339if test "$linux_magic_h" = "yes" ; then
7340 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7341fi
7342
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007343if test "$pragma_diagnostic_available" = "yes" ; then
7344 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007345fi
7346
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007347if test "$valgrind_h" = "yes" ; then
7348 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7349fi
7350
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007351if test "$have_asan_iface_fiber" = "yes" ; then
7352 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7353fi
7354
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007355if test "$has_environ" = "yes" ; then
7356 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7357fi
7358
Richard Henderson76a347e2012-12-28 14:17:02 -08007359if test "$cpuid_h" = "yes" ; then
7360 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7361fi
7362
Richard Hendersonf5401662013-02-16 12:46:59 -08007363if test "$int128" = "yes" ; then
7364 echo "CONFIG_INT128=y" >> $config_host_mak
7365fi
7366
Richard Henderson7ebee432016-06-29 21:10:59 -07007367if test "$atomic128" = "yes" ; then
7368 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7369fi
7370
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007371if test "$cmpxchg128" = "yes" ; then
7372 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7373fi
7374
Richard Hendersondf79b992016-09-02 12:23:57 -07007375if test "$atomic64" = "yes" ; then
7376 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7377fi
7378
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007379if test "$attralias" = "yes" ; then
7380 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7381fi
7382
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007383if test "$getauxval" = "yes" ; then
7384 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7385fi
7386
Bharata B Raoeb100392012-09-24 14:42:45 +05307387if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007388 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007389 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7390 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307391fi
7392
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007393if test "$glusterfs_xlator_opt" = "yes" ; then
7394 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7395fi
7396
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307397if test "$glusterfs_discard" = "yes" ; then
7398 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7399fi
7400
Niels de Vosdf3a4292017-05-28 12:01:14 +05307401if test "$glusterfs_fallocate" = "yes" ; then
7402 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7403fi
7404
Bharata B Rao7c815372013-12-21 14:51:25 +05307405if test "$glusterfs_zerofill" = "yes" ; then
7406 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7407fi
7408
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007409if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7410 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7411fi
7412
Niels de Vos0e3b8912019-03-05 16:46:34 +01007413if test "$glusterfs_iocb_has_stat" = "yes" ; then
7414 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7415fi
7416
Pino Toscanob10d49d2019-06-20 22:08:40 +02007417if test "$libssh" = "yes" ; then
7418 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7419 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7420 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007421fi
7422
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007423if test "$live_block_migration" = "yes" ; then
7424 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7425fi
7426
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007427if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007428 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007429fi
7430
Lluís Vilanova5b808272014-05-27 15:02:14 +02007431echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7432if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007433 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307434fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007435if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007436 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7437 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007438 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007439fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007440if have_backend "log"; then
7441 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007442fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007443if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007444 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7445fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007446if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007447 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7448 if test "$trace_backend_stap" = "yes" ; then
7449 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7450 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007451fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007452if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007453 if test "$linux" = "yes" ; then
7454 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007455 else
Stewart Smith21684af2014-01-24 12:39:10 +11007456 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007457 fi
7458fi
Paul Durrant0a852412016-08-04 14:44:14 +01007459if have_backend "syslog"; then
7460 if test "$posix_syslog" = "yes" ; then
7461 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7462 else
7463 feature_not_found "syslog(trace backend)" "syslog not available"
7464 fi
7465fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007466echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7467
Michael R. Hines2da776d2013-07-22 10:01:54 -04007468if test "$rdma" = "yes" ; then
7469 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007470 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007471fi
7472
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007473if test "$pvrdma" = "yes" ; then
7474 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7475fi
7476
Laurent Vivier575b22b2016-06-02 22:14:15 +02007477if test "$have_rtnetlink" = "yes" ; then
7478 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7479fi
7480
Klim Kireeved279a02018-01-12 12:01:19 +03007481if test "$libxml2" = "yes" ; then
7482 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7483 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7484 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7485fi
7486
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007487if test "$replication" = "yes" ; then
7488 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7489fi
7490
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007491if test "$have_af_vsock" = "yes" ; then
7492 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7493fi
7494
Christopher Covington4d043512016-12-28 15:04:33 -05007495if test "$have_sysmacros" = "yes" ; then
7496 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7497fi
7498
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007499if test "$have_static_assert" = "yes" ; then
7500 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7501fi
7502
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007503if test "$have_utmpx" = "yes" ; then
7504 echo "HAVE_UTMPX=y" >> $config_host_mak
7505fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007506if test "$have_getrandom" = "yes" ; then
7507 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7508fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007509if test "$ivshmem" = "yes" ; then
7510 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7511fi
Richard Hendersone219c492017-09-28 09:01:23 -07007512if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007513 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7514fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007515if test "$debug_mutex" = "yes" ; then
7516 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7517fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007518
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007519# Hold two types of flag:
7520# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7521# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007522# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007523# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007524if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007525 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007526 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7527elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7528 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7529 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007530fi
7531
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007532if test "$vxhs" = "yes" ; then
7533 echo "CONFIG_VXHS=y" >> $config_host_mak
7534 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7535fi
7536
Junyan He17824402018-07-18 15:47:59 +08007537if test "$libpmem" = "yes" ; then
7538 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7539fi
7540
Jeff Cody2f740132018-11-07 07:36:44 +01007541if test "$bochs" = "yes" ; then
7542 echo "CONFIG_BOCHS=y" >> $config_host_mak
7543fi
7544if test "$cloop" = "yes" ; then
7545 echo "CONFIG_CLOOP=y" >> $config_host_mak
7546fi
7547if test "$dmg" = "yes" ; then
7548 echo "CONFIG_DMG=y" >> $config_host_mak
7549fi
7550if test "$qcow1" = "yes" ; then
7551 echo "CONFIG_QCOW1=y" >> $config_host_mak
7552fi
7553if test "$vdi" = "yes" ; then
7554 echo "CONFIG_VDI=y" >> $config_host_mak
7555fi
7556if test "$vvfat" = "yes" ; then
7557 echo "CONFIG_VVFAT=y" >> $config_host_mak
7558fi
7559if test "$qed" = "yes" ; then
7560 echo "CONFIG_QED=y" >> $config_host_mak
7561fi
7562if test "$parallels" = "yes" ; then
7563 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7564fi
7565if test "$sheepdog" = "yes" ; then
7566 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7567fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007568if test "$fuzzing" = "yes" ; then
7569 if test "$have_fuzzer" = "yes"; then
7570 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7571 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7572 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7573 else
7574 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7575 exit 1
7576 fi
7577fi
Jeff Cody2f740132018-11-07 07:36:44 +01007578
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007579if test "$plugins" = "yes" ; then
7580 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7581 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007582 # Copy the export object list to the build dir
7583 if test "$ld_dynamic_list" = "yes" ; then
7584 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7585 ld_symbols=qemu-plugins-ld.symbols
7586 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7587 elif test "$ld_exported_symbols_list" = "yes" ; then
7588 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7589 ld64_symbols=qemu-plugins-ld64.symbols
7590 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7591 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7592 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7593 else
7594 error_exit \
7595 "If \$plugins=yes, either \$ld_dynamic_list or " \
7596 "\$ld_exported_symbols_list should have been set to 'yes'."
7597 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007598fi
7599
Alex Bennéef48e5902020-03-16 17:21:48 +00007600if test -n "$gdb_bin" ; then
7601 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7602fi
7603
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007604if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007605 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007606elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007607 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007608elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007609 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007610elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007611 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007612elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007613 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007614elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007615 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007616else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007617 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007618fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007619
Juan Quintela98ec69a2009-07-16 18:34:18 +02007620echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007621echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007622echo "MAKE=$make" >> $config_host_mak
7623echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007624echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7625echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007626echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7627echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007628echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007629echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007630echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007631echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007632if $iasl -h > /dev/null 2>&1; then
7633 echo "IASL=$iasl" >> $config_host_mak
7634fi
Juan Quintela804edf22009-07-27 16:12:49 +02007635echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007636echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007637echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007638echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007639echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007640echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007641echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007642echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007643echo "OBJCOPY=$objcopy" >> $config_host_mak
7644echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007645echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007646echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007647echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007648echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007649echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007650echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007651echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007652echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007653echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007654if test "$sparse" = "yes" ; then
7655 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007656 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007657 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007658 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7659 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7660fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007661echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007662echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007663echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007664echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007665echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007666echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007667echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007668echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007669echo "DSOSUF=$DSOSUF" >> $config_host_mak
7670echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007671echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007672echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7673echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007674echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007675if test "$gcov" = "yes" ; then
7676 echo "CONFIG_GCOV=y" >> $config_host_mak
7677 echo "GCOV=$gcov_tool" >> $config_host_mak
7678fi
Juan Quintela804edf22009-07-27 16:12:49 +02007679
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007680if test "$libudev" != "no"; then
7681 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7682 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7683fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007684if test "$fuzzing" != "no"; then
7685 echo "CONFIG_FUZZ=y" >> $config_host_mak
7686 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7687 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7688fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007689
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007690if test "$edk2_blobs" = "yes" ; then
7691 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7692fi
7693
Peter Maydell6efd7512011-11-30 11:59:04 +00007694# use included Linux headers
7695if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007696 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007697 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007698 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007699 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007700 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007701 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007702 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007703 ;;
7704 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007705 linux_arch=s390
7706 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007707 aarch64)
7708 linux_arch=arm64
7709 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007710 mips64)
7711 linux_arch=mips
7712 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007713 *)
7714 # For most CPUs the kernel architecture name and QEMU CPU name match.
7715 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007716 ;;
7717 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007718 # For non-KVM architectures we will not have asm headers
7719 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7720 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7721 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007722fi
7723
bellard1d14ffa2005-10-30 18:58:22 +00007724for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007725target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007726config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007727target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007728target_aligned_only="no"
7729case "$target_name" in
7730 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7731 target_aligned_only="yes"
7732 ;;
7733esac
bellard97a847b2003-08-10 21:36:04 +00007734target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007735case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007736 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 +00007737 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007738 ;;
7739esac
bellard97a847b2003-08-10 21:36:04 +00007740target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007741target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007742target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007743target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007744case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007745 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007746 target_softmmu="yes"
7747 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007748 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007749 target_user_only="yes"
7750 target_linux_user="yes"
7751 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007752 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007753 target_user_only="yes"
7754 target_bsd_user="yes"
7755 ;;
pbrook9e407a82007-05-26 16:38:53 +00007756 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007757 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007758 exit 1
7759 ;;
7760esac
ths831b7822007-01-18 20:06:33 +00007761
bellard97a847b2003-08-10 21:36:04 +00007762mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007763echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007764
pbrooke5fe0c52006-06-11 13:32:59 +00007765bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007766mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007767interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007768gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007769
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007770TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007771TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007772TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007773
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007774case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007775 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007776 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307777 gdb_xml_files="i386-32bit.xml"
Laurent Vivier28988112020-03-10 11:33:56 +01007778 TARGET_SYSTBL_ABI=i386
aurel322408a522008-04-20 20:19:44 +00007779 ;;
7780 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007781 TARGET_BASE_ARCH=i386
Laurent Vivier8d62f352020-03-10 11:33:57 +01007782 TARGET_SYSTBL_ABI=common,64
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007783 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307784 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007785 ;;
7786 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007787 mttcg="yes"
Laurent Vivier6116aea2020-03-10 11:33:44 +01007788 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007789 ;;
7790 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007791 TARGET_ARCH=arm
Laurent Vivier5bcb4982020-03-10 11:33:50 +01007792 TARGET_SYSTBL_ABI=common,oabi
aurel322408a522008-04-20 20:19:44 +00007793 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007794 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007795 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007796 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007797 aarch64|aarch64_be)
7798 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007799 TARGET_BASE_ARCH=arm
7800 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007801 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007802 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 +01007803 ;;
aurel322408a522008-04-20 20:19:44 +00007804 cris)
aurel322408a522008-04-20 20:19:44 +00007805 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007806 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007807 mttcg="yes"
Laurent Vivier9566f4c2020-03-10 11:33:45 +01007808 TARGET_SYSTBL_ABI=common,32
Richard Henderson61766fe2016-12-15 11:26:14 -08007809 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007810 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007811 ;;
aurel322408a522008-04-20 20:19:44 +00007812 m68k)
aurel322408a522008-04-20 20:19:44 +00007813 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007814 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Laurent Vivier5b85cae2020-03-10 11:33:46 +01007815 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007816 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007817 microblaze|microblazeel)
7818 TARGET_ARCH=microblaze
Laurent Vivierddf0c4c2020-03-10 11:33:49 +01007819 TARGET_SYSTBL_ABI=common
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007820 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007821 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007822 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007823 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007824 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007825 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007826 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
Laurent Vivierc59716f2020-03-10 11:33:58 +01007827 TARGET_SYSTBL_ABI=o32
aurel322408a522008-04-20 20:19:44 +00007828 ;;
7829 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007830 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007831 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007832 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007833 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007834 echo "TARGET_ABI32=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007835 TARGET_SYSTBL_ABI=n32
aurel322408a522008-04-20 20:19:44 +00007836 ;;
7837 mips64|mips64el)
Alex Bennéea092a952020-03-23 16:15:09 +00007838 mttcg="no"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007839 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007840 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007841 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007842 TARGET_SYSTBL_ABI=n64
aurel322408a522008-04-20 20:19:44 +00007843 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007844 moxie)
7845 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007846 nios2)
7847 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007848 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007849 TARGET_ARCH=openrisc
7850 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007851 ;;
aurel322408a522008-04-20 20:19:44 +00007852 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007853 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Laurent Vivier76a691f2020-03-10 11:33:51 +01007854 TARGET_SYSTBL_ABI=common,nospu,32
aurel322408a522008-04-20 20:19:44 +00007855 ;;
aurel322408a522008-04-20 20:19:44 +00007856 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007857 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007858 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007859 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307860 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007861 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007862 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007863 ppc64le)
7864 TARGET_ARCH=ppc64
7865 TARGET_BASE_ARCH=ppc
7866 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007867 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307868 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007869 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 -05007870 ;;
aurel322408a522008-04-20 20:19:44 +00007871 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007872 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007873 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007874 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007875 TARGET_SYSTBL_ABI=common,nospu,32
Juan Quintela25be2102009-10-07 02:41:00 +02007876 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007877 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007878 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007879 riscv32)
7880 TARGET_BASE_ARCH=riscv
7881 TARGET_ABI_DIR=riscv
7882 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007883 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 +13007884 ;;
7885 riscv64)
7886 TARGET_BASE_ARCH=riscv
7887 TARGET_ABI_DIR=riscv
7888 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007889 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 +13007890 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08007891 rx)
7892 TARGET_ARCH=rx
7893 bflt="yes"
7894 target_compiler=$cross_cc_rx
7895 gdb_xml_files="rx-core.xml"
7896 ;;
aurel322408a522008-04-20 20:19:44 +00007897 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007898 TARGET_ARCH=sh4
Laurent Vivierd0c832f2020-03-10 11:33:48 +01007899 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007900 bflt="yes"
7901 ;;
7902 sparc)
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007903 TARGET_SYSTBL_ABI=common,32
aurel322408a522008-04-20 20:19:44 +00007904 ;;
7905 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007906 TARGET_BASE_ARCH=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007907 TARGET_SYSTBL_ABI=common,64
aurel322408a522008-04-20 20:19:44 +00007908 ;;
7909 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007910 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007911 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007912 TARGET_ABI_DIR=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007913 TARGET_SYSTBL_ABI=common,32
Juan Quintela25be2102009-10-07 02:41:00 +02007914 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007915 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007916 s390x)
Laurent Vivier318f3712020-03-10 11:33:53 +01007917 TARGET_SYSTBL_ABI=common,64
David Hildenbrand63685bc2018-01-29 13:56:20 +01007918 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007919 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 +01007920 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007921 tilegx)
7922 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007923 tricore)
7924 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007925 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007926 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007927 xtensa|xtensaeb)
7928 TARGET_ARCH=xtensa
Laurent Viviera4a93592020-03-10 11:33:47 +01007929 TARGET_SYSTBL_ABI=common
Max Filippov02e33e92018-10-19 18:40:20 -07007930 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007931 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007932 ;;
aurel322408a522008-04-20 20:19:44 +00007933 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007934 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007935 ;;
7936esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007937# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7938if [ "$TARGET_BASE_ARCH" = "" ]; then
7939 TARGET_BASE_ARCH=$TARGET_ARCH
7940fi
7941
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007942symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7943
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007944upper() {
7945 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7946}
7947
Stefan Weil89138852016-05-16 15:10:20 +02007948target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007949echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007950echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007951echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007952if [ "$TARGET_ABI_DIR" = "" ]; then
7953 TARGET_ABI_DIR=$TARGET_ARCH
7954fi
Juan Quintela25be2102009-10-07 02:41:00 +02007955echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007956if [ "$HOST_VARIANT_DIR" != "" ]; then
7957 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7958fi
Laurent Vivier4d6a8352020-03-10 11:33:43 +01007959if [ "$TARGET_SYSTBL_ABI" != "" ]; then
7960 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
7961fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007962
7963if supported_xen_target $target; then
7964 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007965 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007966 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007967 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007968 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007969else
7970 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007971fi
7972if supported_kvm_target $target; then
7973 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007974 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7975else
7976 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007977fi
7978if supported_hax_target $target; then
7979 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007980fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007981if supported_hvf_target $target; then
7982 echo "CONFIG_HVF=y" >> $config_target_mak
7983fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007984if supported_whpx_target $target; then
7985 echo "CONFIG_WHPX=y" >> $config_target_mak
7986fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007987if test "$target_aligned_only" = "yes" ; then
7988 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7989fi
bellardde83cd02003-06-15 20:25:43 +00007990if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007991 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007992fi
7993if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007994 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007995 if test "$mttcg" = "yes" ; then
7996 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7997 fi
bellardde83cd02003-06-15 20:25:43 +00007998fi
bellard997344f2003-10-27 21:10:39 +00007999if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008000 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01008001 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00008002fi
ths831b7822007-01-18 20:06:33 +00008003if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008004 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00008005fi
pbrook56aebc82008-10-11 17:55:29 +00008006list=""
8007if test ! -z "$gdb_xml_files" ; then
8008 for x in $gdb_xml_files; do
8009 list="$list $source_path/gdb-xml/$x"
8010 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02008011 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00008012fi
bellardde83cd02003-06-15 20:25:43 +00008013
Eric Blakee633a5c2019-02-04 20:39:37 -06008014if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02008015 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008016fi
blueswir184778502008-10-26 20:33:16 +00008017if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008018 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008019fi
bellard5b0753e2005-03-01 21:37:28 +00008020
Alex Bennée716a5072018-04-10 12:19:40 +01008021
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008022# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008023
Juan Quintela4afddb52009-08-03 14:46:45 +02008024cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008025ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008026
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008027disas_config() {
8028 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8029 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8030}
8031
Juan Quintela64656022009-08-03 14:46:53 +02008032for i in $ARCH $TARGET_BASE_ARCH ; do
8033 case "$i" in
8034 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008035 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008036 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008037 aarch64)
8038 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008039 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008040 fi
8041 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008042 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008043 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008044 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008045 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008046 fi
Juan Quintela64656022009-08-03 14:46:53 +02008047 ;;
8048 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008049 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008050 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008051 hppa)
8052 disas_config "HPPA"
8053 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008054 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008055 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008056 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008057 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008058 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008059 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008060 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008061 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008062 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008063 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008064 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008065 ;;
8066 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008067 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008068 if test -n "${cxx}"; then
8069 disas_config "NANOMIPS"
8070 fi
Juan Quintela64656022009-08-03 14:46:53 +02008071 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008072 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008073 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008074 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008075 nios2)
8076 disas_config "NIOS2"
8077 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008078 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008079 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008080 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008081 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008082 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008083 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008084 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008085 disas_config "RISCV"
8086 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08008087 rx)
8088 disas_config "RX"
8089 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008090 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008091 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008092 ;;
8093 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008094 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008095 ;;
8096 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008097 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008098 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008099 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008100 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008101 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008102 esac
8103done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008104if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008105 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008106fi
Juan Quintela64656022009-08-03 14:46:53 +02008107
Juan Quintela6ee71262009-08-03 14:46:47 +02008108case "$ARCH" in
8109alpha)
8110 # Ensure there's only a single GP
8111 cflags="-msmall-data $cflags"
8112;;
8113esac
8114
Juan Quintelad02c1db2009-08-03 14:46:50 +02008115if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008116 if test "$target_linux_user" = "yes" ; then
8117 cflags="-p $cflags"
8118 ldflags="-p $ldflags"
8119 fi
8120 if test "$target_softmmu" = "yes" ; then
8121 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02008122 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008123 fi
8124fi
8125
Christian Borntraegere9a35912017-08-23 12:16:23 +02008126# Newer kernels on s390 check for an S390_PGSTE program header and
8127# enable the pgste page table extensions in that case. This makes
8128# the vm.allocate_pgste sysctl unnecessary. We enable this program
8129# header if
8130# - we build on s390x
8131# - we build the system emulation for s390x (qemu-system-s390x)
8132# - KVM is enabled
8133# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008134if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8135 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008136 if ld_has --s390-pgste ; then
8137 ldflags="-Wl,--s390-pgste $ldflags"
8138 fi
8139fi
8140
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008141echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02008142echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008143
bellard97a847b2003-08-10 21:36:04 +00008144done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008145
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008146echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8147echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8148
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008149if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008150 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008151fi
Richard Hendersone219c492017-09-28 09:01:23 -07008152if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008153 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008154fi
8155if test -n "$LIBCAPSTONE"; then
8156 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8157fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008158
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008159if test "$numa" = "yes"; then
8160 echo "CONFIG_NUMA=y" >> $config_host_mak
8161fi
8162
John Snowfd0e6052015-03-25 18:57:39 -04008163if test "$ccache_cpp2" = "yes"; then
8164 echo "export CCACHE_CPP2=y" >> $config_host_mak
8165fi
8166
Peter Maydelle29e5c62018-11-02 11:52:38 +00008167# If we're using a separate build tree, set it up now.
8168# DIRS are directories which we simply mkdir in the build tree;
8169# LINKS are things to symlink back into the source tree
8170# (these can be both files and directories).
8171# Caution: do not add files or directories here using wildcards. This
8172# will result in problems later if a new file matching the wildcard is
8173# added to the source tree -- nothing will cause configure to be rerun
8174# so the build tree will be missing the link back to the new file, and
8175# tests might fail. Prefer to keep the relevant files in their own
8176# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008177DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8178DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008179DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008180DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008181DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008182LINKS="Makefile"
8183LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8184LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008185LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008186LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008187LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8188LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8189LINKS="$LINKS pc-bios/qemu-icon.bmp"
8190LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008191LINKS="$LINKS tests/acceptance tests/data"
8192LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008193LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008194for bios_file in \
8195 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008196 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008197 $source_path/pc-bios/*.rom \
8198 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008199 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008200 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008201 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008202 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008203 $source_path/pc-bios/palcode-*
8204do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008205 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008206done
8207mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008208for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008209 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008210 symlink "$source_path/$f" "$f"
8211 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008212done
Paul Brook1ad21342009-05-19 16:17:58 +01008213
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008214(for i in $cross_cc_vars; do
8215 export $i
8216done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008217export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008218$source_path/tests/tcg/configure.sh)
8219
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008220# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008221for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008222 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008223 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008224 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008225 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008226 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008227 echo "CC=$cc" >> $config_mak
8228 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008229 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008230 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008231 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008232 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008233 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008234done
8235
Max Reitz76c75602014-05-24 23:24:56 +02008236# set up qemu-iotests in this build directory
8237iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008238
8239echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8240echo >> "$iotests_common_env"
8241echo "export PYTHON='$python'" >> "$iotests_common_env"
8242
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008243# Save the configure command line for later reuse.
8244cat <<EOD >config.status
8245#!/bin/sh
8246# Generated by configure.
8247# Run this file to recreate the current configuration.
8248# Compiler output produced by configure, useful for debugging
8249# configure, is in config.log if it exists.
8250EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008251
8252preserve_env() {
8253 envname=$1
8254
8255 eval envval=\$$envname
8256
8257 if test -n "$envval"
8258 then
8259 echo "$envname='$envval'" >> config.status
8260 echo "export $envname" >> config.status
8261 else
8262 echo "unset $envname" >> config.status
8263 fi
8264}
8265
8266# Preserve various env variables that influence what
8267# features/build target configure will detect
8268preserve_env AR
8269preserve_env AS
8270preserve_env CC
8271preserve_env CPP
8272preserve_env CXX
8273preserve_env INSTALL
8274preserve_env LD
8275preserve_env LD_LIBRARY_PATH
8276preserve_env LIBTOOL
8277preserve_env MAKE
8278preserve_env NM
8279preserve_env OBJCOPY
8280preserve_env PATH
8281preserve_env PKG_CONFIG
8282preserve_env PKG_CONFIG_LIBDIR
8283preserve_env PKG_CONFIG_PATH
8284preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008285preserve_env SDL2_CONFIG
8286preserve_env SMBD
8287preserve_env STRIP
8288preserve_env WINDRES
8289
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008290printf "exec" >>config.status
8291printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008292echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008293chmod +x config.status
8294
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008295rm -r "$TMPDIR1"