blob: 057994bce69df9f2a98e25d1a7fef1cd8dbd3990 [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"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100409prefix="/usr/local"
410mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300411datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200412firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300413qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100414bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300415libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400416libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200417includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100418sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300419local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100420confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100421slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100422oss_lib=""
423bsd="no"
424linux="no"
425solaris="no"
426profiler="no"
427cocoa="no"
428softmmu="yes"
429linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100430bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100431blobs="yes"
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +0100432edk2_blobs="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100433pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200434pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200435qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300436trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100437trace_file="trace"
438spice=""
439rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200440smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100441libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200442usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100443opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100444opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000445cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100446avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300447zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700448capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200449lzo=""
450snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100451bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200452lzfse=""
Juan Quintela3a678482019-12-17 21:15:24 +0100453zstd=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400454guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400455guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500456guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300457guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400458vss_win32_sdk=""
459win_sdk="no"
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +0100460want_tools=""
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100461libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100462libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100463coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200464coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200465debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400466crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300467seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530468glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400469glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530470glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530471glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530472glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100473glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100474glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600475gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200476gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100477tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100478gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100479nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100480nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100481gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800482gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100483gcrypt_xts="no"
484qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100485auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100486vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200487virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800488tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200489libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100490live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800491numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800492tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200493jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800494replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700495vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100496bochs="yes"
497cloop="yes"
498dmg="yes"
499qcow1="yes"
500vdi="yes"
501vvfat="yes"
502qed="yes"
503parallels="yes"
504sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300505libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200506debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800507libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800508default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100509plugins="no"
Alexander Bulekovadc28022020-02-19 23:11:14 -0500510fuzzing="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100511
Peter Maydell898be3e2017-03-21 14:31:57 +0000512supported_cpu="no"
513supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100514bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800515malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000516
aliguoriac0df512008-12-29 17:14:15 +0000517# parse CC options first
518for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200519 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000520 case "$opt" in
521 --cross-prefix=*) cross_prefix="$optarg"
522 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100523 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000524 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400525 --cxx=*) CXX="$optarg"
526 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200527 --cpu=*) cpu="$optarg"
528 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100529 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100530 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200531 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100532 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100533 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100534 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100535 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200536 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100537 --enable-debug-info) debug_info="yes"
538 ;;
539 --disable-debug-info) debug_info="no"
540 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100541 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
542 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100543 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
544 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200545 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100546 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100547 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200548 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100549 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200550 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100551 ;;
aliguoriac0df512008-12-29 17:14:15 +0000552 esac
553done
aliguoriac0df512008-12-29 17:14:15 +0000554# OS specific
555# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100556# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000557
Peter Maydelle49d0212012-12-07 15:39:13 +0000558# Preferred compiler:
559# ${CC} (if set)
560# ${cross_prefix}gcc (if cross-prefix specified)
561# system compiler
562if test -z "${CC}${cross_prefix}"; then
563 cc="$host_cc"
564else
565 cc="${CC-${cross_prefix}gcc}"
566fi
567
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400568if test -z "${CXX}${cross_prefix}"; then
569 cxx="c++"
570else
571 cxx="${CXX-${cross_prefix}g++}"
572fi
573
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500574ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700575as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700576ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000577cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500578objcopy="${OBJCOPY-${cross_prefix}objcopy}"
579ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800580ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200581nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500582strip="${STRIP-${cross_prefix}strip}"
583windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300584pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
585query_pkg_config() {
586 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
587}
588pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000589sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000590
Peter Maydell45d285a2013-10-21 21:03:06 +0100591# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
592ARFLAGS="${ARFLAGS-rv}"
593
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200594# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100595# We use -fwrapv to tell the compiler that we require a C dialect where
596# left shift of signed integers is well defined and has the expected
597# 2s-complement style results. (Both clang and gcc agree that it
598# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100599QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400600QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100601QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200602QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200603QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200604QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100605if test "$debug_info" = "yes"; then
606 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100607fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200608
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300609# running configure in the source tree?
610# we know that's the case if configure is there.
611if test -f "./configure"; then
612 pwd_is_source_path="y"
613else
614 pwd_is_source_path="n"
615fi
616
aliguoriac0df512008-12-29 17:14:15 +0000617check_define() {
618cat > $TMPC <<EOF
619#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000620#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000621#endif
622int main(void) { return 0; }
623EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200624 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000625}
626
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200627check_include() {
628cat > $TMPC <<EOF
629#include <$1>
630int main(void) { return 0; }
631EOF
632 compile_object
633}
634
John Snow93b25862015-03-25 18:57:37 -0400635write_c_skeleton() {
636 cat > $TMPC <<EOF
637int main(void) { return 0; }
638EOF
639}
640
Alexander Bulekovadc28022020-02-19 23:11:14 -0500641write_c_fuzzer_skeleton() {
642 cat > $TMPC <<EOF
643#include <stdint.h>
644#include <sys/types.h>
645int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
646int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
647EOF
648}
649
Peter Maydellbbea4052012-08-14 15:35:34 +0100650if check_define __linux__ ; then
651 targetos="Linux"
652elif check_define _WIN32 ; then
653 targetos='MINGW32'
654elif check_define __OpenBSD__ ; then
655 targetos='OpenBSD'
656elif check_define __sun__ ; then
657 targetos='SunOS'
658elif check_define __HAIKU__ ; then
659 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100660elif check_define __FreeBSD__ ; then
661 targetos='FreeBSD'
662elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
663 targetos='GNU/kFreeBSD'
664elif check_define __DragonFly__ ; then
665 targetos='DragonFly'
666elif check_define __NetBSD__; then
667 targetos='NetBSD'
668elif check_define __APPLE__; then
669 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100670else
Peter Maydell951fedf2017-07-13 16:15:32 +0100671 # This is a fatal error, but don't report it yet, because we
672 # might be going to just print the --help text, or it might
673 # be the result of a missing compiler.
674 targetos='bogus'
675 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100676fi
677
678# Some host OSes need non-standard checks for which CPU to use.
679# Note that these checks are broken for cross-compilation: if you're
680# cross-compiling to one of these OSes then you'll need to specify
681# the correct CPU with the --cpu option.
682case $targetos in
683Darwin)
684 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
685 # run 64-bit userspace code.
686 # If the user didn't specify a CPU explicitly and the kernel says this is
687 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
688 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
689 cpu="x86_64"
690 fi
691 ;;
692SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200693 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100694 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
695 cpu="x86_64"
696 fi
697esac
698
Juan Quintela2ff6b912009-08-03 14:45:55 +0200699if test ! -z "$cpu" ; then
700 # command line argument
701 :
702elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000703 cpu="i386"
704elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700705 if check_define __ILP32__ ; then
706 cpu="x32"
707 else
708 cpu="x86_64"
709 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000710elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000711 if check_define __arch64__ ; then
712 cpu="sparc64"
713 else
714 cpu="sparc"
715 fi
malcfdf7ed92009-01-14 18:39:52 +0000716elif check_define _ARCH_PPC ; then
717 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700718 if check_define _LITTLE_ENDIAN ; then
719 cpu="ppc64le"
720 else
721 cpu="ppc64"
722 fi
malcfdf7ed92009-01-14 18:39:52 +0000723 else
724 cpu="ppc"
725 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200726elif check_define __mips__ ; then
727 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200728elif check_define __s390__ ; then
729 if check_define __s390x__ ; then
730 cpu="s390x"
731 else
732 cpu="s390"
733 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000734elif check_define __riscv ; then
735 if check_define _LP64 ; then
736 cpu="riscv64"
737 else
738 cpu="riscv32"
739 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100740elif check_define __arm__ ; then
741 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100742elif check_define __aarch64__ ; then
743 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000744else
Stefan Weil89138852016-05-16 15:10:20 +0200745 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000746fi
747
Peter Maydell359bc952011-12-24 13:07:25 +0000748ARCH=
749# Normalise host CPU name and set ARCH.
750# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000751case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200752 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000753 supported_cpu="yes"
754 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700755 ppc64le)
756 ARCH="ppc64"
757 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700758 ;;
bellard7d132992003-03-06 23:23:54 +0000759 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000760 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000761 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000762 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000763 x86_64|amd64)
764 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000765 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000766 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100767 armv*b|armv*l|arm)
768 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000769 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000770 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100771 aarch64)
772 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000773 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100774 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200775 mips*)
776 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000777 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200778 ;;
blueswir131422552007-04-16 18:27:06 +0000779 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000780 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100781 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000782 ;;
bellard7d132992003-03-06 23:23:54 +0000783 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000784 # This will result in either an error or falling back to TCI later
785 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000786 ;;
787esac
Peter Maydell359bc952011-12-24 13:07:25 +0000788if test -z "$ARCH"; then
789 ARCH="$cpu"
790fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200791
bellard7d132992003-03-06 23:23:54 +0000792# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200793
Stacey Sonadfc3e92014-06-08 09:57:22 -0700794# host *BSD for user mode
795HOST_VARIANT_DIR=""
796
bellard7d132992003-03-06 23:23:54 +0000797case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000798MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200799 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100800 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100801 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200802 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200803 if check_include dsound.h; then
804 audio_drv_list="dsound"
805 else
806 audio_drv_list=""
807 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000808 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000809;;
ths5c40d2b2007-06-23 16:03:36 +0000810GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100811 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100812 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200813 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000814;;
bellard7d3505c2004-05-12 19:32:15 +0000815FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200816 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100817 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100818 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200819 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100820 # needed for kinfo_getvmmap(3) in libutil.h
821 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500822 # needed for kinfo_getproc
823 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100824 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700825 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000826 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000827;;
blueswir1c5e97232009-03-07 20:06:23 +0000828DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200829 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100830 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100831 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200832 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700833 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000834;;
bellard7d3505c2004-05-12 19:32:15 +0000835NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200836 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100837 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100838 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100839 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200840 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200841 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700842 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200843 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000844;;
845OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200846 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100847 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100848 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200849 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700850 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500851 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000852;;
bellard83fb7ad2004-07-05 21:25:26 +0000853Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200854 bsd="yes"
855 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100856 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500857 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800858 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200859 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200860 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100861 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200862 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200863 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100864 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200865 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100866 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200867 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100868 # Disable attempts to use ObjectiveC features in os/object.h since they
869 # won't work when we're compiling with gcc as a C compiler.
870 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700871 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000872 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000873;;
bellardec530c82006-04-25 22:36:06 +0000874SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200875 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100876 make="${MAKE-gmake}"
877 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400878 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200879 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100880 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200881 fi
882 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000883# needed for CMSG_ macros in sys/socket.h
884 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
885# needed for TIOCWIN* defines in termios.h
886 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200887 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200888 solarisnetlibs="-lsocket -lnsl -lresolv"
889 LIBS="$solarisnetlibs $LIBS"
890 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000891;;
Andreas Färber179cf402010-09-20 00:50:43 +0200892Haiku)
893 haiku="yes"
894 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
895 LIBS="-lposix_error_mapper -lnetwork $LIBS"
896;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000897Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100898 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200899 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200900 linux="yes"
901 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200902 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600903 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000904 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200905 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000906;;
bellard7d132992003-03-06 23:23:54 +0000907esac
908
bellard7d3505c2004-05-12 19:32:15 +0000909if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000910 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200911 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000912 fi
bellard7d3505c2004-05-12 19:32:15 +0000913fi
914
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100915: ${make=${MAKE-make}}
916: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000917# We prefer python 3.x. A bare 'python' is traditionally
918# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300919# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000920python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300921for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000922do
923 if has "$binary"
924 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200925 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000926 break
927 fi
928done
Markus Armbruster903458c2020-02-14 18:18:41 +0100929
930sphinx_build=
931for binary in sphinx-build-3 sphinx-build
932do
933 if has "$binary"
934 then
935 sphinx_build=$(command -v "$binary")
936 break
937 fi
938done
939
Alex Bennée39d87c82020-03-03 15:06:20 +0000940# Check for ancillary tools used in testing
941genisoimage=
942for binary in genisoimage
943do
944 if has $binary
945 then
946 genisoimage=$(command -v "$binary")
947 break
948 fi
949done
950
Brade2d88302011-09-02 16:53:28 -0400951: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100952
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100953# Default objcc to clang if available, otherwise use CC
954if has clang; then
955 objcc=clang
956else
957 objcc="$cc"
958fi
959
Juan Quintela3457a3f2009-08-03 14:46:07 +0200960if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200961 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800962 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100963 # MinGW needs -mthreads for TLS and macro _MT.
964 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100965 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400966 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100967 if compile_prog "" "-liberty" ; then
968 LIBS="-liberty $LIBS"
969 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200970 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200971 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300972 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300973 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200974 bindir="\${prefix}"
975 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200976 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200977 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300978 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200979fi
980
Anthony Liguori487fefd2009-06-11 13:28:25 -0500981werror=""
bellard85aa5182007-11-11 20:17:03 +0000982
bellard7d132992003-03-06 23:23:54 +0000983for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200984 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000985 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000986 --help|-h) show_help=yes
987 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400988 --version|-V) exec cat $source_path/VERSION
989 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000990 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000991 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000992 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000993 ;;
aliguoriac0df512008-12-29 17:14:15 +0000994 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000995 ;;
aliguoriac0df512008-12-29 17:14:15 +0000996 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000997 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000998 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000999 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04001000 --cxx=*)
1001 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +02001002 --iasl=*) iasl="$optarg"
1003 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +01001004 --objcc=*) objcc="$optarg"
1005 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001006 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +00001007 ;;
pbrook6a882642006-04-17 13:57:12 +00001008 --install=*) install="$optarg"
1009 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +00001010 --python=*) python="$optarg"
1011 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +00001012 --sphinx-build=*) sphinx_build="$optarg"
1013 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001014 --gcov=*) gcov_tool="$optarg"
1015 ;;
Brade2d88302011-09-02 16:53:28 -04001016 --smbd=*) smbd="$optarg"
1017 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001018 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +00001019 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001020 --extra-cxxflags=*)
1021 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001022 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001023 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001024 --enable-debug-info)
1025 ;;
1026 --disable-debug-info)
1027 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001028 --cross-cc-*)
1029 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001030 --enable-modules)
1031 modules="yes"
1032 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001033 --disable-modules)
1034 modules="no"
1035 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001036 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001037 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001038 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001039 if test "$target_list_exclude"; then
1040 error_exit "Can't mix --target-list with --target-list-exclude"
1041 fi
1042 ;;
1043 --target-list-exclude=*) target_list_exclude="$optarg"
1044 if test "$target_list"; then
1045 error_exit "Can't mix --target-list-exclude with --target-list"
1046 fi
bellardde83cd02003-06-15 20:25:43 +00001047 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001048 --enable-trace-backends=*) trace_backends="$optarg"
1049 ;;
1050 # XXX: backwards compatibility
1051 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001052 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001053 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001054 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001055 --with-default-devices) default_devices="yes"
1056 ;;
1057 --without-default-devices) default_devices="no"
1058 ;;
bellard7d132992003-03-06 23:23:54 +00001059 --enable-gprof) gprof="yes"
1060 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001061 --enable-gcov) gcov="yes"
1062 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001063 --static)
1064 static="yes"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001065 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001066 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001067 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001068 --mandir=*) mandir="$optarg"
1069 ;;
1070 --bindir=*) bindir="$optarg"
1071 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001072 --libdir=*) libdir="$optarg"
1073 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001074 --libexecdir=*) libexecdir="$optarg"
1075 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001076 --includedir=*) includedir="$optarg"
1077 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001078 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001079 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001080 --with-confsuffix=*) confsuffix="$optarg"
1081 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001082 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001083 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001084 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001085 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001086 --localstatedir=*) local_statedir="$optarg"
1087 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001088 --firmwarepath=*) firmwarepath="$optarg"
1089 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001090 --host=*|--build=*|\
1091 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001092 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001093 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1094 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1095 # These switches are silently ignored, for compatibility with
1096 # autoconf-generated configure scripts. This allows QEMU's
1097 # configure to be used by RPM and similar macros that set
1098 # lots of directory switches by default.
1099 ;;
bellard97a847b2003-08-10 21:36:04 +00001100 --disable-sdl) sdl="no"
1101 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001102 --enable-sdl) sdl="yes"
1103 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001104 --disable-sdl-image) sdl_image="no"
1105 ;;
1106 --enable-sdl-image) sdl_image="yes"
1107 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001108 --disable-qom-cast-debug) qom_cast_debug="no"
1109 ;;
1110 --enable-qom-cast-debug) qom_cast_debug="yes"
1111 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301112 --disable-virtfs) virtfs="no"
1113 ;;
1114 --enable-virtfs) virtfs="yes"
1115 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001116 --disable-mpath) mpath="no"
1117 ;;
1118 --enable-mpath) mpath="yes"
1119 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001120 --disable-vnc) vnc="no"
1121 ;;
1122 --enable-vnc) vnc="yes"
1123 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001124 --oss-lib=*) oss_lib="$optarg"
1125 ;;
malc0c58ac12008-06-25 21:04:05 +00001126 --audio-drv-list=*) audio_drv_list="$optarg"
1127 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001128 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001129 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001130 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001131 ;;
aurel32f8393942009-04-13 18:45:38 +00001132 --enable-debug-tcg) debug_tcg="yes"
1133 ;;
1134 --disable-debug-tcg) debug_tcg="no"
1135 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001136 --enable-debug)
1137 # Enable debugging options that aren't excessively noisy
1138 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001139 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001140 debug="yes"
1141 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001142 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001143 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001144 --enable-sanitizers) sanitizers="yes"
1145 ;;
1146 --disable-sanitizers) sanitizers="no"
1147 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001148 --enable-sparse) sparse="yes"
1149 ;;
1150 --disable-sparse) sparse="no"
1151 ;;
aliguori1625af82009-04-05 17:41:02 +00001152 --disable-strip) strip_opt="no"
1153 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001154 --disable-vnc-sasl) vnc_sasl="no"
1155 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001156 --enable-vnc-sasl) vnc_sasl="yes"
1157 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001158 --disable-vnc-jpeg) vnc_jpeg="no"
1159 ;;
1160 --enable-vnc-jpeg) vnc_jpeg="yes"
1161 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001162 --disable-vnc-png) vnc_png="no"
1163 ;;
1164 --enable-vnc-png) vnc_png="yes"
1165 ;;
bellard443f1372004-06-04 11:13:20 +00001166 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001167 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001168 --enable-slirp=git) slirp="git"
1169 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001170 --enable-slirp=system) slirp="system"
1171 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001172 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001173 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001174 --enable-vde) vde="yes"
1175 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001176 --disable-netmap) netmap="no"
1177 ;;
1178 --enable-netmap) netmap="yes"
1179 ;;
aliguorie37630c2009-04-22 15:19:10 +00001180 --disable-xen) xen="no"
1181 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001182 --enable-xen) xen="yes"
1183 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001184 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1185 ;;
1186 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1187 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001188 --disable-brlapi) brlapi="no"
1189 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001190 --enable-brlapi) brlapi="yes"
1191 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001192 --disable-kvm) kvm="no"
1193 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001194 --enable-kvm) kvm="yes"
1195 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001196 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001197 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001198 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001199 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001200 --disable-hvf) hvf="no"
1201 ;;
1202 --enable-hvf) hvf="yes"
1203 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001204 --disable-whpx) whpx="no"
1205 ;;
1206 --enable-whpx) whpx="yes"
1207 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001208 --disable-tcg-interpreter) tcg_interpreter="no"
1209 ;;
1210 --enable-tcg-interpreter) tcg_interpreter="yes"
1211 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001212 --disable-cap-ng) cap_ng="no"
1213 ;;
1214 --enable-cap-ng) cap_ng="yes"
1215 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001216 --disable-tcg) tcg="no"
1217 ;;
1218 --enable-tcg) tcg="yes"
1219 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001220 --disable-malloc-trim) malloc_trim="no"
1221 ;;
1222 --enable-malloc-trim) malloc_trim="yes"
1223 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001224 --disable-spice) spice="no"
1225 ;;
1226 --enable-spice) spice="yes"
1227 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001228 --disable-libiscsi) libiscsi="no"
1229 ;;
1230 --enable-libiscsi) libiscsi="yes"
1231 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001232 --disable-libnfs) libnfs="no"
1233 ;;
1234 --enable-libnfs) libnfs="yes"
1235 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001236 --enable-profiler) profiler="yes"
1237 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001238 --disable-cocoa) cocoa="no"
1239 ;;
malcc2de5c92008-06-28 19:13:06 +00001240 --enable-cocoa)
1241 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001242 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001243 ;;
pbrookcad25d62006-03-19 16:31:11 +00001244 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001245 ;;
pbrookcad25d62006-03-19 16:31:11 +00001246 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001247 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001248 --disable-user)
1249 linux_user="no" ;
1250 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001251 ;;
1252 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001253 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001254 ;;
ths831b7822007-01-18 20:06:33 +00001255 --enable-linux-user) linux_user="yes"
1256 ;;
blueswir184778502008-10-26 20:33:16 +00001257 --disable-bsd-user) bsd_user="no"
1258 ;;
1259 --enable-bsd-user) bsd_user="yes"
1260 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001261 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001262 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001263 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001264 ;;
bellard85aa5182007-11-11 20:17:03 +00001265 --enable-werror) werror="yes"
1266 ;;
1267 --disable-werror) werror="no"
1268 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001269 --enable-stack-protector) stack_protector="yes"
1270 ;;
1271 --disable-stack-protector) stack_protector="no"
1272 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001273 --disable-curses) curses="no"
1274 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001275 --enable-curses) curses="yes"
1276 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001277 --disable-iconv) iconv="no"
1278 ;;
1279 --enable-iconv) iconv="yes"
1280 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001281 --disable-curl) curl="no"
1282 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001283 --enable-curl) curl="yes"
1284 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001285 --disable-fdt) fdt="no"
1286 ;;
1287 --enable-fdt) fdt="yes"
1288 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001289 --disable-linux-aio) linux_aio="no"
1290 ;;
1291 --enable-linux-aio) linux_aio="yes"
1292 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001293 --disable-linux-io-uring) linux_io_uring="no"
1294 ;;
1295 --enable-linux-io-uring) linux_io_uring="yes"
1296 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001297 --disable-attr) attr="no"
1298 ;;
1299 --enable-attr) attr="yes"
1300 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001301 --disable-membarrier) membarrier="no"
1302 ;;
1303 --enable-membarrier) membarrier="yes"
1304 ;;
ths77755342008-11-27 15:45:16 +00001305 --disable-blobs) blobs="no"
1306 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001307 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001308 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001309 --with-coroutine=*) coroutine="$optarg"
1310 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001311 --disable-coroutine-pool) coroutine_pool="no"
1312 ;;
1313 --enable-coroutine-pool) coroutine_pool="yes"
1314 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001315 --enable-debug-stack-usage) debug_stack_usage="yes"
1316 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001317 --enable-crypto-afalg) crypto_afalg="yes"
1318 ;;
1319 --disable-crypto-afalg) crypto_afalg="no"
1320 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001321 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001322 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001323 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001324 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001325 --disable-vhost-net) vhost_net="no"
1326 ;;
1327 --enable-vhost-net) vhost_net="yes"
1328 ;;
Gonglei042cea22018-03-01 21:46:28 +08001329 --disable-vhost-crypto) vhost_crypto="no"
1330 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001331 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001332 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001333 --disable-vhost-scsi) vhost_scsi="no"
1334 ;;
1335 --enable-vhost-scsi) vhost_scsi="yes"
1336 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001337 --disable-vhost-vsock) vhost_vsock="no"
1338 ;;
1339 --enable-vhost-vsock) vhost_vsock="yes"
1340 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001341 --disable-vhost-user-fs) vhost_user_fs="no"
1342 ;;
1343 --enable-vhost-user-fs) vhost_user_fs="yes"
1344 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001345 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001346 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001347 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001348 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001349 --disable-rbd) rbd="no"
1350 ;;
1351 --enable-rbd) rbd="yes"
1352 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001353 --disable-xfsctl) xfs="no"
1354 ;;
1355 --enable-xfsctl) xfs="yes"
1356 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001357 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001358 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001359 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001360 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001361 --disable-libusb) libusb="no"
1362 ;;
1363 --enable-libusb) libusb="yes"
1364 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001365 --disable-usb-redir) usb_redir="no"
1366 ;;
1367 --enable-usb-redir) usb_redir="yes"
1368 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001369 --disable-zlib-test) zlib="no"
1370 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001371 --disable-lzo) lzo="no"
1372 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001373 --enable-lzo) lzo="yes"
1374 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001375 --disable-snappy) snappy="no"
1376 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001377 --enable-snappy) snappy="yes"
1378 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001379 --disable-bzip2) bzip2="no"
1380 ;;
1381 --enable-bzip2) bzip2="yes"
1382 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001383 --enable-lzfse) lzfse="yes"
1384 ;;
1385 --disable-lzfse) lzfse="no"
1386 ;;
Juan Quintela3a678482019-12-17 21:15:24 +01001387 --disable-zstd) zstd="no"
1388 ;;
1389 --enable-zstd) zstd="yes"
1390 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001391 --enable-guest-agent) guest_agent="yes"
1392 ;;
1393 --disable-guest-agent) guest_agent="no"
1394 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001395 --enable-guest-agent-msi) guest_agent_msi="yes"
1396 ;;
1397 --disable-guest-agent-msi) guest_agent_msi="no"
1398 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001399 --with-vss-sdk) vss_win32_sdk=""
1400 ;;
1401 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1402 ;;
1403 --without-vss-sdk) vss_win32_sdk="no"
1404 ;;
1405 --with-win-sdk) win_sdk=""
1406 ;;
1407 --with-win-sdk=*) win_sdk="$optarg"
1408 ;;
1409 --without-win-sdk) win_sdk="no"
1410 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001411 --enable-tools) want_tools="yes"
1412 ;;
1413 --disable-tools) want_tools="no"
1414 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001415 --enable-seccomp) seccomp="yes"
1416 ;;
1417 --disable-seccomp) seccomp="no"
1418 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301419 --disable-glusterfs) glusterfs="no"
1420 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001421 --disable-avx2) avx2_opt="no"
1422 ;;
1423 --enable-avx2) avx2_opt="yes"
1424 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301425 --enable-glusterfs) glusterfs="yes"
1426 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001427 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1428 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001429 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001430 --enable-vhdx|--disable-vhdx)
1431 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1432 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001433 --enable-uuid|--disable-uuid)
1434 echo "$0: $opt is obsolete, UUID support is always built" >&2
1435 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001436 --disable-gtk) gtk="no"
1437 ;;
1438 --enable-gtk) gtk="yes"
1439 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001440 --tls-priority=*) tls_priority="$optarg"
1441 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001442 --disable-gnutls) gnutls="no"
1443 ;;
1444 --enable-gnutls) gnutls="yes"
1445 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001446 --disable-nettle) nettle="no"
1447 ;;
1448 --enable-nettle) nettle="yes"
1449 ;;
1450 --disable-gcrypt) gcrypt="no"
1451 ;;
1452 --enable-gcrypt) gcrypt="yes"
1453 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001454 --disable-auth-pam) auth_pam="no"
1455 ;;
1456 --enable-auth-pam) auth_pam="yes"
1457 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001458 --enable-rdma) rdma="yes"
1459 ;;
1460 --disable-rdma) rdma="no"
1461 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001462 --enable-pvrdma) pvrdma="yes"
1463 ;;
1464 --disable-pvrdma) pvrdma="no"
1465 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001466 --disable-vte) vte="no"
1467 ;;
1468 --enable-vte) vte="yes"
1469 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001470 --disable-virglrenderer) virglrenderer="no"
1471 ;;
1472 --enable-virglrenderer) virglrenderer="yes"
1473 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001474 --disable-tpm) tpm="no"
1475 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001476 --enable-tpm) tpm="yes"
1477 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001478 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001479 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001480 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001481 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001482 --disable-live-block-migration) live_block_migration="no"
1483 ;;
1484 --enable-live-block-migration) live_block_migration="yes"
1485 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001486 --disable-numa) numa="no"
1487 ;;
1488 --enable-numa) numa="yes"
1489 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001490 --disable-libxml2) libxml2="no"
1491 ;;
1492 --enable-libxml2) libxml2="yes"
1493 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001494 --disable-tcmalloc) tcmalloc="no"
1495 ;;
1496 --enable-tcmalloc) tcmalloc="yes"
1497 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001498 --disable-jemalloc) jemalloc="no"
1499 ;;
1500 --enable-jemalloc) jemalloc="yes"
1501 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001502 --disable-replication) replication="no"
1503 ;;
1504 --enable-replication) replication="yes"
1505 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001506 --disable-vxhs) vxhs="no"
1507 ;;
1508 --enable-vxhs) vxhs="yes"
1509 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001510 --disable-bochs) bochs="no"
1511 ;;
1512 --enable-bochs) bochs="yes"
1513 ;;
1514 --disable-cloop) cloop="no"
1515 ;;
1516 --enable-cloop) cloop="yes"
1517 ;;
1518 --disable-dmg) dmg="no"
1519 ;;
1520 --enable-dmg) dmg="yes"
1521 ;;
1522 --disable-qcow1) qcow1="no"
1523 ;;
1524 --enable-qcow1) qcow1="yes"
1525 ;;
1526 --disable-vdi) vdi="no"
1527 ;;
1528 --enable-vdi) vdi="yes"
1529 ;;
1530 --disable-vvfat) vvfat="no"
1531 ;;
1532 --enable-vvfat) vvfat="yes"
1533 ;;
1534 --disable-qed) qed="no"
1535 ;;
1536 --enable-qed) qed="yes"
1537 ;;
1538 --disable-parallels) parallels="no"
1539 ;;
1540 --enable-parallels) parallels="yes"
1541 ;;
1542 --disable-sheepdog) sheepdog="no"
1543 ;;
1544 --enable-sheepdog) sheepdog="yes"
1545 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001546 --disable-vhost-user) vhost_user="no"
1547 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001548 --enable-vhost-user) vhost_user="yes"
1549 ;;
1550 --disable-vhost-kernel) vhost_kernel="no"
1551 ;;
1552 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001553 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001554 --disable-capstone) capstone="no"
1555 ;;
1556 --enable-capstone) capstone="yes"
1557 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001558 --enable-capstone=git) capstone="git"
1559 ;;
1560 --enable-capstone=system) capstone="system"
1561 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001562 --with-git=*) git="$optarg"
1563 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001564 --enable-git-update) git_update=yes
1565 ;;
1566 --disable-git-update) git_update=no
1567 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001568 --enable-debug-mutex) debug_mutex=yes
1569 ;;
1570 --disable-debug-mutex) debug_mutex=no
1571 ;;
Junyan He17824402018-07-18 15:47:59 +08001572 --enable-libpmem) libpmem=yes
1573 ;;
1574 --disable-libpmem) libpmem=no
1575 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001576 --enable-xkbcommon) xkbcommon=yes
1577 ;;
1578 --disable-xkbcommon) xkbcommon=no
1579 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001580 --enable-plugins) plugins="yes"
1581 ;;
1582 --disable-plugins) plugins="no"
1583 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001584 --enable-containers) use_containers="yes"
1585 ;;
1586 --disable-containers) use_containers="no"
1587 ;;
Alexander Bulekovadc28022020-02-19 23:11:14 -05001588 --enable-fuzzing) fuzzing=yes
1589 ;;
1590 --disable-fuzzing) fuzzing=no
1591 ;;
Alex Bennéef48e5902020-03-16 17:21:48 +00001592 --gdb=*) gdb_bin="$optarg"
1593 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001594 *)
1595 echo "ERROR: unknown option $opt"
1596 echo "Try '$0 --help' for more information"
1597 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001598 ;;
bellard7d132992003-03-06 23:23:54 +00001599 esac
1600done
1601
bellard40293e52008-01-31 11:32:10 +00001602case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001603 ppc)
1604 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001605 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001606 ;;
1607 ppc64)
1608 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001609 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001610 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001611 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001612 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001613 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001614 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001615 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001616 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001617 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001618 ;;
ths76d83bd2007-11-18 21:22:10 +00001619 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001620 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001621 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001622 ;;
1623 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001624 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001625 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001626 ;;
bellard40293e52008-01-31 11:32:10 +00001627 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001628 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001629 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001630 ;;
1631 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001632 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1633 # If we truly care, we should simply detect this case at
1634 # runtime and generate the fallback to serial emulation.
1635 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001636 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001637 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001638 x32)
1639 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001640 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001641 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001642 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001643esac
1644
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001645eval "cross_cc_${cpu}=\$host_cc"
1646cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001647QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001648
Peter Maydellaffc88c2016-06-13 11:32:24 +01001649# For user-mode emulation the host arch has to be one we explicitly
1650# support, even if we're using TCI.
1651if [ "$ARCH" = "unknown" ]; then
1652 bsd_user="no"
1653 linux_user="no"
1654fi
1655
Peter Maydell60e0df22011-05-03 14:50:13 +01001656default_target_list=""
1657
Peter Maydell6e92f822013-05-20 16:16:15 +01001658mak_wilds=""
1659
1660if [ "$softmmu" = "yes" ]; then
1661 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001662fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001663if [ "$linux_user" = "yes" ]; then
1664 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001665fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001666if [ "$bsd_user" = "yes" ]; then
1667 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001668fi
1669
Alex Bennée447e1332019-03-19 11:59:12 +00001670if test -z "$target_list_exclude"; then
1671 for config in $mak_wilds; do
1672 default_target_list="${default_target_list} $(basename "$config" .mak)"
1673 done
1674else
1675 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1676 for config in $mak_wilds; do
1677 target="$(basename "$config" .mak)"
1678 exclude="no"
1679 for excl in $exclude_list; do
1680 if test "$excl" = "$target"; then
1681 exclude="yes"
1682 break;
1683 fi
1684 done
1685 if test "$exclude" = "no"; then
1686 default_target_list="${default_target_list} $target"
1687 fi
1688 done
1689fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001690
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001691# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001692trace_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 +01001693
pbrookaf5db582006-04-08 14:26:41 +00001694if test x"$show_help" = x"yes" ; then
1695cat << EOF
1696
1697Usage: configure [options]
1698Options: [defaults in brackets after descriptions]
1699
Stefan Weil08fb77e2013-12-18 22:09:39 +01001700Standard options:
1701 --help print this message
1702 --prefix=PREFIX install in PREFIX [$prefix]
1703 --interp-prefix=PREFIX where to find shared libraries, etc.
1704 use %M for cpu name [$interp_prefix]
1705 --target-list=LIST set target list (default: build everything)
1706$(echo Available targets: $default_target_list | \
1707 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001708 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001709
1710Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001711 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1712 --cc=CC use C compiler CC [$cc]
1713 --iasl=IASL use ACPI compiler IASL [$iasl]
1714 --host-cc=CC use C compiler CC [$host_cc] for code run at
1715 build time
1716 --cxx=CXX use C++ compiler CXX [$cxx]
1717 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1718 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001719 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001720 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001721 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001722 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001723 --make=MAKE use specified make [$make]
1724 --install=INSTALL use specified install [$install]
1725 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001726 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001727 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001728 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001729 --static enable static build [$static]
1730 --mandir=PATH install man pages in PATH
1731 --datadir=PATH install firmware in PATH$confsuffix
1732 --docdir=PATH install documentation in PATH$confsuffix
1733 --bindir=PATH install binaries in PATH
1734 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001735 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001736 --sysconfdir=PATH install config in PATH$confsuffix
1737 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001738 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001739 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001740 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001741 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001742 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001743 --disable-strip disable stripping binaries
1744 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001745 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001746 --audio-drv-list=LIST set audio drivers list:
1747 Available drivers: $audio_possible_drivers
1748 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1749 --block-drv-rw-whitelist=L
1750 set block driver read-write whitelist
1751 (affects only QEMU, not qemu-img)
1752 --block-drv-ro-whitelist=L
1753 set block driver read-only whitelist
1754 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001755 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001756 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001757 --with-trace-file=NAME Full PATH,NAME of file to store traces
1758 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001759 --disable-slirp disable SLIRP userspace network connectivity
1760 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001761 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001762 --oss-lib path to OSS library
1763 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001764 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001765 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001766 --enable-gcov enable test coverage analysis with gcov
1767 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001768 --disable-blobs disable installing provided firmware blobs
1769 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1770 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001771 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001772 --enable-gprof QEMU profiling with gprof
1773 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001774 --enable-debug-stack-usage
1775 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001776 --enable-plugins
1777 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001778 --disable-containers don't use containers for cross-building
Alex Bennéef48e5902020-03-16 17:21:48 +00001779 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001780
1781Optional features, enabled with --enable-FEATURE and
1782disabled with --disable-FEATURE, default is enabled if available:
1783
1784 system all system emulation targets
1785 user supported user emulation targets
1786 linux-user all linux usermode emulation targets
1787 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001788 docs build documentation
1789 guest-agent build the QEMU Guest Agent
1790 guest-agent-msi build guest agent Windows MSI installation package
1791 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001792 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001793 debug-tcg TCG debugging (default is disabled)
1794 debug-info debugging information
1795 sparse sparse checker
1796
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001797 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001798 nettle nettle cryptography support
1799 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001800 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001801 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001802 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001803 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001804 vte vte support for the gtk UI
1805 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001806 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001807 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001808 vnc-sasl SASL encryption for VNC server
1809 vnc-jpeg JPEG lossy compression for VNC server
1810 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001811 cocoa Cocoa UI (Mac OS X only)
1812 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001813 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001814 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001815 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001816 brlapi BrlAPI (Braile)
1817 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001818 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001819 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001820 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001821 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001822 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001823 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001824 rdma Enable RDMA-based migration
1825 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001826 vde support for vde network
1827 netmap support for netmap network
1828 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001829 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001830 cap-ng libcap-ng support
1831 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001832 vhost-net vhost-net kernel acceleration support
1833 vhost-vsock virtio sockets device support
1834 vhost-scsi vhost-scsi kernel target support
1835 vhost-crypto vhost-user-crypto backend support
1836 vhost-kernel vhost kernel backend support
1837 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001838 spice spice
1839 rbd rados block device (rbd)
1840 libiscsi iscsi support
1841 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001842 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001843 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001844 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001845 usb-redir usb network redirection support
1846 lzo support of lzo compression library
1847 snappy support of snappy compression library
1848 bzip2 support of bzip2 compression library
1849 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001850 lzfse support of lzfse compression library
1851 (for reading lzfse-compressed dmg images)
Juan Quintela3a678482019-12-17 21:15:24 +01001852 zstd support for zstd compression library
1853 (for migration compression)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001854 seccomp seccomp support
1855 coroutine-pool coroutine freelist (better performance)
1856 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001857 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001858 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001859 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001860 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001861 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001862 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001863 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001864 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001865 opengl opengl support
1866 virglrenderer virgl rendering support
1867 xfsctl xfsctl support
1868 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001869 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001870 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001871 bochs bochs image format support
1872 cloop cloop image format support
1873 dmg dmg image format support
1874 qcow1 qcow v1 image format support
1875 vdi vdi image format support
1876 vvfat vvfat image format support
1877 qed qed image format support
1878 parallels parallels image format support
1879 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001880 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001881 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001882 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001883 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001884 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001885
1886NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001887EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001888exit 0
pbrookaf5db582006-04-08 14:26:41 +00001889fi
1890
Thomas Huth9c790242019-03-11 11:20:34 +01001891# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001892rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001893
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001894if test -z "$python"
1895then
1896 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001897fi
1898
1899# Note that if the Python conditional here evaluates True we will exit
1900# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001901if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1902 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001903 "Use --python=/path/to/python to specify a supported Python."
1904fi
1905
Cleber Rosa755ee702018-11-09 10:07:07 -05001906# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001907python_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 -05001908
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001909# Suppress writing compiled files
1910python="$python -B"
1911
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001912# Check that the C compiler works. Doing this here before testing
1913# the host CPU ensures that we had a valid CC to autodetect the
1914# $cpu var (and we should bail right here if that's not the case).
1915# It also allows the help message to be printed without a CC.
1916write_c_skeleton;
1917if compile_object ; then
1918 : C compiler works ok
1919else
1920 error_exit "\"$cc\" either does not exist or does not work"
1921fi
1922if ! compile_prog ; then
1923 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1924fi
1925
Peter Maydell359bc952011-12-24 13:07:25 +00001926# Now we have handled --enable-tcg-interpreter and know we're not just
1927# printing the help message, bail out if the host CPU isn't supported.
1928if test "$ARCH" = "unknown"; then
1929 if test "$tcg_interpreter" = "yes" ; then
1930 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001931 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001932 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001933 fi
1934fi
1935
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001936# Consult white-list to determine whether to enable werror
1937# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001938if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001939 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001940 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001941 werror="yes"
1942 else
1943 werror="no"
1944 fi
1945fi
1946
Peter Maydellfb59dab2017-03-28 14:01:52 +01001947if test "$bogus_os" = "yes"; then
1948 # Now that we know that we're not printing the help and that
1949 # the compiler works (so the results of the check_defines we used
1950 # to identify the OS are reliable), if we didn't recognize the
1951 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001952 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001953fi
1954
Thomas Huthefc6c072018-12-03 10:12:32 +01001955# Check whether the compiler matches our minimum requirements:
1956cat > $TMPC << EOF
1957#if defined(__clang_major__) && defined(__clang_minor__)
1958# ifdef __apple_build_version__
1959# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1960# error You need at least XCode Clang v5.1 to compile QEMU
1961# endif
1962# else
1963# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1964# error You need at least Clang v3.4 to compile QEMU
1965# endif
1966# endif
1967#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1968# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1969# error You need at least GCC v4.8 to compile QEMU
1970# endif
1971#else
1972# error You either need GCC or Clang to compiler QEMU
1973#endif
1974int main (void) { return 0; }
1975EOF
1976if ! compile_prog "" "" ; then
1977 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1978fi
1979
Paolo Bonzini8d050952010-12-23 11:43:52 +01001980gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1981gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001982gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001983gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001984gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001985gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001986# Note that we do not add -Werror to gcc_flags here, because that would
1987# enable it for all configure tests. If a configure test failed due
1988# to -Werror this would just silently disable some features,
1989# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001990
1991cc_has_warning_flag() {
1992 write_c_skeleton;
1993
Peter Maydella1d29d62012-10-27 22:19:07 +01001994 # Use the positive sense of the flag when testing for -Wno-wombat
1995 # support (gcc will happily accept the -Wno- form of unknown
1996 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001997 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1998 compile_prog "-Werror $optflag" ""
1999}
2000
2001for flag in $gcc_flags; do
2002 if cc_has_warning_flag $flag ; then
2003 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01002004 fi
2005done
2006
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002007if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02002008 cat > $TMPC << EOF
2009int main(int argc, char *argv[])
2010{
2011 char arr[64], *p = arr, *c = argv[0];
2012 while (*c) {
2013 *p++ = *c++;
2014 }
2015 return 0;
2016}
2017EOF
Steven Noonan63678e12014-03-28 17:19:02 +01002018 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002019 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01002020 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01002021 # We need to check both a compile and a link, since some compiler
2022 # setups fail only on a .c->.o compile and some only at link time
2023 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2024 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01002025 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002026 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002027 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01002028 break
2029 fi
2030 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02002031 if test "$stack_protector" = yes; then
2032 if test $sp_on = 0; then
2033 error_exit "Stack protector not supported"
2034 fi
2035 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01002036fi
2037
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02002038# Disable -Wmissing-braces on older compilers that warn even for
2039# the "universal" C zero initializer {0}.
2040cat > $TMPC << EOF
2041struct {
2042 int a[2];
2043} x = {0};
2044EOF
2045if compile_object "-Werror" "" ; then
2046 :
2047else
2048 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2049fi
2050
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002051# Our module code doesn't support Windows
2052if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2053 error_exit "Modules are not available for Windows"
2054fi
2055
Thomas Huthd376e9d2018-12-03 11:41:38 +01002056# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002057if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002058 if test "$modules" = "yes" ; then
2059 error_exit "static and modules are mutually incompatible"
2060 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002061 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002062 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002063 else
2064 pie="no"
2065 fi
2066fi
2067
Emilio G. Cota768b7852015-04-29 13:09:02 +02002068# Unconditional check for compiler __thread support
2069 cat > $TMPC << EOF
2070static __thread int tls_var;
2071int main(void) { return tls_var; }
2072EOF
2073
2074if ! compile_prog "-Werror" "" ; then
2075 error_exit "Your compiler does not support the __thread specifier for " \
2076 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2077fi
2078
Avi Kivity40d64442011-11-15 20:12:17 +02002079if test "$pie" = ""; then
2080 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002081 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002082 ;;
2083 *)
2084 pie="no"
2085 ;;
2086 esac
2087fi
2088
2089if test "$pie" != "no" ; then
2090 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002091
2092#ifdef __linux__
2093# define THREAD __thread
2094#else
2095# define THREAD
2096#endif
2097
2098static THREAD int tls_var;
2099
2100int main(void) { return tls_var; }
2101
Avi Kivity40d64442011-11-15 20:12:17 +02002102EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002103 # check we support --no-pie first...
2104 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2105 CFLAGS_NOPIE="-fno-pie"
2106 LDFLAGS_NOPIE="-nopie"
2107 fi
2108
Avi Kivity40d64442011-11-15 20:12:17 +02002109 if compile_prog "-fPIE -DPIE" "-pie"; then
2110 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002111 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002112 pie="yes"
2113 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002114 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002115 fi
2116 else
2117 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002118 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002119 else
2120 echo "Disabling PIE due to missing toolchain support"
2121 pie="no"
2122 fi
2123 fi
2124fi
2125
Paolo Bonzini09dada42013-04-17 16:26:47 +02002126##########################################
2127# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2128# use i686 as default anyway, but for those that don't, an explicit
2129# specification is necessary
2130
2131if test "$cpu" = "i386"; then
2132 cat > $TMPC << EOF
2133static int sfaa(int *ptr)
2134{
2135 return __sync_fetch_and_and(ptr, 0);
2136}
2137
2138int main(void)
2139{
2140 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002141 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002142 sfaa(&val);
2143 return val;
2144}
2145EOF
2146 if ! compile_prog "" "" ; then
2147 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2148 fi
2149fi
2150
2151#########################################
bellardec530c82006-04-25 22:36:06 +00002152# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002153
bellardec530c82006-04-25 22:36:06 +00002154if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002155 if has $install; then
2156 :
2157 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002158 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2159 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2160 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002161 fi
Stefan Weil89138852016-05-16 15:10:20 +02002162 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002163 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2164 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2165 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002166 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002167 if has ar; then
2168 :
2169 else
bellardec530c82006-04-25 22:36:06 +00002170 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002171 error_exit "No path includes ar" \
2172 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002173 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002174 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002175 fi
ths5fafdf22007-09-16 21:08:06 +00002176fi
bellardec530c82006-04-25 22:36:06 +00002177
Stefan Weilafb63eb2012-09-26 22:04:38 +02002178if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002179 for target in $default_target_list; do
2180 supported_target $target 2>/dev/null && \
2181 target_list="$target_list $target"
2182 done
2183 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002184else
Stefan Weil89138852016-05-16 15:10:20 +02002185 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002186 for target in $target_list; do
2187 # Check that we recognised the target name; this allows a more
2188 # friendly error message than if we let it fall through.
2189 case " $default_target_list " in
2190 *" $target "*)
2191 ;;
2192 *)
2193 error_exit "Unknown target name '$target'"
2194 ;;
2195 esac
2196 supported_target $target || exit 1
2197 done
bellard5327cf42005-01-10 23:18:50 +00002198fi
Peter Maydell25b48332013-05-20 16:16:16 +01002199
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002200# see if system emulation was really requested
2201case " $target_list " in
2202 *"-softmmu "*) softmmu=yes
2203 ;;
2204 *) softmmu=no
2205 ;;
2206esac
bellard5327cf42005-01-10 23:18:50 +00002207
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002208for target in $target_list; do
2209 case "$target" in
2210 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2211 edk2_blobs="yes"
2212 ;;
2213 esac
2214done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002215# The EDK2 binaries are compressed with bzip2
2216if test "$edk2_blobs" = "yes" && ! has bzip2; then
2217 error_exit "The bzip2 program is required for building QEMU"
2218fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002219
Juan Quintela249247c2009-08-12 18:20:25 +02002220feature_not_found() {
2221 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002222 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002223
Peter Maydell76ad07a2013-04-08 12:11:26 +01002224 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002225 "configure was not able to find it." \
2226 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002227}
2228
bellard7d132992003-03-06 23:23:54 +00002229# ---
2230# big/little endian test
2231cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002232short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2233short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2234extern int foo(short *, short *);
2235int main(int argc, char *argv[]) {
2236 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002237}
2238EOF
2239
Mike Frysinger61cc9192013-06-30 23:30:18 -04002240if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002241 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002242 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002243 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002244 bigendian="no"
2245 else
2246 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002247 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002248else
2249 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002250fi
2251
Juan Quintelab0a47e72009-08-12 18:29:49 +02002252##########################################
Philippe Mathieu-Daudée10ee3f2020-02-17 14:33:27 +01002253# system tools
2254if test -z "$want_tools"; then
2255 if test "$softmmu" = "no"; then
2256 want_tools=no
2257 else
2258 want_tools=yes
2259 fi
2260fi
2261
2262##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002263# cocoa implies not SDL or GTK
2264# (the cocoa UI code currently assumes it is always the active UI
2265# and doesn't interact well with other UI frontend code)
2266if test "$cocoa" = "yes"; then
2267 if test "$sdl" = "yes"; then
2268 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2269 fi
2270 if test "$gtk" = "yes"; then
2271 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2272 fi
2273 gtk=no
2274 sdl=no
2275fi
2276
Eric Blake6b39b062016-10-11 10:46:23 -05002277# Some versions of Mac OS X incorrectly define SIZE_MAX
2278cat > $TMPC << EOF
2279#include <stdint.h>
2280#include <stdio.h>
2281int main(int argc, char *argv[]) {
2282 return printf("%zu", SIZE_MAX);
2283}
2284EOF
2285have_broken_size_max=no
2286if ! compile_object -Werror ; then
2287 have_broken_size_max=yes
2288fi
2289
Peter Maydella30878e2015-08-14 16:10:52 +01002290##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002291# L2TPV3 probe
2292
2293cat > $TMPC <<EOF
2294#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002295#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002296int main(void) { return sizeof(struct mmsghdr); }
2297EOF
2298if compile_prog "" "" ; then
2299 l2tpv3=yes
2300else
2301 l2tpv3=no
2302fi
2303
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002304#########################################
2305# vhost interdependencies and host support
2306
2307# vhost backends
2308test "$vhost_user" = "" && vhost_user=yes
2309if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2310 error_exit "vhost-user isn't available on win32"
2311fi
2312test "$vhost_kernel" = "" && vhost_kernel=$linux
2313if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2314 error_exit "vhost-kernel is only available on Linux"
2315fi
2316
2317# vhost-kernel devices
2318test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2319if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2320 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2321fi
2322test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2323if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2324 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2325fi
2326
2327# vhost-user backends
2328test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2329if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2330 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2331fi
2332test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2333if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2334 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2335fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002336test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2337if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2338 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2339fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002340
2341# OR the vhost-kernel and vhost-user values for simplicity
2342if test "$vhost_net" = ""; then
2343 test "$vhost_net_user" = "yes" && vhost_net=yes
2344 test "$vhost_kernel" = "yes" && vhost_net=yes
2345fi
2346
Gonglei015a33b2014-07-01 20:58:08 +08002347##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002348# MinGW / Mingw-w64 localtime_r/gmtime_r check
2349
2350if test "$mingw32" = "yes"; then
2351 # Some versions of MinGW / Mingw-w64 lack localtime_r
2352 # and gmtime_r entirely.
2353 #
2354 # Some versions of Mingw-w64 define a macro for
2355 # localtime_r/gmtime_r.
2356 #
2357 # Some versions of Mingw-w64 will define functions
2358 # for localtime_r/gmtime_r, but only if you have
2359 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2360 # though, unistd.h and pthread.h both define
2361 # that for you.
2362 #
2363 # So this #undef localtime_r and #include <unistd.h>
2364 # are not in fact redundant.
2365cat > $TMPC << EOF
2366#include <unistd.h>
2367#include <time.h>
2368#undef localtime_r
2369int main(void) { localtime_r(NULL, NULL); return 0; }
2370EOF
2371 if compile_prog "" "" ; then
2372 localtime_r="yes"
2373 else
2374 localtime_r="no"
2375 fi
2376fi
2377
2378##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002379# pkg-config probe
2380
2381if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002382 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002383fi
2384
2385##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002386# NPTL probe
2387
Peter Maydell24cb36a2013-07-16 18:45:00 +01002388if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002389 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002390#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002391#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002392int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002393#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2394#error bork
2395#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002396 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002397}
2398EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002399 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002400 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002401 fi
pbrookbd0c5662008-05-29 14:34:11 +00002402fi
2403
balrogac629222008-10-11 09:56:04 +00002404##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002405# lzo check
2406
2407if test "$lzo" != "no" ; then
2408 cat > $TMPC << EOF
2409#include <lzo/lzo1x.h>
2410int main(void) { lzo_version(); return 0; }
2411EOF
2412 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002413 libs_softmmu="$libs_softmmu -llzo2"
2414 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002415 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002416 if test "$lzo" = "yes"; then
2417 feature_not_found "liblzo2" "Install liblzo2 devel"
2418 fi
2419 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002420 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002421fi
2422
2423##########################################
2424# snappy check
2425
2426if test "$snappy" != "no" ; then
2427 cat > $TMPC << EOF
2428#include <snappy-c.h>
2429int main(void) { snappy_max_compressed_length(4096); return 0; }
2430EOF
2431 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002432 libs_softmmu="$libs_softmmu -lsnappy"
2433 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002434 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002435 if test "$snappy" = "yes"; then
2436 feature_not_found "libsnappy" "Install libsnappy devel"
2437 fi
2438 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002439 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002440fi
2441
2442##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002443# bzip2 check
2444
2445if test "$bzip2" != "no" ; then
2446 cat > $TMPC << EOF
2447#include <bzlib.h>
2448int main(void) { BZ2_bzlibVersion(); return 0; }
2449EOF
2450 if compile_prog "" "-lbz2" ; then
2451 bzip2="yes"
2452 else
2453 if test "$bzip2" = "yes"; then
2454 feature_not_found "libbzip2" "Install libbzip2 devel"
2455 fi
2456 bzip2="no"
2457 fi
2458fi
2459
2460##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002461# lzfse check
2462
2463if test "$lzfse" != "no" ; then
2464 cat > $TMPC << EOF
2465#include <lzfse.h>
2466int main(void) { lzfse_decode_scratch_size(); return 0; }
2467EOF
2468 if compile_prog "" "-llzfse" ; then
2469 lzfse="yes"
2470 else
2471 if test "$lzfse" = "yes"; then
2472 feature_not_found "lzfse" "Install lzfse devel"
2473 fi
2474 lzfse="no"
2475 fi
2476fi
2477
2478##########################################
Juan Quintela3a678482019-12-17 21:15:24 +01002479# zstd check
2480
2481if test "$zstd" != "no" ; then
Juan Quintela297254c2020-03-10 12:14:31 +01002482 libzstd_minver="1.4.0"
2483 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
Juan Quintela3a678482019-12-17 21:15:24 +01002484 zstd_cflags="$($pkg_config --cflags libzstd)"
2485 zstd_libs="$($pkg_config --libs libzstd)"
2486 LIBS="$zstd_libs $LIBS"
2487 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2488 zstd="yes"
2489 else
2490 if test "$zstd" = "yes" ; then
2491 feature_not_found "libzstd" "Install libzstd devel"
2492 fi
2493 zstd="no"
2494 fi
2495fi
2496
2497##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002498# libseccomp check
2499
2500if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002501 libseccomp_minver="2.3.0"
2502 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002503 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2504 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002505 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002506 else
Andrew Jones693e5912015-09-30 11:59:18 -04002507 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002508 feature_not_found "libseccomp" \
2509 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002510 fi
2511 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002512 fi
2513fi
2514##########################################
aliguorie37630c2009-04-22 15:19:10 +00002515# xen probe
2516
Juan Quintelafc321b42009-08-12 18:29:55 +02002517if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002518 # Check whether Xen library path is specified via --extra-ldflags to avoid
2519 # overriding this setting with pkg-config output. If not, try pkg-config
2520 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002521
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002522 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2523 $pkg_config --exists xencontrol ; then
2524 xen_ctrl_version="$(printf '%d%02d%02d' \
2525 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2526 xen=yes
2527 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2528 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002529 if $pkg_config --exists xentoolcore; then
2530 xen_pc="$xen_pc xentoolcore"
2531 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002532 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2533 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002534 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002535
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002536 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002537 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002538
2539 # First we test whether Xen headers and libraries are available.
2540 # If no, we are done and there is no Xen support.
2541 # If yes, more tests are run to detect the Xen version.
2542
2543 # Xen (any)
2544 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002545#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002546int main(void) {
2547 return 0;
2548}
2549EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002550 if ! compile_prog "" "$xen_libs" ; then
2551 # Xen not found
2552 if test "$xen" = "yes" ; then
2553 feature_not_found "xen" "Install xen devel"
2554 fi
2555 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002556
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002557 # Xen unstable
2558 elif
2559 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002560#undef XC_WANT_COMPAT_DEVICEMODEL_API
2561#define __XEN_TOOLS__
2562#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002563#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002564int main(void) {
2565 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002566 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002567
2568 xd = xendevicemodel_open(0, 0);
2569 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2570
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002571 xfmem = xenforeignmemory_open(0, 0);
2572 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2573
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002574 return 0;
2575}
2576EOF
2577 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2578 then
2579 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2580 xen_ctrl_version=41100
2581 xen=yes
2582 elif
2583 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002584#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2585#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002586#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002587int main(void) {
2588 xenforeignmemory_handle *xfmem;
2589
2590 xfmem = xenforeignmemory_open(0, 0);
2591 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002592 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002593
2594 return 0;
2595}
2596EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002597 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002598 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002599 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002600 xen_ctrl_version=41000
2601 xen=yes
2602 elif
2603 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002604#undef XC_WANT_COMPAT_DEVICEMODEL_API
2605#define __XEN_TOOLS__
2606#include <xendevicemodel.h>
2607int main(void) {
2608 xendevicemodel_handle *xd;
2609
2610 xd = xendevicemodel_open(0, 0);
2611 xendevicemodel_close(xd);
2612
2613 return 0;
2614}
2615EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002616 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2617 then
2618 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2619 xen_ctrl_version=40900
2620 xen=yes
2621 elif
2622 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002623/*
2624 * If we have stable libs the we don't want the libxc compat
2625 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002626 *
2627 * Also, check if xengnttab_grant_copy_segment_t is defined and
2628 * grant copy operation is implemented.
2629 */
2630#undef XC_WANT_COMPAT_EVTCHN_API
2631#undef XC_WANT_COMPAT_GNTTAB_API
2632#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2633#include <xenctrl.h>
2634#include <xenstore.h>
2635#include <xenevtchn.h>
2636#include <xengnttab.h>
2637#include <xenforeignmemory.h>
2638#include <stdint.h>
2639#include <xen/hvm/hvm_info_table.h>
2640#if !defined(HVM_MAX_VCPUS)
2641# error HVM_MAX_VCPUS not defined
2642#endif
2643int main(void) {
2644 xc_interface *xc = NULL;
2645 xenforeignmemory_handle *xfmem;
2646 xenevtchn_handle *xe;
2647 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002648 xengnttab_grant_copy_segment_t* seg = NULL;
2649
2650 xs_daemon_open();
2651
2652 xc = xc_interface_open(0, 0, 0);
2653 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2654 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2655 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2656 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002657
2658 xfmem = xenforeignmemory_open(0, 0);
2659 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2660
2661 xe = xenevtchn_open(0, 0);
2662 xenevtchn_fd(xe);
2663
2664 xg = xengnttab_open(0, 0);
2665 xengnttab_grant_copy(xg, 0, seg);
2666
2667 return 0;
2668}
2669EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002670 compile_prog "" "$xen_libs $xen_stable_libs"
2671 then
2672 xen_ctrl_version=40800
2673 xen=yes
2674 elif
2675 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002676/*
2677 * If we have stable libs the we don't want the libxc compat
2678 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002679 */
2680#undef XC_WANT_COMPAT_EVTCHN_API
2681#undef XC_WANT_COMPAT_GNTTAB_API
2682#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2683#include <xenctrl.h>
2684#include <xenstore.h>
2685#include <xenevtchn.h>
2686#include <xengnttab.h>
2687#include <xenforeignmemory.h>
2688#include <stdint.h>
2689#include <xen/hvm/hvm_info_table.h>
2690#if !defined(HVM_MAX_VCPUS)
2691# error HVM_MAX_VCPUS not defined
2692#endif
2693int main(void) {
2694 xc_interface *xc = NULL;
2695 xenforeignmemory_handle *xfmem;
2696 xenevtchn_handle *xe;
2697 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002698
2699 xs_daemon_open();
2700
2701 xc = xc_interface_open(0, 0, 0);
2702 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2703 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2704 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2705 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002706
2707 xfmem = xenforeignmemory_open(0, 0);
2708 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2709
2710 xe = xenevtchn_open(0, 0);
2711 xenevtchn_fd(xe);
2712
2713 xg = xengnttab_open(0, 0);
2714 xengnttab_map_grant_ref(xg, 0, 0, 0);
2715
2716 return 0;
2717}
2718EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002719 compile_prog "" "$xen_libs $xen_stable_libs"
2720 then
2721 xen_ctrl_version=40701
2722 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002723
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002724 # Xen 4.6
2725 elif
2726 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002727#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002728#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002729#include <stdint.h>
2730#include <xen/hvm/hvm_info_table.h>
2731#if !defined(HVM_MAX_VCPUS)
2732# error HVM_MAX_VCPUS not defined
2733#endif
2734int main(void) {
2735 xc_interface *xc;
2736 xs_daemon_open();
2737 xc = xc_interface_open(0, 0, 0);
2738 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2739 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002740 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002741 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002742 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002743 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002744 return 0;
2745}
2746EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002747 compile_prog "" "$xen_libs"
2748 then
2749 xen_ctrl_version=40600
2750 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002751
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002752 # Xen 4.5
2753 elif
2754 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002755#include <xenctrl.h>
2756#include <xenstore.h>
2757#include <stdint.h>
2758#include <xen/hvm/hvm_info_table.h>
2759#if !defined(HVM_MAX_VCPUS)
2760# error HVM_MAX_VCPUS not defined
2761#endif
2762int main(void) {
2763 xc_interface *xc;
2764 xs_daemon_open();
2765 xc = xc_interface_open(0, 0, 0);
2766 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2767 xc_gnttab_open(NULL, 0);
2768 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2769 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002770 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2771 return 0;
2772}
2773EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002774 compile_prog "" "$xen_libs"
2775 then
2776 xen_ctrl_version=40500
2777 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002778
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002779 elif
2780 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002781#include <xenctrl.h>
2782#include <xenstore.h>
2783#include <stdint.h>
2784#include <xen/hvm/hvm_info_table.h>
2785#if !defined(HVM_MAX_VCPUS)
2786# error HVM_MAX_VCPUS not defined
2787#endif
2788int main(void) {
2789 xc_interface *xc;
2790 xs_daemon_open();
2791 xc = xc_interface_open(0, 0, 0);
2792 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2793 xc_gnttab_open(NULL, 0);
2794 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2795 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002796 return 0;
2797}
2798EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002799 compile_prog "" "$xen_libs"
2800 then
2801 xen_ctrl_version=40200
2802 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002803
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002804 else
2805 if test "$xen" = "yes" ; then
2806 feature_not_found "xen (unsupported version)" \
2807 "Install a supported xen (xen 4.2 or newer)"
2808 fi
2809 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002810 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002811
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002812 if test "$xen" = yes; then
2813 if test $xen_ctrl_version -ge 40701 ; then
2814 libs_softmmu="$xen_stable_libs $libs_softmmu"
2815 fi
2816 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002817 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002818 fi
aliguorie37630c2009-04-22 15:19:10 +00002819fi
2820
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002821if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002822 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002823 xen_pci_passthrough=yes
2824 else
2825 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002826 error_exit "User requested feature Xen PCI Passthrough" \
2827 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002828 fi
2829 xen_pci_passthrough=no
2830 fi
2831fi
2832
aliguorie37630c2009-04-22 15:19:10 +00002833##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002834# Windows Hypervisor Platform accelerator (WHPX) check
2835if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002836 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002837 whpx="yes"
2838 else
2839 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002840 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002841 fi
2842 whpx="no"
2843 fi
2844fi
2845
2846##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002847# Sparse probe
2848if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002849 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002850 sparse=yes
2851 else
2852 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002853 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002854 fi
2855 sparse=no
2856 fi
2857fi
2858
2859##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002860# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002861if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002862 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002863 x11_cflags=$($pkg_config --cflags x11)
2864 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002865fi
2866
2867##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002868# GTK probe
2869
2870if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002871 gtkpackage="gtk+-3.0"
2872 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002873 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002874 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002875 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2876 gtk_libs=$($pkg_config --libs $gtkpackage)
2877 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002878 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002879 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002880 gtk_cflags="$gtk_cflags $x11_cflags"
2881 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002882 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002883 gtk="yes"
2884 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002885 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002886 else
2887 gtk="no"
2888 fi
2889fi
2890
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002891
2892##########################################
2893# GNUTLS probe
2894
2895if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002896 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002897 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002898 gnutls_cflags=$($pkg_config --cflags gnutls)
2899 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002900 # Packaging for the static libraries is not always correct.
2901 # At least ubuntu 18.04 ships only shared libraries.
2902 write_c_skeleton
2903 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002904 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002905 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2906 pass="yes"
2907 fi
2908 fi
2909 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002910 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002911 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002912 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002913 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002914fi
2915
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002916
2917# If user didn't give a --disable/enable-gcrypt flag,
2918# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002919# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002920if test -z "$gcrypt"
2921then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002922 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002923 then
2924 gcrypt="no"
2925 fi
2926fi
2927
2928# If user didn't give a --disable/enable-nettle flag,
2929# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002930# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002931if test -z "$nettle"
2932then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002933 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002934 then
2935 nettle="no"
2936 fi
2937fi
2938
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002939has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002940 if ! has "libgcrypt-config"
2941 then
2942 return 1
2943 fi
2944
2945 if test -n "$cross_prefix"
2946 then
Stefan Weil89138852016-05-16 15:10:20 +02002947 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002948 if test "$host-" != $cross_prefix
2949 then
2950 return 1
2951 fi
2952 fi
2953
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002954 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2955 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2956
2957 if test $maj != 1 || test $min -lt 5
2958 then
2959 return 1
2960 fi
2961
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002962 return 0
2963}
2964
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002965
2966if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002967 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002968 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002969 nettle_cflags=$($pkg_config --cflags nettle)
2970 nettle_libs=$($pkg_config --libs nettle)
2971 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002972 # Link test to make sure the given libraries work (e.g for static).
2973 write_c_skeleton
2974 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002975 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002976 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2977 if test -z "$gcrypt"; then
2978 gcrypt="no"
2979 fi
2980 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002981 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002982 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01002983 if test "$pass" = "yes"
2984 then
2985 cat > $TMPC << EOF
2986#include <nettle/xts.h>
2987int main(void) {
2988 return 0;
2989}
2990EOF
2991 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2992 nettle_xts=yes
2993 qemu_private_xts=no
2994 fi
2995 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002996 if test "$pass" = "no" && test "$nettle" = "yes"; then
2997 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002998 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002999 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01003000 fi
3001fi
3002
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003003if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07003004 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01003005 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02003006 gcrypt_cflags=$(libgcrypt-config --cflags)
3007 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07003008 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003009 # as it "spreads unnecessary dependencies" which in
3010 # turn breaks static builds...
3011 if test "$static" = "yes"
3012 then
3013 gcrypt_libs="$gcrypt_libs -lgpg-error"
3014 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003015
Richard Hendersona73e82e2019-05-09 18:24:35 -07003016 # Link test to make sure the given libraries work (e.g for static).
3017 write_c_skeleton
3018 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07003019 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07003020 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3021 pass="yes"
3022 fi
3023 fi
3024 if test "$pass" = "yes"; then
3025 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08003026 cat > $TMPC << EOF
3027#include <gcrypt.h>
3028int main(void) {
3029 gcry_mac_hd_t handle;
3030 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3031 GCRY_MAC_FLAG_SECURE, NULL);
3032 return 0;
3033}
3034EOF
3035 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3036 gcrypt_hmac=yes
3037 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01003038 cat > $TMPC << EOF
3039#include <gcrypt.h>
3040int main(void) {
3041 gcry_cipher_hd_t handle;
3042 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3043 return 0;
3044}
3045EOF
3046 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3047 gcrypt_xts=yes
3048 qemu_private_xts=no
3049 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07003050 elif test "$gcrypt" = "yes"; then
3051 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003052 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07003053 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01003054 fi
3055fi
3056
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01003057
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01003058if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3059then
3060 error_exit "Only one of gcrypt & nettle can be enabled"
3061fi
3062
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003063##########################################
3064# libtasn1 - only for the TLS creds/session test suite
3065
3066tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01003067tasn1_cflags=""
3068tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003069if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02003070 tasn1_cflags=$($pkg_config --cflags libtasn1)
3071 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01003072else
3073 tasn1=no
3074fi
3075
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003076
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003077##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003078# PAM probe
3079
3080if test "$auth_pam" != "no"; then
3081 cat > $TMPC <<EOF
3082#include <security/pam_appl.h>
3083#include <stdio.h>
3084int main(void) {
3085 const char *service_name = "qemu";
3086 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003087 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003088 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003089 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003090 return 0;
3091}
3092EOF
3093 if compile_prog "" "-lpam" ; then
3094 auth_pam=yes
3095 else
3096 if test "$auth_pam" = "yes"; then
3097 feature_not_found "PAM" "Install PAM development package"
3098 else
3099 auth_pam=no
3100 fi
3101 fi
3102fi
3103
3104##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003105# getifaddrs (for tests/test-io-channel-socket )
3106
3107have_ifaddrs_h=yes
3108if ! check_include "ifaddrs.h" ; then
3109 have_ifaddrs_h=no
3110fi
3111
3112##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003113# VTE probe
3114
3115if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003116 vteminversion="0.32.0"
3117 if $pkg_config --exists "vte-2.91"; then
3118 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003119 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003120 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003121 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003122 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003123 vte_cflags=$($pkg_config --cflags $vtepackage)
3124 vte_libs=$($pkg_config --libs $vtepackage)
3125 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003126 vte="yes"
3127 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003128 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003129 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003130 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003131 fi
3132fi
3133
3134##########################################
bellard11d9f692004-04-02 20:55:59 +00003135# SDL probe
3136
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003137# Look for sdl configuration program (pkg-config or sdl2-config). Try
3138# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003139
Peter Xuc6093a02018-04-10 13:40:34 +08003140sdl_probe ()
3141{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003142 if $pkg_config sdl2 --exists; then
3143 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003144 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003145 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003146 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003147 sdlversion=$($sdlconfig --version)
3148 else
3149 if test "$sdl" = "yes" ; then
3150 feature_not_found "sdl" "Install SDL2-devel"
3151 fi
3152 sdl=no
3153 # no need to do the rest
3154 return
3155 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003156 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003157 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3158 fi
3159
Juan Quintelaac119f92009-07-27 16:13:15 +02003160 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003161#include <SDL.h>
3162#undef main /* We don't want SDL to override our main() */
3163int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3164EOF
Stefan Weil89138852016-05-16 15:10:20 +02003165 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003166 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003167 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003168 if $pkg_config sdl2 --exists; then
3169 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003170 else
3171 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3172 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003173 else
Stefan Weil89138852016-05-16 15:10:20 +02003174 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003175 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003176 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003177 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003178
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003179 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003180 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003181 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003182 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3183 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003184 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003185 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003186 :
3187 else
3188 sdl=no
3189 fi
3190 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003191 else # sdl not found
3192 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003193 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003194 fi
3195 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003196 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003197}
3198
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003199sdl_image_probe ()
3200{
3201 if test "$sdl_image" != "no" ; then
3202 if $pkg_config SDL2_image --exists; then
3203 if test "$static" = "yes"; then
3204 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3205 else
3206 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3207 fi
3208 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3209 sdl_image=yes
3210
3211 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3212 sdl_libs="$sdl_libs $sdl_image_libs"
3213 else
3214 if test "$sdl_image" = "yes" ; then
3215 feature_not_found "sdl_image" "Install SDL Image devel"
3216 else
3217 sdl_image=no
3218 fi
3219 fi
3220 fi
3221}
3222
Peter Xuc6093a02018-04-10 13:40:34 +08003223if test "$sdl" != "no" ; then
3224 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003225fi
bellard11d9f692004-04-02 20:55:59 +00003226
aliguori5368a422009-03-03 17:37:21 +00003227if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003228 sdl_image_probe
3229else
3230 if test "$sdl_image" = "yes"; then
3231 echo "warning: SDL Image requested, but SDL is not available, disabling"
3232 fi
3233 sdl_image=no
3234fi
3235
3236if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003237 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003238#include <SDL.h>
3239#if defined(SDL_VIDEO_DRIVER_X11)
3240#include <X11/XKBlib.h>
3241#else
3242#error No x11 support
3243#endif
3244int main(void) { return 0; }
3245EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003246 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003247 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003248 sdl_cflags="$sdl_cflags $x11_cflags"
3249 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003250 fi
aliguori5368a422009-03-03 17:37:21 +00003251fi
3252
ths8f28f3f2007-01-05 21:25:54 +00003253##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003254# RDMA needs OpenFabrics libraries
3255if test "$rdma" != "no" ; then
3256 cat > $TMPC <<EOF
3257#include <rdma/rdma_cma.h>
3258int main(void) { return 0; }
3259EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003260 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003261 if compile_prog "" "$rdma_libs" ; then
3262 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003263 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003264 else
3265 if test "$rdma" = "yes" ; then
3266 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003267 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003268 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003269 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003270 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3271 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3272 fi
3273 rdma="no"
3274 fi
3275fi
3276
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003277##########################################
3278# PVRDMA detection
3279
3280cat > $TMPC <<EOF &&
3281#include <sys/mman.h>
3282
3283int
3284main(void)
3285{
3286 char buf = 0;
3287 void *addr = &buf;
3288 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3289
3290 return 0;
3291}
3292EOF
3293
3294if test "$rdma" = "yes" ; then
3295 case "$pvrdma" in
3296 "")
3297 if compile_prog "" ""; then
3298 pvrdma="yes"
3299 else
3300 pvrdma="no"
3301 fi
3302 ;;
3303 "yes")
3304 if ! compile_prog "" ""; then
3305 error_exit "PVRDMA is not supported since mremap is not implemented"
3306 fi
3307 pvrdma="yes"
3308 ;;
3309 "no")
3310 pvrdma="no"
3311 ;;
3312 esac
3313else
3314 if test "$pvrdma" = "yes" ; then
3315 error_exit "PVRDMA requires rdma suppport"
3316 fi
3317 pvrdma="no"
3318fi
ths8d5d2d42007-08-25 01:37:51 +00003319
Yuval Shaiaee108582019-08-18 16:21:06 +03003320# Let's see if enhanced reg_mr is supported
3321if test "$pvrdma" = "yes" ; then
3322
3323cat > $TMPC <<EOF &&
3324#include <infiniband/verbs.h>
3325
3326int
3327main(void)
3328{
3329 struct ibv_mr *mr;
3330 struct ibv_pd *pd = NULL;
3331 size_t length = 10;
3332 uint64_t iova = 0;
3333 int access = 0;
3334 void *addr = NULL;
3335
3336 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3337
3338 ibv_dereg_mr(mr);
3339
3340 return 0;
3341}
3342EOF
3343 if ! compile_prog "" "-libverbs"; then
3344 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3345 fi
3346fi
3347
ths8d5d2d42007-08-25 01:37:51 +00003348##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003349# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003350if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003351 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003352#include <sasl/sasl.h>
3353#include <stdio.h>
3354int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3355EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003356 # Assuming Cyrus-SASL installed in /usr prefix
3357 vnc_sasl_cflags=""
3358 vnc_sasl_libs="-lsasl2"
3359 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3360 vnc_sasl=yes
3361 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003362 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003363 else
3364 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003365 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003366 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003367 vnc_sasl=no
3368 fi
aliguori2f9606b2009-03-06 20:27:28 +00003369fi
3370
3371##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003372# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003373if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003374cat > $TMPC <<EOF
3375#include <stdio.h>
3376#include <jpeglib.h>
3377int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3378EOF
3379 vnc_jpeg_cflags=""
3380 vnc_jpeg_libs="-ljpeg"
3381 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3382 vnc_jpeg=yes
3383 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003384 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003385 else
3386 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003387 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003388 fi
3389 vnc_jpeg=no
3390 fi
3391fi
3392
3393##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003394# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003395if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003396cat > $TMPC <<EOF
3397//#include <stdio.h>
3398#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003399#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003400int main(void) {
3401 png_structp png_ptr;
3402 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003403 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003404}
3405EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003406 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003407 vnc_png_cflags=$($pkg_config libpng --cflags)
3408 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003409 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003410 vnc_png_cflags=""
3411 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003412 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003413 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3414 vnc_png=yes
3415 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003416 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003417 else
3418 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003419 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003420 fi
3421 vnc_png=no
3422 fi
3423fi
3424
3425##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003426# xkbcommon probe
3427if test "$xkbcommon" != "no" ; then
3428 if $pkg_config xkbcommon --exists; then
3429 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3430 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3431 xkbcommon=yes
3432 else
3433 if test "$xkbcommon" = "yes" ; then
3434 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3435 fi
3436 xkbcommon=no
3437 fi
3438fi
3439
aliguori76655d62009-03-06 20:27:37 +00003440
3441##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003442# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003443if test "$xfs" != "no" ; then
3444 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003445#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003446#include <xfs/xfs.h>
3447int main(void)
3448{
3449 xfsctl(NULL, 0, 0, NULL);
3450 return 0;
3451}
3452EOF
3453 if compile_prog "" "" ; then
3454 xfs="yes"
3455 else
3456 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003457 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003458 fi
3459 xfs=no
3460 fi
3461fi
3462
3463##########################################
ths8a16d272008-07-19 09:56:24 +00003464# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003465if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003466 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003467 cat > $TMPC << EOF
3468#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003469int main(void)
3470{
3471 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003472 char s[] = "";
3473 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003474 return 0;
3475}
ths8a16d272008-07-19 09:56:24 +00003476EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003477 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003478 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003479 else
3480 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003481 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003482 fi
3483 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003484 fi
ths8a16d272008-07-19 09:56:24 +00003485fi
3486
3487##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003488# netmap support probe
3489# Apart from looking for netmap headers, we make sure that the host API version
3490# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3491# a minor/major version number. Minor new features will be marked with values up
3492# to 15, and if something happens that requires a change to the backend we will
3493# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003494if test "$netmap" != "no" ; then
3495 cat > $TMPC << EOF
3496#include <inttypes.h>
3497#include <net/if.h>
3498#include <net/netmap.h>
3499#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003500#if (NETMAP_API < 11) || (NETMAP_API > 15)
3501#error
3502#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003503int main(void) { return 0; }
3504EOF
3505 if compile_prog "" "" ; then
3506 netmap=yes
3507 else
3508 if test "$netmap" = "yes" ; then
3509 feature_not_found "netmap"
3510 fi
3511 netmap=no
3512 fi
3513fi
3514
3515##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003516# libcap-ng library probe
3517if test "$cap_ng" != "no" ; then
3518 cap_libs="-lcap-ng"
3519 cat > $TMPC << EOF
3520#include <cap-ng.h>
3521int main(void)
3522{
3523 capng_capability_to_name(CAPNG_EFFECTIVE);
3524 return 0;
3525}
3526EOF
3527 if compile_prog "" "$cap_libs" ; then
3528 cap_ng=yes
3529 libs_tools="$cap_libs $libs_tools"
3530 else
3531 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003532 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003533 fi
3534 cap_ng=no
3535 fi
3536fi
3537
3538##########################################
malcc2de5c92008-06-28 19:13:06 +00003539# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003540
Stefan Weil89138852016-05-16 15:10:20 +02003541audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003542for drv in $audio_drv_list; do
3543 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003544 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003545 if $pkg_config alsa --exists; then
3546 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003547 if test "$drv" = "try-alsa"; then
3548 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3549 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003550 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003551 if test "$drv" = "try-alsa"; then
3552 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3553 else
3554 error_exit "$drv check failed" \
3555 "Make sure to have the $drv libs and headers installed."
3556 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003557 fi
malcc2de5c92008-06-28 19:13:06 +00003558 ;;
3559
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003560 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003561 if $pkg_config libpulse --exists; then
3562 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003563 if test "$drv" = "try-pa"; then
3564 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3565 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003566 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003567 if test "$drv" = "try-pa"; then
3568 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3569 else
3570 error_exit "$drv check failed" \
3571 "Make sure to have the $drv libs and headers installed."
3572 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003573 fi
malcb8e59f12008-07-02 21:03:08 +00003574 ;;
3575
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003576 sdl)
3577 if test "$sdl" = "no"; then
3578 error_exit "sdl not found or disabled, can not use sdl audio driver"
3579 fi
3580 ;;
3581
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003582 try-sdl)
3583 if test "$sdl" = "no"; then
3584 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3585 else
3586 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3587 fi
3588 ;;
3589
Juan Quintela997e6902009-08-03 14:46:29 +02003590 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003591 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003592 ;;
3593
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003594 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003595 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003596 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003597 ;;
3598
3599 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003600 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003601 ;;
3602
malce4c63a62008-07-19 16:15:16 +00003603 *)
malc1c9b2a52008-07-19 16:57:30 +00003604 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003605 error_exit "Unknown driver '$drv' selected" \
3606 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003607 }
3608 ;;
malcc2de5c92008-06-28 19:13:06 +00003609 esac
3610done
ths8f28f3f2007-01-05 21:25:54 +00003611
balrog4d3b6f62008-02-10 16:33:14 +00003612##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003613# BrlAPI probe
3614
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003615if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003616 brlapi_libs="-lbrlapi"
3617 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003618#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003619#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003620int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3621EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003622 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003623 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003624 else
3625 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003626 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003627 fi
3628 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003629 fi
3630fi
aurel322e4d9fb2008-04-08 06:01:02 +00003631
3632##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003633# iconv probe
3634if test "$iconv" != "no" ; then
3635 cat > $TMPC << EOF
3636#include <iconv.h>
3637int main(void) {
3638 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3639 return conv != (iconv_t) -1;
3640}
3641EOF
3642 iconv_prefix_list="/usr/local:/usr"
3643 iconv_lib_list=":-liconv"
3644 IFS=:
3645 for iconv_prefix in $iconv_prefix_list; do
3646 IFS=:
3647 iconv_cflags="-I$iconv_prefix/include"
3648 iconv_ldflags="-L$iconv_prefix/lib"
3649 for iconv_link in $iconv_lib_list; do
3650 unset IFS
3651 iconv_lib="$iconv_ldflags $iconv_link"
3652 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3653 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3654 iconv_found=yes
3655 break
3656 fi
3657 done
3658 if test "$iconv_found" = yes ; then
3659 break
3660 fi
3661 done
3662 if test "$iconv_found" = "yes" ; then
3663 iconv=yes
3664 else
3665 if test "$iconv" = "yes" ; then
3666 feature_not_found "iconv" "Install iconv devel"
3667 fi
3668 iconv=no
3669 fi
3670fi
3671
3672##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003673# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003674if test "$iconv" = "no" ; then
3675 # curses will need iconv
3676 curses=no
3677fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003678if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003679 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003680 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3681 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003682 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003683 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003684 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003685 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003686 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003687 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003688#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003689#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003690#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003691#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003692int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003693 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003694 wchar_t wch = L'w';
3695 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003696 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003697 addwstr(L"wide chars\n");
3698 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003699 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003700 codeset = nl_langinfo(CODESET);
3701 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003702}
balrog4d3b6f62008-02-10 16:33:14 +00003703EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003704 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003705 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003706 # Make sure we get the wide character prototypes
3707 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003708 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003709 for curses_lib in $curses_lib_list; do
3710 unset IFS
3711 if compile_prog "$curses_inc" "$curses_lib" ; then
3712 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003713 break
3714 fi
3715 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003716 if test "$curses_found" = yes ; then
3717 break
3718 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003719 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003720 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003721 if test "$curses_found" = "yes" ; then
3722 curses=yes
3723 else
3724 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003725 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003726 fi
3727 curses=no
3728 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003729fi
balrog4d3b6f62008-02-10 16:33:14 +00003730
blueswir1414f0da2008-08-15 18:20:52 +00003731##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003732# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003733if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003734 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003735 curlconfig="$pkg_config libcurl"
3736 else
3737 curlconfig=curl-config
3738 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003739 cat > $TMPC << EOF
3740#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003741int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003742EOF
Stefan Weil89138852016-05-16 15:10:20 +02003743 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3744 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003745 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003746 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003747 else
3748 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003749 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003750 fi
3751 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003752 fi
3753fi # test "$curl"
3754
3755##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003756# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003757
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003758glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003759glib_modules=gthread-2.0
3760if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003761 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003762fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003763if test "$plugins" = yes; then
3764 glib_modules="$glib_modules gmodule-2.0"
3765fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003766
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003767# This workaround is required due to a bug in pkg-config file for glib as it
3768# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3769
Eric Blakee633a5c2019-02-04 20:39:37 -06003770if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003771 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3772fi
3773
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003774for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003775 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003776 glib_cflags=$($pkg_config --cflags $i)
3777 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003778 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003779 LIBS="$glib_libs $LIBS"
3780 libs_qga="$glib_libs $libs_qga"
3781 else
3782 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3783 fi
3784done
3785
Marc-André Lureauf876b762019-02-21 12:07:00 +01003786if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3787 gio=yes
3788 gio_cflags=$($pkg_config --cflags gio-2.0)
3789 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003790 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003791 if [ ! -x "$gdbus_codegen" ]; then
3792 gdbus_codegen=
3793 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003794else
3795 gio=no
3796fi
3797
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003798if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3799 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3800 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3801fi
3802
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003803# Sanity check that the current size_t matches the
3804# size that glib thinks it should be. This catches
3805# problems on multi-arch where people try to build
3806# 32-bit QEMU while pointing at 64-bit glib headers
3807cat > $TMPC <<EOF
3808#include <glib.h>
3809#include <unistd.h>
3810
3811#define QEMU_BUILD_BUG_ON(x) \
3812 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3813
3814int main(void) {
3815 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3816 return 0;
3817}
3818EOF
3819
Stefan Weil5919e032016-04-28 23:33:41 +02003820if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003821 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3822 "You probably need to set PKG_CONFIG_LIBDIR"\
3823 "to point to the right pkg-config files for your"\
3824 "build target"
3825fi
3826
John Snowbbbf2e02015-03-25 18:57:38 -04003827# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3828cat > $TMPC << EOF
3829#include <glib.h>
3830int main(void) { return 0; }
3831EOF
3832if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3833 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3834 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3835 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3836 fi
3837fi
3838
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003839#########################################
3840# zlib check
3841
3842if test "$zlib" != "no" ; then
3843 if $pkg_config --exists zlib; then
3844 zlib_cflags=$($pkg_config --cflags zlib)
3845 zlib_libs=$($pkg_config --libs zlib)
3846 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3847 LIBS="$zlib_libs $LIBS"
3848 else
3849 cat > $TMPC << EOF
3850#include <zlib.h>
3851int main(void) { zlibVersion(); return 0; }
3852EOF
3853 if compile_prog "" "-lz" ; then
3854 LIBS="$LIBS -lz"
3855 else
3856 error_exit "zlib check failed" \
3857 "Make sure to have the zlib libs and headers installed."
3858 fi
3859 fi
3860fi
3861
Fam Zhenge26110c2014-02-10 14:48:57 +08003862##########################################
3863# SHA command probe for modules
3864if test "$modules" = yes; then
3865 shacmd_probe="sha1sum sha1 shasum"
3866 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003867 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003868 shacmd="$c"
3869 break
3870 fi
3871 done
3872 if test "$shacmd" = ""; then
3873 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3874 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003875fi
3876
3877##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003878# pixman support probe
3879
Eric Blakee633a5c2019-02-04 20:39:37 -06003880if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003881 pixman_cflags=
3882 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003883elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003884 pixman_cflags=$($pkg_config --cflags pixman-1)
3885 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003886else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003887 error_exit "pixman >= 0.21.8 not present." \
3888 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003889fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003890
3891##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003892# libmpathpersist probe
3893
3894if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003895 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003896 cat > $TMPC <<EOF
3897#include <libudev.h>
3898#include <mpath_persist.h>
3899unsigned mpath_mx_alloc_len = 1024;
3900int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003901static struct config *multipath_conf;
3902extern struct udev *udev;
3903extern struct config *get_multipath_config(void);
3904extern void put_multipath_config(struct config *conf);
3905struct udev *udev;
3906struct config *get_multipath_config(void) { return multipath_conf; }
3907void put_multipath_config(struct config *conf) { }
3908
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003909int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003910 udev = udev_new();
3911 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003912 return 0;
3913}
3914EOF
3915 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3916 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003917 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003918 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003919 # probe for the old API
3920 cat > $TMPC <<EOF
3921#include <libudev.h>
3922#include <mpath_persist.h>
3923unsigned mpath_mx_alloc_len = 1024;
3924int logsink;
3925int main(void) {
3926 struct udev *udev = udev_new();
3927 mpath_lib_init(udev);
3928 return 0;
3929}
3930EOF
3931 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3932 mpathpersist=yes
3933 mpathpersist_new_api=no
3934 else
3935 mpathpersist=no
3936 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003937 fi
3938else
3939 mpathpersist=no
3940fi
3941
3942##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003943# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003944PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003945
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003946pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003947cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003948#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003949static void *f(void *p) { return NULL; }
3950int main(void) {
3951 pthread_t thread;
3952 pthread_create(&thread, 0, f, 0);
3953 return 0;
3954}
blueswir1414f0da2008-08-15 18:20:52 +00003955EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003956if compile_prog "" "" ; then
3957 pthread=yes
3958else
3959 for pthread_lib in $PTHREADLIBS_LIST; do
3960 if compile_prog "" "$pthread_lib" ; then
3961 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003962 found=no
3963 for lib_entry in $LIBS; do
3964 if test "$lib_entry" = "$pthread_lib"; then
3965 found=yes
3966 break
3967 fi
3968 done
3969 if test "$found" = "no"; then
3970 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003971 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003972 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003973 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003974 break
3975 fi
3976 done
3977fi
blueswir1414f0da2008-08-15 18:20:52 +00003978
Eric Blakee633a5c2019-02-04 20:39:37 -06003979if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003980 error_exit "pthread check failed" \
3981 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003982fi
3983
Roman Bolshakov479a5742018-12-17 23:26:01 +03003984# check for pthread_setname_np with thread id
3985pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003986cat > $TMPC << EOF
3987#include <pthread.h>
3988
3989static void *f(void *p) { return NULL; }
3990int main(void)
3991{
3992 pthread_t thread;
3993 pthread_create(&thread, 0, f, 0);
3994 pthread_setname_np(thread, "QEMU");
3995 return 0;
3996}
3997EOF
3998if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003999 pthread_setname_np_w_tid=yes
4000fi
4001
4002# check for pthread_setname_np without thread id
4003pthread_setname_np_wo_tid=no
4004cat > $TMPC << EOF
4005#include <pthread.h>
4006
4007static void *f(void *p) { pthread_setname_np("QEMU"); }
4008int main(void)
4009{
4010 pthread_t thread;
4011 pthread_create(&thread, 0, f, 0);
4012 return 0;
4013}
4014EOF
4015if compile_prog "" "$pthread_lib" ; then
4016 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00004017fi
4018
aliguoribf9298b2008-12-05 20:05:26 +00004019##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004020# rbd probe
4021if test "$rbd" != "no" ; then
4022 cat > $TMPC <<EOF
4023#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07004024#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004025int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07004026 rados_t cluster;
4027 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004028 return 0;
4029}
4030EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07004031 rbd_libs="-lrbd -lrados"
4032 if compile_prog "" "$rbd_libs" ; then
4033 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004034 else
4035 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004036 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004037 fi
4038 rbd=no
4039 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01004040fi
4041
4042##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004043# libssh probe
4044if test "$libssh" != "no" ; then
4045 if $pkg_config --exists libssh; then
4046 libssh_cflags=$($pkg_config libssh --cflags)
4047 libssh_libs=$($pkg_config libssh --libs)
4048 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004049 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02004050 if test "$libssh" = "yes" ; then
4051 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004052 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02004053 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01004054 fi
4055fi
4056
4057##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02004058# Check for libssh 0.8
4059# This is done like this instead of using the LIBSSH_VERSION_* and
4060# SSH_VERSION_* macros because some distributions in the past shipped
4061# snapshots of the future 0.8 from Git, and those snapshots did not
4062# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004063
Pino Toscanob10d49d2019-06-20 22:08:40 +02004064if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004065 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004066#include <libssh/libssh.h>
4067int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004068EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02004069 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4070 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01004071 fi
4072fi
4073
4074##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004075# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004076
4077if test "$linux_aio" != "no" ; then
4078 cat > $TMPC <<EOF
4079#include <libaio.h>
4080#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004081#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004082int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4083EOF
4084 if compile_prog "" "-laio" ; then
4085 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004086 else
4087 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004088 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004089 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004090 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004091 fi
4092fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004093##########################################
4094# linux-io-uring probe
4095
4096if test "$linux_io_uring" != "no" ; then
4097 if $pkg_config liburing; then
4098 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4099 linux_io_uring_libs=$($pkg_config --libs liburing)
4100 linux_io_uring=yes
Stefan Hajnoczi73fd2822020-03-05 17:08:04 +00004101
4102 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4103 # seen by programs linking the archive. It's not ideal, but just add the
4104 # library dependency globally.
4105 LIBS="$linux_io_uring_libs $LIBS"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004106 else
4107 if test "$linux_io_uring" = "yes" ; then
4108 feature_not_found "linux io_uring" "Install liburing devel"
4109 fi
4110 linux_io_uring=no
4111 fi
4112fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004113
4114##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004115# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004116
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004117if test "$tpm" = ""; then
4118 if test "$mingw32" = "yes"; then
4119 tpm=no
4120 else
4121 tpm=yes
4122 fi
4123elif test "$tpm" = "yes"; then
4124 if test "$mingw32" = "yes" ; then
4125 error_exit "TPM emulation only available on POSIX systems"
4126 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004127fi
4128
4129##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004130# attr probe
4131
4132if test "$attr" != "no" ; then
4133 cat > $TMPC <<EOF
4134#include <stdio.h>
4135#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004136#ifdef CONFIG_LIBATTR
4137#include <attr/xattr.h>
4138#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004139#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004140#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004141int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4142EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004143 if compile_prog "" "" ; then
4144 attr=yes
4145 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004146 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004147 attr=yes
4148 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004149 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004150 else
4151 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004152 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004153 fi
4154 attr=no
4155 fi
4156fi
4157
4158##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004159# iovec probe
4160cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004161#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004162#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004163#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004164int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004165EOF
4166iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004167if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004168 iovec=yes
4169fi
4170
aurel32f652e6a2008-12-16 10:43:48 +00004171##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004172# preadv probe
4173cat > $TMPC <<EOF
4174#include <sys/types.h>
4175#include <sys/uio.h>
4176#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004177int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004178EOF
4179preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004180if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004181 preadv=yes
4182fi
4183
4184##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004185# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004186# fdt support is mandatory for at least some target architectures,
4187# so insist on it if we're building those system emulators.
4188fdt_required=no
4189for target in $target_list; do
4190 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004191 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004192 fdt_required=yes
4193 ;;
4194 esac
4195done
4196
4197if test "$fdt_required" = "yes"; then
4198 if test "$fdt" = "no"; then
4199 error_exit "fdt disabled but some requested targets require it." \
4200 "You can turn off fdt only if you also disable all the system emulation" \
4201 "targets which need it (by specifying a cut down --target-list)."
4202 fi
4203 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004204elif test "$fdt" != "yes" ; then
4205 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004206fi
4207
Laurent Vivierd5999382019-06-21 15:05:44 +02004208# fdt is only required when building softmmu targets
4209if test -z "$fdt" -a "$softmmu" != "yes" ; then
4210 fdt="no"
4211fi
4212
Juan Quintela2df87df2009-08-12 18:29:54 +02004213if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004214 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004215 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004216 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004217 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004218#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004219#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004220int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004221EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004222 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004223 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004224 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004225 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004226 # have GIT checkout, so activate dtc submodule
4227 if test -e "${source_path}/.git" ; then
4228 git_submodules="${git_submodules} dtc"
4229 fi
4230 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004231 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004232 mkdir -p dtc
4233 if [ "$pwd_is_source_path" != "y" ] ; then
4234 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4235 symlink "$source_path/dtc/scripts" "dtc/scripts"
4236 fi
4237 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004238 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4239 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004240 elif test "$fdt" = "yes" ; then
4241 # Not a git build & no libfdt found, prompt for system install
4242 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4243 "Please install the DTC (libfdt) devel package"
4244 else
4245 # don't have and don't want
4246 fdt_libs=
4247 fdt=no
4248 fi
aurel32f652e6a2008-12-16 10:43:48 +00004249 fi
4250fi
4251
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004252libs_softmmu="$libs_softmmu $fdt_libs"
4253
Michael Walle20ff0752011-03-07 23:32:39 +01004254##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004255# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004256
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004257gbm="no"
4258if $pkg_config gbm; then
4259 gbm_cflags="$($pkg_config --cflags gbm)"
4260 gbm_libs="$($pkg_config --libs gbm)"
4261 gbm="yes"
4262fi
4263
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004264if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004265 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004266 if $pkg_config $opengl_pkgs; then
4267 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4268 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004269 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004270 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4271 gtk_gl="yes"
4272 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004273 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004274 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004275 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004276 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004277 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004278 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004279 opengl_libs=""
4280 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004281 fi
4282fi
4283
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004284if test "$opengl" = "yes"; then
4285 cat > $TMPC << EOF
4286#include <epoxy/egl.h>
4287#ifndef EGL_MESA_image_dma_buf_export
4288# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4289#endif
4290int main(void) { return 0; }
4291EOF
4292 if compile_prog "" "" ; then
4293 opengl_dmabuf=yes
4294 fi
4295fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004296
Eric Blakee633a5c2019-02-04 20:39:37 -06004297if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004298 for target in $target_list; do
4299 case $target in
4300 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4301 need_x11=yes
4302 ;;
4303 esac
4304 done
4305fi
4306
Klim Kireeved279a02018-01-12 12:01:19 +03004307##########################################
4308# libxml2 probe
4309if test "$libxml2" != "no" ; then
4310 if $pkg_config --exists libxml-2.0; then
4311 libxml2="yes"
4312 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4313 libxml2_libs=$($pkg_config --libs libxml-2.0)
4314 else
4315 if test "$libxml2" = "yes"; then
4316 feature_not_found "libxml2" "Install libxml2 devel"
4317 fi
4318 libxml2="no"
4319 fi
4320fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004321
Bharata B Raoeb100392012-09-24 14:42:45 +05304322##########################################
4323# glusterfs probe
4324if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004325 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304326 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004327 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4328 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004329 if $pkg_config --atleast-version=4 glusterfs-api; then
4330 glusterfs_xlator_opt="yes"
4331 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004332 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304333 glusterfs_discard="yes"
4334 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304335 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304336 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304337 glusterfs_zerofill="yes"
4338 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004339 cat > $TMPC << EOF
4340#include <glusterfs/api/glfs.h>
4341
4342int
4343main(void)
4344{
4345 /* new glfs_ftruncate() passes two additional args */
4346 return glfs_ftruncate(NULL, 0, NULL, NULL);
4347}
4348EOF
4349 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4350 glusterfs_ftruncate_has_stat="yes"
4351 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004352 cat > $TMPC << EOF
4353#include <glusterfs/api/glfs.h>
4354
4355/* new glfs_io_cbk() passes two additional glfs_stat structs */
4356static void
4357glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4358{}
4359
4360int
4361main(void)
4362{
4363 glfs_io_cbk iocb = &glusterfs_iocb;
4364 iocb(NULL, 0 , NULL, NULL, NULL);
4365 return 0;
4366}
4367EOF
4368 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4369 glusterfs_iocb_has_stat="yes"
4370 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304371 else
4372 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004373 feature_not_found "GlusterFS backend support" \
4374 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304375 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304376 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304377 fi
4378fi
4379
aurel3239386ac2009-04-15 19:48:17 +00004380# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004381# emulator. This is done because older glibc versions don't
4382# have syscall stubs for these implemented. In that case we
4383# don't provide them even if kernel supports them.
4384#
4385inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004386cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004387#include <sys/inotify.h>
4388
4389int
4390main(void)
4391{
4392 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004393 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004394}
4395EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004396if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004397 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004398fi
4399
Riku Voipioc05c7a72010-03-26 15:25:11 +00004400inotify1=no
4401cat > $TMPC << EOF
4402#include <sys/inotify.h>
4403
4404int
4405main(void)
4406{
4407 /* try to start inotify */
4408 return inotify_init1(0);
4409}
4410EOF
4411if compile_prog "" "" ; then
4412 inotify1=yes
4413fi
4414
Riku Voipio099d6b02009-05-05 12:10:04 +03004415# check if pipe2 is there
4416pipe2=no
4417cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004418#include <unistd.h>
4419#include <fcntl.h>
4420
4421int main(void)
4422{
4423 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004424 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004425}
4426EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004427if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004428 pipe2=yes
4429fi
4430
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004431# check if accept4 is there
4432accept4=no
4433cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004434#include <sys/socket.h>
4435#include <stddef.h>
4436
4437int main(void)
4438{
4439 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4440 return 0;
4441}
4442EOF
4443if compile_prog "" "" ; then
4444 accept4=yes
4445fi
4446
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304447# check if tee/splice is there. vmsplice was added same time.
4448splice=no
4449cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304450#include <unistd.h>
4451#include <fcntl.h>
4452#include <limits.h>
4453
4454int main(void)
4455{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004456 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304457 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4458 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4459 return 0;
4460}
4461EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004462if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304463 splice=yes
4464fi
4465
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004466##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004467# libnuma probe
4468
4469if test "$numa" != "no" ; then
4470 cat > $TMPC << EOF
4471#include <numa.h>
4472int main(void) { return numa_available(); }
4473EOF
4474
4475 if compile_prog "" "-lnuma" ; then
4476 numa=yes
4477 libs_softmmu="-lnuma $libs_softmmu"
4478 else
4479 if test "$numa" = "yes" ; then
4480 feature_not_found "numa" "install numactl devel"
4481 fi
4482 numa=no
4483 fi
4484fi
4485
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004486if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4487 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4488 exit 1
4489fi
4490
Yang Zhong5a22ab72017-12-20 21:16:46 +08004491# Even if malloc_trim() is available, these non-libc memory allocators
4492# do not support it.
4493if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4494 if test "$malloc_trim" = "yes" ; then
4495 echo "Disabling malloc_trim with non-libc memory allocator"
4496 fi
4497 malloc_trim="no"
4498fi
4499
4500#######################################
4501# malloc_trim
4502
4503if test "$malloc_trim" != "no" ; then
4504 cat > $TMPC << EOF
4505#include <malloc.h>
4506int main(void) { malloc_trim(0); return 0; }
4507EOF
4508 if compile_prog "" "" ; then
4509 malloc_trim="yes"
4510 else
4511 malloc_trim="no"
4512 fi
4513fi
4514
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004515##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004516# tcmalloc probe
4517
4518if test "$tcmalloc" = "yes" ; then
4519 cat > $TMPC << EOF
4520#include <stdlib.h>
4521int main(void) { malloc(1); return 0; }
4522EOF
4523
4524 if compile_prog "" "-ltcmalloc" ; then
4525 LIBS="-ltcmalloc $LIBS"
4526 else
4527 feature_not_found "tcmalloc" "install gperftools devel"
4528 fi
4529fi
4530
4531##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004532# jemalloc probe
4533
4534if test "$jemalloc" = "yes" ; then
4535 cat > $TMPC << EOF
4536#include <stdlib.h>
4537int main(void) { malloc(1); return 0; }
4538EOF
4539
4540 if compile_prog "" "-ljemalloc" ; then
4541 LIBS="-ljemalloc $LIBS"
4542 else
4543 feature_not_found "jemalloc" "install jemalloc devel"
4544 fi
4545fi
4546
4547##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004548# signalfd probe
4549signalfd="no"
4550cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004551#include <unistd.h>
4552#include <sys/syscall.h>
4553#include <signal.h>
4554int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4555EOF
4556
4557if compile_prog "" "" ; then
4558 signalfd=yes
4559fi
4560
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004561# check if optreset global is declared by <getopt.h>
4562optreset="no"
4563cat > $TMPC << EOF
4564#include <getopt.h>
4565int main(void) { return optreset; }
4566EOF
4567
4568if compile_prog "" "" ; then
4569 optreset=yes
4570fi
4571
Riku Voipioc2882b92009-08-12 15:08:24 +03004572# check if eventfd is supported
4573eventfd=no
4574cat > $TMPC << EOF
4575#include <sys/eventfd.h>
4576
4577int main(void)
4578{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004579 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004580}
4581EOF
4582if compile_prog "" "" ; then
4583 eventfd=yes
4584fi
4585
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004586# check if memfd is supported
4587memfd=no
4588cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004589#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004590
4591int main(void)
4592{
4593 return memfd_create("foo", MFD_ALLOW_SEALING);
4594}
4595EOF
4596if compile_prog "" "" ; then
4597 memfd=yes
4598fi
4599
Cortland Tölva955727d2018-10-08 09:35:19 -07004600# check for usbfs
4601have_usbfs=no
4602if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004603 cat > $TMPC << EOF
4604#include <linux/usbdevice_fs.h>
4605
4606#ifndef USBDEVFS_GET_CAPABILITIES
4607#error "USBDEVFS_GET_CAPABILITIES undefined"
4608#endif
4609
4610#ifndef USBDEVFS_DISCONNECT_CLAIM
4611#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4612#endif
4613
4614int main(void)
4615{
4616 return 0;
4617}
4618EOF
4619 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004620 have_usbfs=yes
4621 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004622fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004623
Ulrich Hechtd0927932009-09-17 20:22:14 +03004624# check for fallocate
4625fallocate=no
4626cat > $TMPC << EOF
4627#include <fcntl.h>
4628
4629int main(void)
4630{
4631 fallocate(0, 0, 0, 0);
4632 return 0;
4633}
4634EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004635if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004636 fallocate=yes
4637fi
4638
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004639# check for fallocate hole punching
4640fallocate_punch_hole=no
4641cat > $TMPC << EOF
4642#include <fcntl.h>
4643#include <linux/falloc.h>
4644
4645int main(void)
4646{
4647 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4648 return 0;
4649}
4650EOF
4651if compile_prog "" "" ; then
4652 fallocate_punch_hole=yes
4653fi
4654
Denis V. Lunevb953f072015-01-30 11:42:14 +03004655# check that fallocate supports range zeroing inside the file
4656fallocate_zero_range=no
4657cat > $TMPC << EOF
4658#include <fcntl.h>
4659#include <linux/falloc.h>
4660
4661int main(void)
4662{
4663 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4664 return 0;
4665}
4666EOF
4667if compile_prog "" "" ; then
4668 fallocate_zero_range=yes
4669fi
4670
Kevin Wolfed911432014-09-29 17:12:59 +02004671# check for posix_fallocate
4672posix_fallocate=no
4673cat > $TMPC << EOF
4674#include <fcntl.h>
4675
4676int main(void)
4677{
4678 posix_fallocate(0, 0, 0);
4679 return 0;
4680}
4681EOF
4682if compile_prog "" "" ; then
4683 posix_fallocate=yes
4684fi
4685
Peter Maydellc727f472011-01-06 11:05:10 +00004686# check for sync_file_range
4687sync_file_range=no
4688cat > $TMPC << EOF
4689#include <fcntl.h>
4690
4691int main(void)
4692{
4693 sync_file_range(0, 0, 0, 0);
4694 return 0;
4695}
4696EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004697if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004698 sync_file_range=yes
4699fi
4700
Peter Maydelldace20d2011-01-10 13:11:24 +00004701# check for linux/fiemap.h and FS_IOC_FIEMAP
4702fiemap=no
4703cat > $TMPC << EOF
4704#include <sys/ioctl.h>
4705#include <linux/fs.h>
4706#include <linux/fiemap.h>
4707
4708int main(void)
4709{
4710 ioctl(0, FS_IOC_FIEMAP, 0);
4711 return 0;
4712}
4713EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004714if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004715 fiemap=yes
4716fi
4717
Ulrich Hechtd0927932009-09-17 20:22:14 +03004718# check for dup3
4719dup3=no
4720cat > $TMPC << EOF
4721#include <unistd.h>
4722
4723int main(void)
4724{
4725 dup3(0, 0, 0);
4726 return 0;
4727}
4728EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004729if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004730 dup3=yes
4731fi
4732
Alex Bligh4e0c6522013-08-21 16:02:43 +01004733# check for ppoll support
4734ppoll=no
4735cat > $TMPC << EOF
4736#include <poll.h>
4737
4738int main(void)
4739{
4740 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4741 ppoll(&pfd, 1, 0, 0);
4742 return 0;
4743}
4744EOF
4745if compile_prog "" "" ; then
4746 ppoll=yes
4747fi
4748
Alex Blighcd758dd2013-08-21 16:02:44 +01004749# check for prctl(PR_SET_TIMERSLACK , ... ) support
4750prctl_pr_set_timerslack=no
4751cat > $TMPC << EOF
4752#include <sys/prctl.h>
4753
4754int main(void)
4755{
4756 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4757 return 0;
4758}
4759EOF
4760if compile_prog "" "" ; then
4761 prctl_pr_set_timerslack=yes
4762fi
4763
Peter Maydell3b6edd12011-02-15 18:35:05 +00004764# check for epoll support
4765epoll=no
4766cat > $TMPC << EOF
4767#include <sys/epoll.h>
4768
4769int main(void)
4770{
4771 epoll_create(0);
4772 return 0;
4773}
4774EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004775if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004776 epoll=yes
4777fi
4778
Peter Maydell227f0212016-06-06 19:58:11 +01004779# epoll_create1 is a later addition
4780# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004781epoll_create1=no
4782cat > $TMPC << EOF
4783#include <sys/epoll.h>
4784
4785int main(void)
4786{
Peter Maydell19e83f62011-04-26 16:56:40 +01004787 /* Note that we use epoll_create1 as a value, not as
4788 * a function being called. This is necessary so that on
4789 * old SPARC glibc versions where the function was present in
4790 * the library but not declared in the header file we will
4791 * fail the configure check. (Otherwise we will get a compiler
4792 * warning but not an error, and will proceed to fail the
4793 * qemu compile where we compile with -Werror.)
4794 */
Blue Swirlc075a722012-08-09 20:21:25 +00004795 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004796}
4797EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004798if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004799 epoll_create1=yes
4800fi
4801
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004802# check for sendfile support
4803sendfile=no
4804cat > $TMPC << EOF
4805#include <sys/sendfile.h>
4806
4807int main(void)
4808{
4809 return sendfile(0, 0, 0, 0);
4810}
4811EOF
4812if compile_prog "" "" ; then
4813 sendfile=yes
4814fi
4815
Riku Voipio51834342014-06-22 11:25:42 +01004816# check for timerfd support (glibc 2.8 and newer)
4817timerfd=no
4818cat > $TMPC << EOF
4819#include <sys/timerfd.h>
4820
4821int main(void)
4822{
4823 return(timerfd_create(CLOCK_REALTIME, 0));
4824}
4825EOF
4826if compile_prog "" "" ; then
4827 timerfd=yes
4828fi
4829
Riku Voipio9af5c902014-08-12 15:58:57 +03004830# check for setns and unshare support
4831setns=no
4832cat > $TMPC << EOF
4833#include <sched.h>
4834
4835int main(void)
4836{
4837 int ret;
4838 ret = setns(0, 0);
4839 ret = unshare(0);
4840 return ret;
4841}
4842EOF
4843if compile_prog "" "" ; then
4844 setns=yes
4845fi
4846
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004847# clock_adjtime probe
4848clock_adjtime=no
4849cat > $TMPC <<EOF
4850#include <time.h>
4851
4852int main(void)
4853{
4854 return clock_adjtime(0, 0);
4855}
4856EOF
4857clock_adjtime=no
4858if compile_prog "" "" ; then
4859 clock_adjtime=yes
4860fi
4861
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004862# syncfs probe
4863syncfs=no
4864cat > $TMPC <<EOF
4865#include <unistd.h>
4866
4867int main(void)
4868{
4869 return syncfs(0);
4870}
4871EOF
4872syncfs=no
4873if compile_prog "" "" ; then
4874 syncfs=yes
4875fi
4876
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004877# check for kcov support (kernel must be 4.4+, compiled with certain options)
4878kcov=no
4879if check_include sys/kcov.h ; then
4880 kcov=yes
4881fi
4882
Peter Maydell5f71eac2019-03-07 14:26:46 +00004883# Check we have a new enough version of sphinx-build
4884has_sphinx_build() {
4885 # This is a bit awkward but works: create a trivial document and
4886 # try to run it with our configuration file (which enforces a
4887 # version requirement). This will fail if either
4888 # sphinx-build doesn't exist at all or if it is too old.
4889 mkdir -p "$TMPDIR1/sphinx"
4890 touch "$TMPDIR1/sphinx/index.rst"
Markus Armbruster903458c2020-02-14 18:18:41 +01004891 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004892}
4893
pbrookcc8ae6d2006-04-23 17:57:59 +00004894# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004895if test "$docs" != "no" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004896 if has_sphinx_build; then
4897 sphinx_ok=yes
4898 else
4899 sphinx_ok=no
4900 fi
4901 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004902 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004903 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004904 if test "$docs" = "yes" ; then
Peter Maydell758b6172020-02-13 17:56:19 +00004905 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4906 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4907 fi
4908 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004909 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004910 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004911 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004912fi
4913
Stefan Weilf514f412009-10-11 12:44:07 +02004914# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004915byteswap_h=no
4916cat > $TMPC << EOF
4917#include <byteswap.h>
4918int main(void) { return bswap_32(0); }
4919EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004920if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004921 byteswap_h=yes
4922fi
4923
Stefan Weil75f13592013-01-05 12:17:38 +01004924# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004925bswap_h=no
4926cat > $TMPC << EOF
4927#include <sys/endian.h>
4928#include <sys/types.h>
4929#include <machine/bswap.h>
4930int main(void) { return bswap32(0); }
4931EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004932if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004933 bswap_h=yes
4934fi
4935
aliguorida93a1f2008-12-12 20:02:52 +00004936##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004937# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004938if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004939 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004940 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004941 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4942 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004943 else
4944 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004945 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004946 fi
4947 libiscsi="no"
4948 fi
4949fi
4950
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004951##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004952# Do we need libm
4953cat > $TMPC << EOF
4954#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004955int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004956EOF
4957if compile_prog "" "" ; then
4958 :
4959elif compile_prog "" "-lm" ; then
4960 LIBS="-lm $LIBS"
4961 libs_qga="-lm $libs_qga"
4962else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004963 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004964fi
4965
4966##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004967# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004968# uClibc provides 2 versions of clock_gettime(), one with realtime
4969# support and one without. This means that the clock_gettime() don't
4970# need -lrt. We still need it for timer_create() so we check for this
4971# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004972cat > $TMPC <<EOF
4973#include <signal.h>
4974#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004975int main(void) {
4976 timer_create(CLOCK_REALTIME, NULL, NULL);
4977 return clock_gettime(CLOCK_REALTIME, NULL);
4978}
aliguorida93a1f2008-12-12 20:02:52 +00004979EOF
4980
Juan Quintela52166aa2009-08-03 14:46:03 +02004981if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004982 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004983# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004984elif compile_prog "" "$pthread_lib -lrt" ; then
4985 LIBS="$LIBS -lrt"
4986 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004987fi
4988
Thomas Huthd99e97e2019-01-17 18:14:08 +01004989# Check whether we need to link libutil for openpty()
4990cat > $TMPC << EOF
4991extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4992int main(void) { return openpty(0, 0, 0, 0, 0); }
4993EOF
4994
4995if ! compile_prog "" "" ; then
4996 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004997 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004998 libs_tools="-lutil $libs_tools"
4999 fi
Juan Quintela6362a532009-08-03 14:46:32 +02005000fi
5001
Blue Swirlde5071c2009-09-12 09:58:46 +00005002##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005003# spice probe
5004if test "$spice" != "no" ; then
5005 cat > $TMPC << EOF
5006#include <spice.h>
5007int main(void) { spice_server_new(); return 0; }
5008EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01005009 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5010 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04005011 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005012 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005013 compile_prog "$spice_cflags" "$spice_libs" ; then
5014 spice="yes"
5015 libs_softmmu="$libs_softmmu $spice_libs"
5016 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03005017 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5018 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005019 else
5020 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005021 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04005022 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005023 fi
5024 spice="no"
5025 fi
5026fi
5027
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005028# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005029if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02005030 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005031 libcacard_cflags=$($pkg_config --cflags libcacard)
5032 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005033 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005034 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005035 if test "$smartcard" = "yes"; then
5036 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005037 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005038 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01005039 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02005040fi
5041
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005042# check for libusb
5043if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005044 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005045 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005046 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5047 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005048 else
5049 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08005050 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005051 fi
5052 libusb="no"
5053 fi
5054fi
5055
Hans de Goede69354a82011-07-19 11:04:10 +02005056# check for usbredirparser for usb network redirection support
5057if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02005058 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02005059 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02005060 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5061 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02005062 else
5063 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11005064 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02005065 fi
5066 usb_redir="no"
5067 fi
5068fi
5069
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005070##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005071# check if we have VSS SDK headers for win
5072
Eric Blakee633a5c2019-02-04 20:39:37 -06005073if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5074 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005075 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05005076 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005077 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5078 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05005079 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005080 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5081 ;;
Michael Roth690604f2016-06-28 17:31:49 -05005082 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005083 esac
5084 cat > $TMPC << EOF
5085#define __MIDL_user_allocate_free_DEFINED__
5086#include <inc/win2003/vss.h>
5087int main(void) { return VSS_CTX_BACKUP; }
5088EOF
5089 if compile_prog "$vss_win32_include" "" ; then
5090 guest_agent_with_vss="yes"
5091 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08005092 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005093 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005094 else
5095 if test "$vss_win32_sdk" != "" ; then
5096 echo "ERROR: Please download and install Microsoft VSS SDK:"
5097 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5098 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5099 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5100 echo "ERROR: The headers are extracted in the directory \`inc'."
5101 feature_not_found "VSS support"
5102 fi
5103 guest_agent_with_vss="no"
5104 fi
5105fi
5106
5107##########################################
5108# lookup Windows platform SDK (if not specified)
5109# The SDK is needed only to build .tlb (type library) file of guest agent
5110# VSS provider from the source. It is usually unnecessary because the
5111# pre-compiled .tlb file is included.
5112
Eric Blakee633a5c2019-02-04 20:39:37 -06005113if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5114 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005115 if test -z "$win_sdk"; then
5116 programfiles="$PROGRAMFILES"
5117 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5118 if test -n "$programfiles"; then
5119 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5120 else
5121 feature_not_found "Windows SDK"
5122 fi
5123 elif test "$win_sdk" = "no"; then
5124 win_sdk=""
5125 fi
5126fi
5127
5128##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005129# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005130if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005131 cat > $TMPC << EOF
5132#include <windows.h>
5133#include <ntddscsi.h>
5134int main(void) {
5135#if !defined(IOCTL_SCSI_GET_ADDRESS)
5136#error Missing required ioctl definitions
5137#endif
5138 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5139 return addr.Lun;
5140}
5141EOF
5142 if compile_prog "" "" ; then
5143 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005144 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005145 fi
5146fi
5147
5148##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005149# virgl renderer probe
5150
5151if test "$virglrenderer" != "no" ; then
5152 cat > $TMPC << EOF
5153#include <virglrenderer.h>
5154int main(void) { virgl_renderer_poll(); return 0; }
5155EOF
5156 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5157 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005158 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005159 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5160 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5161 virglrenderer="yes"
5162 else
5163 if test "$virglrenderer" = "yes" ; then
5164 feature_not_found "virglrenderer"
5165 fi
5166 virglrenderer="no"
5167 fi
5168fi
5169
5170##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005171# capstone
5172
Richard Hendersone219c492017-09-28 09:01:23 -07005173case "$capstone" in
5174 "" | yes)
5175 if $pkg_config capstone; then
5176 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005177 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005178 capstone=git
5179 elif test -e "${source_path}/capstone/Makefile" ; then
5180 capstone=internal
5181 elif test -z "$capstone" ; then
5182 capstone=no
5183 else
5184 feature_not_found "capstone" "Install capstone devel or git submodule"
5185 fi
5186 ;;
5187
5188 system)
5189 if ! $pkg_config capstone; then
5190 feature_not_found "capstone" "Install capstone devel"
5191 fi
5192 ;;
5193esac
5194
5195case "$capstone" in
5196 git | internal)
5197 if test "$capstone" = git; then
5198 git_submodules="${git_submodules} capstone"
5199 fi
5200 mkdir -p capstone
5201 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5202 if test "$mingw32" = "yes"; then
5203 LIBCAPSTONE=capstone.lib
5204 else
5205 LIBCAPSTONE=libcapstone.a
5206 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005207 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005208 ;;
5209
5210 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005211 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005212 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005213 ;;
5214
5215 no)
5216 ;;
5217 *)
5218 error_exit "Unknown state for capstone: $capstone"
5219 ;;
5220esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005221
5222##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005223# check if we have fdatasync
5224
5225fdatasync=no
5226cat > $TMPC << EOF
5227#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005228int main(void) {
5229#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5230return fdatasync(0);
5231#else
Stefan Weile172fe12012-04-06 21:33:20 +02005232#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005233#endif
5234}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005235EOF
5236if compile_prog "" "" ; then
5237 fdatasync=yes
5238fi
5239
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005240##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005241# check if we have madvise
5242
5243madvise=no
5244cat > $TMPC << EOF
5245#include <sys/types.h>
5246#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005247#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005248int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5249EOF
5250if compile_prog "" "" ; then
5251 madvise=yes
5252fi
5253
5254##########################################
5255# check if we have posix_madvise
5256
5257posix_madvise=no
5258cat > $TMPC << EOF
5259#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005260#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005261int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5262EOF
5263if compile_prog "" "" ; then
5264 posix_madvise=yes
5265fi
5266
5267##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005268# check if we have posix_memalign()
5269
5270posix_memalign=no
5271cat > $TMPC << EOF
5272#include <stdlib.h>
5273int main(void) {
5274 void *p;
5275 return posix_memalign(&p, 8, 8);
5276}
5277EOF
5278if compile_prog "" "" ; then
5279 posix_memalign=yes
5280fi
5281
5282##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005283# check if we have posix_syslog
5284
5285posix_syslog=no
5286cat > $TMPC << EOF
5287#include <syslog.h>
5288int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5289EOF
5290if compile_prog "" "" ; then
5291 posix_syslog=yes
5292fi
5293
5294##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005295# check if we have sem_timedwait
5296
5297sem_timedwait=no
5298cat > $TMPC << EOF
5299#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005300int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005301EOF
5302if compile_prog "" "" ; then
5303 sem_timedwait=yes
5304fi
5305
5306##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005307# check if we have strchrnul
5308
5309strchrnul=no
5310cat > $TMPC << EOF
5311#include <string.h>
5312int main(void);
5313// Use a haystack that the compiler shouldn't be able to constant fold
5314char *haystack = (char*)&main;
5315int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5316EOF
5317if compile_prog "" "" ; then
5318 strchrnul=yes
5319fi
5320
Jiufei Xue8a792b02019-04-17 03:08:56 +08005321#########################################
5322# check if we have st_atim
5323
5324st_atim=no
5325cat > $TMPC << EOF
5326#include <sys/stat.h>
5327#include <stddef.h>
5328int main(void) { return offsetof(struct stat, st_atim); }
5329EOF
5330if compile_prog "" "" ; then
5331 st_atim=yes
5332fi
5333
Keno Fischer5c99fa32018-06-29 12:32:10 +02005334##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005335# check if trace backend exists
5336
Lluís Vilanova5b808272014-05-27 15:02:14 +02005337$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005338if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005339 error_exit "invalid trace backends" \
5340 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005341fi
5342
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005343##########################################
5344# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005345if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005346 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005347#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005348int main(void) { return 0; }
5349EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005350 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005351 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005352 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005353 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005354 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005355 fi
5356 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005357 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005358 else
5359 urcu_bp_libs="-lurcu-bp"
5360 fi
5361
5362 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5363 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005364 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005365 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005366 fi
5367fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005368
5369##########################################
5370# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005371if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005372 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005373 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005374 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005375 trace_backend_stap="no"
5376 if has 'stap' ; then
5377 trace_backend_stap="yes"
5378 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005379fi
5380
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005381##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005382# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305383
Peter Maydell7c2acc72013-04-08 12:11:27 +01005384# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005385# is sigcontext. On Windows the only valid backend is the Windows
5386# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005387
5388ucontext_works=no
5389if test "$darwin" != "yes"; then
5390 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305391#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005392#ifdef __stub_makecontext
5393#error Ignoring glibc stub makecontext which will always fail
5394#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005395int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305396EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005397 if compile_prog "" "" ; then
5398 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305399 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005400fi
5401
5402if test "$coroutine" = ""; then
5403 if test "$mingw32" = "yes"; then
5404 coroutine=win32
5405 elif test "$ucontext_works" = "yes"; then
5406 coroutine=ucontext
5407 else
5408 coroutine=sigaltstack
5409 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005410else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005411 case $coroutine in
5412 windows)
5413 if test "$mingw32" != "yes"; then
5414 error_exit "'windows' coroutine backend only valid for Windows"
5415 fi
5416 # Unfortunately the user visible backend name doesn't match the
5417 # coroutine-*.c filename for this case, so we have to adjust it here.
5418 coroutine=win32
5419 ;;
5420 ucontext)
5421 if test "$ucontext_works" != "yes"; then
5422 feature_not_found "ucontext"
5423 fi
5424 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005425 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005426 if test "$mingw32" = "yes"; then
5427 error_exit "only the 'windows' coroutine backend is valid for Windows"
5428 fi
5429 ;;
5430 *)
5431 error_exit "unknown coroutine backend $coroutine"
5432 ;;
5433 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305434fi
5435
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005436if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005437 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005438fi
5439
Peter Lieven7d992e42016-09-27 11:58:45 +02005440if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005441 if test "$coroutine_pool" = "yes"; then
5442 echo "WARN: disabling coroutine pool for stack usage debugging"
5443 coroutine_pool=no
5444 fi
5445fi
5446
5447
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305448##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305449# check if we have open_by_handle_at
5450
Stefan Weil4e1797f2012-06-18 22:11:06 +02005451open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305452cat > $TMPC << EOF
5453#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005454#if !defined(AT_EMPTY_PATH)
5455# error missing definition
5456#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005457int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005458#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305459EOF
5460if compile_prog "" "" ; then
5461 open_by_handle_at=yes
5462fi
5463
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305464########################################
5465# check if we have linux/magic.h
5466
5467linux_magic_h=no
5468cat > $TMPC << EOF
5469#include <linux/magic.h>
5470int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005471 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305472}
5473EOF
5474if compile_prog "" "" ; then
5475 linux_magic_h=yes
5476fi
5477
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005478########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005479# check whether we can disable warning option with a pragma (this is needed
5480# to silence warnings in the headers of some versions of external libraries).
5481# This test has to be compiled with -Werror as otherwise an unknown pragma is
5482# only a warning.
5483#
5484# If we can't selectively disable warning in the code, disable -Werror so that
5485# the build doesn't fail anyway.
5486
Peter Maydell06d71fa2012-07-30 16:13:07 +01005487pragma_disable_unused_but_set=no
5488cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005489#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005490#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005491#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005492
Peter Maydell06d71fa2012-07-30 16:13:07 +01005493int main(void) {
5494 return 0;
5495}
5496EOF
5497if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005498 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005499else
5500 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005501fi
5502
5503########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005504# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005505
5506valgrind_h=no
5507cat > $TMPC << EOF
5508#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005509int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005510 return 0;
5511}
5512EOF
5513if compile_prog "" "" ; then
5514 valgrind_h=yes
5515fi
5516
5517########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005518# check if environ is declared
5519
5520has_environ=no
5521cat > $TMPC << EOF
5522#include <unistd.h>
5523int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005524 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005525 return 0;
5526}
5527EOF
5528if compile_prog "" "" ; then
5529 has_environ=yes
5530fi
5531
Richard Henderson76a347e2012-12-28 14:17:02 -08005532########################################
5533# check if cpuid.h is usable.
5534
Richard Henderson76a347e2012-12-28 14:17:02 -08005535cat > $TMPC << EOF
5536#include <cpuid.h>
5537int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005538 unsigned a, b, c, d;
5539 int max = __get_cpuid_max(0, 0);
5540
5541 if (max >= 1) {
5542 __cpuid(1, a, b, c, d);
5543 }
5544
5545 if (max >= 7) {
5546 __cpuid_count(7, 0, a, b, c, d);
5547 }
5548
5549 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005550}
5551EOF
5552if compile_prog "" "" ; then
5553 cpuid_h=yes
5554fi
5555
Richard Henderson5dd89902017-07-18 18:40:18 -10005556##########################################
5557# avx2 optimization requirement check
5558#
5559# There is no point enabling this if cpuid.h is not usable,
5560# since we won't be able to select the new routines.
5561
Eric Blakee633a5c2019-02-04 20:39:37 -06005562if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005563 cat > $TMPC << EOF
5564#pragma GCC push_options
5565#pragma GCC target("avx2")
5566#include <cpuid.h>
5567#include <immintrin.h>
5568static int bar(void *a) {
5569 __m256i x = *(__m256i *)a;
5570 return _mm256_testz_si256(x, x);
5571}
5572int main(int argc, char *argv[]) { return bar(argv[0]); }
5573EOF
5574 if compile_object "" ; then
5575 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005576 else
5577 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005578 fi
5579fi
5580
Richard Hendersonf5401662013-02-16 12:46:59 -08005581########################################
5582# check if __[u]int128_t is usable.
5583
5584int128=no
5585cat > $TMPC << EOF
5586__int128_t a;
5587__uint128_t b;
5588int main (void) {
5589 a = a + b;
5590 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005591 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005592 return 0;
5593}
5594EOF
5595if compile_prog "" "" ; then
5596 int128=yes
5597fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005598
Richard Henderson7ebee432016-06-29 21:10:59 -07005599#########################################
5600# See if 128-bit atomic operations are supported.
5601
5602atomic128=no
5603if test "$int128" = "yes"; then
5604 cat > $TMPC << EOF
5605int main(void)
5606{
5607 unsigned __int128 x = 0, y = 0;
5608 y = __atomic_load_16(&x, 0);
5609 __atomic_store_16(&x, y, 0);
5610 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5611 return 0;
5612}
5613EOF
5614 if compile_prog "" "" ; then
5615 atomic128=yes
5616 fi
5617fi
5618
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005619cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005620if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005621 cat > $TMPC << EOF
5622int main(void)
5623{
5624 unsigned __int128 x = 0, y = 0;
5625 __sync_val_compare_and_swap_16(&x, y, x);
5626 return 0;
5627}
5628EOF
5629 if compile_prog "" "" ; then
5630 cmpxchg128=yes
5631 fi
5632fi
5633
Richard Hendersondf79b992016-09-02 12:23:57 -07005634#########################################
5635# See if 64-bit atomic operations are supported.
5636# Note that without __atomic builtins, we can only
5637# assume atomic loads/stores max at pointer size.
5638
5639cat > $TMPC << EOF
5640#include <stdint.h>
5641int main(void)
5642{
5643 uint64_t x = 0, y = 0;
5644#ifdef __ATOMIC_RELAXED
5645 y = __atomic_load_8(&x, 0);
5646 __atomic_store_8(&x, y, 0);
5647 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5648 __atomic_exchange_8(&x, y, 0);
5649 __atomic_fetch_add_8(&x, y, 0);
5650#else
5651 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5652 __sync_lock_test_and_set(&x, y);
5653 __sync_val_compare_and_swap(&x, y, 0);
5654 __sync_fetch_and_add(&x, y);
5655#endif
5656 return 0;
5657}
5658EOF
5659if compile_prog "" "" ; then
5660 atomic64=yes
5661fi
5662
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005663#########################################
5664# See if --dynamic-list is supported by the linker
5665ld_dynamic_list="no"
5666if test "$static" = "no" ; then
5667 cat > $TMPTXT <<EOF
5668{
5669 foo;
5670};
5671EOF
5672
5673 cat > $TMPC <<EOF
5674#include <stdio.h>
5675void foo(void);
5676
5677void foo(void)
5678{
5679 printf("foo\n");
5680}
5681
5682int main(void)
5683{
5684 foo();
5685 return 0;
5686}
5687EOF
5688
5689 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5690 ld_dynamic_list="yes"
5691 fi
5692fi
5693
5694#########################################
5695# See if -exported_symbols_list is supported by the linker
5696
5697ld_exported_symbols_list="no"
5698if test "$static" = "no" ; then
5699 cat > $TMPTXT <<EOF
5700 _foo
5701EOF
5702
5703 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5704 ld_exported_symbols_list="yes"
5705 fi
5706fi
5707
5708if test "$plugins" = "yes" &&
5709 test "$ld_dynamic_list" = "no" &&
5710 test "$ld_exported_symbols_list" = "no" ; then
5711 error_exit \
5712 "Plugin support requires dynamic linking and specifying a set of symbols " \
5713 "that are exported to plugins. Unfortunately your linker doesn't " \
5714 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5715 "for this purpose. You can't build with --static."
5716fi
5717
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005718########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005719# See if 16-byte vector operations are supported.
5720# Even without a vector unit the compiler may expand these.
5721# There is a bug in old GCC for PPC that crashes here.
5722# Unfortunately it's the system compiler for Centos 7.
5723
5724cat > $TMPC << EOF
5725typedef unsigned char U1 __attribute__((vector_size(16)));
5726typedef unsigned short U2 __attribute__((vector_size(16)));
5727typedef unsigned int U4 __attribute__((vector_size(16)));
5728typedef unsigned long long U8 __attribute__((vector_size(16)));
5729typedef signed char S1 __attribute__((vector_size(16)));
5730typedef signed short S2 __attribute__((vector_size(16)));
5731typedef signed int S4 __attribute__((vector_size(16)));
5732typedef signed long long S8 __attribute__((vector_size(16)));
5733static U1 a1, b1;
5734static U2 a2, b2;
5735static U4 a4, b4;
5736static U8 a8, b8;
5737static S1 c1;
5738static S2 c2;
5739static S4 c4;
5740static S8 c8;
5741static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005742void helper(void *d, void *a, int shift, int i);
5743void helper(void *d, void *a, int shift, int i)
5744{
5745 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5746 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5747 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5748 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5749}
Richard Hendersondb432672017-09-15 14:11:45 -07005750int main(void)
5751{
5752 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5753 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5754 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5755 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5756 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5757 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5758 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5759 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5760 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5761 return 0;
5762}
5763EOF
5764
5765vector16=no
5766if compile_prog "" "" ; then
5767 vector16=yes
5768fi
5769
5770########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005771# See if __attribute__((alias)) is supported.
5772# This false for Xcode 9, but has been remedied for Xcode 10.
5773# Unfortunately, travis uses Xcode 9 by default.
5774
5775attralias=no
5776cat > $TMPC << EOF
5777int x = 1;
5778extern const int y __attribute__((alias("x")));
5779int main(void) { return 0; }
5780EOF
5781if compile_prog "" "" ; then
5782 attralias=yes
5783fi
5784
5785########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005786# check if getauxval is available.
5787
5788getauxval=no
5789cat > $TMPC << EOF
5790#include <sys/auxv.h>
5791int main(void) {
5792 return getauxval(AT_HWCAP) == 0;
5793}
5794EOF
5795if compile_prog "" "" ; then
5796 getauxval=yes
5797fi
5798
John Snowfd0e6052015-03-25 18:57:39 -04005799########################################
5800# check if ccache is interfering with
5801# semantic analysis of macros
5802
John Snow5e4dfd32015-10-28 13:56:40 -04005803unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005804ccache_cpp2=no
5805cat > $TMPC << EOF
5806static const int Z = 1;
5807#define fn() ({ Z; })
5808#define TAUT(X) ((X) == Z)
5809#define PAREN(X, Y) (X == Y)
5810#define ID(X) (X)
5811int main(int argc, char *argv[])
5812{
5813 int x = 0, y = 0;
5814 x = ID(x);
5815 x = fn();
5816 fn();
5817 if (PAREN(x, y)) return 0;
5818 if (TAUT(Z)) return 0;
5819 return 0;
5820}
5821EOF
5822
5823if ! compile_object "-Werror"; then
5824 ccache_cpp2=yes
5825fi
5826
John Snowb553a042015-11-03 15:43:42 -05005827#################################################
5828# clang does not support glibc + FORTIFY_SOURCE.
5829
5830if test "$fortify_source" != "no"; then
5831 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5832 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005833 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005834 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005835 fortify_source="no";
5836 else
5837 fortify_source="yes"
5838 fi
5839fi
5840
Fam Zheng1efad062018-06-01 17:26:43 +08005841###############################################
5842# Check if copy_file_range is provided by glibc
5843have_copy_file_range=no
5844cat > $TMPC << EOF
5845#include <unistd.h>
5846int main(void) {
5847 copy_file_range(0, NULL, 0, NULL, 0, 0);
5848 return 0;
5849}
5850EOF
5851if compile_prog "" "" ; then
5852 have_copy_file_range=yes
5853fi
5854
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305855##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005856# check if struct fsxattr is available via linux/fs.h
5857
5858have_fsxattr=no
5859cat > $TMPC << EOF
5860#include <linux/fs.h>
5861struct fsxattr foo;
5862int main(void) {
5863 return 0;
5864}
5865EOF
5866if compile_prog "" "" ; then
5867 have_fsxattr=yes
5868fi
5869
Peter Maydellb66e10e2016-06-08 18:34:32 +01005870##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005871# check for usable membarrier system call
5872if test "$membarrier" = "yes"; then
5873 have_membarrier=no
5874 if test "$mingw32" = "yes" ; then
5875 have_membarrier=yes
5876 elif test "$linux" = "yes" ; then
5877 cat > $TMPC << EOF
5878 #include <linux/membarrier.h>
5879 #include <sys/syscall.h>
5880 #include <unistd.h>
5881 #include <stdlib.h>
5882 int main(void) {
5883 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5884 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5885 exit(0);
5886 }
5887EOF
5888 if compile_prog "" "" ; then
5889 have_membarrier=yes
5890 fi
5891 fi
5892 if test "$have_membarrier" = "no"; then
5893 feature_not_found "membarrier" "membarrier system call not available"
5894 fi
5895else
5896 # Do not enable it by default even for Mingw32, because it doesn't
5897 # work on Wine.
5898 membarrier=no
5899fi
5900
5901##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005902# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005903have_rtnetlink=no
5904cat > $TMPC << EOF
5905#include <linux/rtnetlink.h>
5906int main(void) {
5907 return IFLA_PROTO_DOWN;
5908}
5909EOF
5910if compile_prog "" "" ; then
5911 have_rtnetlink=yes
5912fi
5913
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005914##########################################
5915# check for usable AF_VSOCK environment
5916have_af_vsock=no
5917cat > $TMPC << EOF
5918#include <errno.h>
5919#include <sys/types.h>
5920#include <sys/socket.h>
5921#if !defined(AF_VSOCK)
5922# error missing AF_VSOCK flag
5923#endif
5924#include <linux/vm_sockets.h>
5925int main(void) {
5926 int sock, ret;
5927 struct sockaddr_vm svm;
5928 socklen_t len = sizeof(svm);
5929 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5930 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5931 if ((ret == -1) && (errno == ENOTCONN)) {
5932 return 0;
5933 }
5934 return -1;
5935}
5936EOF
5937if compile_prog "" "" ; then
5938 have_af_vsock=yes
5939fi
5940
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005941##########################################
5942# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005943have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005944cat > $TMPC << EOF
5945#include <errno.h>
5946#include <sys/types.h>
5947#include <sys/socket.h>
5948#include <linux/if_alg.h>
5949int main(void) {
5950 int sock;
5951 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5952 return sock;
5953}
5954EOF
5955if compile_prog "" "" ; then
5956 have_afalg=yes
5957fi
5958if test "$crypto_afalg" = "yes"
5959then
5960 if test "$have_afalg" != "yes"
5961 then
5962 error_exit "AF_ALG requested but could not be detected"
5963 fi
5964fi
5965
5966
James Clarke6969ec62016-06-06 12:02:50 +01005967#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005968# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005969if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005970 cat > $TMPC << EOF
5971#include <Hypervisor/hv.h>
5972int main() { return 0;}
5973EOF
5974 if ! compile_object ""; then
5975 hvf='no'
5976 else
5977 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01005978 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005979 fi
5980fi
5981
5982#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005983# Sparc implicitly links with --relax, which is
5984# incompatible with -r, so --no-relax should be
5985# given. It does no harm to give it on other
5986# platforms too.
5987
5988# Note: the prototype is needed since QEMU_CFLAGS
5989# contains -Wmissing-prototypes
5990cat > $TMPC << EOF
5991extern int foo(void);
5992int foo(void) { return 0; }
5993EOF
5994if ! compile_object ""; then
5995 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5996fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005997for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5998 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5999 LD_REL_FLAGS=$i
6000 break
6001 fi
6002done
6003if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6004 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01006005fi
6006
Jan Vesely277abf12016-04-29 13:15:23 -04006007##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05006008# check for sysmacros.h
6009
6010have_sysmacros=no
6011cat > $TMPC << EOF
6012#include <sys/sysmacros.h>
6013int main(void) {
6014 return makedev(0, 0);
6015}
6016EOF
6017if compile_prog "" "" ; then
6018 have_sysmacros=yes
6019fi
6020
6021##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006022# Veritas HyperScale block driver VxHS
6023# Check if libvxhs is installed
6024
6025if test "$vxhs" != "no" ; then
6026 cat > $TMPC <<EOF
6027#include <stdint.h>
6028#include <qnio/qnio_api.h>
6029
6030void *vxhs_callback;
6031
6032int main(void) {
6033 iio_init(QNIO_VERSION, vxhs_callback);
6034 return 0;
6035}
6036EOF
6037 vxhs_libs="-lvxhs -lssl"
6038 if compile_prog "" "$vxhs_libs" ; then
6039 vxhs=yes
6040 else
6041 if test "$vxhs" = "yes" ; then
6042 feature_not_found "vxhs block device" "Install libvxhs See github"
6043 fi
6044 vxhs=no
6045 fi
6046fi
6047
6048##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006049# check for _Static_assert()
6050
6051have_static_assert=no
6052cat > $TMPC << EOF
6053_Static_assert(1, "success");
6054int main(void) {
6055 return 0;
6056}
6057EOF
6058if compile_prog "" "" ; then
6059 have_static_assert=yes
6060fi
6061
6062##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006063# check for utmpx.h, it is missing e.g. on OpenBSD
6064
6065have_utmpx=no
6066cat > $TMPC << EOF
6067#include <utmpx.h>
6068struct utmpx user_info;
6069int main(void) {
6070 return 0;
6071}
6072EOF
6073if compile_prog "" "" ; then
6074 have_utmpx=yes
6075fi
6076
6077##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07006078# check for getrandom()
6079
6080have_getrandom=no
6081cat > $TMPC << EOF
6082#include <sys/random.h>
6083int main(void) {
6084 return getrandom(0, 0, GRND_NONBLOCK);
6085}
6086EOF
6087if compile_prog "" "" ; then
6088 have_getrandom=yes
6089fi
6090
6091##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01006092# checks for sanitizers
6093
Marc-André Lureau247724c2018-01-16 16:11:51 +01006094have_asan=no
6095have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006096have_asan_iface_h=no
6097have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006098
6099if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006100 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006101 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6102 have_asan=yes
6103 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006104
6105 # we could use a simple skeleton for flags checks, but this also
6106 # detect the static linking issue of ubsan, see also:
6107 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6108 cat > $TMPC << EOF
6109#include <stdlib.h>
6110int main(void) {
6111 void *tmp = malloc(10);
6112 return *(int *)(tmp + 2);
6113}
6114EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006115 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6116 have_ubsan=yes
6117 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006118
6119 if check_include "sanitizer/asan_interface.h" ; then
6120 have_asan_iface_h=yes
6121 fi
6122
6123 cat > $TMPC << EOF
6124#include <sanitizer/asan_interface.h>
6125int main(void) {
6126 __sanitizer_start_switch_fiber(0, 0, 0);
6127 return 0;
6128}
6129EOF
6130 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6131 have_asan_iface_fiber=yes
6132 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006133fi
6134
6135##########################################
Alexander Bulekovadc28022020-02-19 23:11:14 -05006136# checks for fuzzer
6137if test "$fuzzing" = "yes" ; then
6138 write_c_fuzzer_skeleton
6139 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then
6140 have_fuzzer=yes
6141 fi
6142fi
6143
6144##########################################
Junyan He17824402018-07-18 15:47:59 +08006145# check for libpmem
6146
6147if test "$libpmem" != "no"; then
6148 if $pkg_config --exists "libpmem"; then
6149 libpmem="yes"
6150 libpmem_libs=$($pkg_config --libs libpmem)
6151 libpmem_cflags=$($pkg_config --cflags libpmem)
6152 libs_softmmu="$libs_softmmu $libpmem_libs"
6153 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6154 else
6155 if test "$libpmem" = "yes" ; then
6156 feature_not_found "libpmem" "Install nvml or pmdk"
6157 fi
6158 libpmem="no"
6159 fi
6160fi
6161
6162##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006163# check for slirp
6164
Laurent Vivierd5999382019-06-21 15:05:44 +02006165# slirp is only required when building softmmu targets
6166if test -z "$slirp" -a "$softmmu" != "yes" ; then
6167 slirp="no"
6168fi
6169
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006170case "$slirp" in
6171 "" | yes)
6172 if $pkg_config slirp; then
6173 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006174 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6175 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006176 elif test -e "${source_path}/slirp/Makefile" ; then
6177 slirp=internal
6178 elif test -z "$slirp" ; then
6179 slirp=no
6180 else
6181 feature_not_found "slirp" "Install slirp devel or git submodule"
6182 fi
6183 ;;
6184
6185 system)
6186 if ! $pkg_config slirp; then
6187 feature_not_found "slirp" "Install slirp devel"
6188 fi
6189 ;;
6190esac
6191
6192case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006193 git | internal)
6194 if test "$slirp" = git; then
6195 git_submodules="${git_submodules} slirp"
6196 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006197 mkdir -p slirp
6198 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6199 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006200 if test "$mingw32" = "yes" ; then
6201 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6202 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006203 ;;
6204
6205 system)
6206 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6207 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6208 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6209 ;;
6210
6211 no)
6212 ;;
6213 *)
6214 error_exit "Unknown state for slirp: $slirp"
6215 ;;
6216esac
6217
6218
6219##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006220# End of CC checks
6221# After here, no more $cc or $ld runs
6222
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006223write_c_skeleton
6224
Blue Swirl1d728c32012-05-01 18:45:39 +00006225if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006226 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6227 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006228elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006229 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006230elif test "$debug" = "no"; then
6231 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006232fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006233
Marc-André Lureau247724c2018-01-16 16:11:51 +01006234if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006235 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6236 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006237 if test "$have_asan_iface_h" = "no" ; then
6238 echo "ASAN build enabled, but ASAN header missing." \
6239 "Without code annotation, the report may be inferior."
6240 elif test "$have_asan_iface_fiber" = "no" ; then
6241 echo "ASAN build enabled, but ASAN header is too old." \
6242 "Without code annotation, the report may be inferior."
6243 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006244fi
6245if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006246 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6247 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006248fi
6249
Peter Lieven6542aa92014-02-03 10:26:13 +01006250##########################################
6251# Do we have libnfs
6252if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006253 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006254 libnfs="yes"
6255 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006256 else
6257 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006258 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006259 fi
6260 libnfs="no"
6261 fi
6262fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006263
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006264##########################################
6265# Do we have libudev
6266if test "$libudev" != "no" ; then
6267 if $pkg_config libudev && test "$static" != "yes"; then
6268 libudev="yes"
6269 libudev_libs=$($pkg_config --libs libudev)
6270 else
6271 libudev="no"
6272 fi
6273fi
6274
Peter Maydell6ca026c2012-07-18 15:10:18 +01006275# Now we've finished running tests it's OK to add -Werror to the compiler flags
6276if test "$werror" = "yes"; then
6277 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6278fi
6279
Juan Quintelae86ecd42009-08-03 14:45:59 +02006280if test "$solaris" = "no" ; then
6281 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006282 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006283 fi
6284fi
6285
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006286# test if pod2man has --utf8 option
6287if pod2man --help | grep -q utf8; then
6288 POD2MAN="pod2man --utf8"
6289else
6290 POD2MAN="pod2man"
6291fi
6292
Blue Swirl952afb72010-09-19 08:36:34 +00006293# Use ASLR, no-SEH and DEP if available
6294if test "$mingw32" = "yes" ; then
6295 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006296 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006297 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006298 fi
6299 done
6300fi
6301
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006302# Disable OpenBSD W^X if available
6303if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6304 cat > $TMPC <<EOF
6305 int main(void) { return 0; }
6306EOF
6307 wx_ldflags="-Wl,-z,wxneeded"
6308 if compile_prog "" "$wx_ldflags"; then
6309 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6310 fi
6311fi
6312
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006313qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006314qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006315qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006316qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006317qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006318qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006319
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006320# We can only support ivshmem if we have eventfd
6321if [ "$eventfd" = "yes" ]; then
6322 ivshmem=yes
6323fi
6324
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006325tools=""
6326if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006327 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006328 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
Kevin Wolff3534152020-02-24 15:29:49 +01006329 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006330 fi
6331 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006332 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006333 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006334 if [ "$curl" = "yes" ]; then
6335 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006336 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006337fi
6338if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006339 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006340 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006341 virtfs=yes
6342 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6343 else
6344 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006345 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306346 fi
Andreas Färber17500372012-05-01 01:12:03 +02006347 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006348 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006349 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6350 mpath=yes
6351 else
6352 if test "$mpath" = yes; then
6353 error_exit "Multipath requires libmpathpersist devel"
6354 fi
6355 mpath=no
6356 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006357 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6358 else
6359 if test "$virtfs" = yes; then
6360 error_exit "VirtFS is supported only on Linux"
6361 fi
6362 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006363 if test "$mpath" = yes; then
6364 error_exit "Multipath is supported only on Linux"
6365 fi
6366 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306367 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006368 if test "$xkbcommon" = "yes"; then
6369 tools="qemu-keymap\$(EXESUF) $tools"
6370 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006371fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006372
6373# Probe for guest agent support/options
6374
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006375if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006376 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6377 guest_agent=no
6378 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006379 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006380 guest_agent=yes
6381 elif [ "$guest_agent" != yes ]; then
6382 guest_agent=no
6383 else
6384 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006385 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006386fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006387
Michael Roth9d6bc272015-08-26 10:49:13 -05006388# Guest agent Window MSI package
6389
6390if test "$guest_agent" != yes; then
6391 if test "$guest_agent_msi" = yes; then
6392 error_exit "MSI guest agent package requires guest agent enabled"
6393 fi
6394 guest_agent_msi=no
6395elif test "$mingw32" != "yes"; then
6396 if test "$guest_agent_msi" = "yes"; then
6397 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6398 fi
6399 guest_agent_msi=no
6400elif ! has wixl; then
6401 if test "$guest_agent_msi" = "yes"; then
6402 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6403 fi
6404 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006405else
6406 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6407 # disabled explicitly
6408 if test "$guest_agent_msi" != "no"; then
6409 guest_agent_msi=yes
6410 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006411fi
6412
Michael Roth1a349042015-08-26 11:14:31 -05006413if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006414 if test "$guest_agent_with_vss" = "yes"; then
6415 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6416 fi
6417
6418 if test "$QEMU_GA_MANUFACTURER" = ""; then
6419 QEMU_GA_MANUFACTURER=QEMU
6420 fi
6421
6422 if test "$QEMU_GA_DISTRO" = ""; then
6423 QEMU_GA_DISTRO=Linux
6424 fi
6425
6426 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006427 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006428 fi
6429
Stefan Weil89138852016-05-16 15:10:20 +02006430 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006431
6432 case "$cpu" in
6433 x86_64)
6434 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6435 ;;
6436 i386)
6437 QEMU_GA_MSI_ARCH="-D Arch=32"
6438 ;;
6439 *)
6440 error_exit "CPU $cpu not supported for building installation package"
6441 ;;
6442 esac
6443fi
6444
Paolo Bonzinica35f782010-05-26 16:08:29 +02006445# Mac OS X ships with a broken assembler
6446roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006447if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6448 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6449 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006450 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006451 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6452 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6453 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006454 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6455 ld_i386_emulation="$emu"
6456 roms="optionrom"
6457 break
6458 fi
6459 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006460fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006461
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006462# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006463if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006464 write_c_skeleton
6465 if compile_prog "-march=z900" ""; then
6466 roms="$roms s390-ccw"
6467 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006468fi
6469
Richard Henderson964c6fa2013-06-21 19:10:16 -07006470# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006471if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006472 textseg_addr=
6473 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006474 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6475 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006476 textseg_addr=0x60000000
6477 ;;
6478 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006479 # A 256M aligned address, high in the address space, with enough
6480 # room for the code_gen_buffer above it before the stack.
6481 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006482 ;;
6483 esac
6484 if [ -n "$textseg_addr" ]; then
6485 cat > $TMPC <<EOF
6486 int main(void) { return 0; }
6487EOF
6488 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6489 if ! compile_prog "" "$textseg_ldflags"; then
6490 # In case ld does not support -Ttext-segment, edit the default linker
6491 # script via sed to set the .text start addr. This is needed on FreeBSD
6492 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006493 if ! $ld --verbose >/dev/null 2>&1; then
6494 error_exit \
6495 "We need to link the QEMU user mode binaries at a" \
6496 "specific text address. Unfortunately your linker" \
6497 "doesn't support either the -Ttext-segment option or" \
6498 "printing the default linker script with --verbose." \
6499 "If you don't want the user mode binaries, pass the" \
6500 "--disable-user option to configure."
6501 fi
6502
Richard Henderson964c6fa2013-06-21 19:10:16 -07006503 $ld --verbose | sed \
6504 -e '1,/==================================================/d' \
6505 -e '/==================================================/,$d' \
6506 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6507 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6508 textseg_ldflags="-Wl,-T../config-host.ld"
6509 fi
6510 fi
6511fi
6512
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006513# Check that the C++ compiler exists and works with the C compiler.
6514# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6515if has $cxx; then
6516 cat > $TMPC <<EOF
6517int c_function(void);
6518int main(void) { return c_function(); }
6519EOF
6520
6521 compile_object
6522
6523 cat > $TMPCXX <<EOF
6524extern "C" {
6525 int c_function(void);
6526}
6527int c_function(void) { return 42; }
6528EOF
6529
6530 update_cxxflags
6531
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006532 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006533 # C++ compiler $cxx works ok with C compiler $cc
6534 :
6535 else
6536 echo "C++ compiler $cxx does not work with C compiler $cc"
6537 echo "Disabling C++ specific optional code"
6538 cxx=
6539 fi
6540else
6541 echo "No C++ compiler available; disabling C++ specific optional code"
6542 cxx=
6543fi
6544
Cole Robinson02d34f62016-05-06 14:03:09 -04006545echo_version() {
6546 if test "$1" = "yes" ; then
6547 echo "($2)"
6548 fi
6549}
6550
Jan Kiszka50e12062014-10-02 10:03:55 +02006551# prepend pixman and ftd flags after all config tests are done
6552QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006553QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006554libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006555
bellard43ce4df2003-06-09 19:53:12 +00006556echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006557echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006558echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006559echo "binary directory $(eval echo $bindir)"
6560echo "library directory $(eval echo $libdir)"
6561echo "module directory $(eval echo $qemu_moddir)"
6562echo "libexec directory $(eval echo $libexecdir)"
6563echo "include directory $(eval echo $includedir)"
6564echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006565if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006566echo "local state directory $(eval echo $local_statedir)"
6567echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006568echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006569else
6570echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006571echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006572fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006573echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006574echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006575echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006576echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006577echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006578echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006579echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006580echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006581echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006582echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006583echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006584echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006585echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006586echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006587echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006588if test "$docs" != "no"; then
6589 echo "sphinx-build $sphinx_build"
6590fi
Alex Bennée39d87c82020-03-03 15:06:20 +00006591echo "genisoimage $genisoimage"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006592echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6593if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006594 echo "smbd $smbd"
6595fi
Fam Zheng17969262014-02-10 14:48:56 +08006596echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006597echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006598echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006599echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006600echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006601echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006602echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006603echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006604echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006605if test "$darwin" = "yes" ; then
6606 echo "Cocoa support $cocoa"
6607fi
Stefan Weil89138852016-05-16 15:10:20 +02006608echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006609echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006610echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006611echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006612echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006613echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006614echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006615echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006616if test "$gcrypt" = "yes"
6617then
6618 echo " hmac $gcrypt_hmac"
6619 echo " XTS $gcrypt_xts"
6620fi
Stefan Weil89138852016-05-16 15:10:20 +02006621echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006622if test "$nettle" = "yes"
6623then
6624 echo " XTS $nettle_xts"
6625fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006626echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006627echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006628echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006629echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006630echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006631echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006632echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006633echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006634echo "Block whitelist (rw) $block_drv_rw_whitelist"
6635echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306636echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006637echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006638echo "VNC support $vnc"
6639if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006640 echo "VNC SASL support $vnc_sasl"
6641 echo "VNC JPEG support $vnc_jpeg"
6642 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006643fi
aliguorie37630c2009-04-22 15:19:10 +00006644echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006645if test "$xen" = "yes" ; then
6646 echo "xen ctrl version $xen_ctrl_version"
6647fi
aurel322e4d9fb2008-04-08 06:01:02 +00006648echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006649echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006650echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006651echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006652echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006653echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006654echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006655echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006656echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006657echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006658echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006659echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006660echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006661echo "TCG support $tcg"
6662if test "$tcg" = "yes" ; then
6663 echo "TCG debug enabled $debug_tcg"
6664 echo "TCG interpreter $tcg_interpreter"
6665fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006666echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006667echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006668echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006669echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006670echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006671echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006672echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006673echo "madvise $madvise"
6674echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006675echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006676echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006677echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006678echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006679echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006680echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006681echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006682echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006683echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006684if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006685echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006686fi
Stefan Weil89138852016-05-16 15:10:20 +02006687echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006688echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006689echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006690echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006691echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006692echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006693echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006694echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006695echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006696echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006697echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006698echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006699echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006700echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006701echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006702echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006703echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006704echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006705echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006706echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306707echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006708echo "gcov $gcov_tool"
6709echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006710echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006711echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006712echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006713echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006714echo "lzo support $lzo"
6715echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006716echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006717echo "lzfse support $lzfse"
Juan Quintela3a678482019-12-17 21:15:24 +01006718echo "zstd support $zstd"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006719echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006720echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006721echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006722echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006723echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006724echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006725echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006726echo "bochs support $bochs"
6727echo "cloop support $cloop"
6728echo "dmg support $dmg"
6729echo "qcow v1 support $qcow1"
6730echo "vdi support $vdi"
6731echo "vvfat support $vvfat"
6732echo "qed support $qed"
6733echo "parallels support $parallels"
6734echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006735echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006736echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006737echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006738echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006739echo "plugin support $plugins"
Alexander Bulekovadc28022020-02-19 23:11:14 -05006740echo "fuzzing support $fuzzing"
Alex Bennéef48e5902020-03-16 17:21:48 +00006741echo "gdb $gdb_bin"
bellard67b915a2004-03-31 23:37:16 +00006742
Peter Maydell898be3e2017-03-21 14:31:57 +00006743if test "$supported_cpu" = "no"; then
6744 echo
6745 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6746 echo
6747 echo "CPU host architecture $cpu support is not currently maintained."
6748 echo "The QEMU project intends to remove support for this host CPU in"
6749 echo "a future release if nobody volunteers to maintain it and to"
6750 echo "provide a build host for our continuous integration setup."
6751 echo "configure has succeeded and you can continue to build, but"
6752 echo "if you care about QEMU on this platform you should contact"
6753 echo "us upstream at qemu-devel@nongnu.org."
6754fi
6755
6756if test "$supported_os" = "no"; then
6757 echo
6758 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6759 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006760 echo "Host OS $targetos support is not currently maintained."
6761 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006762 echo "a future release if nobody volunteers to maintain it and to"
6763 echo "provide a build host for our continuous integration setup."
6764 echo "configure has succeeded and you can continue to build, but"
6765 echo "if you care about QEMU on this platform you should contact"
6766 echo "us upstream at qemu-devel@nongnu.org."
6767fi
6768
Juan Quintela98ec69a2009-07-16 18:34:18 +02006769config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006770
Stefan Weildbd99ae2013-01-01 18:33:44 +01006771echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6772
Juan Quintela98ec69a2009-07-16 18:34:18 +02006773echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006774echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006775
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006776echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006777echo "prefix=$prefix" >> $config_host_mak
6778echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006779echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006780echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006781echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006782echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006783echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006784echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006785echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006786echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006787echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006788echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006789if test "$mingw32" = "no" ; then
6790 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6791fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006792echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006793echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006794echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006795echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006796echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006797echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006798echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006799echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006800echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006801
Juan Quintela98ec69a2009-07-16 18:34:18 +02006802echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006803
Paolo Bonzinif3494742019-01-23 14:56:17 +08006804if test "$default_devices" = "yes" ; then
6805 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6806else
6807 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6808fi
aurel32f8393942009-04-13 18:45:38 +00006809if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006810 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006811fi
aliguori1625af82009-04-05 17:41:02 +00006812if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006813 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006814fi
bellard7d132992003-03-06 23:23:54 +00006815if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006816 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006817fi
bellard67b915a2004-03-31 23:37:16 +00006818if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006819 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006820 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006821 version_major=${rc_version%%.*}
6822 rc_version=${rc_version#*.}
6823 version_minor=${rc_version%%.*}
6824 rc_version=${rc_version#*.}
6825 version_subminor=${rc_version%%.*}
6826 version_micro=0
6827 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6828 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006829 if test "$guest_agent_with_vss" = "yes" ; then
6830 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006831 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006832 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6833 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006834 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006835 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006836 fi
Michael Roth1a349042015-08-26 11:14:31 -05006837 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006838 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006839 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6840 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6841 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6842 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6843 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6844 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6845 fi
pbrook210fa552007-02-27 21:04:49 +00006846else
Juan Quintela35f4df22009-07-27 16:13:07 +02006847 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006848fi
blueswir1128ab2f2008-08-15 18:33:42 +00006849
Mark McLoughlindffcb712009-10-22 17:49:11 +01006850if test "$linux" = "yes" ; then
6851 echo "CONFIG_LINUX=y" >> $config_host_mak
6852fi
6853
bellard83fb7ad2004-07-05 21:25:26 +00006854if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006855 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006856fi
malcb29fe3e2008-11-18 01:42:22 +00006857
bellardec530c82006-04-25 22:36:06 +00006858if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006859 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006860fi
Andreas Färber179cf402010-09-20 00:50:43 +02006861if test "$haiku" = "yes" ; then
6862 echo "CONFIG_HAIKU=y" >> $config_host_mak
6863fi
bellard97a847b2003-08-10 21:36:04 +00006864if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006865 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006866fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006867if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006868 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006869fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006870if test "$want_tools" = "yes" ; then
6871 echo "CONFIG_TOOLS=y" >> $config_host_mak
6872fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006873if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006874 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006875 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006876 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6877 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6878fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006879if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006880 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006881fi
ths8a16d272008-07-19 09:56:24 +00006882if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006883 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006884 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006885fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006886if test "$netmap" = "yes" ; then
6887 echo "CONFIG_NETMAP=y" >> $config_host_mak
6888fi
Gonglei015a33b2014-07-01 20:58:08 +08006889if test "$l2tpv3" = "yes" ; then
6890 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6891fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006892if test "$gprof" = "yes" ; then
6893 echo "CONFIG_GPROF=y" >> $config_host_mak
6894fi
Corey Bryant47e98652012-01-26 09:42:26 -05006895if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006896 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006897fi
Juan Quintela2358a492009-07-27 16:13:25 +02006898echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006899for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006900 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006901 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006902 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006903 echo "$def=m" >> $config_host_mak ;;
6904 *)
6905 echo "$def=y" >> $config_host_mak ;;
6906 esac
malc0c58ac12008-06-25 21:04:05 +00006907done
Fam Zhengb1149912017-09-07 16:29:13 +08006908echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6909echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6910echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6911echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6912echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006913if test "$audio_win_int" = "yes" ; then
6914 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6915fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006916echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6917echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006918if test "$vnc" = "yes" ; then
6919 echo "CONFIG_VNC=y" >> $config_host_mak
6920fi
aliguori2f9606b2009-03-06 20:27:28 +00006921if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006922 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006923fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006924if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006925 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006926fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006927if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006928 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006929fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006930if test "$xkbcommon" = "yes" ; then
6931 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6932 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6933fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006934if test "$xfs" = "yes" ; then
6935 echo "CONFIG_XFS=y" >> $config_host_mak
6936fi
Stefan Weil89138852016-05-16 15:10:20 +02006937qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006938echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006939echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006940echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006941echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006942if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006943 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006944fi
Fam Zheng17969262014-02-10 14:48:56 +08006945if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006946 # $shacmd can generate a hash started with digit, which the compiler doesn't
6947 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006948 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006949 echo "CONFIG_MODULES=y" >> $config_host_mak
6950fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006951if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006952 echo "CONFIG_X11=y" >> $config_host_mak
6953 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6954 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6955fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006956if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006957 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006958 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006959 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006960 if test "$sdl_image" = "yes" ; then
6961 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6962 fi
bellard49ecc3f2007-11-07 19:25:15 +00006963fi
6964if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006965 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006966fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006967if test "$iconv" = "yes" ; then
6968 echo "CONFIG_ICONV=y" >> $config_host_mak
6969 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6970 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6971fi
balrog4d3b6f62008-02-10 16:33:14 +00006972if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006973 echo "CONFIG_CURSES=m" >> $config_host_mak
6974 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6975 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006976fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006977if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006978 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006979fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006980if test "$accept4" = "yes" ; then
6981 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6982fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306983if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006984 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306985fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006986if test "$eventfd" = "yes" ; then
6987 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6988fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006989if test "$memfd" = "yes" ; then
6990 echo "CONFIG_MEMFD=y" >> $config_host_mak
6991fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006992if test "$have_usbfs" = "yes" ; then
6993 echo "CONFIG_USBFS=y" >> $config_host_mak
6994fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006995if test "$fallocate" = "yes" ; then
6996 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6997fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006998if test "$fallocate_punch_hole" = "yes" ; then
6999 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7000fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03007001if test "$fallocate_zero_range" = "yes" ; then
7002 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7003fi
Kevin Wolfed911432014-09-29 17:12:59 +02007004if test "$posix_fallocate" = "yes" ; then
7005 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7006fi
Peter Maydellc727f472011-01-06 11:05:10 +00007007if test "$sync_file_range" = "yes" ; then
7008 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7009fi
Peter Maydelldace20d2011-01-10 13:11:24 +00007010if test "$fiemap" = "yes" ; then
7011 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7012fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03007013if test "$dup3" = "yes" ; then
7014 echo "CONFIG_DUP3=y" >> $config_host_mak
7015fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01007016if test "$ppoll" = "yes" ; then
7017 echo "CONFIG_PPOLL=y" >> $config_host_mak
7018fi
Alex Blighcd758dd2013-08-21 16:02:44 +01007019if test "$prctl_pr_set_timerslack" = "yes" ; then
7020 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7021fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00007022if test "$epoll" = "yes" ; then
7023 echo "CONFIG_EPOLL=y" >> $config_host_mak
7024fi
7025if test "$epoll_create1" = "yes" ; then
7026 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7027fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00007028if test "$sendfile" = "yes" ; then
7029 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7030fi
Riku Voipio51834342014-06-22 11:25:42 +01007031if test "$timerfd" = "yes" ; then
7032 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7033fi
Riku Voipio9af5c902014-08-12 15:58:57 +03007034if test "$setns" = "yes" ; then
7035 echo "CONFIG_SETNS=y" >> $config_host_mak
7036fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02007037if test "$clock_adjtime" = "yes" ; then
7038 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7039fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02007040if test "$syncfs" = "yes" ; then
7041 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7042fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01007043if test "$kcov" = "yes" ; then
7044 echo "CONFIG_KCOV=y" >> $config_host_mak
7045fi
aurel323b3f24a2009-04-15 16:12:13 +00007046if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007047 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00007048fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00007049if test "$inotify1" = "yes" ; then
7050 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7051fi
Peter Maydell401bc052017-09-05 13:19:32 +01007052if test "$sem_timedwait" = "yes" ; then
7053 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7054fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02007055if test "$strchrnul" = "yes" ; then
7056 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7057fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08007058if test "$st_atim" = "yes" ; then
7059 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7060fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02007061if test "$byteswap_h" = "yes" ; then
7062 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7063fi
7064if test "$bswap_h" = "yes" ; then
7065 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7066fi
Alexander Graf769ce762009-05-11 17:41:42 +02007067if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007068 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02007069 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007070 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02007071fi
aurel322e4d9fb2008-04-08 06:01:02 +00007072if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007073 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08007074 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00007075fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007076if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007077 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007078 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007079 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02007080 if test "$gtk_gl" = "yes" ; then
7081 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7082 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007083fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01007084if test "$gio" = "yes" ; then
7085 echo "CONFIG_GIO=y" >> $config_host_mak
7086 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7087 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04007088 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01007089fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01007090echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01007091if test "$gnutls" = "yes" ; then
7092 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7093fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007094if test "$gcrypt" = "yes" ; then
7095 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08007096 if test "$gcrypt_hmac" = "yes" ; then
7097 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7098 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01007099fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01007100if test "$nettle" = "yes" ; then
7101 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02007102 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01007103fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01007104if test "$qemu_private_xts" = "yes" ; then
7105 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7106fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01007107if test "$tasn1" = "yes" ; then
7108 echo "CONFIG_TASN1=y" >> $config_host_mak
7109fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01007110if test "$auth_pam" = "yes" ; then
7111 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7112fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007113if test "$have_ifaddrs_h" = "yes" ; then
7114 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7115fi
Eric Blake6b39b062016-10-11 10:46:23 -05007116if test "$have_broken_size_max" = "yes" ; then
7117 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7118fi
Jan Vesely277abf12016-04-29 13:15:23 -04007119
7120# Work around a system header bug with some kernel/XFS header
7121# versions where they both try to define 'struct fsxattr':
7122# xfs headers will not try to redefine structs from linux headers
7123# if this macro is set.
7124if test "$have_fsxattr" = "yes" ; then
7125 echo "HAVE_FSXATTR=y" >> $config_host_mak
7126fi
Fam Zheng1efad062018-06-01 17:26:43 +08007127if test "$have_copy_file_range" = "yes" ; then
7128 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7129fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007130if test "$vte" = "yes" ; then
7131 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007132 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007133 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007134fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007135if test "$virglrenderer" = "yes" ; then
7136 echo "CONFIG_VIRGL=y" >> $config_host_mak
7137 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7138 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7139fi
aliguorie37630c2009-04-22 15:19:10 +00007140if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007141 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007142 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007143fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007144if test "$linux_aio" = "yes" ; then
7145 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7146fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007147if test "$linux_io_uring" = "yes" ; then
7148 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7149 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7150 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7151fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007152if test "$attr" = "yes" ; then
7153 echo "CONFIG_ATTR=y" >> $config_host_mak
7154fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007155if test "$libattr" = "yes" ; then
7156 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7157fi
Meador Inge983eef52012-02-24 14:00:42 +05307158if test "$virtfs" = "yes" ; then
7159 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007160fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007161if test "$mpath" = "yes" ; then
7162 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007163 if test "$mpathpersist_new_api" = "yes"; then
7164 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7165 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007166fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007167if test "$vhost_scsi" = "yes" ; then
7168 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7169fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007170if test "$vhost_net" = "yes" ; then
7171 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7172fi
7173if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007174 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007175fi
Gonglei042cea22018-03-01 21:46:28 +08007176if test "$vhost_crypto" = "yes" ; then
7177 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7178fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007179if test "$vhost_vsock" = "yes" ; then
7180 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7181fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007182if test "$vhost_kernel" = "yes" ; then
7183 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7184fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007185if test "$vhost_user" = "yes" ; then
7186 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7187fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007188if test "$vhost_user_fs" = "yes" ; then
7189 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7190fi
ths77755342008-11-27 15:45:16 +00007191if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007192 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007193fi
aliguoribf9298b2008-12-05 20:05:26 +00007194if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007195 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007196fi
aliguoriceb42de2009-04-07 18:43:28 +00007197if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007198 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007199fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007200if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007201 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007202fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007203if test "$membarrier" = "yes" ; then
7204 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7205fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007206if test "$signalfd" = "yes" ; then
7207 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7208fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007209if test "$optreset" = "yes" ; then
7210 echo "HAVE_OPTRESET=y" >> $config_host_mak
7211fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007212if test "$tcg" = "yes"; then
7213 echo "CONFIG_TCG=y" >> $config_host_mak
7214 if test "$tcg_interpreter" = "yes" ; then
7215 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7216 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007217fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007218if test "$fdatasync" = "yes" ; then
7219 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7220fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007221if test "$madvise" = "yes" ; then
7222 echo "CONFIG_MADVISE=y" >> $config_host_mak
7223fi
7224if test "$posix_madvise" = "yes" ; then
7225 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7226fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007227if test "$posix_memalign" = "yes" ; then
7228 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7229fi
bellard97a847b2003-08-10 21:36:04 +00007230
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007231if test "$spice" = "yes" ; then
7232 echo "CONFIG_SPICE=y" >> $config_host_mak
7233fi
7234
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007235if test "$smartcard" = "yes" ; then
7236 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007237 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7238 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007239fi
7240
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007241if test "$libusb" = "yes" ; then
7242 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007243 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7244 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007245fi
7246
Hans de Goede69354a82011-07-19 11:04:10 +02007247if test "$usb_redir" = "yes" ; then
7248 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007249 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7250 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007251fi
7252
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007253if test "$opengl" = "yes" ; then
7254 echo "CONFIG_OPENGL=y" >> $config_host_mak
7255 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007256 if test "$opengl_dmabuf" = "yes" ; then
7257 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7258 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007259fi
7260
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007261if test "$gbm" = "yes" ; then
7262 echo "CONFIG_GBM=y" >> $config_host_mak
7263 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7264 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7265fi
7266
7267
Yang Zhong5a22ab72017-12-20 21:16:46 +08007268if test "$malloc_trim" = "yes" ; then
7269 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7270fi
7271
Liang Li99f2dbd2016-03-08 13:53:16 +08007272if test "$avx2_opt" = "yes" ; then
7273 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7274fi
7275
qiaonuohan607dacd2014-02-18 14:11:30 +08007276if test "$lzo" = "yes" ; then
7277 echo "CONFIG_LZO=y" >> $config_host_mak
7278fi
7279
7280if test "$snappy" = "yes" ; then
7281 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7282fi
7283
Peter Wu6b383c02015-01-06 18:48:14 +01007284if test "$bzip2" = "yes" ; then
7285 echo "CONFIG_BZIP2=y" >> $config_host_mak
7286 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7287fi
7288
Julio Faracco83bc1f92018-11-05 13:08:04 -02007289if test "$lzfse" = "yes" ; then
7290 echo "CONFIG_LZFSE=y" >> $config_host_mak
7291 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7292fi
7293
Juan Quintela3a678482019-12-17 21:15:24 +01007294if test "$zstd" = "yes" ; then
7295 echo "CONFIG_ZSTD=y" >> $config_host_mak
7296fi
7297
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007298if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007299 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007300 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7301 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007302fi
7303
Peter Lieven6542aa92014-02-03 10:26:13 +01007304if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007305 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7306 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007307fi
7308
Eduardo Otubof7945732012-08-14 18:44:05 -03007309if test "$seccomp" = "yes"; then
7310 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007311 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7312 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007313fi
7314
bellard83fb7ad2004-07-05 21:25:26 +00007315# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007316if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007317 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007318fi
7319
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007320if test "$localtime_r" = "yes" ; then
7321 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7322fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007323if test "$qom_cast_debug" = "yes" ; then
7324 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7325fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007326if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007327 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007328 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7329 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007330fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007331
Peter Maydell7c2acc72013-04-08 12:11:27 +01007332echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007333if test "$coroutine_pool" = "yes" ; then
7334 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7335else
7336 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7337fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307338
Peter Lieven7d992e42016-09-27 11:58:45 +02007339if test "$debug_stack_usage" = "yes" ; then
7340 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7341fi
7342
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007343if test "$crypto_afalg" = "yes" ; then
7344 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7345fi
7346
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307347if test "$open_by_handle_at" = "yes" ; then
7348 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7349fi
7350
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307351if test "$linux_magic_h" = "yes" ; then
7352 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7353fi
7354
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007355if test "$pragma_diagnostic_available" = "yes" ; then
7356 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007357fi
7358
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007359if test "$valgrind_h" = "yes" ; then
7360 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7361fi
7362
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007363if test "$have_asan_iface_fiber" = "yes" ; then
7364 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7365fi
7366
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007367if test "$has_environ" = "yes" ; then
7368 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7369fi
7370
Richard Henderson76a347e2012-12-28 14:17:02 -08007371if test "$cpuid_h" = "yes" ; then
7372 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7373fi
7374
Richard Hendersonf5401662013-02-16 12:46:59 -08007375if test "$int128" = "yes" ; then
7376 echo "CONFIG_INT128=y" >> $config_host_mak
7377fi
7378
Richard Henderson7ebee432016-06-29 21:10:59 -07007379if test "$atomic128" = "yes" ; then
7380 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7381fi
7382
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007383if test "$cmpxchg128" = "yes" ; then
7384 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7385fi
7386
Richard Hendersondf79b992016-09-02 12:23:57 -07007387if test "$atomic64" = "yes" ; then
7388 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7389fi
7390
Richard Hendersondb432672017-09-15 14:11:45 -07007391if test "$vector16" = "yes" ; then
7392 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7393fi
7394
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007395if test "$attralias" = "yes" ; then
7396 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7397fi
7398
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007399if test "$getauxval" = "yes" ; then
7400 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7401fi
7402
Bharata B Raoeb100392012-09-24 14:42:45 +05307403if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007404 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007405 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7406 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307407fi
7408
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007409if test "$glusterfs_xlator_opt" = "yes" ; then
7410 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7411fi
7412
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307413if test "$glusterfs_discard" = "yes" ; then
7414 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7415fi
7416
Niels de Vosdf3a4292017-05-28 12:01:14 +05307417if test "$glusterfs_fallocate" = "yes" ; then
7418 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7419fi
7420
Bharata B Rao7c815372013-12-21 14:51:25 +05307421if test "$glusterfs_zerofill" = "yes" ; then
7422 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7423fi
7424
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007425if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7426 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7427fi
7428
Niels de Vos0e3b8912019-03-05 16:46:34 +01007429if test "$glusterfs_iocb_has_stat" = "yes" ; then
7430 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7431fi
7432
Pino Toscanob10d49d2019-06-20 22:08:40 +02007433if test "$libssh" = "yes" ; then
7434 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7435 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7436 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007437fi
7438
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007439if test "$live_block_migration" = "yes" ; then
7440 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7441fi
7442
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007443if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007444 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007445fi
7446
Lluís Vilanova5b808272014-05-27 15:02:14 +02007447echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7448if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007449 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307450fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007451if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007452 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7453 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007454 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007455fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007456if have_backend "log"; then
7457 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007458fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007459if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007460 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7461fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007462if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007463 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7464 if test "$trace_backend_stap" = "yes" ; then
7465 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7466 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007467fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007468if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007469 if test "$linux" = "yes" ; then
7470 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007471 else
Stewart Smith21684af2014-01-24 12:39:10 +11007472 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007473 fi
7474fi
Paul Durrant0a852412016-08-04 14:44:14 +01007475if have_backend "syslog"; then
7476 if test "$posix_syslog" = "yes" ; then
7477 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7478 else
7479 feature_not_found "syslog(trace backend)" "syslog not available"
7480 fi
7481fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007482echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7483
Michael R. Hines2da776d2013-07-22 10:01:54 -04007484if test "$rdma" = "yes" ; then
7485 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007486 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007487fi
7488
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007489if test "$pvrdma" = "yes" ; then
7490 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7491fi
7492
Laurent Vivier575b22b2016-06-02 22:14:15 +02007493if test "$have_rtnetlink" = "yes" ; then
7494 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7495fi
7496
Klim Kireeved279a02018-01-12 12:01:19 +03007497if test "$libxml2" = "yes" ; then
7498 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7499 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7500 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7501fi
7502
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007503if test "$replication" = "yes" ; then
7504 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7505fi
7506
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007507if test "$have_af_vsock" = "yes" ; then
7508 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7509fi
7510
Christopher Covington4d043512016-12-28 15:04:33 -05007511if test "$have_sysmacros" = "yes" ; then
7512 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7513fi
7514
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007515if test "$have_static_assert" = "yes" ; then
7516 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7517fi
7518
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007519if test "$have_utmpx" = "yes" ; then
7520 echo "HAVE_UTMPX=y" >> $config_host_mak
7521fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007522if test "$have_getrandom" = "yes" ; then
7523 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7524fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007525if test "$ivshmem" = "yes" ; then
7526 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7527fi
Richard Hendersone219c492017-09-28 09:01:23 -07007528if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007529 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7530fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007531if test "$debug_mutex" = "yes" ; then
7532 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7533fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007534
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007535# Hold two types of flag:
7536# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7537# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007538# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007539# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007540if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007541 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007542 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7543elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7544 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7545 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007546fi
7547
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007548if test "$vxhs" = "yes" ; then
7549 echo "CONFIG_VXHS=y" >> $config_host_mak
7550 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7551fi
7552
Junyan He17824402018-07-18 15:47:59 +08007553if test "$libpmem" = "yes" ; then
7554 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7555fi
7556
Jeff Cody2f740132018-11-07 07:36:44 +01007557if test "$bochs" = "yes" ; then
7558 echo "CONFIG_BOCHS=y" >> $config_host_mak
7559fi
7560if test "$cloop" = "yes" ; then
7561 echo "CONFIG_CLOOP=y" >> $config_host_mak
7562fi
7563if test "$dmg" = "yes" ; then
7564 echo "CONFIG_DMG=y" >> $config_host_mak
7565fi
7566if test "$qcow1" = "yes" ; then
7567 echo "CONFIG_QCOW1=y" >> $config_host_mak
7568fi
7569if test "$vdi" = "yes" ; then
7570 echo "CONFIG_VDI=y" >> $config_host_mak
7571fi
7572if test "$vvfat" = "yes" ; then
7573 echo "CONFIG_VVFAT=y" >> $config_host_mak
7574fi
7575if test "$qed" = "yes" ; then
7576 echo "CONFIG_QED=y" >> $config_host_mak
7577fi
7578if test "$parallels" = "yes" ; then
7579 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7580fi
7581if test "$sheepdog" = "yes" ; then
7582 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7583fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007584if test "$fuzzing" = "yes" ; then
7585 if test "$have_fuzzer" = "yes"; then
7586 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer"
7587 FUZZ_CFLAGS=" -fsanitize=address,fuzzer"
7588 CFLAGS=" -fsanitize=address,fuzzer-no-link"
7589 else
7590 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer"
7591 exit 1
7592 fi
7593fi
Jeff Cody2f740132018-11-07 07:36:44 +01007594
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007595if test "$plugins" = "yes" ; then
7596 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7597 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007598 # Copy the export object list to the build dir
7599 if test "$ld_dynamic_list" = "yes" ; then
7600 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7601 ld_symbols=qemu-plugins-ld.symbols
7602 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7603 elif test "$ld_exported_symbols_list" = "yes" ; then
7604 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7605 ld64_symbols=qemu-plugins-ld64.symbols
7606 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7607 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7608 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7609 else
7610 error_exit \
7611 "If \$plugins=yes, either \$ld_dynamic_list or " \
7612 "\$ld_exported_symbols_list should have been set to 'yes'."
7613 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007614fi
7615
Alex Bennéef48e5902020-03-16 17:21:48 +00007616if test -n "$gdb_bin" ; then
7617 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7618fi
7619
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007620if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007621 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007622elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007623 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007624elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007625 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007626elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007627 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007628elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007629 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007630elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007631 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007632else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007633 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007634fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007635
Juan Quintela98ec69a2009-07-16 18:34:18 +02007636echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007637echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007638echo "MAKE=$make" >> $config_host_mak
7639echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007640echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7641echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007642echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7643echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007644echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007645echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Alex Bennée39d87c82020-03-03 15:06:20 +00007646echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007647echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007648if $iasl -h > /dev/null 2>&1; then
7649 echo "IASL=$iasl" >> $config_host_mak
7650fi
Juan Quintela804edf22009-07-27 16:12:49 +02007651echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007652echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007653echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007654echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007655echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007656echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007657echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007658echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007659echo "OBJCOPY=$objcopy" >> $config_host_mak
7660echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007661echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007662echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007663echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007664echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007665echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007666echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007667echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007668echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007669echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007670if test "$sparse" = "yes" ; then
7671 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007672 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007673 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007674 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7675 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7676fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007677echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007678echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007679echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007680echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007681echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007682echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007683echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007684echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007685echo "DSOSUF=$DSOSUF" >> $config_host_mak
7686echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007687echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007688echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7689echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007690echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007691if test "$gcov" = "yes" ; then
7692 echo "CONFIG_GCOV=y" >> $config_host_mak
7693 echo "GCOV=$gcov_tool" >> $config_host_mak
7694fi
Juan Quintela804edf22009-07-27 16:12:49 +02007695
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007696if test "$libudev" != "no"; then
7697 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7698 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7699fi
Alexander Bulekovadc28022020-02-19 23:11:14 -05007700if test "$fuzzing" != "no"; then
7701 echo "CONFIG_FUZZ=y" >> $config_host_mak
7702 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7703 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7704fi
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007705
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007706if test "$edk2_blobs" = "yes" ; then
7707 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7708fi
7709
Peter Maydell6efd7512011-11-30 11:59:04 +00007710# use included Linux headers
7711if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007712 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007713 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007714 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007715 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007716 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007717 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007718 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007719 ;;
7720 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007721 linux_arch=s390
7722 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007723 aarch64)
7724 linux_arch=arm64
7725 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007726 mips64)
7727 linux_arch=mips
7728 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007729 *)
7730 # For most CPUs the kernel architecture name and QEMU CPU name match.
7731 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007732 ;;
7733 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007734 # For non-KVM architectures we will not have asm headers
7735 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7736 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7737 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007738fi
7739
bellard1d14ffa2005-10-30 18:58:22 +00007740for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007741target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007742config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007743target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007744target_aligned_only="no"
7745case "$target_name" in
7746 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7747 target_aligned_only="yes"
7748 ;;
7749esac
bellard97a847b2003-08-10 21:36:04 +00007750target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007751case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007752 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 +00007753 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007754 ;;
7755esac
bellard97a847b2003-08-10 21:36:04 +00007756target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007757target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007758target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007759target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007760case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007761 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007762 target_softmmu="yes"
7763 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007764 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007765 target_user_only="yes"
7766 target_linux_user="yes"
7767 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007768 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007769 target_user_only="yes"
7770 target_bsd_user="yes"
7771 ;;
pbrook9e407a82007-05-26 16:38:53 +00007772 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007773 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007774 exit 1
7775 ;;
7776esac
ths831b7822007-01-18 20:06:33 +00007777
bellard97a847b2003-08-10 21:36:04 +00007778mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007779echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007780
pbrooke5fe0c52006-06-11 13:32:59 +00007781bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007782mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007783interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007784gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007785
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007786TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007787TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007788TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007789
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007790case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007791 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007792 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307793 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007794 ;;
7795 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007796 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007797 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307798 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007799 ;;
7800 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007801 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00007802 ;;
7803 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007804 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007805 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007806 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007807 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007808 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007809 aarch64|aarch64_be)
7810 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007811 TARGET_BASE_ARCH=arm
7812 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007813 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007814 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 +01007815 ;;
aurel322408a522008-04-20 20:19:44 +00007816 cris)
aurel322408a522008-04-20 20:19:44 +00007817 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007818 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007819 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08007820 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007821 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007822 ;;
aurel322408a522008-04-20 20:19:44 +00007823 m68k)
aurel322408a522008-04-20 20:19:44 +00007824 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007825 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00007826 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007827 microblaze|microblazeel)
7828 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007829 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007830 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007831 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007832 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007833 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007834 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007835 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007836 ;;
7837 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007838 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007839 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007840 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007841 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007842 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007843 ;;
7844 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007845 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007846 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007847 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007848 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007849 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007850 moxie)
7851 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007852 nios2)
7853 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007854 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007855 TARGET_ARCH=openrisc
7856 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007857 ;;
aurel322408a522008-04-20 20:19:44 +00007858 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007859 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007860 ;;
aurel322408a522008-04-20 20:19:44 +00007861 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007862 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007863 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307864 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007865 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007866 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007867 ppc64le)
7868 TARGET_ARCH=ppc64
7869 TARGET_BASE_ARCH=ppc
7870 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307871 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007872 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 -05007873 ;;
aurel322408a522008-04-20 20:19:44 +00007874 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007875 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007876 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007877 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007878 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007879 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007880 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007881 riscv32)
7882 TARGET_BASE_ARCH=riscv
7883 TARGET_ABI_DIR=riscv
7884 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007885 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 +13007886 ;;
7887 riscv64)
7888 TARGET_BASE_ARCH=riscv
7889 TARGET_ABI_DIR=riscv
7890 mttcg=yes
Keith Packardae4a70c2020-01-28 15:32:16 -08007891 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 +13007892 ;;
aurel322408a522008-04-20 20:19:44 +00007893 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007894 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007895 bflt="yes"
7896 ;;
7897 sparc)
aurel322408a522008-04-20 20:19:44 +00007898 ;;
7899 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007900 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007901 ;;
7902 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007903 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007904 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007905 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02007906 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007907 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007908 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007909 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007910 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 +01007911 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007912 tilegx)
7913 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007914 tricore)
7915 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007916 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007917 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007918 xtensa|xtensaeb)
7919 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007920 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007921 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007922 ;;
aurel322408a522008-04-20 20:19:44 +00007923 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007924 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007925 ;;
7926esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007927# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7928if [ "$TARGET_BASE_ARCH" = "" ]; then
7929 TARGET_BASE_ARCH=$TARGET_ARCH
7930fi
7931
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007932symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7933
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007934upper() {
7935 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7936}
7937
Stefan Weil89138852016-05-16 15:10:20 +02007938target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007939echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007940echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007941echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007942if [ "$TARGET_ABI_DIR" = "" ]; then
7943 TARGET_ABI_DIR=$TARGET_ARCH
7944fi
Juan Quintela25be2102009-10-07 02:41:00 +02007945echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007946if [ "$HOST_VARIANT_DIR" != "" ]; then
7947 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7948fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007949
7950if supported_xen_target $target; then
7951 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007952 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007953 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007954 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007955 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007956else
7957 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007958fi
7959if supported_kvm_target $target; then
7960 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007961 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7962else
7963 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007964fi
7965if supported_hax_target $target; then
7966 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007967fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007968if supported_hvf_target $target; then
7969 echo "CONFIG_HVF=y" >> $config_target_mak
7970fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007971if supported_whpx_target $target; then
7972 echo "CONFIG_WHPX=y" >> $config_target_mak
7973fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007974if test "$target_aligned_only" = "yes" ; then
7975 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7976fi
bellardde83cd02003-06-15 20:25:43 +00007977if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007978 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007979fi
7980if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007981 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007982 if test "$mttcg" = "yes" ; then
7983 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7984 fi
bellardde83cd02003-06-15 20:25:43 +00007985fi
bellard997344f2003-10-27 21:10:39 +00007986if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007987 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007988 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007989fi
ths831b7822007-01-18 20:06:33 +00007990if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007991 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007992fi
pbrook56aebc82008-10-11 17:55:29 +00007993list=""
7994if test ! -z "$gdb_xml_files" ; then
7995 for x in $gdb_xml_files; do
7996 list="$list $source_path/gdb-xml/$x"
7997 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007998 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007999fi
bellardde83cd02003-06-15 20:25:43 +00008000
Eric Blakee633a5c2019-02-04 20:39:37 -06008001if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02008002 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00008003fi
blueswir184778502008-10-26 20:33:16 +00008004if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02008005 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00008006fi
bellard5b0753e2005-03-01 21:37:28 +00008007
Alex Bennée716a5072018-04-10 12:19:40 +01008008
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008009# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02008010
Juan Quintela4afddb52009-08-03 14:46:45 +02008011cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02008012ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02008013
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008014disas_config() {
8015 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8016 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8017}
8018
Juan Quintela64656022009-08-03 14:46:53 +02008019for i in $ARCH $TARGET_BASE_ARCH ; do
8020 case "$i" in
8021 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008022 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02008023 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05008024 aarch64)
8025 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008026 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05008027 fi
8028 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008029 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008030 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008031 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008032 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00008033 fi
Juan Quintela64656022009-08-03 14:46:53 +02008034 ;;
8035 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008036 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02008037 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07008038 hppa)
8039 disas_config "HPPA"
8040 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07008041 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008042 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02008043 ;;
Michael Walle79368f42012-03-31 19:54:20 +02008044 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008045 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02008046 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008047 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008048 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02008049 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01008050 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008051 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02008052 ;;
8053 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008054 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02008055 if test -n "${cxx}"; then
8056 disas_config "NANOMIPS"
8057 fi
Juan Quintela64656022009-08-03 14:46:53 +02008058 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04008059 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008060 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04008061 ;;
Marek Vasute6717112017-01-18 23:01:46 +01008062 nios2)
8063 disas_config "NIOS2"
8064 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08008065 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008066 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08008067 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008068 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008069 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02008070 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00008071 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13008072 disas_config "RISCV"
8073 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01008074 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008075 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02008076 ;;
8077 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008078 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02008079 ;;
8080 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008081 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02008082 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04008083 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008084 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04008085 ;;
Juan Quintela64656022009-08-03 14:46:53 +02008086 esac
8087done
Stefan Weil9195b2c2011-10-19 07:07:18 +02008088if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07008089 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02008090fi
Juan Quintela64656022009-08-03 14:46:53 +02008091
Juan Quintela6ee71262009-08-03 14:46:47 +02008092case "$ARCH" in
8093alpha)
8094 # Ensure there's only a single GP
8095 cflags="-msmall-data $cflags"
8096;;
8097esac
8098
Juan Quintelad02c1db2009-08-03 14:46:50 +02008099if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02008100 if test "$target_linux_user" = "yes" ; then
8101 cflags="-p $cflags"
8102 ldflags="-p $ldflags"
8103 fi
8104 if test "$target_softmmu" = "yes" ; then
8105 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02008106 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02008107 fi
8108fi
8109
Eric Blakee633a5c2019-02-04 20:39:37 -06008110if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07008111 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02008112fi
Juan Quintelafa282482009-07-22 22:37:39 +02008113
Christian Borntraegere9a35912017-08-23 12:16:23 +02008114# Newer kernels on s390 check for an S390_PGSTE program header and
8115# enable the pgste page table extensions in that case. This makes
8116# the vm.allocate_pgste sysctl unnecessary. We enable this program
8117# header if
8118# - we build on s390x
8119# - we build the system emulation for s390x (qemu-system-s390x)
8120# - KVM is enabled
8121# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06008122if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8123 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02008124 if ld_has --s390-pgste ; then
8125 ldflags="-Wl,--s390-pgste $ldflags"
8126 fi
8127fi
8128
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01008129echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02008130echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02008131
bellard97a847b2003-08-10 21:36:04 +00008132done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00008133
Marc-André Lureaud52c4542019-05-24 15:09:42 +02008134echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8135echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8136
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008137if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008138 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008139fi
Richard Hendersone219c492017-09-28 09:01:23 -07008140if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008141 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008142fi
8143if test -n "$LIBCAPSTONE"; then
8144 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8145fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008146
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008147if test "$numa" = "yes"; then
8148 echo "CONFIG_NUMA=y" >> $config_host_mak
8149fi
8150
John Snowfd0e6052015-03-25 18:57:39 -04008151if test "$ccache_cpp2" = "yes"; then
8152 echo "export CCACHE_CPP2=y" >> $config_host_mak
8153fi
8154
Peter Maydelle29e5c62018-11-02 11:52:38 +00008155# If we're using a separate build tree, set it up now.
8156# DIRS are directories which we simply mkdir in the build tree;
8157# LINKS are things to symlink back into the source tree
8158# (these can be both files and directories).
8159# Caution: do not add files or directories here using wildcards. This
8160# will result in problems later if a new file matching the wildcard is
8161# added to the source tree -- nothing will cause configure to be rerun
8162# so the build tree will be missing the link back to the new file, and
8163# tests might fail. Prefer to keep the relevant files in their own
8164# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008165DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8166DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008167DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008168DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008169DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008170LINKS="Makefile"
8171LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8172LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008173LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008174LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008175LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8176LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8177LINKS="$LINKS pc-bios/qemu-icon.bmp"
8178LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008179LINKS="$LINKS tests/acceptance tests/data"
8180LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008181LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008182for bios_file in \
8183 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008184 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008185 $source_path/pc-bios/*.rom \
8186 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008187 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008188 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008189 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008190 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008191 $source_path/pc-bios/palcode-*
8192do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008193 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008194done
8195mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008196for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008197 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008198 symlink "$source_path/$f" "$f"
8199 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008200done
Paul Brook1ad21342009-05-19 16:17:58 +01008201
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008202(for i in $cross_cc_vars; do
8203 export $i
8204done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008205export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008206$source_path/tests/tcg/configure.sh)
8207
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008208# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008209for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008210 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008211 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008212 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008213 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008214 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008215 echo "CC=$cc" >> $config_mak
8216 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008217 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008218 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008219 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008220 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008221 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008222done
8223
Max Reitz76c75602014-05-24 23:24:56 +02008224# set up qemu-iotests in this build directory
8225iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008226
8227echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8228echo >> "$iotests_common_env"
8229echo "export PYTHON='$python'" >> "$iotests_common_env"
8230
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008231# Save the configure command line for later reuse.
8232cat <<EOD >config.status
8233#!/bin/sh
8234# Generated by configure.
8235# Run this file to recreate the current configuration.
8236# Compiler output produced by configure, useful for debugging
8237# configure, is in config.log if it exists.
8238EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008239
8240preserve_env() {
8241 envname=$1
8242
8243 eval envval=\$$envname
8244
8245 if test -n "$envval"
8246 then
8247 echo "$envname='$envval'" >> config.status
8248 echo "export $envname" >> config.status
8249 else
8250 echo "unset $envname" >> config.status
8251 fi
8252}
8253
8254# Preserve various env variables that influence what
8255# features/build target configure will detect
8256preserve_env AR
8257preserve_env AS
8258preserve_env CC
8259preserve_env CPP
8260preserve_env CXX
8261preserve_env INSTALL
8262preserve_env LD
8263preserve_env LD_LIBRARY_PATH
8264preserve_env LIBTOOL
8265preserve_env MAKE
8266preserve_env NM
8267preserve_env OBJCOPY
8268preserve_env PATH
8269preserve_env PKG_CONFIG
8270preserve_env PKG_CONFIG_LIBDIR
8271preserve_env PKG_CONFIG_PATH
8272preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008273preserve_env SDL2_CONFIG
8274preserve_env SMBD
8275preserve_env STRIP
8276preserve_env WINDRES
8277
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008278printf "exec" >>config.status
8279printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008280echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008281chmod +x config.status
8282
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008283rm -r "$TMPDIR1"