blob: 1cdc439a575cde7cf658dfd71ee3cebdfd3ca666 [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"
2132 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002133 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002134 fi
2135 else
2136 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002137 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002138 else
2139 echo "Disabling PIE due to missing toolchain support"
2140 pie="no"
2141 fi
2142 fi
2143fi
2144
Paolo Bonzini09dada42013-04-17 16:26:47 +02002145##########################################
2146# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2147# use i686 as default anyway, but for those that don't, an explicit
2148# specification is necessary
2149
2150if test "$cpu" = "i386"; then
2151 cat > $TMPC << EOF
2152static int sfaa(int *ptr)
2153{
2154 return __sync_fetch_and_and(ptr, 0);
2155}
2156
2157int main(void)
2158{
2159 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002160 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002161 sfaa(&val);
2162 return val;
2163}
2164EOF
2165 if ! compile_prog "" "" ; then
2166 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2167 fi
2168fi
2169
2170#########################################
bellardec530c82006-04-25 22:36:06 +00002171# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002172
bellardec530c82006-04-25 22:36:06 +00002173if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002174 if has $install; then
2175 :
2176 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002177 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2178 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2179 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002180 fi
Stefan Weil89138852016-05-16 15:10:20 +02002181 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002182 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2183 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2184 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002185 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002186 if has ar; then
2187 :
2188 else
bellardec530c82006-04-25 22:36:06 +00002189 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002190 error_exit "No path includes ar" \
2191 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002192 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002193 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002194 fi
ths5fafdf22007-09-16 21:08:06 +00002195fi
bellardec530c82006-04-25 22:36:06 +00002196
Stefan Weilafb63eb2012-09-26 22:04:38 +02002197if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002198 for target in $default_target_list; do
2199 supported_target $target 2>/dev/null && \
2200 target_list="$target_list $target"
2201 done
2202 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002203else
Stefan Weil89138852016-05-16 15:10:20 +02002204 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002205 for target in $target_list; do
2206 # Check that we recognised the target name; this allows a more
2207 # friendly error message than if we let it fall through.
2208 case " $default_target_list " in
2209 *" $target "*)
2210 ;;
2211 *)
2212 error_exit "Unknown target name '$target'"
2213 ;;
2214 esac
2215 supported_target $target || exit 1
2216 done
bellard5327cf42005-01-10 23:18:50 +00002217fi
Peter Maydell25b48332013-05-20 16:16:16 +01002218
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002219# see if system emulation was really requested
2220case " $target_list " in
2221 *"-softmmu "*) softmmu=yes
2222 ;;
2223 *) softmmu=no
2224 ;;
2225esac
bellard5327cf42005-01-10 23:18:50 +00002226
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002227for target in $target_list; do
2228 case "$target" in
2229 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2230 edk2_blobs="yes"
2231 ;;
2232 esac
2233done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002234# The EDK2 binaries are compressed with bzip2
2235if test "$edk2_blobs" = "yes" && ! has bzip2; then
2236 error_exit "The bzip2 program is required for building QEMU"
2237fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002238
Juan Quintela249247c2009-08-12 18:20:25 +02002239feature_not_found() {
2240 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002241 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002242
Peter Maydell76ad07a2013-04-08 12:11:26 +01002243 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002244 "configure was not able to find it." \
2245 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002246}
2247
bellard7d132992003-03-06 23:23:54 +00002248# ---
2249# big/little endian test
2250cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002251short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2252short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2253extern int foo(short *, short *);
2254int main(int argc, char *argv[]) {
2255 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002256}
2257EOF
2258
Mike Frysinger61cc9192013-06-30 23:30:18 -04002259if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002260 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002261 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002262 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002263 bigendian="no"
2264 else
2265 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002266 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002267else
2268 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002269fi
2270
Juan Quintelab0a47e72009-08-12 18:29:49 +02002271##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002272# system tools
2273if test -z "$want_tools"; then
2274 if test "$softmmu" = "no"; then
2275 want_tools=no
2276 else
2277 want_tools=yes
2278 fi
2279fi
2280
2281##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002282# cocoa implies not SDL or GTK
2283# (the cocoa UI code currently assumes it is always the active UI
2284# and doesn't interact well with other UI frontend code)
2285if test "$cocoa" = "yes"; then
2286 if test "$sdl" = "yes"; then
2287 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2288 fi
2289 if test "$gtk" = "yes"; then
2290 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2291 fi
2292 gtk=no
2293 sdl=no
2294fi
2295
Eric Blake6b39b062016-10-11 10:46:23 -05002296# Some versions of Mac OS X incorrectly define SIZE_MAX
2297cat > $TMPC << EOF
2298#include <stdint.h>
2299#include <stdio.h>
2300int main(int argc, char *argv[]) {
2301 return printf("%zu", SIZE_MAX);
2302}
2303EOF
2304have_broken_size_max=no
2305if ! compile_object -Werror ; then
2306 have_broken_size_max=yes
2307fi
2308
Peter Maydella30878e2015-08-14 16:10:52 +01002309##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002310# L2TPV3 probe
2311
2312cat > $TMPC <<EOF
2313#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002314#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002315int main(void) { return sizeof(struct mmsghdr); }
2316EOF
2317if compile_prog "" "" ; then
2318 l2tpv3=yes
2319else
2320 l2tpv3=no
2321fi
2322
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002323#########################################
2324# vhost interdependencies and host support
2325
2326# vhost backends
2327test "$vhost_user" = "" && vhost_user=yes
2328if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2329 error_exit "vhost-user isn't available on win32"
2330fi
2331test "$vhost_kernel" = "" && vhost_kernel=$linux
2332if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2333 error_exit "vhost-kernel is only available on Linux"
2334fi
2335
2336# vhost-kernel devices
2337test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2338if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2339 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2340fi
2341test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2342if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2343 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2344fi
2345
2346# vhost-user backends
2347test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2348if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2349 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2350fi
2351test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2352if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2353 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2354fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002355test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2356if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2357 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2358fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002359
2360# OR the vhost-kernel and vhost-user values for simplicity
2361if test "$vhost_net" = ""; then
2362 test "$vhost_net_user" = "yes" && vhost_net=yes
2363 test "$vhost_kernel" = "yes" && vhost_net=yes
2364fi
2365
Gonglei015a33b2014-07-01 20:58:08 +08002366##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002367# MinGW / Mingw-w64 localtime_r/gmtime_r check
2368
2369if test "$mingw32" = "yes"; then
2370 # Some versions of MinGW / Mingw-w64 lack localtime_r
2371 # and gmtime_r entirely.
2372 #
2373 # Some versions of Mingw-w64 define a macro for
2374 # localtime_r/gmtime_r.
2375 #
2376 # Some versions of Mingw-w64 will define functions
2377 # for localtime_r/gmtime_r, but only if you have
2378 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2379 # though, unistd.h and pthread.h both define
2380 # that for you.
2381 #
2382 # So this #undef localtime_r and #include <unistd.h>
2383 # are not in fact redundant.
2384cat > $TMPC << EOF
2385#include <unistd.h>
2386#include <time.h>
2387#undef localtime_r
2388int main(void) { localtime_r(NULL, NULL); return 0; }
2389EOF
2390 if compile_prog "" "" ; then
2391 localtime_r="yes"
2392 else
2393 localtime_r="no"
2394 fi
2395fi
2396
2397##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002398# pkg-config probe
2399
2400if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002401 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002402fi
2403
2404##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002405# NPTL probe
2406
Peter Maydell24cb36a2013-07-16 18:45:00 +01002407if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002408 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002409#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002410#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002411int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002412#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2413#error bork
2414#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002415 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002416}
2417EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002418 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002419 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002420 fi
pbrookbd0c5662008-05-29 14:34:11 +00002421fi
2422
balrogac629222008-10-11 09:56:04 +00002423##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002424# lzo check
2425
2426if test "$lzo" != "no" ; then
2427 cat > $TMPC << EOF
2428#include <lzo/lzo1x.h>
2429int main(void) { lzo_version(); return 0; }
2430EOF
2431 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002432 libs_softmmu="$libs_softmmu -llzo2"
2433 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002434 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002435 if test "$lzo" = "yes"; then
2436 feature_not_found "liblzo2" "Install liblzo2 devel"
2437 fi
2438 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002439 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002440fi
2441
2442##########################################
2443# snappy check
2444
2445if test "$snappy" != "no" ; then
2446 cat > $TMPC << EOF
2447#include <snappy-c.h>
2448int main(void) { snappy_max_compressed_length(4096); return 0; }
2449EOF
2450 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002451 libs_softmmu="$libs_softmmu -lsnappy"
2452 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002453 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002454 if test "$snappy" = "yes"; then
2455 feature_not_found "libsnappy" "Install libsnappy devel"
2456 fi
2457 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002458 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002459fi
2460
2461##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002462# bzip2 check
2463
2464if test "$bzip2" != "no" ; then
2465 cat > $TMPC << EOF
2466#include <bzlib.h>
2467int main(void) { BZ2_bzlibVersion(); return 0; }
2468EOF
2469 if compile_prog "" "-lbz2" ; then
2470 bzip2="yes"
2471 else
2472 if test "$bzip2" = "yes"; then
2473 feature_not_found "libbzip2" "Install libbzip2 devel"
2474 fi
2475 bzip2="no"
2476 fi
2477fi
2478
2479##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002480# lzfse check
2481
2482if test "$lzfse" != "no" ; then
2483 cat > $TMPC << EOF
2484#include <lzfse.h>
2485int main(void) { lzfse_decode_scratch_size(); return 0; }
2486EOF
2487 if compile_prog "" "-llzfse" ; then
2488 lzfse="yes"
2489 else
2490 if test "$lzfse" = "yes"; then
2491 feature_not_found "lzfse" "Install lzfse devel"
2492 fi
2493 lzfse="no"
2494 fi
2495fi
2496
2497##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002498# zstd check
2499
2500if test "$zstd" != "no" ; then
Juan Quintela297254c2020-03-10 12:14:31 +01002501 libzstd_minver="1.4.0"
2502 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
Juan Quintela3a678482019-12-17 21:15:24 +01002503 zstd_cflags="$($pkg_config --cflags libzstd)"
2504 zstd_libs="$($pkg_config --libs libzstd)"
2505 LIBS="$zstd_libs $LIBS"
2506 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2507 zstd="yes"
2508 else
2509 if test "$zstd" = "yes" ; then
2510 feature_not_found "libzstd" "Install libzstd devel"
2511 fi
2512 zstd="no"
2513 fi
2514fi
2515
2516##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002517# libseccomp check
2518
2519if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002520 libseccomp_minver="2.3.0"
2521 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002522 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2523 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002524 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002525 else
Andrew Jones693e5912015-09-30 11:59:18 -04002526 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002527 feature_not_found "libseccomp" \
2528 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002529 fi
2530 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002531 fi
2532fi
2533##########################################
aliguorie37630c2009-04-22 15:19:10 +00002534# xen probe
2535
Juan Quintelafc321b42009-08-12 18:29:55 +02002536if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002537 # Check whether Xen library path is specified via --extra-ldflags to avoid
2538 # overriding this setting with pkg-config output. If not, try pkg-config
2539 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002540
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002541 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2542 $pkg_config --exists xencontrol ; then
2543 xen_ctrl_version="$(printf '%d%02d%02d' \
2544 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2545 xen=yes
2546 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2547 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002548 if $pkg_config --exists xentoolcore; then
2549 xen_pc="$xen_pc xentoolcore"
2550 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002551 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2552 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002553 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002554
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002555 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002556 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002557
2558 # First we test whether Xen headers and libraries are available.
2559 # If no, we are done and there is no Xen support.
2560 # If yes, more tests are run to detect the Xen version.
2561
2562 # Xen (any)
2563 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002564#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002565int main(void) {
2566 return 0;
2567}
2568EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002569 if ! compile_prog "" "$xen_libs" ; then
2570 # Xen not found
2571 if test "$xen" = "yes" ; then
2572 feature_not_found "xen" "Install xen devel"
2573 fi
2574 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002575
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002576 # Xen unstable
2577 elif
2578 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002579#undef XC_WANT_COMPAT_DEVICEMODEL_API
2580#define __XEN_TOOLS__
2581#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002582#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002583int main(void) {
2584 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002585 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002586
2587 xd = xendevicemodel_open(0, 0);
2588 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2589
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002590 xfmem = xenforeignmemory_open(0, 0);
2591 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2592
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002593 return 0;
2594}
2595EOF
2596 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2597 then
2598 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2599 xen_ctrl_version=41100
2600 xen=yes
2601 elif
2602 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002603#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2604#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002605#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002606int main(void) {
2607 xenforeignmemory_handle *xfmem;
2608
2609 xfmem = xenforeignmemory_open(0, 0);
2610 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002611 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002612
2613 return 0;
2614}
2615EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002616 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002617 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002618 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002619 xen_ctrl_version=41000
2620 xen=yes
2621 elif
2622 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002623#undef XC_WANT_COMPAT_DEVICEMODEL_API
2624#define __XEN_TOOLS__
2625#include <xendevicemodel.h>
2626int main(void) {
2627 xendevicemodel_handle *xd;
2628
2629 xd = xendevicemodel_open(0, 0);
2630 xendevicemodel_close(xd);
2631
2632 return 0;
2633}
2634EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002635 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2636 then
2637 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2638 xen_ctrl_version=40900
2639 xen=yes
2640 elif
2641 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002642/*
2643 * If we have stable libs the we don't want the libxc compat
2644 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002645 *
2646 * Also, check if xengnttab_grant_copy_segment_t is defined and
2647 * grant copy operation is implemented.
2648 */
2649#undef XC_WANT_COMPAT_EVTCHN_API
2650#undef XC_WANT_COMPAT_GNTTAB_API
2651#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2652#include <xenctrl.h>
2653#include <xenstore.h>
2654#include <xenevtchn.h>
2655#include <xengnttab.h>
2656#include <xenforeignmemory.h>
2657#include <stdint.h>
2658#include <xen/hvm/hvm_info_table.h>
2659#if !defined(HVM_MAX_VCPUS)
2660# error HVM_MAX_VCPUS not defined
2661#endif
2662int main(void) {
2663 xc_interface *xc = NULL;
2664 xenforeignmemory_handle *xfmem;
2665 xenevtchn_handle *xe;
2666 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002667 xengnttab_grant_copy_segment_t* seg = NULL;
2668
2669 xs_daemon_open();
2670
2671 xc = xc_interface_open(0, 0, 0);
2672 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2673 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2674 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2675 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002676
2677 xfmem = xenforeignmemory_open(0, 0);
2678 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2679
2680 xe = xenevtchn_open(0, 0);
2681 xenevtchn_fd(xe);
2682
2683 xg = xengnttab_open(0, 0);
2684 xengnttab_grant_copy(xg, 0, seg);
2685
2686 return 0;
2687}
2688EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002689 compile_prog "" "$xen_libs $xen_stable_libs"
2690 then
2691 xen_ctrl_version=40800
2692 xen=yes
2693 elif
2694 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002695/*
2696 * If we have stable libs the we don't want the libxc compat
2697 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002698 */
2699#undef XC_WANT_COMPAT_EVTCHN_API
2700#undef XC_WANT_COMPAT_GNTTAB_API
2701#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2702#include <xenctrl.h>
2703#include <xenstore.h>
2704#include <xenevtchn.h>
2705#include <xengnttab.h>
2706#include <xenforeignmemory.h>
2707#include <stdint.h>
2708#include <xen/hvm/hvm_info_table.h>
2709#if !defined(HVM_MAX_VCPUS)
2710# error HVM_MAX_VCPUS not defined
2711#endif
2712int main(void) {
2713 xc_interface *xc = NULL;
2714 xenforeignmemory_handle *xfmem;
2715 xenevtchn_handle *xe;
2716 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002717
2718 xs_daemon_open();
2719
2720 xc = xc_interface_open(0, 0, 0);
2721 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2722 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2723 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2724 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002725
2726 xfmem = xenforeignmemory_open(0, 0);
2727 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2728
2729 xe = xenevtchn_open(0, 0);
2730 xenevtchn_fd(xe);
2731
2732 xg = xengnttab_open(0, 0);
2733 xengnttab_map_grant_ref(xg, 0, 0, 0);
2734
2735 return 0;
2736}
2737EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002738 compile_prog "" "$xen_libs $xen_stable_libs"
2739 then
2740 xen_ctrl_version=40701
2741 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002742
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002743 # Xen 4.6
2744 elif
2745 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002746#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002747#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002748#include <stdint.h>
2749#include <xen/hvm/hvm_info_table.h>
2750#if !defined(HVM_MAX_VCPUS)
2751# error HVM_MAX_VCPUS not defined
2752#endif
2753int main(void) {
2754 xc_interface *xc;
2755 xs_daemon_open();
2756 xc = xc_interface_open(0, 0, 0);
2757 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2758 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002759 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002760 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002761 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002762 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002763 return 0;
2764}
2765EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002766 compile_prog "" "$xen_libs"
2767 then
2768 xen_ctrl_version=40600
2769 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002770
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002771 # Xen 4.5
2772 elif
2773 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002774#include <xenctrl.h>
2775#include <xenstore.h>
2776#include <stdint.h>
2777#include <xen/hvm/hvm_info_table.h>
2778#if !defined(HVM_MAX_VCPUS)
2779# error HVM_MAX_VCPUS not defined
2780#endif
2781int main(void) {
2782 xc_interface *xc;
2783 xs_daemon_open();
2784 xc = xc_interface_open(0, 0, 0);
2785 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2786 xc_gnttab_open(NULL, 0);
2787 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2788 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002789 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2790 return 0;
2791}
2792EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002793 compile_prog "" "$xen_libs"
2794 then
2795 xen_ctrl_version=40500
2796 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002797
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002798 elif
2799 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002800#include <xenctrl.h>
2801#include <xenstore.h>
2802#include <stdint.h>
2803#include <xen/hvm/hvm_info_table.h>
2804#if !defined(HVM_MAX_VCPUS)
2805# error HVM_MAX_VCPUS not defined
2806#endif
2807int main(void) {
2808 xc_interface *xc;
2809 xs_daemon_open();
2810 xc = xc_interface_open(0, 0, 0);
2811 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2812 xc_gnttab_open(NULL, 0);
2813 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2814 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002815 return 0;
2816}
2817EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002818 compile_prog "" "$xen_libs"
2819 then
2820 xen_ctrl_version=40200
2821 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002822
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002823 else
2824 if test "$xen" = "yes" ; then
2825 feature_not_found "xen (unsupported version)" \
2826 "Install a supported xen (xen 4.2 or newer)"
2827 fi
2828 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002829 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002830
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002831 if test "$xen" = yes; then
2832 if test $xen_ctrl_version -ge 40701 ; then
2833 libs_softmmu="$xen_stable_libs $libs_softmmu"
2834 fi
2835 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002836 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002837 fi
aliguorie37630c2009-04-22 15:19:10 +00002838fi
2839
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002840if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002841 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002842 xen_pci_passthrough=yes
2843 else
2844 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002845 error_exit "User requested feature Xen PCI Passthrough" \
2846 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002847 fi
2848 xen_pci_passthrough=no
2849 fi
2850fi
2851
aliguorie37630c2009-04-22 15:19:10 +00002852##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002853# Windows Hypervisor Platform accelerator (WHPX) check
2854if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002855 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002856 whpx="yes"
2857 else
2858 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002859 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002860 fi
2861 whpx="no"
2862 fi
2863fi
2864
2865##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002866# Sparse probe
2867if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002868 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002869 sparse=yes
2870 else
2871 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002872 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002873 fi
2874 sparse=no
2875 fi
2876fi
2877
2878##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002879# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002880if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002881 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002882 x11_cflags=$($pkg_config --cflags x11)
2883 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002884fi
2885
2886##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002887# GTK probe
2888
2889if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002890 gtkpackage="gtk+-3.0"
2891 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002892 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002893 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002894 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2895 gtk_libs=$($pkg_config --libs $gtkpackage)
2896 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002897 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002898 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002899 gtk_cflags="$gtk_cflags $x11_cflags"
2900 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002901 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002902 gtk="yes"
2903 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002904 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002905 else
2906 gtk="no"
2907 fi
2908fi
2909
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002910
2911##########################################
2912# GNUTLS probe
2913
2914if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002915 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002916 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002917 gnutls_cflags=$($pkg_config --cflags gnutls)
2918 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002919 # Packaging for the static libraries is not always correct.
2920 # At least ubuntu 18.04 ships only shared libraries.
2921 write_c_skeleton
2922 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002923 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002924 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2925 pass="yes"
2926 fi
2927 fi
2928 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002929 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002930 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002931 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002932 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002933fi
2934
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002935
2936# If user didn't give a --disable/enable-gcrypt flag,
2937# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002938# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002939if test -z "$gcrypt"
2940then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002941 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002942 then
2943 gcrypt="no"
2944 fi
2945fi
2946
2947# If user didn't give a --disable/enable-nettle flag,
2948# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002949# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002950if test -z "$nettle"
2951then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002952 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002953 then
2954 nettle="no"
2955 fi
2956fi
2957
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002958has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002959 if ! has "libgcrypt-config"
2960 then
2961 return 1
2962 fi
2963
2964 if test -n "$cross_prefix"
2965 then
Stefan Weil89138852016-05-16 15:10:20 +02002966 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002967 if test "$host-" != $cross_prefix
2968 then
2969 return 1
2970 fi
2971 fi
2972
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002973 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2974 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2975
2976 if test $maj != 1 || test $min -lt 5
2977 then
2978 return 1
2979 fi
2980
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002981 return 0
2982}
2983
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002984
2985if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002986 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002987 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002988 nettle_cflags=$($pkg_config --cflags nettle)
2989 nettle_libs=$($pkg_config --libs nettle)
2990 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002991 # Link test to make sure the given libraries work (e.g for static).
2992 write_c_skeleton
2993 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002994 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002995 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2996 if test -z "$gcrypt"; then
2997 gcrypt="no"
2998 fi
2999 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003000 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003001 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01003002 if test "$pass" = "yes"
3003 then
3004 cat > $TMPC << EOF
3005#include <nettle/xts.h>
3006int main(void) {
3007 return 0;
3008}
3009EOF
3010 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3011 nettle_xts=yes
3012 qemu_private_xts=no
3013 fi
3014 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003015 if test "$pass" = "no" && test "$nettle" = "yes"; then
3016 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003017 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003018 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003019 fi
3020fi
3021
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003022if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003023 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003024 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003025 gcrypt_cflags=$(libgcrypt-config --cflags)
3026 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003027 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003028 # as it "spreads unnecessary dependencies" which in
3029 # turn breaks static builds...
3030 if test "$static" = "yes"
3031 then
3032 gcrypt_libs="$gcrypt_libs -lgpg-error"
3033 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003034
Richard Hendersona73e82e2019-05-09 18:24:35 -07003035 # Link test to make sure the given libraries work (e.g for static).
3036 write_c_skeleton
3037 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003038 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003039 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3040 pass="yes"
3041 fi
3042 fi
3043 if test "$pass" = "yes"; then
3044 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003045 cat > $TMPC << EOF
3046#include <gcrypt.h>
3047int main(void) {
3048 gcry_mac_hd_t handle;
3049 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3050 GCRY_MAC_FLAG_SECURE, NULL);
3051 return 0;
3052}
3053EOF
3054 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3055 gcrypt_hmac=yes
3056 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003057 cat > $TMPC << EOF
3058#include <gcrypt.h>
3059int main(void) {
3060 gcry_cipher_hd_t handle;
3061 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3062 return 0;
3063}
3064EOF
3065 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3066 gcrypt_xts=yes
3067 qemu_private_xts=no
3068 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003069 elif test "$gcrypt" = "yes"; then
3070 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003071 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003072 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003073 fi
3074fi
3075
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003076
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003077if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3078then
3079 error_exit "Only one of gcrypt & nettle can be enabled"
3080fi
3081
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003082##########################################
3083# libtasn1 - only for the TLS creds/session test suite
3084
3085tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003086tasn1_cflags=""
3087tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003088if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003089 tasn1_cflags=$($pkg_config --cflags libtasn1)
3090 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003091else
3092 tasn1=no
3093fi
3094
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003095
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003096##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003097# PAM probe
3098
3099if test "$auth_pam" != "no"; then
3100 cat > $TMPC <<EOF
3101#include <security/pam_appl.h>
3102#include <stdio.h>
3103int main(void) {
3104 const char *service_name = "qemu";
3105 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003106 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003107 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003108 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003109 return 0;
3110}
3111EOF
3112 if compile_prog "" "-lpam" ; then
3113 auth_pam=yes
3114 else
3115 if test "$auth_pam" = "yes"; then
3116 feature_not_found "PAM" "Install PAM development package"
3117 else
3118 auth_pam=no
3119 fi
3120 fi
3121fi
3122
3123##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003124# getifaddrs (for tests/test-io-channel-socket )
3125
3126have_ifaddrs_h=yes
3127if ! check_include "ifaddrs.h" ; then
3128 have_ifaddrs_h=no
3129fi
3130
3131##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003132# VTE probe
3133
3134if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003135 vteminversion="0.32.0"
3136 if $pkg_config --exists "vte-2.91"; then
3137 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003138 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003139 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003140 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003141 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003142 vte_cflags=$($pkg_config --cflags $vtepackage)
3143 vte_libs=$($pkg_config --libs $vtepackage)
3144 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003145 vte="yes"
3146 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003147 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003148 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003149 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003150 fi
3151fi
3152
3153##########################################
bellard11d9f692004-04-02 20:55:59 +00003154# SDL probe
3155
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003156# Look for sdl configuration program (pkg-config or sdl2-config). Try
3157# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003158
Peter Xuc6093a02018-04-10 13:40:34 +08003159sdl_probe ()
3160{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003161 if $pkg_config sdl2 --exists; then
3162 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003163 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003164 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003165 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003166 sdlversion=$($sdlconfig --version)
3167 else
3168 if test "$sdl" = "yes" ; then
3169 feature_not_found "sdl" "Install SDL2-devel"
3170 fi
3171 sdl=no
3172 # no need to do the rest
3173 return
3174 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003175 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003176 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3177 fi
3178
Juan Quintelaac119f92009-07-27 16:13:15 +02003179 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003180#include <SDL.h>
3181#undef main /* We don't want SDL to override our main() */
3182int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3183EOF
Stefan Weil89138852016-05-16 15:10:20 +02003184 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003185 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003186 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003187 if $pkg_config sdl2 --exists; then
3188 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003189 else
3190 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3191 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003192 else
Stefan Weil89138852016-05-16 15:10:20 +02003193 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003194 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003195 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003196 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003197
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003198 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003199 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003200 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003201 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3202 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003203 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003204 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003205 :
3206 else
3207 sdl=no
3208 fi
3209 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003210 else # sdl not found
3211 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003212 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003213 fi
3214 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003215 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003216}
3217
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003218sdl_image_probe ()
3219{
3220 if test "$sdl_image" != "no" ; then
3221 if $pkg_config SDL2_image --exists; then
3222 if test "$static" = "yes"; then
3223 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3224 else
3225 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3226 fi
3227 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3228 sdl_image=yes
3229
3230 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3231 sdl_libs="$sdl_libs $sdl_image_libs"
3232 else
3233 if test "$sdl_image" = "yes" ; then
3234 feature_not_found "sdl_image" "Install SDL Image devel"
3235 else
3236 sdl_image=no
3237 fi
3238 fi
3239 fi
3240}
3241
Peter Xuc6093a02018-04-10 13:40:34 +08003242if test "$sdl" != "no" ; then
3243 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003244fi
bellard11d9f692004-04-02 20:55:59 +00003245
aliguori5368a422009-03-03 17:37:21 +00003246if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003247 sdl_image_probe
3248else
3249 if test "$sdl_image" = "yes"; then
3250 echo "warning: SDL Image requested, but SDL is not available, disabling"
3251 fi
3252 sdl_image=no
3253fi
3254
3255if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003256 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003257#include <SDL.h>
3258#if defined(SDL_VIDEO_DRIVER_X11)
3259#include <X11/XKBlib.h>
3260#else
3261#error No x11 support
3262#endif
3263int main(void) { return 0; }
3264EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003265 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003266 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003267 sdl_cflags="$sdl_cflags $x11_cflags"
3268 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003269 fi
aliguori5368a422009-03-03 17:37:21 +00003270fi
3271
ths8f28f3f2007-01-05 21:25:54 +00003272##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003273# RDMA needs OpenFabrics libraries
3274if test "$rdma" != "no" ; then
3275 cat > $TMPC <<EOF
3276#include <rdma/rdma_cma.h>
3277int main(void) { return 0; }
3278EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003279 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003280 if compile_prog "" "$rdma_libs" ; then
3281 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003282 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003283 else
3284 if test "$rdma" = "yes" ; then
3285 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003286 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003287 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003288 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003289 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3290 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3291 fi
3292 rdma="no"
3293 fi
3294fi
3295
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003296##########################################
3297# PVRDMA detection
3298
3299cat > $TMPC <<EOF &&
3300#include <sys/mman.h>
3301
3302int
3303main(void)
3304{
3305 char buf = 0;
3306 void *addr = &buf;
3307 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3308
3309 return 0;
3310}
3311EOF
3312
3313if test "$rdma" = "yes" ; then
3314 case "$pvrdma" in
3315 "")
3316 if compile_prog "" ""; then
3317 pvrdma="yes"
3318 else
3319 pvrdma="no"
3320 fi
3321 ;;
3322 "yes")
3323 if ! compile_prog "" ""; then
3324 error_exit "PVRDMA is not supported since mremap is not implemented"
3325 fi
3326 pvrdma="yes"
3327 ;;
3328 "no")
3329 pvrdma="no"
3330 ;;
3331 esac
3332else
3333 if test "$pvrdma" = "yes" ; then
3334 error_exit "PVRDMA requires rdma suppport"
3335 fi
3336 pvrdma="no"
3337fi
ths8d5d2d42007-08-25 01:37:51 +00003338
Yuval Shaiaee108582019-08-18 16:21:06 +03003339# Let's see if enhanced reg_mr is supported
3340if test "$pvrdma" = "yes" ; then
3341
3342cat > $TMPC <<EOF &&
3343#include <infiniband/verbs.h>
3344
3345int
3346main(void)
3347{
3348 struct ibv_mr *mr;
3349 struct ibv_pd *pd = NULL;
3350 size_t length = 10;
3351 uint64_t iova = 0;
3352 int access = 0;
3353 void *addr = NULL;
3354
3355 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3356
3357 ibv_dereg_mr(mr);
3358
3359 return 0;
3360}
3361EOF
3362 if ! compile_prog "" "-libverbs"; then
3363 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3364 fi
3365fi
3366
ths8d5d2d42007-08-25 01:37:51 +00003367##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003368# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003369if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003370 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003371#include <sasl/sasl.h>
3372#include <stdio.h>
3373int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3374EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003375 # Assuming Cyrus-SASL installed in /usr prefix
Philippe Mathieu-Daudébd702ff2020-03-09 13:24:53 +01003376 # QEMU defines struct iovec in "qemu/osdep.h",
3377 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3378 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
Juan Quintelaea784e32009-08-12 18:20:29 +02003379 vnc_sasl_libs="-lsasl2"
3380 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3381 vnc_sasl=yes
3382 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003383 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003384 else
3385 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003386 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003387 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003388 vnc_sasl=no
3389 fi
aliguori2f9606b2009-03-06 20:27:28 +00003390fi
3391
3392##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003393# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003394if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003395cat > $TMPC <<EOF
3396#include <stdio.h>
3397#include <jpeglib.h>
3398int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3399EOF
3400 vnc_jpeg_cflags=""
3401 vnc_jpeg_libs="-ljpeg"
3402 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3403 vnc_jpeg=yes
3404 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003405 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003406 else
3407 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003408 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003409 fi
3410 vnc_jpeg=no
3411 fi
3412fi
3413
3414##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003415# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003416if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003417cat > $TMPC <<EOF
3418//#include <stdio.h>
3419#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003420#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003421int main(void) {
3422 png_structp png_ptr;
3423 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003424 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003425}
3426EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003427 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003428 vnc_png_cflags=$($pkg_config libpng --cflags)
3429 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003430 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003431 vnc_png_cflags=""
3432 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003433 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003434 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3435 vnc_png=yes
3436 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003437 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003438 else
3439 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003440 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003441 fi
3442 vnc_png=no
3443 fi
3444fi
3445
3446##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003447# xkbcommon probe
3448if test "$xkbcommon" != "no" ; then
3449 if $pkg_config xkbcommon --exists; then
3450 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3451 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3452 xkbcommon=yes
3453 else
3454 if test "$xkbcommon" = "yes" ; then
3455 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3456 fi
3457 xkbcommon=no
3458 fi
3459fi
3460
aliguori76655d62009-03-06 20:27:37 +00003461
3462##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003463# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003464if test "$xfs" != "no" ; then
3465 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003466#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003467#include <xfs/xfs.h>
3468int main(void)
3469{
3470 xfsctl(NULL, 0, 0, NULL);
3471 return 0;
3472}
3473EOF
3474 if compile_prog "" "" ; then
3475 xfs="yes"
3476 else
3477 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003478 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003479 fi
3480 xfs=no
3481 fi
3482fi
3483
3484##########################################
ths8a16d272008-07-19 09:56:24 +00003485# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003486if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003487 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003488 cat > $TMPC << EOF
3489#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003490int main(void)
3491{
3492 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003493 char s[] = "";
3494 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003495 return 0;
3496}
ths8a16d272008-07-19 09:56:24 +00003497EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003498 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003499 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003500 else
3501 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003502 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003503 fi
3504 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003505 fi
ths8a16d272008-07-19 09:56:24 +00003506fi
3507
3508##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003509# netmap support probe
3510# Apart from looking for netmap headers, we make sure that the host API version
3511# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3512# a minor/major version number. Minor new features will be marked with values up
3513# to 15, and if something happens that requires a change to the backend we will
3514# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003515if test "$netmap" != "no" ; then
3516 cat > $TMPC << EOF
3517#include <inttypes.h>
3518#include <net/if.h>
3519#include <net/netmap.h>
3520#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003521#if (NETMAP_API < 11) || (NETMAP_API > 15)
3522#error
3523#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003524int main(void) { return 0; }
3525EOF
3526 if compile_prog "" "" ; then
3527 netmap=yes
3528 else
3529 if test "$netmap" = "yes" ; then
3530 feature_not_found "netmap"
3531 fi
3532 netmap=no
3533 fi
3534fi
3535
3536##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003537# libcap-ng library probe
3538if test "$cap_ng" != "no" ; then
3539 cap_libs="-lcap-ng"
3540 cat > $TMPC << EOF
3541#include <cap-ng.h>
3542int main(void)
3543{
3544 capng_capability_to_name(CAPNG_EFFECTIVE);
3545 return 0;
3546}
3547EOF
3548 if compile_prog "" "$cap_libs" ; then
3549 cap_ng=yes
3550 libs_tools="$cap_libs $libs_tools"
3551 else
3552 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003553 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003554 fi
3555 cap_ng=no
3556 fi
3557fi
3558
3559##########################################
malcc2de5c92008-06-28 19:13:06 +00003560# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003561
Stefan Weil89138852016-05-16 15:10:20 +02003562audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003563for drv in $audio_drv_list; do
3564 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003565 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003566 if $pkg_config alsa --exists; then
3567 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003568 if test "$drv" = "try-alsa"; then
3569 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3570 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003571 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003572 if test "$drv" = "try-alsa"; then
3573 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3574 else
3575 error_exit "$drv check failed" \
3576 "Make sure to have the $drv libs and headers installed."
3577 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003578 fi
malcc2de5c92008-06-28 19:13:06 +00003579 ;;
3580
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003581 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003582 if $pkg_config libpulse --exists; then
3583 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003584 if test "$drv" = "try-pa"; then
3585 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3586 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003587 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003588 if test "$drv" = "try-pa"; then
3589 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3590 else
3591 error_exit "$drv check failed" \
3592 "Make sure to have the $drv libs and headers installed."
3593 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003594 fi
malcb8e59f12008-07-02 21:03:08 +00003595 ;;
3596
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003597 sdl)
3598 if test "$sdl" = "no"; then
3599 error_exit "sdl not found or disabled, can not use sdl audio driver"
3600 fi
3601 ;;
3602
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003603 try-sdl)
3604 if test "$sdl" = "no"; then
3605 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3606 else
3607 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3608 fi
3609 ;;
3610
Juan Quintela997e6902009-08-03 14:46:29 +02003611 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003612 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003613 ;;
3614
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003615 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003616 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003617 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003618 ;;
3619
3620 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003621 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003622 ;;
3623
malce4c63a62008-07-19 16:15:16 +00003624 *)
malc1c9b2a52008-07-19 16:57:30 +00003625 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003626 error_exit "Unknown driver '$drv' selected" \
3627 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003628 }
3629 ;;
malcc2de5c92008-06-28 19:13:06 +00003630 esac
3631done
ths8f28f3f2007-01-05 21:25:54 +00003632
balrog4d3b6f62008-02-10 16:33:14 +00003633##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003634# BrlAPI probe
3635
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003636if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003637 brlapi_libs="-lbrlapi"
3638 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003639#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003640#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003641int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3642EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003643 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003644 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003645 else
3646 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003647 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003648 fi
3649 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003650 fi
3651fi
aurel322e4d9fb2008-04-08 06:01:02 +00003652
3653##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003654# iconv probe
3655if test "$iconv" != "no" ; then
3656 cat > $TMPC << EOF
3657#include <iconv.h>
3658int main(void) {
3659 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3660 return conv != (iconv_t) -1;
3661}
3662EOF
3663 iconv_prefix_list="/usr/local:/usr"
3664 iconv_lib_list=":-liconv"
3665 IFS=:
3666 for iconv_prefix in $iconv_prefix_list; do
3667 IFS=:
3668 iconv_cflags="-I$iconv_prefix/include"
3669 iconv_ldflags="-L$iconv_prefix/lib"
3670 for iconv_link in $iconv_lib_list; do
3671 unset IFS
3672 iconv_lib="$iconv_ldflags $iconv_link"
3673 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3674 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3675 iconv_found=yes
3676 break
3677 fi
3678 done
3679 if test "$iconv_found" = yes ; then
3680 break
3681 fi
3682 done
3683 if test "$iconv_found" = "yes" ; then
3684 iconv=yes
3685 else
3686 if test "$iconv" = "yes" ; then
3687 feature_not_found "iconv" "Install iconv devel"
3688 fi
3689 iconv=no
3690 fi
3691fi
3692
3693##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003694# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003695if test "$iconv" = "no" ; then
3696 # curses will need iconv
3697 curses=no
3698fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003699if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003700 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003701 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3702 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003703 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003704 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003705 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003706 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003707 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003708 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003709#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003710#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003711#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003712#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003713int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003714 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003715 wchar_t wch = L'w';
3716 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003717 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003718 addwstr(L"wide chars\n");
3719 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003720 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003721 codeset = nl_langinfo(CODESET);
3722 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003723}
balrog4d3b6f62008-02-10 16:33:14 +00003724EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003725 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003726 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003727 # Make sure we get the wide character prototypes
3728 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003729 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003730 for curses_lib in $curses_lib_list; do
3731 unset IFS
3732 if compile_prog "$curses_inc" "$curses_lib" ; then
3733 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003734 break
3735 fi
3736 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003737 if test "$curses_found" = yes ; then
3738 break
3739 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003740 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003741 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003742 if test "$curses_found" = "yes" ; then
3743 curses=yes
3744 else
3745 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003746 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003747 fi
3748 curses=no
3749 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003750fi
balrog4d3b6f62008-02-10 16:33:14 +00003751
blueswir1414f0da2008-08-15 18:20:52 +00003752##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003753# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003754if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003755 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003756 curlconfig="$pkg_config libcurl"
3757 else
3758 curlconfig=curl-config
3759 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003760 cat > $TMPC << EOF
3761#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003762int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003763EOF
Stefan Weil89138852016-05-16 15:10:20 +02003764 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3765 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003766 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003767 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003768 else
3769 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003770 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003771 fi
3772 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003773 fi
3774fi # test "$curl"
3775
3776##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003777# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003778
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003779glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003780glib_modules=gthread-2.0
3781if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003782 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003783fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003784if test "$plugins" = yes; then
3785 glib_modules="$glib_modules gmodule-2.0"
3786fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003787
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003788# This workaround is required due to a bug in pkg-config file for glib as it
3789# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3790
Eric Blakee633a5c2019-02-04 20:39:37 -06003791if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003792 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3793fi
3794
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003795for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003796 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003797 glib_cflags=$($pkg_config --cflags $i)
3798 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003799 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003800 LIBS="$glib_libs $LIBS"
3801 libs_qga="$glib_libs $libs_qga"
3802 else
3803 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3804 fi
3805done
3806
Marc-André Lureauf876b762019-02-21 12:07:00 +01003807if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3808 gio=yes
3809 gio_cflags=$($pkg_config --cflags gio-2.0)
3810 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003811 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003812 if [ ! -x "$gdbus_codegen" ]; then
3813 gdbus_codegen=
3814 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003815else
3816 gio=no
3817fi
3818
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003819if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3820 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3821 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3822fi
3823
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003824# Sanity check that the current size_t matches the
3825# size that glib thinks it should be. This catches
3826# problems on multi-arch where people try to build
3827# 32-bit QEMU while pointing at 64-bit glib headers
3828cat > $TMPC <<EOF
3829#include <glib.h>
3830#include <unistd.h>
3831
3832#define QEMU_BUILD_BUG_ON(x) \
3833 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3834
3835int main(void) {
3836 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3837 return 0;
3838}
3839EOF
3840
Stefan Weil5919e032016-04-28 23:33:41 +02003841if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003842 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3843 "You probably need to set PKG_CONFIG_LIBDIR"\
3844 "to point to the right pkg-config files for your"\
3845 "build target"
3846fi
3847
John Snowbbbf2e02015-03-25 18:57:38 -04003848# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3849cat > $TMPC << EOF
3850#include <glib.h>
3851int main(void) { return 0; }
3852EOF
3853if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3854 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3855 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3856 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3857 fi
3858fi
3859
Eric Blake9bda6002020-03-17 12:55:34 -05003860# Silence clang warnings triggered by glib < 2.57.2
3861cat > $TMPC << EOF
3862#include <glib.h>
3863typedef struct Foo {
3864 int i;
3865} Foo;
3866static void foo_free(Foo *f)
3867{
3868 g_free(f);
3869}
3870G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3871int main(void) { return 0; }
3872EOF
3873if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3874 if cc_has_warning_flag "-Wno-unused-function"; then
3875 glib_cflags="$glib_cflags -Wno-unused-function"
3876 CFLAGS="$CFLAGS -Wno-unused-function"
3877 fi
3878fi
3879
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003880#########################################
3881# zlib check
3882
3883if test "$zlib" != "no" ; then
3884 if $pkg_config --exists zlib; then
3885 zlib_cflags=$($pkg_config --cflags zlib)
3886 zlib_libs=$($pkg_config --libs zlib)
3887 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3888 LIBS="$zlib_libs $LIBS"
3889 else
3890 cat > $TMPC << EOF
3891#include <zlib.h>
3892int main(void) { zlibVersion(); return 0; }
3893EOF
3894 if compile_prog "" "-lz" ; then
3895 LIBS="$LIBS -lz"
3896 else
3897 error_exit "zlib check failed" \
3898 "Make sure to have the zlib libs and headers installed."
3899 fi
3900 fi
3901fi
3902
Fam Zhenge26110c2014-02-10 14:48:57 +08003903##########################################
3904# SHA command probe for modules
3905if test "$modules" = yes; then
3906 shacmd_probe="sha1sum sha1 shasum"
3907 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003908 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003909 shacmd="$c"
3910 break
3911 fi
3912 done
3913 if test "$shacmd" = ""; then
3914 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3915 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003916fi
3917
3918##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003919# pixman support probe
3920
Eric Blakee633a5c2019-02-04 20:39:37 -06003921if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003922 pixman_cflags=
3923 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003924elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003925 pixman_cflags=$($pkg_config --cflags pixman-1)
3926 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003927else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003928 error_exit "pixman >= 0.21.8 not present." \
3929 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003930fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003931
3932##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003933# libmpathpersist probe
3934
3935if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003936 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003937 cat > $TMPC <<EOF
3938#include <libudev.h>
3939#include <mpath_persist.h>
3940unsigned mpath_mx_alloc_len = 1024;
3941int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003942static struct config *multipath_conf;
3943extern struct udev *udev;
3944extern struct config *get_multipath_config(void);
3945extern void put_multipath_config(struct config *conf);
3946struct udev *udev;
3947struct config *get_multipath_config(void) { return multipath_conf; }
3948void put_multipath_config(struct config *conf) { }
3949
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003950int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003951 udev = udev_new();
3952 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003953 return 0;
3954}
3955EOF
3956 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3957 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003958 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003959 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003960 # probe for the old API
3961 cat > $TMPC <<EOF
3962#include <libudev.h>
3963#include <mpath_persist.h>
3964unsigned mpath_mx_alloc_len = 1024;
3965int logsink;
3966int main(void) {
3967 struct udev *udev = udev_new();
3968 mpath_lib_init(udev);
3969 return 0;
3970}
3971EOF
3972 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3973 mpathpersist=yes
3974 mpathpersist_new_api=no
3975 else
3976 mpathpersist=no
3977 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003978 fi
3979else
3980 mpathpersist=no
3981fi
3982
3983##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003984# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003985PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003986
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003987pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003988cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003989#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003990static void *f(void *p) { return NULL; }
3991int main(void) {
3992 pthread_t thread;
3993 pthread_create(&thread, 0, f, 0);
3994 return 0;
3995}
blueswir1414f0da2008-08-15 18:20:52 +00003996EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003997if compile_prog "" "" ; then
3998 pthread=yes
3999else
4000 for pthread_lib in $PTHREADLIBS_LIST; do
4001 if compile_prog "" "$pthread_lib" ; then
4002 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04004003 found=no
4004 for lib_entry in $LIBS; do
4005 if test "$lib_entry" = "$pthread_lib"; then
4006 found=yes
4007 break
4008 fi
4009 done
4010 if test "$found" = "no"; then
4011 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01004012 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04004013 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01004014 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02004015 break
4016 fi
4017 done
4018fi
blueswir1414f0da2008-08-15 18:20:52 +00004019
Eric Blakee633a5c2019-02-04 20:39:37 -06004020if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004021 error_exit "pthread check failed" \
4022 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00004023fi
4024
Roman Bolshakov479a5742018-12-17 23:26:01 +03004025# check for pthread_setname_np with thread id
4026pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004027cat > $TMPC << EOF
4028#include <pthread.h>
4029
4030static void *f(void *p) { return NULL; }
4031int main(void)
4032{
4033 pthread_t thread;
4034 pthread_create(&thread, 0, f, 0);
4035 pthread_setname_np(thread, "QEMU");
4036 return 0;
4037}
4038EOF
4039if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03004040 pthread_setname_np_w_tid=yes
4041fi
4042
4043# check for pthread_setname_np without thread id
4044pthread_setname_np_wo_tid=no
4045cat > $TMPC << EOF
4046#include <pthread.h>
4047
4048static void *f(void *p) { pthread_setname_np("QEMU"); }
4049int main(void)
4050{
4051 pthread_t thread;
4052 pthread_create(&thread, 0, f, 0);
4053 return 0;
4054}
4055EOF
4056if compile_prog "" "$pthread_lib" ; then
4057 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004058fi
4059
aliguoribf9298b2008-12-05 20:05:26 +00004060##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004061# rbd probe
4062if test "$rbd" != "no" ; then
4063 cat > $TMPC <<EOF
4064#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004065#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004066int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004067 rados_t cluster;
4068 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004069 return 0;
4070}
4071EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004072 rbd_libs="-lrbd -lrados"
4073 if compile_prog "" "$rbd_libs" ; then
4074 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004075 else
4076 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004077 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004078 fi
4079 rbd=no
4080 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004081fi
4082
4083##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004084# libssh probe
4085if test "$libssh" != "no" ; then
4086 if $pkg_config --exists libssh; then
4087 libssh_cflags=$($pkg_config libssh --cflags)
4088 libssh_libs=$($pkg_config libssh --libs)
4089 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004090 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004091 if test "$libssh" = "yes" ; then
4092 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004093 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004094 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004095 fi
4096fi
4097
4098##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004099# Check for libssh 0.8
4100# This is done like this instead of using the LIBSSH_VERSION_* and
4101# SSH_VERSION_* macros because some distributions in the past shipped
4102# snapshots of the future 0.8 from Git, and those snapshots did not
4103# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004104
Pino Toscanob10d49d2019-06-20 22:08:40 +02004105if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004106 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004107#include <libssh/libssh.h>
4108int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004109EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004110 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4111 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004112 fi
4113fi
4114
4115##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004116# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004117
4118if test "$linux_aio" != "no" ; then
4119 cat > $TMPC <<EOF
4120#include <libaio.h>
4121#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004122#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004123int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4124EOF
4125 if compile_prog "" "-laio" ; then
4126 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004127 else
4128 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004129 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004130 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004131 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004132 fi
4133fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004134##########################################
4135# linux-io-uring probe
4136
4137if test "$linux_io_uring" != "no" ; then
4138 if $pkg_config liburing; then
4139 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4140 linux_io_uring_libs=$($pkg_config --libs liburing)
4141 linux_io_uring=yes
Stefan Hajnoczi73fd2822020-03-05 17:08:04 +00004142
4143 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4144 # seen by programs linking the archive. It's not ideal, but just add the
4145 # library dependency globally.
4146 LIBS="$linux_io_uring_libs $LIBS"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004147 else
4148 if test "$linux_io_uring" = "yes" ; then
4149 feature_not_found "linux io_uring" "Install liburing devel"
4150 fi
4151 linux_io_uring=no
4152 fi
4153fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004154
4155##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004156# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004157
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004158if test "$tpm" = ""; then
4159 if test "$mingw32" = "yes"; then
4160 tpm=no
4161 else
4162 tpm=yes
4163 fi
4164elif test "$tpm" = "yes"; then
4165 if test "$mingw32" = "yes" ; then
4166 error_exit "TPM emulation only available on POSIX systems"
4167 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004168fi
4169
4170##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004171# attr probe
4172
4173if test "$attr" != "no" ; then
4174 cat > $TMPC <<EOF
4175#include <stdio.h>
4176#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004177#ifdef CONFIG_LIBATTR
4178#include <attr/xattr.h>
4179#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004180#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004181#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004182int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4183EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004184 if compile_prog "" "" ; then
4185 attr=yes
4186 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004187 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004188 attr=yes
4189 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004190 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004191 else
4192 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004193 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004194 fi
4195 attr=no
4196 fi
4197fi
4198
4199##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004200# iovec probe
4201cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004202#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004203#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004204#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004205int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004206EOF
4207iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004208if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004209 iovec=yes
4210fi
4211
aurel32f652e6a2008-12-16 10:43:48 +00004212##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004213# preadv probe
4214cat > $TMPC <<EOF
4215#include <sys/types.h>
4216#include <sys/uio.h>
4217#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004218int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004219EOF
4220preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004221if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004222 preadv=yes
4223fi
4224
4225##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004226# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004227# fdt support is mandatory for at least some target architectures,
4228# so insist on it if we're building those system emulators.
4229fdt_required=no
4230for target in $target_list; do
4231 case $target in
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08004232 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004233 fdt_required=yes
4234 ;;
4235 esac
4236done
4237
4238if test "$fdt_required" = "yes"; then
4239 if test "$fdt" = "no"; then
4240 error_exit "fdt disabled but some requested targets require it." \
4241 "You can turn off fdt only if you also disable all the system emulation" \
4242 "targets which need it (by specifying a cut down --target-list)."
4243 fi
4244 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004245elif test "$fdt" != "yes" ; then
4246 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004247fi
4248
Laurent Vivierd5999382019-06-21 15:05:44 +02004249# fdt is only required when building softmmu targets
4250if test -z "$fdt" -a "$softmmu" != "yes" ; then
4251 fdt="no"
4252fi
4253
Juan Quintela2df87df2009-08-12 18:29:54 +02004254if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004255 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004256 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004257 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004258 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004259#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004260#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004261int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004262EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004263 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004264 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004265 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004266 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004267 # have GIT checkout, so activate dtc submodule
4268 if test -e "${source_path}/.git" ; then
4269 git_submodules="${git_submodules} dtc"
4270 fi
4271 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004272 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004273 mkdir -p dtc
4274 if [ "$pwd_is_source_path" != "y" ] ; then
4275 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4276 symlink "$source_path/dtc/scripts" "dtc/scripts"
4277 fi
4278 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004279 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4280 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004281 elif test "$fdt" = "yes" ; then
4282 # Not a git build & no libfdt found, prompt for system install
4283 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4284 "Please install the DTC (libfdt) devel package"
4285 else
4286 # don't have and don't want
4287 fdt_libs=
4288 fdt=no
4289 fi
aurel32f652e6a2008-12-16 10:43:48 +00004290 fi
4291fi
4292
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004293libs_softmmu="$libs_softmmu $fdt_libs"
4294
Michael Walle20ff0752011-03-07 23:32:39 +01004295##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004296# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004297
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004298gbm="no"
4299if $pkg_config gbm; then
4300 gbm_cflags="$($pkg_config --cflags gbm)"
4301 gbm_libs="$($pkg_config --libs gbm)"
4302 gbm="yes"
4303fi
4304
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004305if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004306 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004307 if $pkg_config $opengl_pkgs; then
4308 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4309 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004310 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004311 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4312 gtk_gl="yes"
4313 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004314 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004315 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004316 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004317 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004318 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004319 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004320 opengl_libs=""
4321 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004322 fi
4323fi
4324
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004325if test "$opengl" = "yes"; then
4326 cat > $TMPC << EOF
4327#include <epoxy/egl.h>
4328#ifndef EGL_MESA_image_dma_buf_export
4329# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4330#endif
4331int main(void) { return 0; }
4332EOF
4333 if compile_prog "" "" ; then
4334 opengl_dmabuf=yes
4335 fi
4336fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004337
Eric Blakee633a5c2019-02-04 20:39:37 -06004338if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004339 for target in $target_list; do
4340 case $target in
4341 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4342 need_x11=yes
4343 ;;
4344 esac
4345 done
4346fi
4347
Klim Kireeved279a02018-01-12 12:01:19 +03004348##########################################
4349# libxml2 probe
4350if test "$libxml2" != "no" ; then
4351 if $pkg_config --exists libxml-2.0; then
4352 libxml2="yes"
4353 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4354 libxml2_libs=$($pkg_config --libs libxml-2.0)
4355 else
4356 if test "$libxml2" = "yes"; then
4357 feature_not_found "libxml2" "Install libxml2 devel"
4358 fi
4359 libxml2="no"
4360 fi
4361fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004362
Bharata B Raoeb100392012-09-24 14:42:45 +05304363##########################################
4364# glusterfs probe
4365if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004366 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304367 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004368 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4369 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004370 if $pkg_config --atleast-version=4 glusterfs-api; then
4371 glusterfs_xlator_opt="yes"
4372 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004373 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304374 glusterfs_discard="yes"
4375 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304376 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304377 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304378 glusterfs_zerofill="yes"
4379 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004380 cat > $TMPC << EOF
4381#include <glusterfs/api/glfs.h>
4382
4383int
4384main(void)
4385{
4386 /* new glfs_ftruncate() passes two additional args */
4387 return glfs_ftruncate(NULL, 0, NULL, NULL);
4388}
4389EOF
4390 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4391 glusterfs_ftruncate_has_stat="yes"
4392 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004393 cat > $TMPC << EOF
4394#include <glusterfs/api/glfs.h>
4395
4396/* new glfs_io_cbk() passes two additional glfs_stat structs */
4397static void
4398glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4399{}
4400
4401int
4402main(void)
4403{
4404 glfs_io_cbk iocb = &glusterfs_iocb;
4405 iocb(NULL, 0 , NULL, NULL, NULL);
4406 return 0;
4407}
4408EOF
4409 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4410 glusterfs_iocb_has_stat="yes"
4411 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304412 else
4413 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004414 feature_not_found "GlusterFS backend support" \
4415 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304416 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304417 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304418 fi
4419fi
4420
aurel3239386ac2009-04-15 19:48:17 +00004421# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004422# emulator. This is done because older glibc versions don't
4423# have syscall stubs for these implemented. In that case we
4424# don't provide them even if kernel supports them.
4425#
4426inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004427cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004428#include <sys/inotify.h>
4429
4430int
4431main(void)
4432{
4433 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004434 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004435}
4436EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004437if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004438 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004439fi
4440
Riku Voipioc05c7a72010-03-26 15:25:11 +00004441inotify1=no
4442cat > $TMPC << EOF
4443#include <sys/inotify.h>
4444
4445int
4446main(void)
4447{
4448 /* try to start inotify */
4449 return inotify_init1(0);
4450}
4451EOF
4452if compile_prog "" "" ; then
4453 inotify1=yes
4454fi
4455
Riku Voipio099d6b02009-05-05 12:10:04 +03004456# check if pipe2 is there
4457pipe2=no
4458cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004459#include <unistd.h>
4460#include <fcntl.h>
4461
4462int main(void)
4463{
4464 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004465 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004466}
4467EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004468if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004469 pipe2=yes
4470fi
4471
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004472# check if accept4 is there
4473accept4=no
4474cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004475#include <sys/socket.h>
4476#include <stddef.h>
4477
4478int main(void)
4479{
4480 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4481 return 0;
4482}
4483EOF
4484if compile_prog "" "" ; then
4485 accept4=yes
4486fi
4487
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304488# check if tee/splice is there. vmsplice was added same time.
4489splice=no
4490cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304491#include <unistd.h>
4492#include <fcntl.h>
4493#include <limits.h>
4494
4495int main(void)
4496{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004497 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304498 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4499 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4500 return 0;
4501}
4502EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004503if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304504 splice=yes
4505fi
4506
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004507##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004508# libnuma probe
4509
4510if test "$numa" != "no" ; then
4511 cat > $TMPC << EOF
4512#include <numa.h>
4513int main(void) { return numa_available(); }
4514EOF
4515
4516 if compile_prog "" "-lnuma" ; then
4517 numa=yes
4518 libs_softmmu="-lnuma $libs_softmmu"
4519 else
4520 if test "$numa" = "yes" ; then
4521 feature_not_found "numa" "install numactl devel"
4522 fi
4523 numa=no
4524 fi
4525fi
4526
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004527if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4528 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4529 exit 1
4530fi
4531
Yang Zhong5a22ab72017-12-20 21:16:46 +08004532# Even if malloc_trim() is available, these non-libc memory allocators
4533# do not support it.
4534if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4535 if test "$malloc_trim" = "yes" ; then
4536 echo "Disabling malloc_trim with non-libc memory allocator"
4537 fi
4538 malloc_trim="no"
4539fi
4540
4541#######################################
4542# malloc_trim
4543
4544if test "$malloc_trim" != "no" ; then
4545 cat > $TMPC << EOF
4546#include <malloc.h>
4547int main(void) { malloc_trim(0); return 0; }
4548EOF
4549 if compile_prog "" "" ; then
4550 malloc_trim="yes"
4551 else
4552 malloc_trim="no"
4553 fi
4554fi
4555
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004556##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004557# tcmalloc probe
4558
4559if test "$tcmalloc" = "yes" ; then
4560 cat > $TMPC << EOF
4561#include <stdlib.h>
4562int main(void) { malloc(1); return 0; }
4563EOF
4564
4565 if compile_prog "" "-ltcmalloc" ; then
4566 LIBS="-ltcmalloc $LIBS"
4567 else
4568 feature_not_found "tcmalloc" "install gperftools devel"
4569 fi
4570fi
4571
4572##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004573# jemalloc probe
4574
4575if test "$jemalloc" = "yes" ; then
4576 cat > $TMPC << EOF
4577#include <stdlib.h>
4578int main(void) { malloc(1); return 0; }
4579EOF
4580
4581 if compile_prog "" "-ljemalloc" ; then
4582 LIBS="-ljemalloc $LIBS"
4583 else
4584 feature_not_found "jemalloc" "install jemalloc devel"
4585 fi
4586fi
4587
4588##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004589# signalfd probe
4590signalfd="no"
4591cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004592#include <unistd.h>
4593#include <sys/syscall.h>
4594#include <signal.h>
4595int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4596EOF
4597
4598if compile_prog "" "" ; then
4599 signalfd=yes
4600fi
4601
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004602# check if optreset global is declared by <getopt.h>
4603optreset="no"
4604cat > $TMPC << EOF
4605#include <getopt.h>
4606int main(void) { return optreset; }
4607EOF
4608
4609if compile_prog "" "" ; then
4610 optreset=yes
4611fi
4612
Riku Voipioc2882b92009-08-12 15:08:24 +03004613# check if eventfd is supported
4614eventfd=no
4615cat > $TMPC << EOF
4616#include <sys/eventfd.h>
4617
4618int main(void)
4619{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004620 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004621}
4622EOF
4623if compile_prog "" "" ; then
4624 eventfd=yes
4625fi
4626
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004627# check if memfd is supported
4628memfd=no
4629cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004630#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004631
4632int main(void)
4633{
4634 return memfd_create("foo", MFD_ALLOW_SEALING);
4635}
4636EOF
4637if compile_prog "" "" ; then
4638 memfd=yes
4639fi
4640
Cortland Tölva955727d2018-10-08 09:35:19 -07004641# check for usbfs
4642have_usbfs=no
4643if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004644 cat > $TMPC << EOF
4645#include <linux/usbdevice_fs.h>
4646
4647#ifndef USBDEVFS_GET_CAPABILITIES
4648#error "USBDEVFS_GET_CAPABILITIES undefined"
4649#endif
4650
4651#ifndef USBDEVFS_DISCONNECT_CLAIM
4652#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4653#endif
4654
4655int main(void)
4656{
4657 return 0;
4658}
4659EOF
4660 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004661 have_usbfs=yes
4662 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004663fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004664
Ulrich Hechtd0927932009-09-17 20:22:14 +03004665# check for fallocate
4666fallocate=no
4667cat > $TMPC << EOF
4668#include <fcntl.h>
4669
4670int main(void)
4671{
4672 fallocate(0, 0, 0, 0);
4673 return 0;
4674}
4675EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004676if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004677 fallocate=yes
4678fi
4679
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004680# check for fallocate hole punching
4681fallocate_punch_hole=no
4682cat > $TMPC << EOF
4683#include <fcntl.h>
4684#include <linux/falloc.h>
4685
4686int main(void)
4687{
4688 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4689 return 0;
4690}
4691EOF
4692if compile_prog "" "" ; then
4693 fallocate_punch_hole=yes
4694fi
4695
Denis V. Lunevb953f072015-01-30 11:42:14 +03004696# check that fallocate supports range zeroing inside the file
4697fallocate_zero_range=no
4698cat > $TMPC << EOF
4699#include <fcntl.h>
4700#include <linux/falloc.h>
4701
4702int main(void)
4703{
4704 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4705 return 0;
4706}
4707EOF
4708if compile_prog "" "" ; then
4709 fallocate_zero_range=yes
4710fi
4711
Kevin Wolfed911432014-09-29 17:12:59 +02004712# check for posix_fallocate
4713posix_fallocate=no
4714cat > $TMPC << EOF
4715#include <fcntl.h>
4716
4717int main(void)
4718{
4719 posix_fallocate(0, 0, 0);
4720 return 0;
4721}
4722EOF
4723if compile_prog "" "" ; then
4724 posix_fallocate=yes
4725fi
4726
Peter Maydellc727f472011-01-06 11:05:10 +00004727# check for sync_file_range
4728sync_file_range=no
4729cat > $TMPC << EOF
4730#include <fcntl.h>
4731
4732int main(void)
4733{
4734 sync_file_range(0, 0, 0, 0);
4735 return 0;
4736}
4737EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004738if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004739 sync_file_range=yes
4740fi
4741
Peter Maydelldace20d2011-01-10 13:11:24 +00004742# check for linux/fiemap.h and FS_IOC_FIEMAP
4743fiemap=no
4744cat > $TMPC << EOF
4745#include <sys/ioctl.h>
4746#include <linux/fs.h>
4747#include <linux/fiemap.h>
4748
4749int main(void)
4750{
4751 ioctl(0, FS_IOC_FIEMAP, 0);
4752 return 0;
4753}
4754EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004755if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004756 fiemap=yes
4757fi
4758
Ulrich Hechtd0927932009-09-17 20:22:14 +03004759# check for dup3
4760dup3=no
4761cat > $TMPC << EOF
4762#include <unistd.h>
4763
4764int main(void)
4765{
4766 dup3(0, 0, 0);
4767 return 0;
4768}
4769EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004770if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004771 dup3=yes
4772fi
4773
Alex Bligh4e0c6522013-08-21 16:02:43 +01004774# check for ppoll support
4775ppoll=no
4776cat > $TMPC << EOF
4777#include <poll.h>
4778
4779int main(void)
4780{
4781 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4782 ppoll(&pfd, 1, 0, 0);
4783 return 0;
4784}
4785EOF
4786if compile_prog "" "" ; then
4787 ppoll=yes
4788fi
4789
Alex Blighcd758dd2013-08-21 16:02:44 +01004790# check for prctl(PR_SET_TIMERSLACK , ... ) support
4791prctl_pr_set_timerslack=no
4792cat > $TMPC << EOF
4793#include <sys/prctl.h>
4794
4795int main(void)
4796{
4797 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4798 return 0;
4799}
4800EOF
4801if compile_prog "" "" ; then
4802 prctl_pr_set_timerslack=yes
4803fi
4804
Peter Maydell3b6edd12011-02-15 18:35:05 +00004805# check for epoll support
4806epoll=no
4807cat > $TMPC << EOF
4808#include <sys/epoll.h>
4809
4810int main(void)
4811{
4812 epoll_create(0);
4813 return 0;
4814}
4815EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004816if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004817 epoll=yes
4818fi
4819
Peter Maydell227f0212016-06-06 19:58:11 +01004820# epoll_create1 is a later addition
4821# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004822epoll_create1=no
4823cat > $TMPC << EOF
4824#include <sys/epoll.h>
4825
4826int main(void)
4827{
Peter Maydell19e83f62011-04-26 16:56:40 +01004828 /* Note that we use epoll_create1 as a value, not as
4829 * a function being called. This is necessary so that on
4830 * old SPARC glibc versions where the function was present in
4831 * the library but not declared in the header file we will
4832 * fail the configure check. (Otherwise we will get a compiler
4833 * warning but not an error, and will proceed to fail the
4834 * qemu compile where we compile with -Werror.)
4835 */
Blue Swirlc075a722012-08-09 20:21:25 +00004836 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004837}
4838EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004839if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004840 epoll_create1=yes
4841fi
4842
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004843# check for sendfile support
4844sendfile=no
4845cat > $TMPC << EOF
4846#include <sys/sendfile.h>
4847
4848int main(void)
4849{
4850 return sendfile(0, 0, 0, 0);
4851}
4852EOF
4853if compile_prog "" "" ; then
4854 sendfile=yes
4855fi
4856
Riku Voipio51834342014-06-22 11:25:42 +01004857# check for timerfd support (glibc 2.8 and newer)
4858timerfd=no
4859cat > $TMPC << EOF
4860#include <sys/timerfd.h>
4861
4862int main(void)
4863{
4864 return(timerfd_create(CLOCK_REALTIME, 0));
4865}
4866EOF
4867if compile_prog "" "" ; then
4868 timerfd=yes
4869fi
4870
Riku Voipio9af5c902014-08-12 15:58:57 +03004871# check for setns and unshare support
4872setns=no
4873cat > $TMPC << EOF
4874#include <sched.h>
4875
4876int main(void)
4877{
4878 int ret;
4879 ret = setns(0, 0);
4880 ret = unshare(0);
4881 return ret;
4882}
4883EOF
4884if compile_prog "" "" ; then
4885 setns=yes
4886fi
4887
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004888# clock_adjtime probe
4889clock_adjtime=no
4890cat > $TMPC <<EOF
4891#include <time.h>
4892
4893int main(void)
4894{
4895 return clock_adjtime(0, 0);
4896}
4897EOF
4898clock_adjtime=no
4899if compile_prog "" "" ; then
4900 clock_adjtime=yes
4901fi
4902
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004903# syncfs probe
4904syncfs=no
4905cat > $TMPC <<EOF
4906#include <unistd.h>
4907
4908int main(void)
4909{
4910 return syncfs(0);
4911}
4912EOF
4913syncfs=no
4914if compile_prog "" "" ; then
4915 syncfs=yes
4916fi
4917
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004918# check for kcov support (kernel must be 4.4+, compiled with certain options)
4919kcov=no
4920if check_include sys/kcov.h ; then
4921 kcov=yes
4922fi
4923
Peter Maydell5f71eac2019-03-07 14:26:46 +00004924# Check we have a new enough version of sphinx-build
4925has_sphinx_build() {
4926 # This is a bit awkward but works: create a trivial document and
4927 # try to run it with our configuration file (which enforces a
4928 # version requirement). This will fail if either
4929 # sphinx-build doesn't exist at all or if it is too old.
4930 mkdir -p "$TMPDIR1/sphinx"
4931 touch "$TMPDIR1/sphinx/index.rst"
Markus Armbruster903458c2020-02-14 18:18:41 +01004932 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004933}
4934
pbrookcc8ae6d2006-04-23 17:57:59 +00004935# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004936if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004937 if has_sphinx_build; then
4938 sphinx_ok=yes
4939 else
4940 sphinx_ok=no
4941 fi
4942 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004943 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004944 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004945 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004946 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4947 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4948 fi
4949 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004950 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004951 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004952 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004953fi
4954
Stefan Weilf514f412009-10-11 12:44:07 +02004955# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004956byteswap_h=no
4957cat > $TMPC << EOF
4958#include <byteswap.h>
4959int main(void) { return bswap_32(0); }
4960EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004961if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004962 byteswap_h=yes
4963fi
4964
Stefan Weil75f13592013-01-05 12:17:38 +01004965# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004966bswap_h=no
4967cat > $TMPC << EOF
4968#include <sys/endian.h>
4969#include <sys/types.h>
4970#include <machine/bswap.h>
4971int main(void) { return bswap32(0); }
4972EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004973if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004974 bswap_h=yes
4975fi
4976
aliguorida93a1f2008-12-12 20:02:52 +00004977##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004978# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004979if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004980 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004981 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004982 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4983 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004984 else
4985 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004986 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004987 fi
4988 libiscsi="no"
4989 fi
4990fi
4991
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004992##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004993# Do we need libm
4994cat > $TMPC << EOF
4995#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004996int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004997EOF
4998if compile_prog "" "" ; then
4999 :
5000elif compile_prog "" "-lm" ; then
5001 LIBS="-lm $LIBS"
5002 libs_qga="-lm $libs_qga"
5003else
Peter Maydell76ad07a2013-04-08 12:11:26 +01005004 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00005005fi
5006
5007##########################################
aliguorida93a1f2008-12-12 20:02:52 +00005008# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00005009# uClibc provides 2 versions of clock_gettime(), one with realtime
5010# support and one without. This means that the clock_gettime() don't
5011# need -lrt. We still need it for timer_create() so we check for this
5012# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00005013cat > $TMPC <<EOF
5014#include <signal.h>
5015#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00005016int main(void) {
5017 timer_create(CLOCK_REALTIME, NULL, NULL);
5018 return clock_gettime(CLOCK_REALTIME, NULL);
5019}
aliguorida93a1f2008-12-12 20:02:52 +00005020EOF
5021
Juan Quintela52166aa2009-08-03 14:46:03 +02005022if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02005023 :
Natanael Copa8bacde82012-09-12 09:06:51 +00005024# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07005025elif compile_prog "" "$pthread_lib -lrt" ; then
5026 LIBS="$LIBS -lrt"
5027 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00005028fi
5029
Thomas Huthd99e97e2019-01-17 18:14:08 +01005030# Check whether we need to link libutil for openpty()
5031cat > $TMPC << EOF
5032extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5033int main(void) { return openpty(0, 0, 0, 0, 0); }
5034EOF
5035
5036if ! compile_prog "" "" ; then
5037 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02005038 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01005039 libs_tools="-lutil $libs_tools"
5040 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005041fi
5042
Blue Swirlde5071c2009-09-12 09:58:46 +00005043##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005044# spice probe
5045if test "$spice" != "no" ; then
5046 cat > $TMPC << EOF
5047#include <spice.h>
5048int main(void) { spice_server_new(); return 0; }
5049EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005050 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5051 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005052 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005053 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005054 compile_prog "$spice_cflags" "$spice_libs" ; then
5055 spice="yes"
5056 libs_softmmu="$libs_softmmu $spice_libs"
5057 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005058 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5059 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005060 else
5061 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005062 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005063 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005064 fi
5065 spice="no"
5066 fi
5067fi
5068
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005069# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005070if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005071 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005072 libcacard_cflags=$($pkg_config --cflags libcacard)
5073 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005074 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005075 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005076 if test "$smartcard" = "yes"; then
5077 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005078 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005079 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005080 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005081fi
5082
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005083# check for libusb
5084if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005085 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005086 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005087 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5088 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005089 else
5090 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005091 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005092 fi
5093 libusb="no"
5094 fi
5095fi
5096
Hans de Goede69354a82011-07-19 11:04:10 +02005097# check for usbredirparser for usb network redirection support
5098if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005099 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005100 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005101 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5102 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005103 else
5104 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005105 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005106 fi
5107 usb_redir="no"
5108 fi
5109fi
5110
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005111##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005112# check if we have VSS SDK headers for win
5113
Eric Blakee633a5c2019-02-04 20:39:37 -06005114if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5115 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005116 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005117 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005118 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5119 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005120 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005121 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5122 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005123 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005124 esac
5125 cat > $TMPC << EOF
5126#define __MIDL_user_allocate_free_DEFINED__
5127#include <inc/win2003/vss.h>
5128int main(void) { return VSS_CTX_BACKUP; }
5129EOF
5130 if compile_prog "$vss_win32_include" "" ; then
5131 guest_agent_with_vss="yes"
5132 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005133 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005134 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005135 else
5136 if test "$vss_win32_sdk" != "" ; then
5137 echo "ERROR: Please download and install Microsoft VSS SDK:"
5138 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5139 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5140 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5141 echo "ERROR: The headers are extracted in the directory \`inc'."
5142 feature_not_found "VSS support"
5143 fi
5144 guest_agent_with_vss="no"
5145 fi
5146fi
5147
5148##########################################
5149# lookup Windows platform SDK (if not specified)
5150# The SDK is needed only to build .tlb (type library) file of guest agent
5151# VSS provider from the source. It is usually unnecessary because the
5152# pre-compiled .tlb file is included.
5153
Eric Blakee633a5c2019-02-04 20:39:37 -06005154if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5155 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005156 if test -z "$win_sdk"; then
5157 programfiles="$PROGRAMFILES"
5158 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5159 if test -n "$programfiles"; then
5160 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5161 else
5162 feature_not_found "Windows SDK"
5163 fi
5164 elif test "$win_sdk" = "no"; then
5165 win_sdk=""
5166 fi
5167fi
5168
5169##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005170# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005171if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005172 cat > $TMPC << EOF
5173#include <windows.h>
5174#include <ntddscsi.h>
5175int main(void) {
5176#if !defined(IOCTL_SCSI_GET_ADDRESS)
5177#error Missing required ioctl definitions
5178#endif
5179 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5180 return addr.Lun;
5181}
5182EOF
5183 if compile_prog "" "" ; then
5184 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005185 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005186 fi
5187fi
5188
5189##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005190# virgl renderer probe
5191
5192if test "$virglrenderer" != "no" ; then
5193 cat > $TMPC << EOF
5194#include <virglrenderer.h>
5195int main(void) { virgl_renderer_poll(); return 0; }
5196EOF
5197 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5198 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005199 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005200 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5201 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5202 virglrenderer="yes"
5203 else
5204 if test "$virglrenderer" = "yes" ; then
5205 feature_not_found "virglrenderer"
5206 fi
5207 virglrenderer="no"
5208 fi
5209fi
5210
5211##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005212# capstone
5213
Richard Hendersone219c492017-09-28 09:01:23 -07005214case "$capstone" in
5215 "" | yes)
5216 if $pkg_config capstone; then
5217 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005218 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005219 capstone=git
5220 elif test -e "${source_path}/capstone/Makefile" ; then
5221 capstone=internal
5222 elif test -z "$capstone" ; then
5223 capstone=no
5224 else
5225 feature_not_found "capstone" "Install capstone devel or git submodule"
5226 fi
5227 ;;
5228
5229 system)
5230 if ! $pkg_config capstone; then
5231 feature_not_found "capstone" "Install capstone devel"
5232 fi
5233 ;;
5234esac
5235
5236case "$capstone" in
5237 git | internal)
5238 if test "$capstone" = git; then
5239 git_submodules="${git_submodules} capstone"
5240 fi
5241 mkdir -p capstone
5242 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5243 if test "$mingw32" = "yes"; then
5244 LIBCAPSTONE=capstone.lib
5245 else
5246 LIBCAPSTONE=libcapstone.a
5247 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005248 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005249 ;;
5250
5251 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005252 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005253 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005254 ;;
5255
5256 no)
5257 ;;
5258 *)
5259 error_exit "Unknown state for capstone: $capstone"
5260 ;;
5261esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005262
5263##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005264# check if we have fdatasync
5265
5266fdatasync=no
5267cat > $TMPC << EOF
5268#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005269int main(void) {
5270#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5271return fdatasync(0);
5272#else
Stefan Weile172fe12012-04-06 21:33:20 +02005273#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005274#endif
5275}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005276EOF
5277if compile_prog "" "" ; then
5278 fdatasync=yes
5279fi
5280
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005281##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005282# check if we have madvise
5283
5284madvise=no
5285cat > $TMPC << EOF
5286#include <sys/types.h>
5287#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005288#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005289int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5290EOF
5291if compile_prog "" "" ; then
5292 madvise=yes
5293fi
5294
5295##########################################
5296# check if we have posix_madvise
5297
5298posix_madvise=no
5299cat > $TMPC << EOF
5300#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005301#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005302int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5303EOF
5304if compile_prog "" "" ; then
5305 posix_madvise=yes
5306fi
5307
5308##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005309# check if we have posix_memalign()
5310
5311posix_memalign=no
5312cat > $TMPC << EOF
5313#include <stdlib.h>
5314int main(void) {
5315 void *p;
5316 return posix_memalign(&p, 8, 8);
5317}
5318EOF
5319if compile_prog "" "" ; then
5320 posix_memalign=yes
5321fi
5322
5323##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005324# check if we have posix_syslog
5325
5326posix_syslog=no
5327cat > $TMPC << EOF
5328#include <syslog.h>
5329int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5330EOF
5331if compile_prog "" "" ; then
5332 posix_syslog=yes
5333fi
5334
5335##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005336# check if we have sem_timedwait
5337
5338sem_timedwait=no
5339cat > $TMPC << EOF
5340#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005341int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005342EOF
5343if compile_prog "" "" ; then
5344 sem_timedwait=yes
5345fi
5346
5347##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005348# check if we have strchrnul
5349
5350strchrnul=no
5351cat > $TMPC << EOF
5352#include <string.h>
5353int main(void);
5354// Use a haystack that the compiler shouldn't be able to constant fold
5355char *haystack = (char*)&main;
5356int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5357EOF
5358if compile_prog "" "" ; then
5359 strchrnul=yes
5360fi
5361
Jiufei Xue8a792b02019-04-17 03:08:56 +08005362#########################################
5363# check if we have st_atim
5364
5365st_atim=no
5366cat > $TMPC << EOF
5367#include <sys/stat.h>
5368#include <stddef.h>
5369int main(void) { return offsetof(struct stat, st_atim); }
5370EOF
5371if compile_prog "" "" ; then
5372 st_atim=yes
5373fi
5374
Keno Fischer5c99fa32018-06-29 12:32:10 +02005375##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005376# check if trace backend exists
5377
Lluís Vilanova5b808272014-05-27 15:02:14 +02005378$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005379if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005380 error_exit "invalid trace backends" \
5381 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005382fi
5383
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005384##########################################
5385# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005386if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005387 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005388#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005389int main(void) { return 0; }
5390EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005391 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005392 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005393 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005394 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005395 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005396 fi
5397 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005398 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005399 else
5400 urcu_bp_libs="-lurcu-bp"
5401 fi
5402
5403 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5404 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005405 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005406 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005407 fi
5408fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005409
5410##########################################
5411# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005412if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005413 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005414 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005415 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005416 trace_backend_stap="no"
5417 if has 'stap' ; then
5418 trace_backend_stap="yes"
5419 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005420fi
5421
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005422##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005423# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305424
Peter Maydell7c2acc72013-04-08 12:11:27 +01005425# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005426# is sigcontext. On Windows the only valid backend is the Windows
5427# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005428
5429ucontext_works=no
5430if test "$darwin" != "yes"; then
5431 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305432#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005433#ifdef __stub_makecontext
5434#error Ignoring glibc stub makecontext which will always fail
5435#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005436int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305437EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005438 if compile_prog "" "" ; then
5439 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305440 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005441fi
5442
5443if test "$coroutine" = ""; then
5444 if test "$mingw32" = "yes"; then
5445 coroutine=win32
5446 elif test "$ucontext_works" = "yes"; then
5447 coroutine=ucontext
5448 else
5449 coroutine=sigaltstack
5450 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005451else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005452 case $coroutine in
5453 windows)
5454 if test "$mingw32" != "yes"; then
5455 error_exit "'windows' coroutine backend only valid for Windows"
5456 fi
5457 # Unfortunately the user visible backend name doesn't match the
5458 # coroutine-*.c filename for this case, so we have to adjust it here.
5459 coroutine=win32
5460 ;;
5461 ucontext)
5462 if test "$ucontext_works" != "yes"; then
5463 feature_not_found "ucontext"
5464 fi
5465 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005466 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005467 if test "$mingw32" = "yes"; then
5468 error_exit "only the 'windows' coroutine backend is valid for Windows"
5469 fi
5470 ;;
5471 *)
5472 error_exit "unknown coroutine backend $coroutine"
5473 ;;
5474 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305475fi
5476
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005477if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005478 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005479fi
5480
Peter Lieven7d992e42016-09-27 11:58:45 +02005481if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005482 if test "$coroutine_pool" = "yes"; then
5483 echo "WARN: disabling coroutine pool for stack usage debugging"
5484 coroutine_pool=no
5485 fi
5486fi
5487
5488
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305489##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305490# check if we have open_by_handle_at
5491
Stefan Weil4e1797f2012-06-18 22:11:06 +02005492open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305493cat > $TMPC << EOF
5494#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005495#if !defined(AT_EMPTY_PATH)
5496# error missing definition
5497#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005498int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005499#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305500EOF
5501if compile_prog "" "" ; then
5502 open_by_handle_at=yes
5503fi
5504
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305505########################################
5506# check if we have linux/magic.h
5507
5508linux_magic_h=no
5509cat > $TMPC << EOF
5510#include <linux/magic.h>
5511int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005512 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305513}
5514EOF
5515if compile_prog "" "" ; then
5516 linux_magic_h=yes
5517fi
5518
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005519########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005520# check whether we can disable warning option with a pragma (this is needed
5521# to silence warnings in the headers of some versions of external libraries).
5522# This test has to be compiled with -Werror as otherwise an unknown pragma is
5523# only a warning.
5524#
5525# If we can't selectively disable warning in the code, disable -Werror so that
5526# the build doesn't fail anyway.
5527
Peter Maydell06d71fa2012-07-30 16:13:07 +01005528pragma_disable_unused_but_set=no
5529cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005530#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005531#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005532#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005533
Peter Maydell06d71fa2012-07-30 16:13:07 +01005534int main(void) {
5535 return 0;
5536}
5537EOF
5538if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005539 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005540else
5541 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005542fi
5543
5544########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005545# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005546
5547valgrind_h=no
5548cat > $TMPC << EOF
5549#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005550int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005551 return 0;
5552}
5553EOF
5554if compile_prog "" "" ; then
5555 valgrind_h=yes
5556fi
5557
5558########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005559# check if environ is declared
5560
5561has_environ=no
5562cat > $TMPC << EOF
5563#include <unistd.h>
5564int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005565 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005566 return 0;
5567}
5568EOF
5569if compile_prog "" "" ; then
5570 has_environ=yes
5571fi
5572
Richard Henderson76a347e2012-12-28 14:17:02 -08005573########################################
5574# check if cpuid.h is usable.
5575
Richard Henderson76a347e2012-12-28 14:17:02 -08005576cat > $TMPC << EOF
5577#include <cpuid.h>
5578int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005579 unsigned a, b, c, d;
5580 int max = __get_cpuid_max(0, 0);
5581
5582 if (max >= 1) {
5583 __cpuid(1, a, b, c, d);
5584 }
5585
5586 if (max >= 7) {
5587 __cpuid_count(7, 0, a, b, c, d);
5588 }
5589
5590 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005591}
5592EOF
5593if compile_prog "" "" ; then
5594 cpuid_h=yes
5595fi
5596
Richard Henderson5dd89902017-07-18 18:40:18 -10005597##########################################
5598# avx2 optimization requirement check
5599#
5600# There is no point enabling this if cpuid.h is not usable,
5601# since we won't be able to select the new routines.
5602
Eric Blakee633a5c2019-02-04 20:39:37 -06005603if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005604 cat > $TMPC << EOF
5605#pragma GCC push_options
5606#pragma GCC target("avx2")
5607#include <cpuid.h>
5608#include <immintrin.h>
5609static int bar(void *a) {
5610 __m256i x = *(__m256i *)a;
5611 return _mm256_testz_si256(x, x);
5612}
5613int main(int argc, char *argv[]) { return bar(argv[0]); }
5614EOF
5615 if compile_object "" ; then
5616 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005617 else
5618 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005619 fi
5620fi
5621
Robert Hoo6b8cd442020-02-29 20:34:34 +08005622##########################################
5623# avx512f optimization requirement check
5624#
5625# There is no point enabling this if cpuid.h is not usable,
5626# since we won't be able to select the new routines.
5627# by default, it is turned off.
5628# if user explicitly want to enable it, check environment
5629
5630if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5631 cat > $TMPC << EOF
5632#pragma GCC push_options
5633#pragma GCC target("avx512f")
5634#include <cpuid.h>
5635#include <immintrin.h>
5636static int bar(void *a) {
5637 __m512i x = *(__m512i *)a;
5638 return _mm512_test_epi64_mask(x, x);
5639}
5640int main(int argc, char *argv[])
5641{
5642 return bar(argv[0]);
5643}
5644EOF
5645 if ! compile_object "" ; then
5646 avx512f_opt="no"
5647 fi
5648else
5649 avx512f_opt="no"
5650fi
5651
Richard Hendersonf5401662013-02-16 12:46:59 -08005652########################################
5653# check if __[u]int128_t is usable.
5654
5655int128=no
5656cat > $TMPC << EOF
5657__int128_t a;
5658__uint128_t b;
5659int main (void) {
5660 a = a + b;
5661 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005662 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005663 return 0;
5664}
5665EOF
5666if compile_prog "" "" ; then
5667 int128=yes
5668fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005669
Richard Henderson7ebee432016-06-29 21:10:59 -07005670#########################################
5671# See if 128-bit atomic operations are supported.
5672
5673atomic128=no
5674if test "$int128" = "yes"; then
5675 cat > $TMPC << EOF
5676int main(void)
5677{
5678 unsigned __int128 x = 0, y = 0;
5679 y = __atomic_load_16(&x, 0);
5680 __atomic_store_16(&x, y, 0);
5681 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5682 return 0;
5683}
5684EOF
5685 if compile_prog "" "" ; then
5686 atomic128=yes
5687 fi
5688fi
5689
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005690cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005691if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005692 cat > $TMPC << EOF
5693int main(void)
5694{
5695 unsigned __int128 x = 0, y = 0;
5696 __sync_val_compare_and_swap_16(&x, y, x);
5697 return 0;
5698}
5699EOF
5700 if compile_prog "" "" ; then
5701 cmpxchg128=yes
5702 fi
5703fi
5704
Richard Hendersondf79b992016-09-02 12:23:57 -07005705#########################################
5706# See if 64-bit atomic operations are supported.
5707# Note that without __atomic builtins, we can only
5708# assume atomic loads/stores max at pointer size.
5709
5710cat > $TMPC << EOF
5711#include <stdint.h>
5712int main(void)
5713{
5714 uint64_t x = 0, y = 0;
5715#ifdef __ATOMIC_RELAXED
5716 y = __atomic_load_8(&x, 0);
5717 __atomic_store_8(&x, y, 0);
5718 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5719 __atomic_exchange_8(&x, y, 0);
5720 __atomic_fetch_add_8(&x, y, 0);
5721#else
5722 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5723 __sync_lock_test_and_set(&x, y);
5724 __sync_val_compare_and_swap(&x, y, 0);
5725 __sync_fetch_and_add(&x, y);
5726#endif
5727 return 0;
5728}
5729EOF
5730if compile_prog "" "" ; then
5731 atomic64=yes
5732fi
5733
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005734#########################################
5735# See if --dynamic-list is supported by the linker
5736ld_dynamic_list="no"
5737if test "$static" = "no" ; then
5738 cat > $TMPTXT <<EOF
5739{
5740 foo;
5741};
5742EOF
5743
5744 cat > $TMPC <<EOF
5745#include <stdio.h>
5746void foo(void);
5747
5748void foo(void)
5749{
5750 printf("foo\n");
5751}
5752
5753int main(void)
5754{
5755 foo();
5756 return 0;
5757}
5758EOF
5759
5760 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5761 ld_dynamic_list="yes"
5762 fi
5763fi
5764
5765#########################################
5766# See if -exported_symbols_list is supported by the linker
5767
5768ld_exported_symbols_list="no"
5769if test "$static" = "no" ; then
5770 cat > $TMPTXT <<EOF
5771 _foo
5772EOF
5773
5774 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5775 ld_exported_symbols_list="yes"
5776 fi
5777fi
5778
5779if test "$plugins" = "yes" &&
5780 test "$ld_dynamic_list" = "no" &&
5781 test "$ld_exported_symbols_list" = "no" ; then
5782 error_exit \
5783 "Plugin support requires dynamic linking and specifying a set of symbols " \
5784 "that are exported to plugins. Unfortunately your linker doesn't " \
5785 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5786 "for this purpose. You can't build with --static."
5787fi
5788
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005789########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005790# See if __attribute__((alias)) is supported.
5791# This false for Xcode 9, but has been remedied for Xcode 10.
5792# Unfortunately, travis uses Xcode 9 by default.
5793
5794attralias=no
5795cat > $TMPC << EOF
5796int x = 1;
5797extern const int y __attribute__((alias("x")));
5798int main(void) { return 0; }
5799EOF
5800if compile_prog "" "" ; then
5801 attralias=yes
5802fi
5803
5804########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005805# check if getauxval is available.
5806
5807getauxval=no
5808cat > $TMPC << EOF
5809#include <sys/auxv.h>
5810int main(void) {
5811 return getauxval(AT_HWCAP) == 0;
5812}
5813EOF
5814if compile_prog "" "" ; then
5815 getauxval=yes
5816fi
5817
John Snowfd0e6052015-03-25 18:57:39 -04005818########################################
5819# check if ccache is interfering with
5820# semantic analysis of macros
5821
John Snow5e4dfd32015-10-28 13:56:40 -04005822unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005823ccache_cpp2=no
5824cat > $TMPC << EOF
5825static const int Z = 1;
5826#define fn() ({ Z; })
5827#define TAUT(X) ((X) == Z)
5828#define PAREN(X, Y) (X == Y)
5829#define ID(X) (X)
5830int main(int argc, char *argv[])
5831{
5832 int x = 0, y = 0;
5833 x = ID(x);
5834 x = fn();
5835 fn();
5836 if (PAREN(x, y)) return 0;
5837 if (TAUT(Z)) return 0;
5838 return 0;
5839}
5840EOF
5841
5842if ! compile_object "-Werror"; then
5843 ccache_cpp2=yes
5844fi
5845
John Snowb553a042015-11-03 15:43:42 -05005846#################################################
5847# clang does not support glibc + FORTIFY_SOURCE.
5848
5849if test "$fortify_source" != "no"; then
5850 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5851 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005852 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005853 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005854 fortify_source="no";
5855 else
5856 fortify_source="yes"
5857 fi
5858fi
5859
Fam Zheng1efad062018-06-01 17:26:43 +08005860###############################################
5861# Check if copy_file_range is provided by glibc
5862have_copy_file_range=no
5863cat > $TMPC << EOF
5864#include <unistd.h>
5865int main(void) {
5866 copy_file_range(0, NULL, 0, NULL, 0, 0);
5867 return 0;
5868}
5869EOF
5870if compile_prog "" "" ; then
5871 have_copy_file_range=yes
5872fi
5873
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305874##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005875# check if struct fsxattr is available via linux/fs.h
5876
5877have_fsxattr=no
5878cat > $TMPC << EOF
5879#include <linux/fs.h>
5880struct fsxattr foo;
5881int main(void) {
5882 return 0;
5883}
5884EOF
5885if compile_prog "" "" ; then
5886 have_fsxattr=yes
5887fi
5888
Peter Maydellb66e10e2016-06-08 18:34:32 +01005889##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005890# check for usable membarrier system call
5891if test "$membarrier" = "yes"; then
5892 have_membarrier=no
5893 if test "$mingw32" = "yes" ; then
5894 have_membarrier=yes
5895 elif test "$linux" = "yes" ; then
5896 cat > $TMPC << EOF
5897 #include <linux/membarrier.h>
5898 #include <sys/syscall.h>
5899 #include <unistd.h>
5900 #include <stdlib.h>
5901 int main(void) {
5902 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5903 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5904 exit(0);
5905 }
5906EOF
5907 if compile_prog "" "" ; then
5908 have_membarrier=yes
5909 fi
5910 fi
5911 if test "$have_membarrier" = "no"; then
5912 feature_not_found "membarrier" "membarrier system call not available"
5913 fi
5914else
5915 # Do not enable it by default even for Mingw32, because it doesn't
5916 # work on Wine.
5917 membarrier=no
5918fi
5919
5920##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005921# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005922have_rtnetlink=no
5923cat > $TMPC << EOF
5924#include <linux/rtnetlink.h>
5925int main(void) {
5926 return IFLA_PROTO_DOWN;
5927}
5928EOF
5929if compile_prog "" "" ; then
5930 have_rtnetlink=yes
5931fi
5932
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005933##########################################
5934# check for usable AF_VSOCK environment
5935have_af_vsock=no
5936cat > $TMPC << EOF
5937#include <errno.h>
5938#include <sys/types.h>
5939#include <sys/socket.h>
5940#if !defined(AF_VSOCK)
5941# error missing AF_VSOCK flag
5942#endif
5943#include <linux/vm_sockets.h>
5944int main(void) {
5945 int sock, ret;
5946 struct sockaddr_vm svm;
5947 socklen_t len = sizeof(svm);
5948 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5949 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5950 if ((ret == -1) && (errno == ENOTCONN)) {
5951 return 0;
5952 }
5953 return -1;
5954}
5955EOF
5956if compile_prog "" "" ; then
5957 have_af_vsock=yes
5958fi
5959
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005960##########################################
5961# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005962have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005963cat > $TMPC << EOF
5964#include <errno.h>
5965#include <sys/types.h>
5966#include <sys/socket.h>
5967#include <linux/if_alg.h>
5968int main(void) {
5969 int sock;
5970 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5971 return sock;
5972}
5973EOF
5974if compile_prog "" "" ; then
5975 have_afalg=yes
5976fi
5977if test "$crypto_afalg" = "yes"
5978then
5979 if test "$have_afalg" != "yes"
5980 then
5981 error_exit "AF_ALG requested but could not be detected"
5982 fi
5983fi
5984
5985
James Clarke6969ec62016-06-06 12:02:50 +01005986#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005987# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005988if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005989 cat > $TMPC << EOF
5990#include <Hypervisor/hv.h>
5991int main() { return 0;}
5992EOF
5993 if ! compile_object ""; then
5994 hvf='no'
5995 else
5996 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01005997 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005998 fi
5999fi
6000
6001#################################################
James Clarke6969ec62016-06-06 12:02:50 +01006002# Sparc implicitly links with --relax, which is
6003# incompatible with -r, so --no-relax should be
6004# given. It does no harm to give it on other
6005# platforms too.
6006
6007# Note: the prototype is needed since QEMU_CFLAGS
6008# contains -Wmissing-prototypes
6009cat > $TMPC << EOF
6010extern int foo(void);
6011int foo(void) { return 0; }
6012EOF
6013if ! compile_object ""; then
6014 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6015fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01006016for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6017 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6018 LD_REL_FLAGS=$i
6019 break
6020 fi
6021done
6022if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6023 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006024fi
6025
Jan Vesely277abf12016-04-29 13:15:23 -04006026##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006027# check for sysmacros.h
6028
6029have_sysmacros=no
6030cat > $TMPC << EOF
6031#include <sys/sysmacros.h>
6032int main(void) {
6033 return makedev(0, 0);
6034}
6035EOF
6036if compile_prog "" "" ; then
6037 have_sysmacros=yes
6038fi
6039
6040##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006041# Veritas HyperScale block driver VxHS
6042# Check if libvxhs is installed
6043
6044if test "$vxhs" != "no" ; then
6045 cat > $TMPC <<EOF
6046#include <stdint.h>
6047#include <qnio/qnio_api.h>
6048
6049void *vxhs_callback;
6050
6051int main(void) {
6052 iio_init(QNIO_VERSION, vxhs_callback);
6053 return 0;
6054}
6055EOF
6056 vxhs_libs="-lvxhs -lssl"
6057 if compile_prog "" "$vxhs_libs" ; then
6058 vxhs=yes
6059 else
6060 if test "$vxhs" = "yes" ; then
6061 feature_not_found "vxhs block device" "Install libvxhs See github"
6062 fi
6063 vxhs=no
6064 fi
6065fi
6066
6067##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006068# check for _Static_assert()
6069
6070have_static_assert=no
6071cat > $TMPC << EOF
6072_Static_assert(1, "success");
6073int main(void) {
6074 return 0;
6075}
6076EOF
6077if compile_prog "" "" ; then
6078 have_static_assert=yes
6079fi
6080
6081##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006082# check for utmpx.h, it is missing e.g. on OpenBSD
6083
6084have_utmpx=no
6085cat > $TMPC << EOF
6086#include <utmpx.h>
6087struct utmpx user_info;
6088int main(void) {
6089 return 0;
6090}
6091EOF
6092if compile_prog "" "" ; then
6093 have_utmpx=yes
6094fi
6095
6096##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006097# check for getrandom()
6098
6099have_getrandom=no
6100cat > $TMPC << EOF
6101#include <sys/random.h>
6102int main(void) {
6103 return getrandom(0, 0, GRND_NONBLOCK);
6104}
6105EOF
6106if compile_prog "" "" ; then
6107 have_getrandom=yes
6108fi
6109
6110##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006111# checks for sanitizers
6112
Marc-André Lureau247724c2018-01-16 16:11:51 +01006113have_asan=no
6114have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006115have_asan_iface_h=no
6116have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006117
6118if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006119 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006120 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6121 have_asan=yes
6122 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006123
6124 # we could use a simple skeleton for flags checks, but this also
6125 # detect the static linking issue of ubsan, see also:
6126 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6127 cat > $TMPC << EOF
6128#include <stdlib.h>
6129int main(void) {
6130 void *tmp = malloc(10);
6131 return *(int *)(tmp + 2);
6132}
6133EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006134 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6135 have_ubsan=yes
6136 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006137
6138 if check_include "sanitizer/asan_interface.h" ; then
6139 have_asan_iface_h=yes
6140 fi
6141
6142 cat > $TMPC << EOF
6143#include <sanitizer/asan_interface.h>
6144int main(void) {
6145 __sanitizer_start_switch_fiber(0, 0, 0);
6146 return 0;
6147}
6148EOF
6149 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6150 have_asan_iface_fiber=yes
6151 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006152fi
6153
6154##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006155# checks for fuzzer
6156if test "$fuzzing" = "yes" ; then
6157 write_c_fuzzer_skeleton
6158 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6159 have_fuzzer=yes
6160 fi
6161fi
6162
6163##########################################
Junyan He17824402018-07-18 15:47:59 +08006164# check for libpmem
6165
6166if test "$libpmem" != "no"; then
6167 if $pkg_config --exists "libpmem"; then
6168 libpmem="yes"
6169 libpmem_libs=$($pkg_config --libs libpmem)
6170 libpmem_cflags=$($pkg_config --cflags libpmem)
6171 libs_softmmu="$libs_softmmu $libpmem_libs"
6172 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6173 else
6174 if test "$libpmem" = "yes" ; then
6175 feature_not_found "libpmem" "Install nvml or pmdk"
6176 fi
6177 libpmem="no"
6178 fi
6179fi
6180
6181##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006182# check for slirp
6183
Laurent Vivierd5999382019-06-21 15:05:44 +02006184# slirp is only required when building softmmu targets
6185if test -z "$slirp" -a "$softmmu" != "yes" ; then
6186 slirp="no"
6187fi
6188
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006189case "$slirp" in
6190 "" | yes)
6191 if $pkg_config slirp; then
6192 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006193 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6194 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006195 elif test -e "${source_path}/slirp/Makefile" ; then
6196 slirp=internal
6197 elif test -z "$slirp" ; then
6198 slirp=no
6199 else
6200 feature_not_found "slirp" "Install slirp devel or git submodule"
6201 fi
6202 ;;
6203
6204 system)
6205 if ! $pkg_config slirp; then
6206 feature_not_found "slirp" "Install slirp devel"
6207 fi
6208 ;;
6209esac
6210
6211case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006212 git | internal)
6213 if test "$slirp" = git; then
6214 git_submodules="${git_submodules} slirp"
6215 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006216 mkdir -p slirp
6217 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6218 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006219 if test "$mingw32" = "yes" ; then
6220 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6221 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006222 ;;
6223
6224 system)
6225 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6226 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6227 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6228 ;;
6229
6230 no)
6231 ;;
6232 *)
6233 error_exit "Unknown state for slirp: $slirp"
6234 ;;
6235esac
6236
6237
6238##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006239# End of CC checks
6240# After here, no more $cc or $ld runs
6241
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006242write_c_skeleton
6243
Blue Swirl1d728c32012-05-01 18:45:39 +00006244if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006245 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6246 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006247elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006248 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006249elif test "$debug" = "no"; then
6250 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006251fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006252
Marc-André Lureau247724c2018-01-16 16:11:51 +01006253if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006254 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6255 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006256 if test "$have_asan_iface_h" = "no" ; then
6257 echo "ASAN build enabled, but ASAN header missing." \
6258 "Without code annotation, the report may be inferior."
6259 elif test "$have_asan_iface_fiber" = "no" ; then
6260 echo "ASAN build enabled, but ASAN header is too old." \
6261 "Without code annotation, the report may be inferior."
6262 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006263fi
6264if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006265 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6266 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006267fi
6268
Peter Lieven6542aa92014-02-03 10:26:13 +01006269##########################################
6270# Do we have libnfs
6271if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006272 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006273 libnfs="yes"
6274 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006275 else
6276 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006277 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006278 fi
6279 libnfs="no"
6280 fi
6281fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006282
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006283##########################################
6284# Do we have libudev
6285if test "$libudev" != "no" ; then
6286 if $pkg_config libudev && test "$static" != "yes"; then
6287 libudev="yes"
6288 libudev_libs=$($pkg_config --libs libudev)
6289 else
6290 libudev="no"
6291 fi
6292fi
6293
Peter Maydell6ca026c2012-07-18 15:10:18 +01006294# Now we've finished running tests it's OK to add -Werror to the compiler flags
6295if test "$werror" = "yes"; then
6296 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6297fi
6298
Juan Quintelae86ecd42009-08-03 14:45:59 +02006299if test "$solaris" = "no" ; then
6300 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006301 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006302 fi
6303fi
6304
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006305# test if pod2man has --utf8 option
6306if pod2man --help | grep -q utf8; then
6307 POD2MAN="pod2man --utf8"
6308else
6309 POD2MAN="pod2man"
6310fi
6311
Blue Swirl952afb72010-09-19 08:36:34 +00006312# Use ASLR, no-SEH and DEP if available
6313if test "$mingw32" = "yes" ; then
6314 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006315 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006316 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006317 fi
6318 done
6319fi
6320
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006321# Disable OpenBSD W^X if available
6322if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6323 cat > $TMPC <<EOF
6324 int main(void) { return 0; }
6325EOF
6326 wx_ldflags="-Wl,-z,wxneeded"
6327 if compile_prog "" "$wx_ldflags"; then
6328 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6329 fi
6330fi
6331
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006332qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006333qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006334qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006335qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006336qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006337qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006338
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006339# We can only support ivshmem if we have eventfd
6340if [ "$eventfd" = "yes" ]; then
6341 ivshmem=yes
6342fi
6343
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006344tools=""
6345if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006346 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006347 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006348 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006349 fi
6350 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006351 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006352 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006353 if [ "$curl" = "yes" ]; then
6354 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006355 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006356fi
6357if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006358 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006359 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006360 virtfs=yes
6361 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6362 else
6363 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006364 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306365 fi
Andreas Färber17500372012-05-01 01:12:03 +02006366 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006367 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006368 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6369 mpath=yes
6370 else
6371 if test "$mpath" = yes; then
6372 error_exit "Multipath requires libmpathpersist devel"
6373 fi
6374 mpath=no
6375 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006376 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6377 else
6378 if test "$virtfs" = yes; then
6379 error_exit "VirtFS is supported only on Linux"
6380 fi
6381 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006382 if test "$mpath" = yes; then
6383 error_exit "Multipath is supported only on Linux"
6384 fi
6385 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306386 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006387 if test "$xkbcommon" = "yes"; then
6388 tools="qemu-keymap\$(EXESUF) $tools"
6389 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006390fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006391
6392# Probe for guest agent support/options
6393
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006394if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006395 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6396 guest_agent=no
6397 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006398 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006399 guest_agent=yes
6400 elif [ "$guest_agent" != yes ]; then
6401 guest_agent=no
6402 else
6403 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006404 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006405fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006406
Michael Roth9d6bc272015-08-26 10:49:13 -05006407# Guest agent Window MSI package
6408
6409if test "$guest_agent" != yes; then
6410 if test "$guest_agent_msi" = yes; then
6411 error_exit "MSI guest agent package requires guest agent enabled"
6412 fi
6413 guest_agent_msi=no
6414elif test "$mingw32" != "yes"; then
6415 if test "$guest_agent_msi" = "yes"; then
6416 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6417 fi
6418 guest_agent_msi=no
6419elif ! has wixl; then
6420 if test "$guest_agent_msi" = "yes"; then
6421 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6422 fi
6423 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006424else
6425 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6426 # disabled explicitly
6427 if test "$guest_agent_msi" != "no"; then
6428 guest_agent_msi=yes
6429 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006430fi
6431
Michael Roth1a349042015-08-26 11:14:31 -05006432if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006433 if test "$guest_agent_with_vss" = "yes"; then
6434 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6435 fi
6436
6437 if test "$QEMU_GA_MANUFACTURER" = ""; then
6438 QEMU_GA_MANUFACTURER=QEMU
6439 fi
6440
6441 if test "$QEMU_GA_DISTRO" = ""; then
6442 QEMU_GA_DISTRO=Linux
6443 fi
6444
6445 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006446 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006447 fi
6448
Stefan Weil89138852016-05-16 15:10:20 +02006449 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006450
6451 case "$cpu" in
6452 x86_64)
6453 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6454 ;;
6455 i386)
6456 QEMU_GA_MSI_ARCH="-D Arch=32"
6457 ;;
6458 *)
6459 error_exit "CPU $cpu not supported for building installation package"
6460 ;;
6461 esac
6462fi
6463
Paolo Bonzinica35f782010-05-26 16:08:29 +02006464# Mac OS X ships with a broken assembler
6465roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006466if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6467 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6468 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006469 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006470 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6471 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6472 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006473 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6474 ld_i386_emulation="$emu"
6475 roms="optionrom"
6476 break
6477 fi
6478 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006479fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006480
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006481# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006482if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006483 write_c_skeleton
6484 if compile_prog "-march=z900" ""; then
6485 roms="$roms s390-ccw"
6486 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006487fi
6488
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006489# Check that the C++ compiler exists and works with the C compiler.
6490# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6491if has $cxx; then
6492 cat > $TMPC <<EOF
6493int c_function(void);
6494int main(void) { return c_function(); }
6495EOF
6496
6497 compile_object
6498
6499 cat > $TMPCXX <<EOF
6500extern "C" {
6501 int c_function(void);
6502}
6503int c_function(void) { return 42; }
6504EOF
6505
6506 update_cxxflags
6507
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006508 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006509 # C++ compiler $cxx works ok with C compiler $cc
6510 :
6511 else
6512 echo "C++ compiler $cxx does not work with C compiler $cc"
6513 echo "Disabling C++ specific optional code"
6514 cxx=
6515 fi
6516else
6517 echo "No C++ compiler available; disabling C++ specific optional code"
6518 cxx=
6519fi
6520
Cole Robinson02d34f62016-05-06 14:03:09 -04006521echo_version() {
6522 if test "$1" = "yes" ; then
6523 echo "($2)"
6524 fi
6525}
6526
Jan Kiszka50e12062014-10-02 10:03:55 +02006527# prepend pixman and ftd flags after all config tests are done
6528QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006529QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006530libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006531
bellard43ce4df2003-06-09 19:53:12 +00006532echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006533echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006534echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006535echo "binary directory $(eval echo $bindir)"
6536echo "library directory $(eval echo $libdir)"
6537echo "module directory $(eval echo $qemu_moddir)"
6538echo "libexec directory $(eval echo $libexecdir)"
6539echo "include directory $(eval echo $includedir)"
6540echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006541if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006542echo "local state directory $(eval echo $local_statedir)"
6543echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006544echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006545else
6546echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006547echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006548fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006549echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006550echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006551echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006552echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006553echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006554echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006555echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006556echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006557echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006558echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006559echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006560echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006561echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006562echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006563echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006564if test "$docs" != "no"; then
6565 echo "sphinx-build $sphinx_build"
6566fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006567echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006568echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6569if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006570 echo "smbd $smbd"
6571fi
Fam Zheng17969262014-02-10 14:48:56 +08006572echo "module support $modules"
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006573echo "alt path mod load $module_upgrades"
bellard43ce4df2003-06-09 19:53:12 +00006574echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006575echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006576echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006577echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006578echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006579echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006580echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006581echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006582if test "$darwin" = "yes" ; then
6583 echo "Cocoa support $cocoa"
6584fi
Stefan Weil89138852016-05-16 15:10:20 +02006585echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006586echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006587echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006588echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006589echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006590echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006591echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006592echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006593if test "$gcrypt" = "yes"
6594then
6595 echo " hmac $gcrypt_hmac"
6596 echo " XTS $gcrypt_xts"
6597fi
Stefan Weil89138852016-05-16 15:10:20 +02006598echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006599if test "$nettle" = "yes"
6600then
6601 echo " XTS $nettle_xts"
6602fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006603echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006604echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006605echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006606echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006607echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006608echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006609echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006610echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006611echo "Block whitelist (rw) $block_drv_rw_whitelist"
6612echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306613echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006614echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006615echo "VNC support $vnc"
6616if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006617 echo "VNC SASL support $vnc_sasl"
6618 echo "VNC JPEG support $vnc_jpeg"
6619 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006620fi
aliguorie37630c2009-04-22 15:19:10 +00006621echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006622if test "$xen" = "yes" ; then
6623 echo "xen ctrl version $xen_ctrl_version"
6624fi
aurel322e4d9fb2008-04-08 06:01:02 +00006625echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006626echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006627echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006628echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006629echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006630echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006631echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006632echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006633echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006634echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006635echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006636echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006637echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006638echo "TCG support $tcg"
6639if test "$tcg" = "yes" ; then
6640 echo "TCG debug enabled $debug_tcg"
6641 echo "TCG interpreter $tcg_interpreter"
6642fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006643echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006644echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006645echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006646echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006647echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006648echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006649echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006650echo "madvise $madvise"
6651echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006652echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006653echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006654echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006655echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006656echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006657echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006658echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006659echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006660echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006661if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006662echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006663fi
Stefan Weil89138852016-05-16 15:10:20 +02006664echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006665echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006666echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006667echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006668echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006669echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006670echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006671echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006672echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006673echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006674echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006675echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006676echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006677echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006678echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006679echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006680echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006681echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006682echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006683echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306684echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006685echo "gcov $gcov_tool"
6686echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006687echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006688echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006689echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006690echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006691echo "lzo support $lzo"
6692echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006693echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006694echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006695echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006696echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006697echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006698echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006699echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006700echo "avx2 optimization $avx2_opt"
Robert Hoo6b8cd442020-02-29 20:34:34 +08006701echo "avx512f optimization $avx512f_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006702echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006703echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006704echo "bochs support $bochs"
6705echo "cloop support $cloop"
6706echo "dmg support $dmg"
6707echo "qcow v1 support $qcow1"
6708echo "vdi support $vdi"
6709echo "vvfat support $vvfat"
6710echo "qed support $qed"
6711echo "parallels support $parallels"
6712echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006713echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006714echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006715echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006716echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006717echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006718echo "fuzzing support $fuzzing"
Alex Bennéef48e5902020-03-16 17:21:48 +00006719echo "gdb $gdb_bin"
bellard67b915a2004-03-31 23:37:16 +00006720
Peter Maydell898be3e2017-03-21 14:31:57 +00006721if test "$supported_cpu" = "no"; then
6722 echo
6723 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6724 echo
6725 echo "CPU host architecture $cpu support is not currently maintained."
6726 echo "The QEMU project intends to remove support for this host CPU in"
6727 echo "a future release if nobody volunteers to maintain it and to"
6728 echo "provide a build host for our continuous integration setup."
6729 echo "configure has succeeded and you can continue to build, but"
6730 echo "if you care about QEMU on this platform you should contact"
6731 echo "us upstream at qemu-devel@nongnu.org."
6732fi
6733
6734if test "$supported_os" = "no"; then
6735 echo
6736 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6737 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006738 echo "Host OS $targetos support is not currently maintained."
6739 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006740 echo "a future release if nobody volunteers to maintain it and to"
6741 echo "provide a build host for our continuous integration setup."
6742 echo "configure has succeeded and you can continue to build, but"
6743 echo "if you care about QEMU on this platform you should contact"
6744 echo "us upstream at qemu-devel@nongnu.org."
6745fi
6746
Juan Quintela98ec69a2009-07-16 18:34:18 +02006747config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006748
Stefan Weildbd99ae2013-01-01 18:33:44 +01006749echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6750
Juan Quintela98ec69a2009-07-16 18:34:18 +02006751echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006752echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006753
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006754echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006755echo "prefix=$prefix" >> $config_host_mak
6756echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006757echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006758echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006759echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006760echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006761echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006762echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006763echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006764echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006765echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006766echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006767if test "$mingw32" = "no" ; then
6768 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6769fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006770echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006771echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006772echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006773echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006774echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006775echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006776echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006777echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006778echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006779
Juan Quintela98ec69a2009-07-16 18:34:18 +02006780echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006781
Paolo Bonzinif3494742019-01-23 14:56:17 +08006782if test "$default_devices" = "yes" ; then
6783 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6784else
6785 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6786fi
aurel32f8393942009-04-13 18:45:38 +00006787if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006788 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006789fi
aliguori1625af82009-04-05 17:41:02 +00006790if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006791 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006792fi
bellard7d132992003-03-06 23:23:54 +00006793if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006794 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006795fi
bellard67b915a2004-03-31 23:37:16 +00006796if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006797 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006798 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006799 version_major=${rc_version%%.*}
6800 rc_version=${rc_version#*.}
6801 version_minor=${rc_version%%.*}
6802 rc_version=${rc_version#*.}
6803 version_subminor=${rc_version%%.*}
6804 version_micro=0
6805 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6806 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006807 if test "$guest_agent_with_vss" = "yes" ; then
6808 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006809 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006810 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6811 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006812 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006813 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006814 fi
Michael Roth1a349042015-08-26 11:14:31 -05006815 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006816 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006817 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6818 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6819 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6820 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6821 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6822 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6823 fi
pbrook210fa552007-02-27 21:04:49 +00006824else
Juan Quintela35f4df22009-07-27 16:13:07 +02006825 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006826fi
blueswir1128ab2f2008-08-15 18:33:42 +00006827
Mark McLoughlindffcb712009-10-22 17:49:11 +01006828if test "$linux" = "yes" ; then
6829 echo "CONFIG_LINUX=y" >> $config_host_mak
6830fi
6831
bellard83fb7ad2004-07-05 21:25:26 +00006832if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006833 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006834fi
malcb29fe3e2008-11-18 01:42:22 +00006835
bellardec530c82006-04-25 22:36:06 +00006836if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006837 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006838fi
Andreas Färber179cf402010-09-20 00:50:43 +02006839if test "$haiku" = "yes" ; then
6840 echo "CONFIG_HAIKU=y" >> $config_host_mak
6841fi
bellard97a847b2003-08-10 21:36:04 +00006842if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006843 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006844fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006845if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006846 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006847fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006848if test "$want_tools" = "yes" ; then
6849 echo "CONFIG_TOOLS=y" >> $config_host_mak
6850fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006851if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006852 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006853 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006854 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6855 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6856fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006857if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006858 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006859fi
ths8a16d272008-07-19 09:56:24 +00006860if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006861 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006862 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006863fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006864if test "$netmap" = "yes" ; then
6865 echo "CONFIG_NETMAP=y" >> $config_host_mak
6866fi
Gonglei015a33b2014-07-01 20:58:08 +08006867if test "$l2tpv3" = "yes" ; then
6868 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6869fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006870if test "$gprof" = "yes" ; then
6871 echo "CONFIG_GPROF=y" >> $config_host_mak
6872fi
Corey Bryant47e98652012-01-26 09:42:26 -05006873if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006874 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006875fi
Juan Quintela2358a492009-07-27 16:13:25 +02006876echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006877for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006878 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006879 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006880 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006881 echo "$def=m" >> $config_host_mak ;;
6882 *)
6883 echo "$def=y" >> $config_host_mak ;;
6884 esac
malc0c58ac12008-06-25 21:04:05 +00006885done
Fam Zhengb1149912017-09-07 16:29:13 +08006886echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6887echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6888echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6889echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6890echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006891if test "$audio_win_int" = "yes" ; then
6892 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6893fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006894echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6895echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006896if test "$vnc" = "yes" ; then
6897 echo "CONFIG_VNC=y" >> $config_host_mak
6898fi
aliguori2f9606b2009-03-06 20:27:28 +00006899if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006900 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006901fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006902if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006903 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006904fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006905if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006906 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006907fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006908if test "$xkbcommon" = "yes" ; then
6909 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6910 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6911fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006912if test "$xfs" = "yes" ; then
6913 echo "CONFIG_XFS=y" >> $config_host_mak
6914fi
Stefan Weil89138852016-05-16 15:10:20 +02006915qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006916echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006917echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006918echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006919echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006920if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006921 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006922fi
Fam Zheng17969262014-02-10 14:48:56 +08006923if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006924 # $shacmd can generate a hash started with digit, which the compiler doesn't
6925 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006926 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006927 echo "CONFIG_MODULES=y" >> $config_host_mak
6928fi
Christian Ehrhardtbd83c862020-03-10 15:58:06 +01006929if test "$module_upgrades" = "yes"; then
6930 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6931fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006932if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006933 echo "CONFIG_X11=y" >> $config_host_mak
6934 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6935 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6936fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006937if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006938 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006939 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006940 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006941 if test "$sdl_image" = "yes" ; then
6942 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6943 fi
bellard49ecc3f2007-11-07 19:25:15 +00006944fi
6945if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006946 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006947fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006948if test "$iconv" = "yes" ; then
6949 echo "CONFIG_ICONV=y" >> $config_host_mak
6950 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6951 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6952fi
balrog4d3b6f62008-02-10 16:33:14 +00006953if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006954 echo "CONFIG_CURSES=m" >> $config_host_mak
6955 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6956 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006957fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006958if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006959 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006960fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006961if test "$accept4" = "yes" ; then
6962 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6963fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306964if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006965 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306966fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006967if test "$eventfd" = "yes" ; then
6968 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6969fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006970if test "$memfd" = "yes" ; then
6971 echo "CONFIG_MEMFD=y" >> $config_host_mak
6972fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006973if test "$have_usbfs" = "yes" ; then
6974 echo "CONFIG_USBFS=y" >> $config_host_mak
6975fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006976if test "$fallocate" = "yes" ; then
6977 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6978fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006979if test "$fallocate_punch_hole" = "yes" ; then
6980 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6981fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006982if test "$fallocate_zero_range" = "yes" ; then
6983 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6984fi
Kevin Wolfed911432014-09-29 17:12:59 +02006985if test "$posix_fallocate" = "yes" ; then
6986 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6987fi
Peter Maydellc727f472011-01-06 11:05:10 +00006988if test "$sync_file_range" = "yes" ; then
6989 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6990fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006991if test "$fiemap" = "yes" ; then
6992 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6993fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006994if test "$dup3" = "yes" ; then
6995 echo "CONFIG_DUP3=y" >> $config_host_mak
6996fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006997if test "$ppoll" = "yes" ; then
6998 echo "CONFIG_PPOLL=y" >> $config_host_mak
6999fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007000if test "$prctl_pr_set_timerslack" = "yes" ; then
7001 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7002fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007003if test "$epoll" = "yes" ; then
7004 echo "CONFIG_EPOLL=y" >> $config_host_mak
7005fi
7006if test "$epoll_create1" = "yes" ; then
7007 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7008fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007009if test "$sendfile" = "yes" ; then
7010 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7011fi
Riku Voipio51834342014-06-22 11:25:42 +01007012if test "$timerfd" = "yes" ; then
7013 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7014fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007015if test "$setns" = "yes" ; then
7016 echo "CONFIG_SETNS=y" >> $config_host_mak
7017fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007018if test "$clock_adjtime" = "yes" ; then
7019 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7020fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007021if test "$syncfs" = "yes" ; then
7022 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7023fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007024if test "$kcov" = "yes" ; then
7025 echo "CONFIG_KCOV=y" >> $config_host_mak
7026fi
aurel323b3f24a2009-04-15 16:12:13 +00007027if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007028 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007029fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007030if test "$inotify1" = "yes" ; then
7031 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7032fi
Peter Maydell401bc052017-09-05 13:19:32 +01007033if test "$sem_timedwait" = "yes" ; then
7034 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7035fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007036if test "$strchrnul" = "yes" ; then
7037 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7038fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007039if test "$st_atim" = "yes" ; then
7040 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7041fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007042if test "$byteswap_h" = "yes" ; then
7043 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7044fi
7045if test "$bswap_h" = "yes" ; then
7046 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7047fi
Alexander Graf769ce762009-05-11 17:41:42 +02007048if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007049 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007050 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007051 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007052fi
aurel322e4d9fb2008-04-08 06:01:02 +00007053if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007054 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007055 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007056fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007057if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007058 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007059 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007060 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007061 if test "$gtk_gl" = "yes" ; then
7062 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7063 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007064fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007065if test "$gio" = "yes" ; then
7066 echo "CONFIG_GIO=y" >> $config_host_mak
7067 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7068 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007069 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007070fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007071echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007072if test "$gnutls" = "yes" ; then
7073 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7074fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007075if test "$gcrypt" = "yes" ; then
7076 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007077 if test "$gcrypt_hmac" = "yes" ; then
7078 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7079 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007080fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007081if test "$nettle" = "yes" ; then
7082 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007083 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007084fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007085if test "$qemu_private_xts" = "yes" ; then
7086 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7087fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007088if test "$tasn1" = "yes" ; then
7089 echo "CONFIG_TASN1=y" >> $config_host_mak
7090fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007091if test "$auth_pam" = "yes" ; then
7092 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7093fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007094if test "$have_ifaddrs_h" = "yes" ; then
7095 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7096fi
Eric Blake6b39b062016-10-11 10:46:23 -05007097if test "$have_broken_size_max" = "yes" ; then
7098 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7099fi
Jan Vesely277abf12016-04-29 13:15:23 -04007100
7101# Work around a system header bug with some kernel/XFS header
7102# versions where they both try to define 'struct fsxattr':
7103# xfs headers will not try to redefine structs from linux headers
7104# if this macro is set.
7105if test "$have_fsxattr" = "yes" ; then
7106 echo "HAVE_FSXATTR=y" >> $config_host_mak
7107fi
Fam Zheng1efad062018-06-01 17:26:43 +08007108if test "$have_copy_file_range" = "yes" ; then
7109 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7110fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007111if test "$vte" = "yes" ; then
7112 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007113 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007114 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007115fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007116if test "$virglrenderer" = "yes" ; then
7117 echo "CONFIG_VIRGL=y" >> $config_host_mak
7118 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7119 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7120fi
aliguorie37630c2009-04-22 15:19:10 +00007121if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007122 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007123 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007124fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007125if test "$linux_aio" = "yes" ; then
7126 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7127fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007128if test "$linux_io_uring" = "yes" ; then
7129 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7130 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7131 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7132fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007133if test "$attr" = "yes" ; then
7134 echo "CONFIG_ATTR=y" >> $config_host_mak
7135fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007136if test "$libattr" = "yes" ; then
7137 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7138fi
Meador Inge983eef52012-02-24 14:00:42 +05307139if test "$virtfs" = "yes" ; then
7140 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007141fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007142if test "$mpath" = "yes" ; then
7143 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007144 if test "$mpathpersist_new_api" = "yes"; then
7145 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7146 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007147fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007148if test "$vhost_scsi" = "yes" ; then
7149 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7150fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007151if test "$vhost_net" = "yes" ; then
7152 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7153fi
7154if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007155 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007156fi
Gonglei042cea22018-03-01 21:46:28 +08007157if test "$vhost_crypto" = "yes" ; then
7158 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7159fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007160if test "$vhost_vsock" = "yes" ; then
7161 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7162fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007163if test "$vhost_kernel" = "yes" ; then
7164 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7165fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007166if test "$vhost_user" = "yes" ; then
7167 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7168fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007169if test "$vhost_user_fs" = "yes" ; then
7170 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7171fi
ths77755342008-11-27 15:45:16 +00007172if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007173 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007174fi
aliguoribf9298b2008-12-05 20:05:26 +00007175if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007176 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007177fi
aliguoriceb42de2009-04-07 18:43:28 +00007178if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007179 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007180fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007181if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007182 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007183fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007184if test "$membarrier" = "yes" ; then
7185 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7186fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007187if test "$signalfd" = "yes" ; then
7188 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7189fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007190if test "$optreset" = "yes" ; then
7191 echo "HAVE_OPTRESET=y" >> $config_host_mak
7192fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007193if test "$tcg" = "yes"; then
7194 echo "CONFIG_TCG=y" >> $config_host_mak
7195 if test "$tcg_interpreter" = "yes" ; then
7196 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7197 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007198fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007199if test "$fdatasync" = "yes" ; then
7200 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7201fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007202if test "$madvise" = "yes" ; then
7203 echo "CONFIG_MADVISE=y" >> $config_host_mak
7204fi
7205if test "$posix_madvise" = "yes" ; then
7206 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7207fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007208if test "$posix_memalign" = "yes" ; then
7209 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7210fi
bellard97a847b2003-08-10 21:36:04 +00007211
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007212if test "$spice" = "yes" ; then
7213 echo "CONFIG_SPICE=y" >> $config_host_mak
7214fi
7215
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007216if test "$smartcard" = "yes" ; then
7217 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007218 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7219 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007220fi
7221
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007222if test "$libusb" = "yes" ; then
7223 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007224 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7225 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007226fi
7227
Hans de Goede69354a82011-07-19 11:04:10 +02007228if test "$usb_redir" = "yes" ; then
7229 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007230 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7231 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007232fi
7233
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007234if test "$opengl" = "yes" ; then
7235 echo "CONFIG_OPENGL=y" >> $config_host_mak
7236 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007237 if test "$opengl_dmabuf" = "yes" ; then
7238 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7239 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007240fi
7241
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007242if test "$gbm" = "yes" ; then
7243 echo "CONFIG_GBM=y" >> $config_host_mak
7244 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7245 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7246fi
7247
7248
Yang Zhong5a22ab72017-12-20 21:16:46 +08007249if test "$malloc_trim" = "yes" ; then
7250 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7251fi
7252
Liang Li99f2dbd2016-03-08 13:53:16 +08007253if test "$avx2_opt" = "yes" ; then
7254 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7255fi
7256
Robert Hoo6b8cd442020-02-29 20:34:34 +08007257if test "$avx512f_opt" = "yes" ; then
7258 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7259fi
7260
qiaonuohan607dacd2014-02-18 14:11:30 +08007261if test "$lzo" = "yes" ; then
7262 echo "CONFIG_LZO=y" >> $config_host_mak
7263fi
7264
7265if test "$snappy" = "yes" ; then
7266 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7267fi
7268
Peter Wu6b383c02015-01-06 18:48:14 +01007269if test "$bzip2" = "yes" ; then
7270 echo "CONFIG_BZIP2=y" >> $config_host_mak
7271 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7272fi
7273
Julio Faracco83bc1f92018-11-05 13:08:04 -02007274if test "$lzfse" = "yes" ; then
7275 echo "CONFIG_LZFSE=y" >> $config_host_mak
7276 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7277fi
7278
Juan Quintela3a678482019-12-17 21:15:24 +01007279if test "$zstd" = "yes" ; then
7280 echo "CONFIG_ZSTD=y" >> $config_host_mak
7281fi
7282
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007283if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007284 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007285 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7286 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007287fi
7288
Peter Lieven6542aa92014-02-03 10:26:13 +01007289if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007290 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7291 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007292fi
7293
Eduardo Otubof7945732012-08-14 18:44:05 -03007294if test "$seccomp" = "yes"; then
7295 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007296 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7297 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007298fi
7299
bellard83fb7ad2004-07-05 21:25:26 +00007300# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007301if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007302 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007303fi
7304
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007305if test "$localtime_r" = "yes" ; then
7306 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7307fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007308if test "$qom_cast_debug" = "yes" ; then
7309 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7310fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007311if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007312 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007313 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7314 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007315fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007316
Peter Maydell7c2acc72013-04-08 12:11:27 +01007317echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007318if test "$coroutine_pool" = "yes" ; then
7319 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7320else
7321 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7322fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307323
Peter Lieven7d992e42016-09-27 11:58:45 +02007324if test "$debug_stack_usage" = "yes" ; then
7325 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7326fi
7327
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007328if test "$crypto_afalg" = "yes" ; then
7329 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7330fi
7331
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307332if test "$open_by_handle_at" = "yes" ; then
7333 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7334fi
7335
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307336if test "$linux_magic_h" = "yes" ; then
7337 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7338fi
7339
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007340if test "$pragma_diagnostic_available" = "yes" ; then
7341 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007342fi
7343
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007344if test "$valgrind_h" = "yes" ; then
7345 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7346fi
7347
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007348if test "$have_asan_iface_fiber" = "yes" ; then
7349 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7350fi
7351
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007352if test "$has_environ" = "yes" ; then
7353 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7354fi
7355
Richard Henderson76a347e2012-12-28 14:17:02 -08007356if test "$cpuid_h" = "yes" ; then
7357 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7358fi
7359
Richard Hendersonf5401662013-02-16 12:46:59 -08007360if test "$int128" = "yes" ; then
7361 echo "CONFIG_INT128=y" >> $config_host_mak
7362fi
7363
Richard Henderson7ebee432016-06-29 21:10:59 -07007364if test "$atomic128" = "yes" ; then
7365 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7366fi
7367
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007368if test "$cmpxchg128" = "yes" ; then
7369 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7370fi
7371
Richard Hendersondf79b992016-09-02 12:23:57 -07007372if test "$atomic64" = "yes" ; then
7373 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7374fi
7375
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007376if test "$attralias" = "yes" ; then
7377 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7378fi
7379
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007380if test "$getauxval" = "yes" ; then
7381 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7382fi
7383
Bharata B Raoeb100392012-09-24 14:42:45 +05307384if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007385 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007386 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7387 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307388fi
7389
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007390if test "$glusterfs_xlator_opt" = "yes" ; then
7391 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7392fi
7393
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307394if test "$glusterfs_discard" = "yes" ; then
7395 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7396fi
7397
Niels de Vosdf3a4292017-05-28 12:01:14 +05307398if test "$glusterfs_fallocate" = "yes" ; then
7399 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7400fi
7401
Bharata B Rao7c815372013-12-21 14:51:25 +05307402if test "$glusterfs_zerofill" = "yes" ; then
7403 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7404fi
7405
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007406if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7407 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7408fi
7409
Niels de Vos0e3b8912019-03-05 16:46:34 +01007410if test "$glusterfs_iocb_has_stat" = "yes" ; then
7411 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7412fi
7413
Pino Toscanob10d49d2019-06-20 22:08:40 +02007414if test "$libssh" = "yes" ; then
7415 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7416 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7417 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007418fi
7419
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007420if test "$live_block_migration" = "yes" ; then
7421 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7422fi
7423
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007424if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007425 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007426fi
7427
Lluís Vilanova5b808272014-05-27 15:02:14 +02007428echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7429if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007430 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307431fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007432if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007433 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7434 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007435 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007436fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007437if have_backend "log"; then
7438 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007439fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007440if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007441 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7442fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007443if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007444 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7445 if test "$trace_backend_stap" = "yes" ; then
7446 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7447 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007448fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007449if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007450 if test "$linux" = "yes" ; then
7451 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007452 else
Stewart Smith21684af2014-01-24 12:39:10 +11007453 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007454 fi
7455fi
Paul Durrant0a852412016-08-04 14:44:14 +01007456if have_backend "syslog"; then
7457 if test "$posix_syslog" = "yes" ; then
7458 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7459 else
7460 feature_not_found "syslog(trace backend)" "syslog not available"
7461 fi
7462fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007463echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7464
Michael R. Hines2da776d2013-07-22 10:01:54 -04007465if test "$rdma" = "yes" ; then
7466 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007467 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007468fi
7469
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007470if test "$pvrdma" = "yes" ; then
7471 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7472fi
7473
Laurent Vivier575b22b2016-06-02 22:14:15 +02007474if test "$have_rtnetlink" = "yes" ; then
7475 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7476fi
7477
Klim Kireeved279a02018-01-12 12:01:19 +03007478if test "$libxml2" = "yes" ; then
7479 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7480 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7481 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7482fi
7483
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007484if test "$replication" = "yes" ; then
7485 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7486fi
7487
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007488if test "$have_af_vsock" = "yes" ; then
7489 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7490fi
7491
Christopher Covington4d043512016-12-28 15:04:33 -05007492if test "$have_sysmacros" = "yes" ; then
7493 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7494fi
7495
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007496if test "$have_static_assert" = "yes" ; then
7497 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7498fi
7499
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007500if test "$have_utmpx" = "yes" ; then
7501 echo "HAVE_UTMPX=y" >> $config_host_mak
7502fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007503if test "$have_getrandom" = "yes" ; then
7504 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7505fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007506if test "$ivshmem" = "yes" ; then
7507 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7508fi
Richard Hendersone219c492017-09-28 09:01:23 -07007509if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007510 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7511fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007512if test "$debug_mutex" = "yes" ; then
7513 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7514fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007515
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007516# Hold two types of flag:
7517# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7518# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007519# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007520# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007521if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007522 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007523 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7524elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7525 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7526 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007527fi
7528
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007529if test "$vxhs" = "yes" ; then
7530 echo "CONFIG_VXHS=y" >> $config_host_mak
7531 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7532fi
7533
Junyan He17824402018-07-18 15:47:59 +08007534if test "$libpmem" = "yes" ; then
7535 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7536fi
7537
Jeff Cody2f740132018-11-07 07:36:44 +01007538if test "$bochs" = "yes" ; then
7539 echo "CONFIG_BOCHS=y" >> $config_host_mak
7540fi
7541if test "$cloop" = "yes" ; then
7542 echo "CONFIG_CLOOP=y" >> $config_host_mak
7543fi
7544if test "$dmg" = "yes" ; then
7545 echo "CONFIG_DMG=y" >> $config_host_mak
7546fi
7547if test "$qcow1" = "yes" ; then
7548 echo "CONFIG_QCOW1=y" >> $config_host_mak
7549fi
7550if test "$vdi" = "yes" ; then
7551 echo "CONFIG_VDI=y" >> $config_host_mak
7552fi
7553if test "$vvfat" = "yes" ; then
7554 echo "CONFIG_VVFAT=y" >> $config_host_mak
7555fi
7556if test "$qed" = "yes" ; then
7557 echo "CONFIG_QED=y" >> $config_host_mak
7558fi
7559if test "$parallels" = "yes" ; then
7560 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7561fi
7562if test "$sheepdog" = "yes" ; then
7563 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7564fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007565if test "$fuzzing" = "yes" ; then
7566 if test "$have_fuzzer" = "yes"; then
7567 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7568 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7569 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7570 else
7571 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7572 exit 1
7573 fi
7574fi
Jeff Cody2f740132018-11-07 07:36:44 +01007575
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007576if test "$plugins" = "yes" ; then
7577 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7578 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007579 # Copy the export object list to the build dir
7580 if test "$ld_dynamic_list" = "yes" ; then
7581 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7582 ld_symbols=qemu-plugins-ld.symbols
7583 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7584 elif test "$ld_exported_symbols_list" = "yes" ; then
7585 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7586 ld64_symbols=qemu-plugins-ld64.symbols
7587 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7588 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7589 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7590 else
7591 error_exit \
7592 "If \$plugins=yes, either \$ld_dynamic_list or " \
7593 "\$ld_exported_symbols_list should have been set to 'yes'."
7594 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007595fi
7596
Alex Bennéef48e5902020-03-16 17:21:48 +00007597if test -n "$gdb_bin" ; then
7598 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7599fi
7600
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007601if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007602 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007603elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007604 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007605elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007606 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007607elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007608 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007609elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007610 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007611elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007612 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007613else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007614 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007615fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007616
Juan Quintela98ec69a2009-07-16 18:34:18 +02007617echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007618echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007619echo "MAKE=$make" >> $config_host_mak
7620echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007621echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7622echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007623echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7624echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007625echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007626echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007627echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007628echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007629if $iasl -h > /dev/null 2>&1; then
7630 echo "IASL=$iasl" >> $config_host_mak
7631fi
Juan Quintela804edf22009-07-27 16:12:49 +02007632echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007633echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007634echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007635echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007636echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007637echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007638echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007639echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007640echo "OBJCOPY=$objcopy" >> $config_host_mak
7641echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007642echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007643echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007644echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007645echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007646echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007647echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007648echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007649echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007650echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007651if test "$sparse" = "yes" ; then
7652 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007653 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007654 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007655 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7656 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7657fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007658echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007659echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007660echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007661echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007662echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007663echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007664echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007665echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007666echo "DSOSUF=$DSOSUF" >> $config_host_mak
7667echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007668echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007669echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7670echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007671echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007672if test "$gcov" = "yes" ; then
7673 echo "CONFIG_GCOV=y" >> $config_host_mak
7674 echo "GCOV=$gcov_tool" >> $config_host_mak
7675fi
Juan Quintela804edf22009-07-27 16:12:49 +02007676
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007677if test "$libudev" != "no"; then
7678 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7679 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7680fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007681if test "$fuzzing" != "no"; then
7682 echo "CONFIG_FUZZ=y" >> $config_host_mak
7683 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7684 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7685fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007686
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007687if test "$edk2_blobs" = "yes" ; then
7688 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7689fi
7690
Peter Maydell6efd7512011-11-30 11:59:04 +00007691# use included Linux headers
7692if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007693 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007694 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007695 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007696 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007697 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007698 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007699 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007700 ;;
7701 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007702 linux_arch=s390
7703 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007704 aarch64)
7705 linux_arch=arm64
7706 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007707 mips64)
7708 linux_arch=mips
7709 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007710 *)
7711 # For most CPUs the kernel architecture name and QEMU CPU name match.
7712 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007713 ;;
7714 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007715 # For non-KVM architectures we will not have asm headers
7716 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7717 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7718 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007719fi
7720
bellard1d14ffa2005-10-30 18:58:22 +00007721for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007722target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007723config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007724target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007725target_aligned_only="no"
7726case "$target_name" in
7727 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7728 target_aligned_only="yes"
7729 ;;
7730esac
bellard97a847b2003-08-10 21:36:04 +00007731target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007732case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007733 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 +00007734 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007735 ;;
7736esac
bellard97a847b2003-08-10 21:36:04 +00007737target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007738target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007739target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007740target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007741case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007742 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007743 target_softmmu="yes"
7744 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007745 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007746 target_user_only="yes"
7747 target_linux_user="yes"
7748 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007749 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007750 target_user_only="yes"
7751 target_bsd_user="yes"
7752 ;;
pbrook9e407a82007-05-26 16:38:53 +00007753 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007754 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007755 exit 1
7756 ;;
7757esac
ths831b7822007-01-18 20:06:33 +00007758
bellard97a847b2003-08-10 21:36:04 +00007759mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007760echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007761
pbrooke5fe0c52006-06-11 13:32:59 +00007762bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007763mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007764interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007765gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007766
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007767TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007768TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007769TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007770
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007771case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007772 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007773 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307774 gdb_xml_files="i386-32bit.xml"
Laurent Vivier28988112020-03-10 11:33:56 +01007775 TARGET_SYSTBL_ABI=i386
aurel322408a522008-04-20 20:19:44 +00007776 ;;
7777 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007778 TARGET_BASE_ARCH=i386
Laurent Vivier8d62f352020-03-10 11:33:57 +01007779 TARGET_SYSTBL_ABI=common,64
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007780 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307781 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007782 ;;
7783 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007784 mttcg="yes"
Laurent Vivier6116aea2020-03-10 11:33:44 +01007785 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007786 ;;
7787 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007788 TARGET_ARCH=arm
Laurent Vivier5bcb4982020-03-10 11:33:50 +01007789 TARGET_SYSTBL_ABI=common,oabi
aurel322408a522008-04-20 20:19:44 +00007790 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007791 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007792 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007793 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007794 aarch64|aarch64_be)
7795 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007796 TARGET_BASE_ARCH=arm
7797 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007798 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007799 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 +01007800 ;;
aurel322408a522008-04-20 20:19:44 +00007801 cris)
aurel322408a522008-04-20 20:19:44 +00007802 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007803 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007804 mttcg="yes"
Laurent Vivier9566f4c2020-03-10 11:33:45 +01007805 TARGET_SYSTBL_ABI=common,32
Richard Henderson61766fe2016-12-15 11:26:14 -08007806 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007807 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007808 ;;
aurel322408a522008-04-20 20:19:44 +00007809 m68k)
aurel322408a522008-04-20 20:19:44 +00007810 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007811 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Laurent Vivier5b85cae2020-03-10 11:33:46 +01007812 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007813 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007814 microblaze|microblazeel)
7815 TARGET_ARCH=microblaze
Laurent Vivierddf0c4c2020-03-10 11:33:49 +01007816 TARGET_SYSTBL_ABI=common
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007817 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007818 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007819 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007820 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007821 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007822 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007823 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
Laurent Vivierc59716f2020-03-10 11:33:58 +01007824 TARGET_SYSTBL_ABI=o32
aurel322408a522008-04-20 20:19:44 +00007825 ;;
7826 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007827 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007828 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007829 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007830 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007831 echo "TARGET_ABI32=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007832 TARGET_SYSTBL_ABI=n32
aurel322408a522008-04-20 20:19:44 +00007833 ;;
7834 mips64|mips64el)
Alex Bennéea092a952020-03-23 16:15:09 +00007835 mttcg="no"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007836 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007837 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007838 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
Laurent Vivier686a0fe2020-03-10 11:33:59 +01007839 TARGET_SYSTBL_ABI=n64
aurel322408a522008-04-20 20:19:44 +00007840 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007841 moxie)
7842 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007843 nios2)
7844 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007845 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007846 TARGET_ARCH=openrisc
7847 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007848 ;;
aurel322408a522008-04-20 20:19:44 +00007849 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007850 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Laurent Vivier76a691f2020-03-10 11:33:51 +01007851 TARGET_SYSTBL_ABI=common,nospu,32
aurel322408a522008-04-20 20:19:44 +00007852 ;;
aurel322408a522008-04-20 20:19:44 +00007853 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007854 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007855 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007856 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307857 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007858 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007859 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007860 ppc64le)
7861 TARGET_ARCH=ppc64
7862 TARGET_BASE_ARCH=ppc
7863 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007864 TARGET_SYSTBL_ABI=common,nospu,64
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307865 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007866 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 -05007867 ;;
aurel322408a522008-04-20 20:19:44 +00007868 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007869 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007870 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007871 TARGET_ABI_DIR=ppc
Laurent Vivier76a691f2020-03-10 11:33:51 +01007872 TARGET_SYSTBL_ABI=common,nospu,32
Juan Quintela25be2102009-10-07 02:41:00 +02007873 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007874 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007875 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007876 riscv32)
7877 TARGET_BASE_ARCH=riscv
7878 TARGET_ABI_DIR=riscv
7879 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007880 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 +13007881 ;;
7882 riscv64)
7883 TARGET_BASE_ARCH=riscv
7884 TARGET_ABI_DIR=riscv
7885 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007886 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 +13007887 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08007888 rx)
7889 TARGET_ARCH=rx
7890 bflt="yes"
7891 target_compiler=$cross_cc_rx
7892 gdb_xml_files="rx-core.xml"
7893 ;;
aurel322408a522008-04-20 20:19:44 +00007894 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007895 TARGET_ARCH=sh4
Laurent Vivierd0c832f2020-03-10 11:33:48 +01007896 TARGET_SYSTBL_ABI=common
aurel322408a522008-04-20 20:19:44 +00007897 bflt="yes"
7898 ;;
7899 sparc)
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007900 TARGET_SYSTBL_ABI=common,32
aurel322408a522008-04-20 20:19:44 +00007901 ;;
7902 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007903 TARGET_BASE_ARCH=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007904 TARGET_SYSTBL_ABI=common,64
aurel322408a522008-04-20 20:19:44 +00007905 ;;
7906 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007907 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007908 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007909 TARGET_ABI_DIR=sparc
Laurent Vivierbb0cdc02020-03-10 11:33:54 +01007910 TARGET_SYSTBL_ABI=common,32
Juan Quintela25be2102009-10-07 02:41:00 +02007911 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007912 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007913 s390x)
Laurent Vivier318f3712020-03-10 11:33:53 +01007914 TARGET_SYSTBL_ABI=common,64
David Hildenbrand63685bc2018-01-29 13:56:20 +01007915 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007916 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 +01007917 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007918 tilegx)
7919 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007920 tricore)
7921 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007922 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007923 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007924 xtensa|xtensaeb)
7925 TARGET_ARCH=xtensa
Laurent Viviera4a93592020-03-10 11:33:47 +01007926 TARGET_SYSTBL_ABI=common
Max Filippov02e33e92018-10-19 18:40:20 -07007927 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007928 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007929 ;;
aurel322408a522008-04-20 20:19:44 +00007930 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007931 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007932 ;;
7933esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007934# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7935if [ "$TARGET_BASE_ARCH" = "" ]; then
7936 TARGET_BASE_ARCH=$TARGET_ARCH
7937fi
7938
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007939symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7940
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007941upper() {
7942 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7943}
7944
Stefan Weil89138852016-05-16 15:10:20 +02007945target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007946echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007947echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007948echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007949if [ "$TARGET_ABI_DIR" = "" ]; then
7950 TARGET_ABI_DIR=$TARGET_ARCH
7951fi
Juan Quintela25be2102009-10-07 02:41:00 +02007952echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007953if [ "$HOST_VARIANT_DIR" != "" ]; then
7954 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7955fi
Laurent Vivier4d6a8352020-03-10 11:33:43 +01007956if [ "$TARGET_SYSTBL_ABI" != "" ]; then
7957 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
7958fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007959
7960if supported_xen_target $target; then
7961 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007962 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007963 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007964 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007965 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007966else
7967 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007968fi
7969if supported_kvm_target $target; then
7970 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007971 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7972else
7973 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007974fi
7975if supported_hax_target $target; then
7976 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007977fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007978if supported_hvf_target $target; then
7979 echo "CONFIG_HVF=y" >> $config_target_mak
7980fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007981if supported_whpx_target $target; then
7982 echo "CONFIG_WHPX=y" >> $config_target_mak
7983fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007984if test "$target_aligned_only" = "yes" ; then
7985 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7986fi
bellardde83cd02003-06-15 20:25:43 +00007987if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007988 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007989fi
7990if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007991 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007992 if test "$mttcg" = "yes" ; then
7993 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7994 fi
bellardde83cd02003-06-15 20:25:43 +00007995fi
bellard997344f2003-10-27 21:10:39 +00007996if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007997 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007998 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007999fi
ths831b7822007-01-18 20:06:33 +00008000if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008001 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00008002fi
pbrook56aebc82008-10-11 17:55:29 +00008003list=""
8004if test ! -z "$gdb_xml_files" ; then
8005 for x in $gdb_xml_files; do
8006 list="$list $source_path/gdb-xml/$x"
8007 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02008008 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00008009fi
bellardde83cd02003-06-15 20:25:43 +00008010
Eric Blakee633a5c2019-02-04 20:39:37 -06008011if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02008012 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008013fi
blueswir184778502008-10-26 20:33:16 +00008014if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008015 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008016fi
bellard5b0753e2005-03-01 21:37:28 +00008017
Alex Bennée716a5072018-04-10 12:19:40 +01008018
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008019# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008020
Juan Quintela4afddb52009-08-03 14:46:45 +02008021cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008022ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008023
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008024disas_config() {
8025 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8026 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8027}
8028
Juan Quintela64656022009-08-03 14:46:53 +02008029for i in $ARCH $TARGET_BASE_ARCH ; do
8030 case "$i" in
8031 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008032 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008033 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008034 aarch64)
8035 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008036 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008037 fi
8038 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008039 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008040 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008041 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008042 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008043 fi
Juan Quintela64656022009-08-03 14:46:53 +02008044 ;;
8045 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008046 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008047 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008048 hppa)
8049 disas_config "HPPA"
8050 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008051 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008052 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008053 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008054 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008055 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008056 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008057 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008058 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008059 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008060 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008061 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008062 ;;
8063 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008064 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008065 if test -n "${cxx}"; then
8066 disas_config "NANOMIPS"
8067 fi
Juan Quintela64656022009-08-03 14:46:53 +02008068 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008069 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008070 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008071 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008072 nios2)
8073 disas_config "NIOS2"
8074 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008075 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008076 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008077 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008078 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008079 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008080 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008081 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008082 disas_config "RISCV"
8083 ;;
Yoshinori Satoc8c35e52019-01-21 05:18:59 -08008084 rx)
8085 disas_config "RX"
8086 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008087 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008088 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008089 ;;
8090 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008091 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008092 ;;
8093 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008094 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008095 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008096 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008097 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008098 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008099 esac
8100done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008101if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008102 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008103fi
Juan Quintela64656022009-08-03 14:46:53 +02008104
Juan Quintela6ee71262009-08-03 14:46:47 +02008105case "$ARCH" in
8106alpha)
8107 # Ensure there's only a single GP
8108 cflags="-msmall-data $cflags"
8109;;
8110esac
8111
Juan Quintelad02c1db2009-08-03 14:46:50 +02008112if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008113 if test "$target_linux_user" = "yes" ; then
8114 cflags="-p $cflags"
8115 ldflags="-p $ldflags"
8116 fi
8117 if test "$target_softmmu" = "yes" ; then
8118 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02008119 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008120 fi
8121fi
8122
Christian Borntraegere9a35912017-08-23 12:16:23 +02008123# Newer kernels on s390 check for an S390_PGSTE program header and
8124# enable the pgste page table extensions in that case. This makes
8125# the vm.allocate_pgste sysctl unnecessary. We enable this program
8126# header if
8127# - we build on s390x
8128# - we build the system emulation for s390x (qemu-system-s390x)
8129# - KVM is enabled
8130# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008131if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8132 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008133 if ld_has --s390-pgste ; then
8134 ldflags="-Wl,--s390-pgste $ldflags"
8135 fi
8136fi
8137
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008138echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02008139echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008140
bellard97a847b2003-08-10 21:36:04 +00008141done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008142
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008143echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8144echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8145
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008146if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008147 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008148fi
Richard Hendersone219c492017-09-28 09:01:23 -07008149if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008150 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008151fi
8152if test -n "$LIBCAPSTONE"; then
8153 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8154fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008155
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008156if test "$numa" = "yes"; then
8157 echo "CONFIG_NUMA=y" >> $config_host_mak
8158fi
8159
John Snowfd0e6052015-03-25 18:57:39 -04008160if test "$ccache_cpp2" = "yes"; then
8161 echo "export CCACHE_CPP2=y" >> $config_host_mak
8162fi
8163
Peter Maydelle29e5c62018-11-02 11:52:38 +00008164# If we're using a separate build tree, set it up now.
8165# DIRS are directories which we simply mkdir in the build tree;
8166# LINKS are things to symlink back into the source tree
8167# (these can be both files and directories).
8168# Caution: do not add files or directories here using wildcards. This
8169# will result in problems later if a new file matching the wildcard is
8170# added to the source tree -- nothing will cause configure to be rerun
8171# so the build tree will be missing the link back to the new file, and
8172# tests might fail. Prefer to keep the relevant files in their own
8173# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008174DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8175DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008176DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008177DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008178DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008179LINKS="Makefile"
8180LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8181LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008182LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008183LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008184LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8185LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8186LINKS="$LINKS pc-bios/qemu-icon.bmp"
8187LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008188LINKS="$LINKS tests/acceptance tests/data"
8189LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008190LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008191for bios_file in \
8192 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008193 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008194 $source_path/pc-bios/*.rom \
8195 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008196 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008197 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008198 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008199 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008200 $source_path/pc-bios/palcode-*
8201do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008202 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008203done
8204mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008205for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008206 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008207 symlink "$source_path/$f" "$f"
8208 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008209done
Paul Brook1ad21342009-05-19 16:17:58 +01008210
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008211(for i in $cross_cc_vars; do
8212 export $i
8213done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008214export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008215$source_path/tests/tcg/configure.sh)
8216
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008217# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008218for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008219 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008220 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008221 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008222 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008223 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008224 echo "CC=$cc" >> $config_mak
8225 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008226 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008227 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008228 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008229 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008230 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008231done
8232
Max Reitz76c75602014-05-24 23:24:56 +02008233# set up qemu-iotests in this build directory
8234iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008235
8236echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8237echo >> "$iotests_common_env"
8238echo "export PYTHON='$python'" >> "$iotests_common_env"
8239
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008240# Save the configure command line for later reuse.
8241cat <<EOD >config.status
8242#!/bin/sh
8243# Generated by configure.
8244# Run this file to recreate the current configuration.
8245# Compiler output produced by configure, useful for debugging
8246# configure, is in config.log if it exists.
8247EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008248
8249preserve_env() {
8250 envname=$1
8251
8252 eval envval=\$$envname
8253
8254 if test -n "$envval"
8255 then
8256 echo "$envname='$envval'" >> config.status
8257 echo "export $envname" >> config.status
8258 else
8259 echo "unset $envname" >> config.status
8260 fi
8261}
8262
8263# Preserve various env variables that influence what
8264# features/build target configure will detect
8265preserve_env AR
8266preserve_env AS
8267preserve_env CC
8268preserve_env CPP
8269preserve_env CXX
8270preserve_env INSTALL
8271preserve_env LD
8272preserve_env LD_LIBRARY_PATH
8273preserve_env LIBTOOL
8274preserve_env MAKE
8275preserve_env NM
8276preserve_env OBJCOPY
8277preserve_env PATH
8278preserve_env PKG_CONFIG
8279preserve_env PKG_CONFIG_LIBDIR
8280preserve_env PKG_CONFIG_PATH
8281preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008282preserve_env SDL2_CONFIG
8283preserve_env SMBD
8284preserve_env STRIP
8285preserve_env WINDRES
8286
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008287printf "exec" >>config.status
8288printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008289echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008290chmod +x config.status
8291
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008292rm -r "$TMPDIR1"