blob: 14172909f039a6bf86b24baf1eb95fcf103c7b1c [file] [log] [blame]
bellard7d132992003-03-06 23:23:54 +00001#!/bin/sh
2#
bellard3ef693a2003-03-23 20:17:16 +00003# qemu configure script (c) 2003 Fabrice Bellard
bellard7d132992003-03-06 23:23:54 +00004#
Peter Maydell8cd05ab2014-05-23 17:07:24 +01005
Cornelia Huck99519e62014-05-28 12:39:17 +02006# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
John Snow5e4dfd32015-10-28 13:56:40 -040011# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
Peter Maydell8cd05ab2014-05-23 17:07:24 +010014# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
bellard7d132992003-03-06 23:23:54 +000025fi
26
Peter Maydell8cd05ab2014-05-23 17:07:24 +010027TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
Don Slutz66518bf2014-01-02 21:12:46 -050029TMPO="${TMPDIR1}/${TMPB}.o"
Peter Maydell9c83ffd2014-02-25 18:27:49 +000030TMPCXX="${TMPDIR1}/${TMPB}.cxx"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010031TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010032TMPMO="${TMPDIR1}/${TMPB}.mo"
Emilio G. Cota26fffe22018-10-21 13:56:29 -040033TMPTXT="${TMPDIR1}/${TMPB}.txt"
bellard7d132992003-03-06 23:23:54 +000034
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020035rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000036
Peter Maydellb48e3612011-11-23 17:26:44 +000037# Print a helpful header at the top of config.log
38echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000039printf "# Configured with:" >> config.log
40printf " '%s'" "$0" "$@" >> config.log
41echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000042echo "#" >> config.log
43
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020044print_error() {
45 (echo
Peter Maydell76ad07a2013-04-08 12:11:26 +010046 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020051 echo) >&2
52}
53
54error_exit() {
55 print_error "$@"
Peter Maydell76ad07a2013-04-08 12:11:26 +010056 exit 1
57}
58
Peter Maydell9c83ffd2014-02-25 18:27:49 +000059do_compiler() {
60 # Run the compiler, capturing its output to the log. First argument
61 # is compiler binary to execute.
62 local compiler="$1"
63 shift
Ian Jackson8bbe05d2017-09-25 16:41:03 +010064 if test -n "$BASH_VERSION"; then eval '
65 echo >>config.log "
66funcs: ${FUNCNAME[*]}
67lines: ${BASH_LINENO[*]}"
68 '; fi
Peter Maydell9c83ffd2014-02-25 18:27:49 +000069 echo $compiler "$@" >> config.log
70 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010071 # Test passed. If this is an --enable-werror build, rerun
72 # the test with -Werror and bail out if it fails. This
73 # makes warning-generating-errors in configure test code
74 # obvious to developers.
75 if test "$werror" != "yes"; then
76 return 0
77 fi
78 # Don't bother rerunning the compile if we were already using -Werror
79 case "$*" in
80 *-Werror*)
81 return 0
82 ;;
83 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000084 echo $compiler -Werror "$@" >> config.log
85 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010086 error_exit "configure test passed without -Werror but failed with -Werror." \
87 "This is probably a bug in the configure script. The failing command" \
88 "will be at the bottom of config.log." \
89 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010090}
91
Peter Maydell9c83ffd2014-02-25 18:27:49 +000092do_cc() {
93 do_compiler "$cc" "$@"
94}
95
96do_cxx() {
97 do_compiler "$cxx" "$@"
98}
99
100update_cxxflags() {
101 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
102 # options which some versions of GCC's C++ compiler complain about
103 # because they only make sense for C programs.
Paolo Bonzini53422042019-07-29 12:50:04 +0200104 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100105
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000106 for arg in $QEMU_CFLAGS; do
107 case $arg in
108 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
110 ;;
Thomas Huth7be41672019-01-07 11:25:22 +0100111 -std=gnu99)
112 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
113 ;;
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000114 *)
115 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
116 ;;
117 esac
118 done
119}
120
Juan Quintela52166aa2009-08-03 14:46:03 +0200121compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400122 local_cflags="$1"
123 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200124}
125
126compile_prog() {
127 local_cflags="$1"
128 local_ldflags="$2"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100129 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200130}
131
Paolo Bonzini11568d62010-12-23 11:43:58 +0100132# symbolically link $1 to $2. Portable version of "ln -sf".
133symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100134 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800135 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100136 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100137}
138
Loïc Minier0dba6192010-01-28 21:26:51 +0000139# check whether a command is available to this shell (may be either an
140# executable or a builtin)
141has() {
142 type "$1" >/dev/null 2>&1
143}
144
145# search for an executable in PATH
146path_of() {
147 local_command="$1"
148 local_ifs="$IFS"
149 local_dir=""
150
151 # pathname has a dir component?
152 if [ "${local_command#*/}" != "$local_command" ]; then
153 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
154 echo "$local_command"
155 return 0
156 fi
157 fi
158 if [ -z "$local_command" ]; then
159 return 1
160 fi
161
162 IFS=:
163 for local_dir in $PATH; do
164 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
165 echo "$local_dir/$local_command"
166 IFS="${local_ifs:-$(printf ' \t\n')}"
167 return 0
168 fi
169 done
170 # not found
171 IFS="${local_ifs:-$(printf ' \t\n')}"
172 return 1
173}
174
Lluís Vilanova5b808272014-05-27 15:02:14 +0200175have_backend () {
176 echo "$trace_backends" | grep "$1" >/dev/null
177}
178
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200179glob() {
180 eval test -z '"${1#'"$2"'}"'
181}
182
183supported_hax_target() {
184 test "$hax" = "yes" || return 1
185 glob "$1" "*-softmmu" || return 1
186 case "${1%-softmmu}" in
187 i386|x86_64)
188 return 0
189 ;;
190 esac
191 return 1
192}
193
194supported_kvm_target() {
195 test "$kvm" = "yes" || return 1
196 glob "$1" "*-softmmu" || return 1
197 case "${1%-softmmu}:$cpu" in
198 arm:arm | aarch64:aarch64 | \
199 i386:i386 | i386:x86_64 | i386:x32 | \
200 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
201 mips:mips | mipsel:mips | \
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700202 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200203 s390x:s390x)
204 return 0
205 ;;
206 esac
207 return 1
208}
209
210supported_xen_target() {
211 test "$xen" = "yes" || return 1
212 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200213 # Only i386 and x86_64 provide the xenpv machine.
214 case "${1%-softmmu}" in
215 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200216 return 0
217 ;;
218 esac
219 return 1
220}
221
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500222supported_hvf_target() {
223 test "$hvf" = "yes" || return 1
224 glob "$1" "*-softmmu" || return 1
225 case "${1%-softmmu}" in
226 x86_64)
227 return 0
228 ;;
229 esac
230 return 1
231}
232
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800233supported_whpx_target() {
234 test "$whpx" = "yes" || return 1
235 glob "$1" "*-softmmu" || return 1
236 case "${1%-softmmu}" in
237 i386|x86_64)
238 return 0
239 ;;
240 esac
241 return 1
242}
243
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200244supported_target() {
245 case "$1" in
246 *-softmmu)
247 ;;
248 *-linux-user)
249 if test "$linux" != "yes"; then
250 print_error "Target '$target' is only available on a Linux host"
251 return 1
252 fi
253 ;;
254 *-bsd-user)
255 if test "$bsd" != "yes"; then
256 print_error "Target '$target' is only available on a BSD host"
257 return 1
258 fi
259 ;;
260 *)
261 print_error "Invalid target name '$target'"
262 return 1
263 ;;
264 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200265 test "$tcg" = "yes" && return 0
266 supported_kvm_target "$1" && return 0
267 supported_xen_target "$1" && return 0
268 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500269 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800270 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200271 print_error "TCG disabled, but hardware accelerator not available for '$target'"
272 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200273}
274
Christian Borntraegere9a35912017-08-23 12:16:23 +0200275
276ld_has() {
277 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
278}
279
Peter Maydell79d77bc2019-04-29 17:35:57 +0100280# make source path absolute
Antonio Ospite14211822019-05-26 16:47:46 +0200281source_path=$(cd "$(dirname -- "$0")"; pwd)
282
Antonio Ospite4ace32e2019-05-26 16:47:47 +0200283if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
284then
285 error_exit "main directory cannot contain spaces nor colons"
286fi
287
Antonio Ospite14211822019-05-26 16:47:46 +0200288# default parameters
Juan Quintela2ff6b912009-08-03 14:45:55 +0200289cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300290iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000291interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000292static="no"
bellard7d132992003-03-06 23:23:54 +0000293cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000294audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800295block_drv_rw_whitelist=""
296block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000297host_cc="cc"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +0100298libs_cpu=""
Juan Quintela73da3752009-08-03 14:46:26 +0200299libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200300libs_tools=""
malcd5631632009-10-10 01:13:41 +0400301audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500302libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100303debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100304stack_protector=""
Alex Bennéeafc3a8f2019-11-28 16:35:24 +0100305use_containers="yes"
aliguoriac0df512008-12-29 17:14:15 +0000306
Daniel P. Berrange92712822017-09-29 11:11:58 +0100307if test -e "$source_path/.git"
308then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100309 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100310 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500311 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
312 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100313else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100314 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100315 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100316
317 if ! test -f "$source_path/ui/keycodemapdb/README"
318 then
319 echo
320 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
321 echo
322 echo "This is not a GIT checkout but module content appears to"
323 echo "be missing. Do not use 'git archive' or GitHub download links"
324 echo "to acquire QEMU source archives. Non-GIT builds are only"
325 echo "supported with source archives linked from:"
326 echo
Peter Maydella3e3b522019-07-22 14:07:39 +0100327 echo " https://www.qemu.org/download/#source"
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100328 echo
329 echo "Developers working with GIT can use scripts/archive-source.sh"
330 echo "if they need to create valid source archives."
331 echo
332 exit 1
333 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100334fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100335git="git"
aliguoriac0df512008-12-29 17:14:15 +0000336
Stefan Weilafb63eb2012-09-26 22:04:38 +0200337# Don't accept a target_list environment variable.
338unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000339unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100340
341# Default value for a variable defining feature "foo".
342# * foo="no" feature will only be used if --enable-foo arg is given
343# * foo="" feature will be searched for, and if found, will be used
344# unless --disable-foo is given
345# * foo="yes" this value will only be set by --enable-foo flag.
346# feature will searched for,
347# if not found, configure exits with error
348#
349# Always add --enable-foo and --disable-foo command line args.
350# Distributions want to ensure that several features are compiled in, and it
351# is impossible without a --enable-foo that exits if a feature is not found.
352
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353brlapi=""
354curl=""
355curses=""
356docs=""
357fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100358netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100359sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000360sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530361virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200362mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100363vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366vnc_sasl=""
367vnc_jpeg=""
368vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200369xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100370xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000371xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000372xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100373linux_aio=""
Aarushi Mehtac10dd852020-01-20 14:18:44 +0000374linux_io_uring=""
Corey Bryant47e98652012-01-26 09:42:26 -0500375cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100376attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200377libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100378xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200379tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100380membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100381vhost_net=""
382vhost_crypto=""
383vhost_scsi=""
384vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200385vhost_user=""
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +0100386vhost_user_fs=""
Bradd41a75a2011-07-26 23:11:26 -0400387kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100388hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500389hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800390whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400391rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300392pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100393gprof="no"
394debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100395debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100396sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500397fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100398strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200399tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100400bigendian="no"
401mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000402gcov="no"
403gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100404EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800405DSOSUF=".so"
406LDFLAGS_SHARED="-shared"
407modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100408prefix="/usr/local"
409mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300410datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200411firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300412qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100413bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300414libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400415libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200416includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100417sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300418local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100419confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100420slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100421oss_lib=""
422bsd="no"
423linux="no"
424solaris="no"
425profiler="no"
426cocoa="no"
427softmmu="yes"
428linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100429bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100430blobs="yes"
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +0100431edk2_blobs="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100432pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200433pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200434qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300435trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100436trace_file="trace"
437spice=""
438rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200439smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100440libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200441usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100442opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100443opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000444cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100445avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300446zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700447capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200448lzo=""
449snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100450bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200451lzfse=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400452guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400453guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500454guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300455guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400456vss_win32_sdk=""
457win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100458want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100459libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100460libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100461coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200462coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200463debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400464crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300465seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530466glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400467glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530468glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530469glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530470glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100471glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100472glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600473gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200474gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100475tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100476gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100477nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100478nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100479gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800480gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100481gcrypt_xts="no"
482qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100483auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100484vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200485virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800486tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200487libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100488live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800489numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800490tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200491jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800492replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700493vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100494bochs="yes"
495cloop="yes"
496dmg="yes"
497qcow1="yes"
498vdi="yes"
499vvfat="yes"
500qed="yes"
501parallels="yes"
502sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300503libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200504debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800505libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800506default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100507plugins="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100508
Peter Maydell898be3e2017-03-21 14:31:57 +0000509supported_cpu="no"
510supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100511bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800512malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000513
aliguoriac0df512008-12-29 17:14:15 +0000514# parse CC options first
515for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200516 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000517 case "$opt" in
518 --cross-prefix=*) cross_prefix="$optarg"
519 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100520 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000521 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400522 --cxx=*) CXX="$optarg"
523 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200524 --cpu=*) cpu="$optarg"
525 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100526 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100527 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200528 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100529 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100530 ;;
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100531 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100532 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200533 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100534 --enable-debug-info) debug_info="yes"
535 ;;
536 --disable-debug-info) debug_info="no"
537 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100538 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
539 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100540 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
541 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200542 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100543 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100544 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200545 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100546 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200547 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100548 ;;
aliguoriac0df512008-12-29 17:14:15 +0000549 esac
550done
aliguoriac0df512008-12-29 17:14:15 +0000551# OS specific
552# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100553# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000554
Peter Maydelle49d0212012-12-07 15:39:13 +0000555# Preferred compiler:
556# ${CC} (if set)
557# ${cross_prefix}gcc (if cross-prefix specified)
558# system compiler
559if test -z "${CC}${cross_prefix}"; then
560 cc="$host_cc"
561else
562 cc="${CC-${cross_prefix}gcc}"
563fi
564
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400565if test -z "${CXX}${cross_prefix}"; then
566 cxx="c++"
567else
568 cxx="${CXX-${cross_prefix}g++}"
569fi
570
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500571ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700572as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700573ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000574cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500575objcopy="${OBJCOPY-${cross_prefix}objcopy}"
576ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800577ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200578nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500579strip="${STRIP-${cross_prefix}strip}"
580windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300581pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
582query_pkg_config() {
583 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
584}
585pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000586sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
Peter Maydell2eb054c2020-02-13 17:56:18 +0000587sphinx_build=sphinx-build
aliguoriac0df512008-12-29 17:14:15 +0000588
Peter Maydell45d285a2013-10-21 21:03:06 +0100589# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
590ARFLAGS="${ARFLAGS-rv}"
591
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200592# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100593# We use -fwrapv to tell the compiler that we require a C dialect where
594# left shift of signed integers is well defined and has the expected
595# 2s-complement style results. (Both clang and gcc agree that it
596# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100597QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400598QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100599QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200600QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200601QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Paolo Bonzini53422042019-07-29 12:50:04 +0200602QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100603if test "$debug_info" = "yes"; then
604 CFLAGS="-g $CFLAGS"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100605fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200606
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300607# running configure in the source tree?
608# we know that's the case if configure is there.
609if test -f "./configure"; then
610 pwd_is_source_path="y"
611else
612 pwd_is_source_path="n"
613fi
614
aliguoriac0df512008-12-29 17:14:15 +0000615check_define() {
616cat > $TMPC <<EOF
617#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000618#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000619#endif
620int main(void) { return 0; }
621EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200622 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000623}
624
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200625check_include() {
626cat > $TMPC <<EOF
627#include <$1>
628int main(void) { return 0; }
629EOF
630 compile_object
631}
632
John Snow93b25862015-03-25 18:57:37 -0400633write_c_skeleton() {
634 cat > $TMPC <<EOF
635int main(void) { return 0; }
636EOF
637}
638
Peter Maydellbbea4052012-08-14 15:35:34 +0100639if check_define __linux__ ; then
640 targetos="Linux"
641elif check_define _WIN32 ; then
642 targetos='MINGW32'
643elif check_define __OpenBSD__ ; then
644 targetos='OpenBSD'
645elif check_define __sun__ ; then
646 targetos='SunOS'
647elif check_define __HAIKU__ ; then
648 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100649elif check_define __FreeBSD__ ; then
650 targetos='FreeBSD'
651elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
652 targetos='GNU/kFreeBSD'
653elif check_define __DragonFly__ ; then
654 targetos='DragonFly'
655elif check_define __NetBSD__; then
656 targetos='NetBSD'
657elif check_define __APPLE__; then
658 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100659else
Peter Maydell951fedf2017-07-13 16:15:32 +0100660 # This is a fatal error, but don't report it yet, because we
661 # might be going to just print the --help text, or it might
662 # be the result of a missing compiler.
663 targetos='bogus'
664 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100665fi
666
667# Some host OSes need non-standard checks for which CPU to use.
668# Note that these checks are broken for cross-compilation: if you're
669# cross-compiling to one of these OSes then you'll need to specify
670# the correct CPU with the --cpu option.
671case $targetos in
672Darwin)
673 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
674 # run 64-bit userspace code.
675 # If the user didn't specify a CPU explicitly and the kernel says this is
676 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
677 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
678 cpu="x86_64"
679 fi
680 ;;
681SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200682 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100683 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
684 cpu="x86_64"
685 fi
686esac
687
Juan Quintela2ff6b912009-08-03 14:45:55 +0200688if test ! -z "$cpu" ; then
689 # command line argument
690 :
691elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000692 cpu="i386"
693elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700694 if check_define __ILP32__ ; then
695 cpu="x32"
696 else
697 cpu="x86_64"
698 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000699elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000700 if check_define __arch64__ ; then
701 cpu="sparc64"
702 else
703 cpu="sparc"
704 fi
malcfdf7ed92009-01-14 18:39:52 +0000705elif check_define _ARCH_PPC ; then
706 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700707 if check_define _LITTLE_ENDIAN ; then
708 cpu="ppc64le"
709 else
710 cpu="ppc64"
711 fi
malcfdf7ed92009-01-14 18:39:52 +0000712 else
713 cpu="ppc"
714 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200715elif check_define __mips__ ; then
716 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200717elif check_define __s390__ ; then
718 if check_define __s390x__ ; then
719 cpu="s390x"
720 else
721 cpu="s390"
722 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000723elif check_define __riscv ; then
724 if check_define _LP64 ; then
725 cpu="riscv64"
726 else
727 cpu="riscv32"
728 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100729elif check_define __arm__ ; then
730 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100731elif check_define __aarch64__ ; then
732 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000733else
Stefan Weil89138852016-05-16 15:10:20 +0200734 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000735fi
736
Peter Maydell359bc952011-12-24 13:07:25 +0000737ARCH=
738# Normalise host CPU name and set ARCH.
739# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000740case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200741 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000742 supported_cpu="yes"
743 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700744 ppc64le)
745 ARCH="ppc64"
746 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700747 ;;
bellard7d132992003-03-06 23:23:54 +0000748 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000749 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000750 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000751 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000752 x86_64|amd64)
753 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000754 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000755 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100756 armv*b|armv*l|arm)
757 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000758 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000759 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100760 aarch64)
761 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000762 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100763 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200764 mips*)
765 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000766 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200767 ;;
blueswir131422552007-04-16 18:27:06 +0000768 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000769 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100770 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000771 ;;
bellard7d132992003-03-06 23:23:54 +0000772 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000773 # This will result in either an error or falling back to TCI later
774 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000775 ;;
776esac
Peter Maydell359bc952011-12-24 13:07:25 +0000777if test -z "$ARCH"; then
778 ARCH="$cpu"
779fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200780
bellard7d132992003-03-06 23:23:54 +0000781# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200782
Stacey Sonadfc3e92014-06-08 09:57:22 -0700783# host *BSD for user mode
784HOST_VARIANT_DIR=""
785
bellard7d132992003-03-06 23:23:54 +0000786case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000787MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200788 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100789 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100790 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200791 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200792 if check_include dsound.h; then
793 audio_drv_list="dsound"
794 else
795 audio_drv_list=""
796 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000797 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000798;;
ths5c40d2b2007-06-23 16:03:36 +0000799GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100800 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100801 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200802 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000803;;
bellard7d3505c2004-05-12 19:32:15 +0000804FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200805 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100806 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100807 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200808 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100809 # needed for kinfo_getvmmap(3) in libutil.h
810 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500811 # needed for kinfo_getproc
812 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100813 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700814 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000815 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000816;;
blueswir1c5e97232009-03-07 20:06:23 +0000817DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200818 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100819 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100820 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200821 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700822 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000823;;
bellard7d3505c2004-05-12 19:32:15 +0000824NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200825 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100826 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100827 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100828 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200829 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200830 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700831 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200832 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000833;;
834OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200835 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100836 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100837 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200838 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700839 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500840 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000841;;
bellard83fb7ad2004-07-05 21:25:26 +0000842Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200843 bsd="yes"
844 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100845 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500846 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800847 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200848 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200849 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100850 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200851 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200852 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100853 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200854 audio_possible_drivers="coreaudio sdl"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +0100855 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200856 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100857 # Disable attempts to use ObjectiveC features in os/object.h since they
858 # won't work when we're compiling with gcc as a C compiler.
859 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700860 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000861 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000862;;
bellardec530c82006-04-25 22:36:06 +0000863SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200864 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100865 make="${MAKE-gmake}"
866 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400867 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200868 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100869 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200870 fi
871 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000872# needed for CMSG_ macros in sys/socket.h
873 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
874# needed for TIOCWIN* defines in termios.h
875 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200876 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200877 solarisnetlibs="-lsocket -lnsl -lresolv"
878 LIBS="$solarisnetlibs $LIBS"
879 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000880;;
Andreas Färber179cf402010-09-20 00:50:43 +0200881Haiku)
882 haiku="yes"
883 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
884 LIBS="-lposix_error_mapper -lnetwork $LIBS"
885;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000886Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100887 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200888 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200889 linux="yes"
890 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200891 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600892 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000893 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200894 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000895;;
bellard7d132992003-03-06 23:23:54 +0000896esac
897
bellard7d3505c2004-05-12 19:32:15 +0000898if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000899 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200900 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000901 fi
bellard7d3505c2004-05-12 19:32:15 +0000902fi
903
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100904: ${make=${MAKE-make}}
905: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000906# We prefer python 3.x. A bare 'python' is traditionally
907# python 2.x, but some distros have it as python 3.x, so
Eduardo Habkostddf90692019-10-16 19:42:37 -0300908# we check that too
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000909python=
Eduardo Habkostddf90692019-10-16 19:42:37 -0300910for binary in "${PYTHON-python3}" python
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000911do
912 if has "$binary"
913 then
Paolo Bonzini95c5f2d2019-06-10 12:03:44 +0200914 python=$(command -v "$binary")
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000915 break
916 fi
917done
Brade2d88302011-09-02 16:53:28 -0400918: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100919
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100920# Default objcc to clang if available, otherwise use CC
921if has clang; then
922 objcc=clang
923else
924 objcc="$cc"
925fi
926
Juan Quintela3457a3f2009-08-03 14:46:07 +0200927if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200928 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800929 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100930 # MinGW needs -mthreads for TLS and macro _MT.
931 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +0100932 LIBS="-lwinmm -lws2_32 $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400933 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100934 if compile_prog "" "-liberty" ; then
935 LIBS="-liberty $LIBS"
936 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200937 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200938 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300939 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300940 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200941 bindir="\${prefix}"
942 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200943 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200944 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300945 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200946fi
947
Anthony Liguori487fefd2009-06-11 13:28:25 -0500948werror=""
bellard85aa5182007-11-11 20:17:03 +0000949
bellard7d132992003-03-06 23:23:54 +0000950for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200951 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000952 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000953 --help|-h) show_help=yes
954 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400955 --version|-V) exec cat $source_path/VERSION
956 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000957 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000958 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000959 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000960 ;;
aliguoriac0df512008-12-29 17:14:15 +0000961 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000962 ;;
aliguoriac0df512008-12-29 17:14:15 +0000963 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000964 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000965 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000966 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400967 --cxx=*)
968 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200969 --iasl=*) iasl="$optarg"
970 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100971 --objcc=*) objcc="$optarg"
972 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000973 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000974 ;;
pbrook6a882642006-04-17 13:57:12 +0000975 --install=*) install="$optarg"
976 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000977 --python=*) python="$optarg"
978 ;;
Peter Maydell2eb054c2020-02-13 17:56:18 +0000979 --sphinx-build=*) sphinx_build="$optarg"
980 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000981 --gcov=*) gcov_tool="$optarg"
982 ;;
Brade2d88302011-09-02 16:53:28 -0400983 --smbd=*) smbd="$optarg"
984 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200985 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000986 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100987 --extra-cxxflags=*)
988 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200989 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000990 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100991 --enable-debug-info)
992 ;;
993 --disable-debug-info)
994 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100995 --cross-cc-*)
996 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800997 --enable-modules)
998 modules="yes"
999 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001000 --disable-modules)
1001 modules="no"
1002 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001003 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001004 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001005 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001006 if test "$target_list_exclude"; then
1007 error_exit "Can't mix --target-list with --target-list-exclude"
1008 fi
1009 ;;
1010 --target-list-exclude=*) target_list_exclude="$optarg"
1011 if test "$target_list"; then
1012 error_exit "Can't mix --target-list-exclude with --target-list"
1013 fi
bellardde83cd02003-06-15 20:25:43 +00001014 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +02001015 --enable-trace-backends=*) trace_backends="$optarg"
1016 ;;
1017 # XXX: backwards compatibility
1018 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001019 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001020 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001021 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001022 --with-default-devices) default_devices="yes"
1023 ;;
1024 --without-default-devices) default_devices="no"
1025 ;;
bellard7d132992003-03-06 23:23:54 +00001026 --enable-gprof) gprof="yes"
1027 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001028 --enable-gcov) gcov="yes"
1029 ;;
Loïc Minier79427692010-01-31 12:23:45 +01001030 --static)
1031 static="yes"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001032 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001033 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001034 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001035 --mandir=*) mandir="$optarg"
1036 ;;
1037 --bindir=*) bindir="$optarg"
1038 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001039 --libdir=*) libdir="$optarg"
1040 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001041 --libexecdir=*) libexecdir="$optarg"
1042 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001043 --includedir=*) includedir="$optarg"
1044 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001045 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001046 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001047 --with-confsuffix=*) confsuffix="$optarg"
1048 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001049 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001050 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001051 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001052 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001053 --localstatedir=*) local_statedir="$optarg"
1054 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001055 --firmwarepath=*) firmwarepath="$optarg"
1056 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001057 --host=*|--build=*|\
1058 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001059 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001060 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1061 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1062 # These switches are silently ignored, for compatibility with
1063 # autoconf-generated configure scripts. This allows QEMU's
1064 # configure to be used by RPM and similar macros that set
1065 # lots of directory switches by default.
1066 ;;
bellard97a847b2003-08-10 21:36:04 +00001067 --disable-sdl) sdl="no"
1068 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001069 --enable-sdl) sdl="yes"
1070 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001071 --disable-sdl-image) sdl_image="no"
1072 ;;
1073 --enable-sdl-image) sdl_image="yes"
1074 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001075 --disable-qom-cast-debug) qom_cast_debug="no"
1076 ;;
1077 --enable-qom-cast-debug) qom_cast_debug="yes"
1078 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301079 --disable-virtfs) virtfs="no"
1080 ;;
1081 --enable-virtfs) virtfs="yes"
1082 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001083 --disable-mpath) mpath="no"
1084 ;;
1085 --enable-mpath) mpath="yes"
1086 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001087 --disable-vnc) vnc="no"
1088 ;;
1089 --enable-vnc) vnc="yes"
1090 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001091 --oss-lib=*) oss_lib="$optarg"
1092 ;;
malc0c58ac12008-06-25 21:04:05 +00001093 --audio-drv-list=*) audio_drv_list="$optarg"
1094 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001095 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001096 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001097 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001098 ;;
aurel32f8393942009-04-13 18:45:38 +00001099 --enable-debug-tcg) debug_tcg="yes"
1100 ;;
1101 --disable-debug-tcg) debug_tcg="no"
1102 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001103 --enable-debug)
1104 # Enable debugging options that aren't excessively noisy
1105 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001106 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001107 debug="yes"
1108 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001109 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001110 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001111 --enable-sanitizers) sanitizers="yes"
1112 ;;
1113 --disable-sanitizers) sanitizers="no"
1114 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001115 --enable-sparse) sparse="yes"
1116 ;;
1117 --disable-sparse) sparse="no"
1118 ;;
aliguori1625af82009-04-05 17:41:02 +00001119 --disable-strip) strip_opt="no"
1120 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001121 --disable-vnc-sasl) vnc_sasl="no"
1122 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001123 --enable-vnc-sasl) vnc_sasl="yes"
1124 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001125 --disable-vnc-jpeg) vnc_jpeg="no"
1126 ;;
1127 --enable-vnc-jpeg) vnc_jpeg="yes"
1128 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001129 --disable-vnc-png) vnc_png="no"
1130 ;;
1131 --enable-vnc-png) vnc_png="yes"
1132 ;;
bellard443f1372004-06-04 11:13:20 +00001133 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001134 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001135 --enable-slirp=git) slirp="git"
1136 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001137 --enable-slirp=system) slirp="system"
1138 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001139 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001140 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001141 --enable-vde) vde="yes"
1142 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001143 --disable-netmap) netmap="no"
1144 ;;
1145 --enable-netmap) netmap="yes"
1146 ;;
aliguorie37630c2009-04-22 15:19:10 +00001147 --disable-xen) xen="no"
1148 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001149 --enable-xen) xen="yes"
1150 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001151 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1152 ;;
1153 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1154 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001155 --disable-brlapi) brlapi="no"
1156 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001157 --enable-brlapi) brlapi="yes"
1158 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001159 --disable-kvm) kvm="no"
1160 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001161 --enable-kvm) kvm="yes"
1162 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001163 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001164 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001165 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001166 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001167 --disable-hvf) hvf="no"
1168 ;;
1169 --enable-hvf) hvf="yes"
1170 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001171 --disable-whpx) whpx="no"
1172 ;;
1173 --enable-whpx) whpx="yes"
1174 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001175 --disable-tcg-interpreter) tcg_interpreter="no"
1176 ;;
1177 --enable-tcg-interpreter) tcg_interpreter="yes"
1178 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001179 --disable-cap-ng) cap_ng="no"
1180 ;;
1181 --enable-cap-ng) cap_ng="yes"
1182 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001183 --disable-tcg) tcg="no"
1184 ;;
1185 --enable-tcg) tcg="yes"
1186 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001187 --disable-malloc-trim) malloc_trim="no"
1188 ;;
1189 --enable-malloc-trim) malloc_trim="yes"
1190 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001191 --disable-spice) spice="no"
1192 ;;
1193 --enable-spice) spice="yes"
1194 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001195 --disable-libiscsi) libiscsi="no"
1196 ;;
1197 --enable-libiscsi) libiscsi="yes"
1198 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001199 --disable-libnfs) libnfs="no"
1200 ;;
1201 --enable-libnfs) libnfs="yes"
1202 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001203 --enable-profiler) profiler="yes"
1204 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001205 --disable-cocoa) cocoa="no"
1206 ;;
malcc2de5c92008-06-28 19:13:06 +00001207 --enable-cocoa)
1208 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001209 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001210 ;;
pbrookcad25d62006-03-19 16:31:11 +00001211 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001212 ;;
pbrookcad25d62006-03-19 16:31:11 +00001213 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001214 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001215 --disable-user)
1216 linux_user="no" ;
1217 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001218 ;;
1219 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001220 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001221 ;;
ths831b7822007-01-18 20:06:33 +00001222 --enable-linux-user) linux_user="yes"
1223 ;;
blueswir184778502008-10-26 20:33:16 +00001224 --disable-bsd-user) bsd_user="no"
1225 ;;
1226 --enable-bsd-user) bsd_user="yes"
1227 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001228 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001229 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001230 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001231 ;;
bellard85aa5182007-11-11 20:17:03 +00001232 --enable-werror) werror="yes"
1233 ;;
1234 --disable-werror) werror="no"
1235 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001236 --enable-stack-protector) stack_protector="yes"
1237 ;;
1238 --disable-stack-protector) stack_protector="no"
1239 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001240 --disable-curses) curses="no"
1241 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001242 --enable-curses) curses="yes"
1243 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001244 --disable-iconv) iconv="no"
1245 ;;
1246 --enable-iconv) iconv="yes"
1247 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001248 --disable-curl) curl="no"
1249 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001250 --enable-curl) curl="yes"
1251 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001252 --disable-fdt) fdt="no"
1253 ;;
1254 --enable-fdt) fdt="yes"
1255 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001256 --disable-linux-aio) linux_aio="no"
1257 ;;
1258 --enable-linux-aio) linux_aio="yes"
1259 ;;
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001260 --disable-linux-io-uring) linux_io_uring="no"
1261 ;;
1262 --enable-linux-io-uring) linux_io_uring="yes"
1263 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001264 --disable-attr) attr="no"
1265 ;;
1266 --enable-attr) attr="yes"
1267 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001268 --disable-membarrier) membarrier="no"
1269 ;;
1270 --enable-membarrier) membarrier="yes"
1271 ;;
ths77755342008-11-27 15:45:16 +00001272 --disable-blobs) blobs="no"
1273 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001274 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001275 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001276 --with-coroutine=*) coroutine="$optarg"
1277 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001278 --disable-coroutine-pool) coroutine_pool="no"
1279 ;;
1280 --enable-coroutine-pool) coroutine_pool="yes"
1281 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001282 --enable-debug-stack-usage) debug_stack_usage="yes"
1283 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001284 --enable-crypto-afalg) crypto_afalg="yes"
1285 ;;
1286 --disable-crypto-afalg) crypto_afalg="no"
1287 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001288 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001289 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001290 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001291 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001292 --disable-vhost-net) vhost_net="no"
1293 ;;
1294 --enable-vhost-net) vhost_net="yes"
1295 ;;
Gonglei042cea22018-03-01 21:46:28 +08001296 --disable-vhost-crypto) vhost_crypto="no"
1297 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001298 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001299 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001300 --disable-vhost-scsi) vhost_scsi="no"
1301 ;;
1302 --enable-vhost-scsi) vhost_scsi="yes"
1303 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001304 --disable-vhost-vsock) vhost_vsock="no"
1305 ;;
1306 --enable-vhost-vsock) vhost_vsock="yes"
1307 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001308 --disable-vhost-user-fs) vhost_user_fs="no"
1309 ;;
1310 --enable-vhost-user-fs) vhost_user_fs="yes"
1311 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001312 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001313 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001314 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001315 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001316 --disable-rbd) rbd="no"
1317 ;;
1318 --enable-rbd) rbd="yes"
1319 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001320 --disable-xfsctl) xfs="no"
1321 ;;
1322 --enable-xfsctl) xfs="yes"
1323 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001324 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001325 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001326 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001327 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001328 --disable-libusb) libusb="no"
1329 ;;
1330 --enable-libusb) libusb="yes"
1331 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001332 --disable-usb-redir) usb_redir="no"
1333 ;;
1334 --enable-usb-redir) usb_redir="yes"
1335 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001336 --disable-zlib-test) zlib="no"
1337 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001338 --disable-lzo) lzo="no"
1339 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001340 --enable-lzo) lzo="yes"
1341 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001342 --disable-snappy) snappy="no"
1343 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001344 --enable-snappy) snappy="yes"
1345 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001346 --disable-bzip2) bzip2="no"
1347 ;;
1348 --enable-bzip2) bzip2="yes"
1349 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001350 --enable-lzfse) lzfse="yes"
1351 ;;
1352 --disable-lzfse) lzfse="no"
1353 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001354 --enable-guest-agent) guest_agent="yes"
1355 ;;
1356 --disable-guest-agent) guest_agent="no"
1357 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001358 --enable-guest-agent-msi) guest_agent_msi="yes"
1359 ;;
1360 --disable-guest-agent-msi) guest_agent_msi="no"
1361 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001362 --with-vss-sdk) vss_win32_sdk=""
1363 ;;
1364 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1365 ;;
1366 --without-vss-sdk) vss_win32_sdk="no"
1367 ;;
1368 --with-win-sdk) win_sdk=""
1369 ;;
1370 --with-win-sdk=*) win_sdk="$optarg"
1371 ;;
1372 --without-win-sdk) win_sdk="no"
1373 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001374 --enable-tools) want_tools="yes"
1375 ;;
1376 --disable-tools) want_tools="no"
1377 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001378 --enable-seccomp) seccomp="yes"
1379 ;;
1380 --disable-seccomp) seccomp="no"
1381 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301382 --disable-glusterfs) glusterfs="no"
1383 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001384 --disable-avx2) avx2_opt="no"
1385 ;;
1386 --enable-avx2) avx2_opt="yes"
1387 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301388 --enable-glusterfs) glusterfs="yes"
1389 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001390 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1391 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001392 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001393 --enable-vhdx|--disable-vhdx)
1394 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1395 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001396 --enable-uuid|--disable-uuid)
1397 echo "$0: $opt is obsolete, UUID support is always built" >&2
1398 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001399 --disable-gtk) gtk="no"
1400 ;;
1401 --enable-gtk) gtk="yes"
1402 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001403 --tls-priority=*) tls_priority="$optarg"
1404 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001405 --disable-gnutls) gnutls="no"
1406 ;;
1407 --enable-gnutls) gnutls="yes"
1408 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001409 --disable-nettle) nettle="no"
1410 ;;
1411 --enable-nettle) nettle="yes"
1412 ;;
1413 --disable-gcrypt) gcrypt="no"
1414 ;;
1415 --enable-gcrypt) gcrypt="yes"
1416 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001417 --disable-auth-pam) auth_pam="no"
1418 ;;
1419 --enable-auth-pam) auth_pam="yes"
1420 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001421 --enable-rdma) rdma="yes"
1422 ;;
1423 --disable-rdma) rdma="no"
1424 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001425 --enable-pvrdma) pvrdma="yes"
1426 ;;
1427 --disable-pvrdma) pvrdma="no"
1428 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001429 --disable-vte) vte="no"
1430 ;;
1431 --enable-vte) vte="yes"
1432 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001433 --disable-virglrenderer) virglrenderer="no"
1434 ;;
1435 --enable-virglrenderer) virglrenderer="yes"
1436 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001437 --disable-tpm) tpm="no"
1438 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001439 --enable-tpm) tpm="yes"
1440 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001441 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001442 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001443 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001444 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001445 --disable-live-block-migration) live_block_migration="no"
1446 ;;
1447 --enable-live-block-migration) live_block_migration="yes"
1448 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001449 --disable-numa) numa="no"
1450 ;;
1451 --enable-numa) numa="yes"
1452 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001453 --disable-libxml2) libxml2="no"
1454 ;;
1455 --enable-libxml2) libxml2="yes"
1456 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001457 --disable-tcmalloc) tcmalloc="no"
1458 ;;
1459 --enable-tcmalloc) tcmalloc="yes"
1460 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001461 --disable-jemalloc) jemalloc="no"
1462 ;;
1463 --enable-jemalloc) jemalloc="yes"
1464 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001465 --disable-replication) replication="no"
1466 ;;
1467 --enable-replication) replication="yes"
1468 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001469 --disable-vxhs) vxhs="no"
1470 ;;
1471 --enable-vxhs) vxhs="yes"
1472 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001473 --disable-bochs) bochs="no"
1474 ;;
1475 --enable-bochs) bochs="yes"
1476 ;;
1477 --disable-cloop) cloop="no"
1478 ;;
1479 --enable-cloop) cloop="yes"
1480 ;;
1481 --disable-dmg) dmg="no"
1482 ;;
1483 --enable-dmg) dmg="yes"
1484 ;;
1485 --disable-qcow1) qcow1="no"
1486 ;;
1487 --enable-qcow1) qcow1="yes"
1488 ;;
1489 --disable-vdi) vdi="no"
1490 ;;
1491 --enable-vdi) vdi="yes"
1492 ;;
1493 --disable-vvfat) vvfat="no"
1494 ;;
1495 --enable-vvfat) vvfat="yes"
1496 ;;
1497 --disable-qed) qed="no"
1498 ;;
1499 --enable-qed) qed="yes"
1500 ;;
1501 --disable-parallels) parallels="no"
1502 ;;
1503 --enable-parallels) parallels="yes"
1504 ;;
1505 --disable-sheepdog) sheepdog="no"
1506 ;;
1507 --enable-sheepdog) sheepdog="yes"
1508 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001509 --disable-vhost-user) vhost_user="no"
1510 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001511 --enable-vhost-user) vhost_user="yes"
1512 ;;
1513 --disable-vhost-kernel) vhost_kernel="no"
1514 ;;
1515 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001516 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001517 --disable-capstone) capstone="no"
1518 ;;
1519 --enable-capstone) capstone="yes"
1520 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001521 --enable-capstone=git) capstone="git"
1522 ;;
1523 --enable-capstone=system) capstone="system"
1524 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001525 --with-git=*) git="$optarg"
1526 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001527 --enable-git-update) git_update=yes
1528 ;;
1529 --disable-git-update) git_update=no
1530 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001531 --enable-debug-mutex) debug_mutex=yes
1532 ;;
1533 --disable-debug-mutex) debug_mutex=no
1534 ;;
Junyan He17824402018-07-18 15:47:59 +08001535 --enable-libpmem) libpmem=yes
1536 ;;
1537 --disable-libpmem) libpmem=no
1538 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001539 --enable-xkbcommon) xkbcommon=yes
1540 ;;
1541 --disable-xkbcommon) xkbcommon=no
1542 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001543 --enable-plugins) plugins="yes"
1544 ;;
1545 --disable-plugins) plugins="no"
1546 ;;
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001547 --enable-containers) use_containers="yes"
1548 ;;
1549 --disable-containers) use_containers="no"
1550 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001551 *)
1552 echo "ERROR: unknown option $opt"
1553 echo "Try '$0 --help' for more information"
1554 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001555 ;;
bellard7d132992003-03-06 23:23:54 +00001556 esac
1557done
1558
bellard40293e52008-01-31 11:32:10 +00001559case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001560 ppc)
1561 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001562 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001563 ;;
1564 ppc64)
1565 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001566 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001567 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001568 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001569 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001570 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001571 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001572 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001573 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001574 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001575 ;;
ths76d83bd2007-11-18 21:22:10 +00001576 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001577 CPU_CFLAGS="-m31"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001578 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001579 ;;
1580 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001581 CPU_CFLAGS="-m64"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001582 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001583 ;;
bellard40293e52008-01-31 11:32:10 +00001584 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001585 CPU_CFLAGS="-m32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001586 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001587 ;;
1588 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001589 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1590 # If we truly care, we should simply detect this case at
1591 # runtime and generate the fallback to serial emulation.
1592 CPU_CFLAGS="-m64 -mcx16"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001593 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001594 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001595 x32)
1596 CPU_CFLAGS="-mx32"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001597 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001598 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001599 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001600esac
1601
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001602eval "cross_cc_${cpu}=\$host_cc"
1603cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001604QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001605
Peter Maydellaffc88c2016-06-13 11:32:24 +01001606# For user-mode emulation the host arch has to be one we explicitly
1607# support, even if we're using TCI.
1608if [ "$ARCH" = "unknown" ]; then
1609 bsd_user="no"
1610 linux_user="no"
1611fi
1612
Peter Maydell60e0df22011-05-03 14:50:13 +01001613default_target_list=""
1614
Peter Maydell6e92f822013-05-20 16:16:15 +01001615mak_wilds=""
1616
1617if [ "$softmmu" = "yes" ]; then
1618 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001619fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001620if [ "$linux_user" = "yes" ]; then
1621 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001622fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001623if [ "$bsd_user" = "yes" ]; then
1624 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001625fi
1626
Alex Bennée447e1332019-03-19 11:59:12 +00001627if test -z "$target_list_exclude"; then
1628 for config in $mak_wilds; do
1629 default_target_list="${default_target_list} $(basename "$config" .mak)"
1630 done
1631else
1632 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1633 for config in $mak_wilds; do
1634 target="$(basename "$config" .mak)"
1635 exclude="no"
1636 for excl in $exclude_list; do
1637 if test "$excl" = "$target"; then
1638 exclude="yes"
1639 break;
1640 fi
1641 done
1642 if test "$exclude" = "no"; then
1643 default_target_list="${default_target_list} $target"
1644 fi
1645 done
1646fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001647
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001648# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001649trace_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 +01001650
pbrookaf5db582006-04-08 14:26:41 +00001651if test x"$show_help" = x"yes" ; then
1652cat << EOF
1653
1654Usage: configure [options]
1655Options: [defaults in brackets after descriptions]
1656
Stefan Weil08fb77e2013-12-18 22:09:39 +01001657Standard options:
1658 --help print this message
1659 --prefix=PREFIX install in PREFIX [$prefix]
1660 --interp-prefix=PREFIX where to find shared libraries, etc.
1661 use %M for cpu name [$interp_prefix]
1662 --target-list=LIST set target list (default: build everything)
1663$(echo Available targets: $default_target_list | \
1664 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001665 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001666
1667Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001668 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1669 --cc=CC use C compiler CC [$cc]
1670 --iasl=IASL use ACPI compiler IASL [$iasl]
1671 --host-cc=CC use C compiler CC [$host_cc] for code run at
1672 build time
1673 --cxx=CXX use C++ compiler CXX [$cxx]
1674 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1675 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001676 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001677 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001678 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001679 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001680 --make=MAKE use specified make [$make]
1681 --install=INSTALL use specified install [$install]
1682 --python=PYTHON use specified python [$python]
Peter Maydell2eb054c2020-02-13 17:56:18 +00001683 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001684 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001685 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001686 --static enable static build [$static]
1687 --mandir=PATH install man pages in PATH
1688 --datadir=PATH install firmware in PATH$confsuffix
1689 --docdir=PATH install documentation in PATH$confsuffix
1690 --bindir=PATH install binaries in PATH
1691 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001692 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001693 --sysconfdir=PATH install config in PATH$confsuffix
1694 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001695 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001696 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001697 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001698 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001699 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001700 --disable-strip disable stripping binaries
1701 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001702 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001703 --audio-drv-list=LIST set audio drivers list:
1704 Available drivers: $audio_possible_drivers
1705 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1706 --block-drv-rw-whitelist=L
1707 set block driver read-write whitelist
1708 (affects only QEMU, not qemu-img)
1709 --block-drv-ro-whitelist=L
1710 set block driver read-only whitelist
1711 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001712 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001713 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001714 --with-trace-file=NAME Full PATH,NAME of file to store traces
1715 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001716 --disable-slirp disable SLIRP userspace network connectivity
1717 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001718 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001719 --oss-lib path to OSS library
1720 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001721 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001722 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001723 --enable-gcov enable test coverage analysis with gcov
1724 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001725 --disable-blobs disable installing provided firmware blobs
1726 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1727 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001728 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001729 --enable-gprof QEMU profiling with gprof
1730 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001731 --enable-debug-stack-usage
1732 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001733 --enable-plugins
1734 enable plugins via shared library loading
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01001735 --disable-containers don't use containers for cross-building
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001736
1737Optional features, enabled with --enable-FEATURE and
1738disabled with --disable-FEATURE, default is enabled if available:
1739
1740 system all system emulation targets
1741 user supported user emulation targets
1742 linux-user all linux usermode emulation targets
1743 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001744 docs build documentation
1745 guest-agent build the QEMU Guest Agent
1746 guest-agent-msi build guest agent Windows MSI installation package
1747 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001748 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001749 debug-tcg TCG debugging (default is disabled)
1750 debug-info debugging information
1751 sparse sparse checker
1752
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001753 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001754 nettle nettle cryptography support
1755 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001756 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001757 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001758 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001759 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001760 vte vte support for the gtk UI
1761 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001762 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001763 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001764 vnc-sasl SASL encryption for VNC server
1765 vnc-jpeg JPEG lossy compression for VNC server
1766 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001767 cocoa Cocoa UI (Mac OS X only)
1768 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001769 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001770 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001771 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001772 brlapi BrlAPI (Braile)
1773 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001774 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001775 fdt fdt device tree
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001776 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001777 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001778 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001779 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001780 rdma Enable RDMA-based migration
1781 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001782 vde support for vde network
1783 netmap support for netmap network
1784 linux-aio Linux AIO support
Aarushi Mehtac10dd852020-01-20 14:18:44 +00001785 linux-io-uring Linux io_uring support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001786 cap-ng libcap-ng support
1787 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001788 vhost-net vhost-net kernel acceleration support
1789 vhost-vsock virtio sockets device support
1790 vhost-scsi vhost-scsi kernel target support
1791 vhost-crypto vhost-user-crypto backend support
1792 vhost-kernel vhost kernel backend support
1793 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001794 spice spice
1795 rbd rados block device (rbd)
1796 libiscsi iscsi support
1797 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001798 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001799 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001800 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001801 usb-redir usb network redirection support
1802 lzo support of lzo compression library
1803 snappy support of snappy compression library
1804 bzip2 support of bzip2 compression library
1805 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001806 lzfse support of lzfse compression library
1807 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001808 seccomp seccomp support
1809 coroutine-pool coroutine freelist (better performance)
1810 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001811 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001812 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001813 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001814 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001815 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001816 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001817 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001818 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001819 opengl opengl support
1820 virglrenderer virgl rendering support
1821 xfsctl xfsctl support
1822 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001823 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001824 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001825 bochs bochs image format support
1826 cloop cloop image format support
1827 dmg dmg image format support
1828 qcow1 qcow v1 image format support
1829 vdi vdi image format support
1830 vvfat vvfat image format support
1831 qed qed image format support
1832 parallels parallels image format support
1833 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001834 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001835 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001836 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001837 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001838 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001839
1840NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001841EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001842exit 0
pbrookaf5db582006-04-08 14:26:41 +00001843fi
1844
Thomas Huth9c790242019-03-11 11:20:34 +01001845# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001846rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001847
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001848if test -z "$python"
1849then
1850 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001851fi
1852
1853# Note that if the Python conditional here evaluates True we will exit
1854# with status 1 which is a shell 'false' value.
Eduardo Habkostddf90692019-10-16 19:42:37 -03001855if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1856 error_exit "Cannot use '$python', Python >= 3.5 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001857 "Use --python=/path/to/python to specify a supported Python."
1858fi
1859
Cleber Rosa755ee702018-11-09 10:07:07 -05001860# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001861python_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 -05001862
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001863# Suppress writing compiled files
1864python="$python -B"
1865
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001866# Check that the C compiler works. Doing this here before testing
1867# the host CPU ensures that we had a valid CC to autodetect the
1868# $cpu var (and we should bail right here if that's not the case).
1869# It also allows the help message to be printed without a CC.
1870write_c_skeleton;
1871if compile_object ; then
1872 : C compiler works ok
1873else
1874 error_exit "\"$cc\" either does not exist or does not work"
1875fi
1876if ! compile_prog ; then
1877 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1878fi
1879
Peter Maydell359bc952011-12-24 13:07:25 +00001880# Now we have handled --enable-tcg-interpreter and know we're not just
1881# printing the help message, bail out if the host CPU isn't supported.
1882if test "$ARCH" = "unknown"; then
1883 if test "$tcg_interpreter" = "yes" ; then
1884 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001885 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001886 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001887 fi
1888fi
1889
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001890# Consult white-list to determine whether to enable werror
1891# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001892if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001893 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001894 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001895 werror="yes"
1896 else
1897 werror="no"
1898 fi
1899fi
1900
Peter Maydellfb59dab2017-03-28 14:01:52 +01001901if test "$bogus_os" = "yes"; then
1902 # Now that we know that we're not printing the help and that
1903 # the compiler works (so the results of the check_defines we used
1904 # to identify the OS are reliable), if we didn't recognize the
1905 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001906 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001907fi
1908
Thomas Huthefc6c072018-12-03 10:12:32 +01001909# Check whether the compiler matches our minimum requirements:
1910cat > $TMPC << EOF
1911#if defined(__clang_major__) && defined(__clang_minor__)
1912# ifdef __apple_build_version__
1913# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1914# error You need at least XCode Clang v5.1 to compile QEMU
1915# endif
1916# else
1917# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1918# error You need at least Clang v3.4 to compile QEMU
1919# endif
1920# endif
1921#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1922# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1923# error You need at least GCC v4.8 to compile QEMU
1924# endif
1925#else
1926# error You either need GCC or Clang to compiler QEMU
1927#endif
1928int main (void) { return 0; }
1929EOF
1930if ! compile_prog "" "" ; then
1931 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1932fi
1933
Paolo Bonzini8d050952010-12-23 11:43:52 +01001934gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1935gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001936gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001937gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001938gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001939gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001940# Note that we do not add -Werror to gcc_flags here, because that would
1941# enable it for all configure tests. If a configure test failed due
1942# to -Werror this would just silently disable some features,
1943# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001944
1945cc_has_warning_flag() {
1946 write_c_skeleton;
1947
Peter Maydella1d29d62012-10-27 22:19:07 +01001948 # Use the positive sense of the flag when testing for -Wno-wombat
1949 # support (gcc will happily accept the -Wno- form of unknown
1950 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001951 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1952 compile_prog "-Werror $optflag" ""
1953}
1954
1955for flag in $gcc_flags; do
1956 if cc_has_warning_flag $flag ; then
1957 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001958 fi
1959done
1960
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001961if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001962 cat > $TMPC << EOF
1963int main(int argc, char *argv[])
1964{
1965 char arr[64], *p = arr, *c = argv[0];
1966 while (*c) {
1967 *p++ = *c++;
1968 }
1969 return 0;
1970}
1971EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001972 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001973 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001974 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001975 # We need to check both a compile and a link, since some compiler
1976 # setups fail only on a .c->.o compile and some only at link time
1977 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1978 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001979 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01001980 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001981 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001982 break
1983 fi
1984 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001985 if test "$stack_protector" = yes; then
1986 if test $sp_on = 0; then
1987 error_exit "Stack protector not supported"
1988 fi
1989 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001990fi
1991
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001992# Disable -Wmissing-braces on older compilers that warn even for
1993# the "universal" C zero initializer {0}.
1994cat > $TMPC << EOF
1995struct {
1996 int a[2];
1997} x = {0};
1998EOF
1999if compile_object "-Werror" "" ; then
2000 :
2001else
2002 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2003fi
2004
Marc-André Lureau21e709a2019-07-18 16:04:13 +04002005# Our module code doesn't support Windows
2006if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2007 error_exit "Modules are not available for Windows"
2008fi
2009
Thomas Huthd376e9d2018-12-03 11:41:38 +01002010# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002011if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002012 if test "$modules" = "yes" ; then
2013 error_exit "static and modules are mutually incompatible"
2014 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002015 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002016 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002017 else
2018 pie="no"
2019 fi
2020fi
2021
Emilio G. Cota768b7852015-04-29 13:09:02 +02002022# Unconditional check for compiler __thread support
2023 cat > $TMPC << EOF
2024static __thread int tls_var;
2025int main(void) { return tls_var; }
2026EOF
2027
2028if ! compile_prog "-Werror" "" ; then
2029 error_exit "Your compiler does not support the __thread specifier for " \
2030 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2031fi
2032
Avi Kivity40d64442011-11-15 20:12:17 +02002033if test "$pie" = ""; then
2034 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002035 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002036 ;;
2037 *)
2038 pie="no"
2039 ;;
2040 esac
2041fi
2042
2043if test "$pie" != "no" ; then
2044 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002045
2046#ifdef __linux__
2047# define THREAD __thread
2048#else
2049# define THREAD
2050#endif
2051
2052static THREAD int tls_var;
2053
2054int main(void) { return tls_var; }
2055
Avi Kivity40d64442011-11-15 20:12:17 +02002056EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002057 # check we support --no-pie first...
2058 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2059 CFLAGS_NOPIE="-fno-pie"
2060 LDFLAGS_NOPIE="-nopie"
2061 fi
2062
Avi Kivity40d64442011-11-15 20:12:17 +02002063 if compile_prog "-fPIE -DPIE" "-pie"; then
2064 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002065 QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002066 pie="yes"
2067 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01002068 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
Avi Kivity40d64442011-11-15 20:12:17 +02002069 fi
2070 else
2071 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002072 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002073 else
2074 echo "Disabling PIE due to missing toolchain support"
2075 pie="no"
2076 fi
2077 fi
2078fi
2079
Paolo Bonzini09dada42013-04-17 16:26:47 +02002080##########################################
2081# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2082# use i686 as default anyway, but for those that don't, an explicit
2083# specification is necessary
2084
2085if test "$cpu" = "i386"; then
2086 cat > $TMPC << EOF
2087static int sfaa(int *ptr)
2088{
2089 return __sync_fetch_and_and(ptr, 0);
2090}
2091
2092int main(void)
2093{
2094 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002095 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002096 sfaa(&val);
2097 return val;
2098}
2099EOF
2100 if ! compile_prog "" "" ; then
2101 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2102 fi
2103fi
2104
2105#########################################
bellardec530c82006-04-25 22:36:06 +00002106# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002107
bellardec530c82006-04-25 22:36:06 +00002108if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01002109 if has $install; then
2110 :
2111 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002112 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2113 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2114 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002115 fi
Stefan Weil89138852016-05-16 15:10:20 +02002116 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002117 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2118 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2119 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002120 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01002121 if has ar; then
2122 :
2123 else
bellardec530c82006-04-25 22:36:06 +00002124 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002125 error_exit "No path includes ar" \
2126 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002127 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002128 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002129 fi
ths5fafdf22007-09-16 21:08:06 +00002130fi
bellardec530c82006-04-25 22:36:06 +00002131
Stefan Weilafb63eb2012-09-26 22:04:38 +02002132if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002133 for target in $default_target_list; do
2134 supported_target $target 2>/dev/null && \
2135 target_list="$target_list $target"
2136 done
2137 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002138else
Stefan Weil89138852016-05-16 15:10:20 +02002139 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002140 for target in $target_list; do
2141 # Check that we recognised the target name; this allows a more
2142 # friendly error message than if we let it fall through.
2143 case " $default_target_list " in
2144 *" $target "*)
2145 ;;
2146 *)
2147 error_exit "Unknown target name '$target'"
2148 ;;
2149 esac
2150 supported_target $target || exit 1
2151 done
bellard5327cf42005-01-10 23:18:50 +00002152fi
Peter Maydell25b48332013-05-20 16:16:16 +01002153
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002154# see if system emulation was really requested
2155case " $target_list " in
2156 *"-softmmu "*) softmmu=yes
2157 ;;
2158 *) softmmu=no
2159 ;;
2160esac
bellard5327cf42005-01-10 23:18:50 +00002161
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002162for target in $target_list; do
2163 case "$target" in
2164 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2165 edk2_blobs="yes"
2166 ;;
2167 esac
2168done
Philippe Mathieu-Daudé623ef632019-11-08 12:45:31 +01002169# The EDK2 binaries are compressed with bzip2
2170if test "$edk2_blobs" = "yes" && ! has bzip2; then
2171 error_exit "The bzip2 program is required for building QEMU"
2172fi
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01002173
Juan Quintela249247c2009-08-12 18:20:25 +02002174feature_not_found() {
2175 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002176 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002177
Peter Maydell76ad07a2013-04-08 12:11:26 +01002178 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002179 "configure was not able to find it." \
2180 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002181}
2182
bellard7d132992003-03-06 23:23:54 +00002183# ---
2184# big/little endian test
2185cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002186short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2187short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2188extern int foo(short *, short *);
2189int main(int argc, char *argv[]) {
2190 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002191}
2192EOF
2193
Mike Frysinger61cc9192013-06-30 23:30:18 -04002194if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002195 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002196 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002197 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002198 bigendian="no"
2199 else
2200 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002201 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002202else
2203 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002204fi
2205
Juan Quintelab0a47e72009-08-12 18:29:49 +02002206##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002207# cocoa implies not SDL or GTK
2208# (the cocoa UI code currently assumes it is always the active UI
2209# and doesn't interact well with other UI frontend code)
2210if test "$cocoa" = "yes"; then
2211 if test "$sdl" = "yes"; then
2212 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2213 fi
2214 if test "$gtk" = "yes"; then
2215 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2216 fi
2217 gtk=no
2218 sdl=no
2219fi
2220
Eric Blake6b39b062016-10-11 10:46:23 -05002221# Some versions of Mac OS X incorrectly define SIZE_MAX
2222cat > $TMPC << EOF
2223#include <stdint.h>
2224#include <stdio.h>
2225int main(int argc, char *argv[]) {
2226 return printf("%zu", SIZE_MAX);
2227}
2228EOF
2229have_broken_size_max=no
2230if ! compile_object -Werror ; then
2231 have_broken_size_max=yes
2232fi
2233
Peter Maydella30878e2015-08-14 16:10:52 +01002234##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002235# L2TPV3 probe
2236
2237cat > $TMPC <<EOF
2238#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002239#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002240int main(void) { return sizeof(struct mmsghdr); }
2241EOF
2242if compile_prog "" "" ; then
2243 l2tpv3=yes
2244else
2245 l2tpv3=no
2246fi
2247
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002248#########################################
2249# vhost interdependencies and host support
2250
2251# vhost backends
2252test "$vhost_user" = "" && vhost_user=yes
2253if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2254 error_exit "vhost-user isn't available on win32"
2255fi
2256test "$vhost_kernel" = "" && vhost_kernel=$linux
2257if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2258 error_exit "vhost-kernel is only available on Linux"
2259fi
2260
2261# vhost-kernel devices
2262test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2263if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2264 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2265fi
2266test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2267if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2268 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2269fi
2270
2271# vhost-user backends
2272test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2273if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2274 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2275fi
2276test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2277if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2278 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2279fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002280test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2281if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2282 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2283fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002284
2285# OR the vhost-kernel and vhost-user values for simplicity
2286if test "$vhost_net" = ""; then
2287 test "$vhost_net_user" = "yes" && vhost_net=yes
2288 test "$vhost_kernel" = "yes" && vhost_net=yes
2289fi
2290
Gonglei015a33b2014-07-01 20:58:08 +08002291##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002292# MinGW / Mingw-w64 localtime_r/gmtime_r check
2293
2294if test "$mingw32" = "yes"; then
2295 # Some versions of MinGW / Mingw-w64 lack localtime_r
2296 # and gmtime_r entirely.
2297 #
2298 # Some versions of Mingw-w64 define a macro for
2299 # localtime_r/gmtime_r.
2300 #
2301 # Some versions of Mingw-w64 will define functions
2302 # for localtime_r/gmtime_r, but only if you have
2303 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2304 # though, unistd.h and pthread.h both define
2305 # that for you.
2306 #
2307 # So this #undef localtime_r and #include <unistd.h>
2308 # are not in fact redundant.
2309cat > $TMPC << EOF
2310#include <unistd.h>
2311#include <time.h>
2312#undef localtime_r
2313int main(void) { localtime_r(NULL, NULL); return 0; }
2314EOF
2315 if compile_prog "" "" ; then
2316 localtime_r="yes"
2317 else
2318 localtime_r="no"
2319 fi
2320fi
2321
2322##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002323# pkg-config probe
2324
2325if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002326 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002327fi
2328
2329##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002330# NPTL probe
2331
Peter Maydell24cb36a2013-07-16 18:45:00 +01002332if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002333 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002334#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002335#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002336int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002337#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2338#error bork
2339#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002340 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002341}
2342EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002343 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002344 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002345 fi
pbrookbd0c5662008-05-29 14:34:11 +00002346fi
2347
balrogac629222008-10-11 09:56:04 +00002348##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002349# lzo check
2350
2351if test "$lzo" != "no" ; then
2352 cat > $TMPC << EOF
2353#include <lzo/lzo1x.h>
2354int main(void) { lzo_version(); return 0; }
2355EOF
2356 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002357 libs_softmmu="$libs_softmmu -llzo2"
2358 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002359 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002360 if test "$lzo" = "yes"; then
2361 feature_not_found "liblzo2" "Install liblzo2 devel"
2362 fi
2363 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002364 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002365fi
2366
2367##########################################
2368# snappy check
2369
2370if test "$snappy" != "no" ; then
2371 cat > $TMPC << EOF
2372#include <snappy-c.h>
2373int main(void) { snappy_max_compressed_length(4096); return 0; }
2374EOF
2375 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002376 libs_softmmu="$libs_softmmu -lsnappy"
2377 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002378 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002379 if test "$snappy" = "yes"; then
2380 feature_not_found "libsnappy" "Install libsnappy devel"
2381 fi
2382 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002383 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002384fi
2385
2386##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002387# bzip2 check
2388
2389if test "$bzip2" != "no" ; then
2390 cat > $TMPC << EOF
2391#include <bzlib.h>
2392int main(void) { BZ2_bzlibVersion(); return 0; }
2393EOF
2394 if compile_prog "" "-lbz2" ; then
2395 bzip2="yes"
2396 else
2397 if test "$bzip2" = "yes"; then
2398 feature_not_found "libbzip2" "Install libbzip2 devel"
2399 fi
2400 bzip2="no"
2401 fi
2402fi
2403
2404##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002405# lzfse check
2406
2407if test "$lzfse" != "no" ; then
2408 cat > $TMPC << EOF
2409#include <lzfse.h>
2410int main(void) { lzfse_decode_scratch_size(); return 0; }
2411EOF
2412 if compile_prog "" "-llzfse" ; then
2413 lzfse="yes"
2414 else
2415 if test "$lzfse" = "yes"; then
2416 feature_not_found "lzfse" "Install lzfse devel"
2417 fi
2418 lzfse="no"
2419 fi
2420fi
2421
2422##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002423# libseccomp check
2424
2425if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002426 libseccomp_minver="2.3.0"
2427 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002428 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2429 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002430 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002431 else
Andrew Jones693e5912015-09-30 11:59:18 -04002432 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002433 feature_not_found "libseccomp" \
2434 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002435 fi
2436 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002437 fi
2438fi
2439##########################################
aliguorie37630c2009-04-22 15:19:10 +00002440# xen probe
2441
Juan Quintelafc321b42009-08-12 18:29:55 +02002442if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002443 # Check whether Xen library path is specified via --extra-ldflags to avoid
2444 # overriding this setting with pkg-config output. If not, try pkg-config
2445 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002446
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002447 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2448 $pkg_config --exists xencontrol ; then
2449 xen_ctrl_version="$(printf '%d%02d%02d' \
2450 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2451 xen=yes
2452 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2453 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002454 if $pkg_config --exists xentoolcore; then
2455 xen_pc="$xen_pc xentoolcore"
2456 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002457 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2458 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002459 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002460
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002461 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002462 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002463
2464 # First we test whether Xen headers and libraries are available.
2465 # If no, we are done and there is no Xen support.
2466 # If yes, more tests are run to detect the Xen version.
2467
2468 # Xen (any)
2469 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002470#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002471int main(void) {
2472 return 0;
2473}
2474EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002475 if ! compile_prog "" "$xen_libs" ; then
2476 # Xen not found
2477 if test "$xen" = "yes" ; then
2478 feature_not_found "xen" "Install xen devel"
2479 fi
2480 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002481
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002482 # Xen unstable
2483 elif
2484 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002485#undef XC_WANT_COMPAT_DEVICEMODEL_API
2486#define __XEN_TOOLS__
2487#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002488#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002489int main(void) {
2490 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002491 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002492
2493 xd = xendevicemodel_open(0, 0);
2494 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2495
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002496 xfmem = xenforeignmemory_open(0, 0);
2497 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2498
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002499 return 0;
2500}
2501EOF
2502 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2503 then
2504 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2505 xen_ctrl_version=41100
2506 xen=yes
2507 elif
2508 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002509#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2510#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002511#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002512int main(void) {
2513 xenforeignmemory_handle *xfmem;
2514
2515 xfmem = xenforeignmemory_open(0, 0);
2516 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002517 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002518
2519 return 0;
2520}
2521EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002522 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002523 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002524 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002525 xen_ctrl_version=41000
2526 xen=yes
2527 elif
2528 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002529#undef XC_WANT_COMPAT_DEVICEMODEL_API
2530#define __XEN_TOOLS__
2531#include <xendevicemodel.h>
2532int main(void) {
2533 xendevicemodel_handle *xd;
2534
2535 xd = xendevicemodel_open(0, 0);
2536 xendevicemodel_close(xd);
2537
2538 return 0;
2539}
2540EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002541 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2542 then
2543 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2544 xen_ctrl_version=40900
2545 xen=yes
2546 elif
2547 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002548/*
2549 * If we have stable libs the we don't want the libxc compat
2550 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002551 *
2552 * Also, check if xengnttab_grant_copy_segment_t is defined and
2553 * grant copy operation is implemented.
2554 */
2555#undef XC_WANT_COMPAT_EVTCHN_API
2556#undef XC_WANT_COMPAT_GNTTAB_API
2557#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2558#include <xenctrl.h>
2559#include <xenstore.h>
2560#include <xenevtchn.h>
2561#include <xengnttab.h>
2562#include <xenforeignmemory.h>
2563#include <stdint.h>
2564#include <xen/hvm/hvm_info_table.h>
2565#if !defined(HVM_MAX_VCPUS)
2566# error HVM_MAX_VCPUS not defined
2567#endif
2568int main(void) {
2569 xc_interface *xc = NULL;
2570 xenforeignmemory_handle *xfmem;
2571 xenevtchn_handle *xe;
2572 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002573 xengnttab_grant_copy_segment_t* seg = NULL;
2574
2575 xs_daemon_open();
2576
2577 xc = xc_interface_open(0, 0, 0);
2578 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2579 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2580 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2581 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002582
2583 xfmem = xenforeignmemory_open(0, 0);
2584 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2585
2586 xe = xenevtchn_open(0, 0);
2587 xenevtchn_fd(xe);
2588
2589 xg = xengnttab_open(0, 0);
2590 xengnttab_grant_copy(xg, 0, seg);
2591
2592 return 0;
2593}
2594EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002595 compile_prog "" "$xen_libs $xen_stable_libs"
2596 then
2597 xen_ctrl_version=40800
2598 xen=yes
2599 elif
2600 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002601/*
2602 * If we have stable libs the we don't want the libxc compat
2603 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002604 */
2605#undef XC_WANT_COMPAT_EVTCHN_API
2606#undef XC_WANT_COMPAT_GNTTAB_API
2607#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2608#include <xenctrl.h>
2609#include <xenstore.h>
2610#include <xenevtchn.h>
2611#include <xengnttab.h>
2612#include <xenforeignmemory.h>
2613#include <stdint.h>
2614#include <xen/hvm/hvm_info_table.h>
2615#if !defined(HVM_MAX_VCPUS)
2616# error HVM_MAX_VCPUS not defined
2617#endif
2618int main(void) {
2619 xc_interface *xc = NULL;
2620 xenforeignmemory_handle *xfmem;
2621 xenevtchn_handle *xe;
2622 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002623
2624 xs_daemon_open();
2625
2626 xc = xc_interface_open(0, 0, 0);
2627 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2628 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2629 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2630 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002631
2632 xfmem = xenforeignmemory_open(0, 0);
2633 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2634
2635 xe = xenevtchn_open(0, 0);
2636 xenevtchn_fd(xe);
2637
2638 xg = xengnttab_open(0, 0);
2639 xengnttab_map_grant_ref(xg, 0, 0, 0);
2640
2641 return 0;
2642}
2643EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002644 compile_prog "" "$xen_libs $xen_stable_libs"
2645 then
2646 xen_ctrl_version=40701
2647 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002648
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002649 # Xen 4.6
2650 elif
2651 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002652#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002653#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002654#include <stdint.h>
2655#include <xen/hvm/hvm_info_table.h>
2656#if !defined(HVM_MAX_VCPUS)
2657# error HVM_MAX_VCPUS not defined
2658#endif
2659int main(void) {
2660 xc_interface *xc;
2661 xs_daemon_open();
2662 xc = xc_interface_open(0, 0, 0);
2663 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2664 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002665 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002666 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002667 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002668 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002669 return 0;
2670}
2671EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002672 compile_prog "" "$xen_libs"
2673 then
2674 xen_ctrl_version=40600
2675 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002676
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002677 # Xen 4.5
2678 elif
2679 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002680#include <xenctrl.h>
2681#include <xenstore.h>
2682#include <stdint.h>
2683#include <xen/hvm/hvm_info_table.h>
2684#if !defined(HVM_MAX_VCPUS)
2685# error HVM_MAX_VCPUS not defined
2686#endif
2687int main(void) {
2688 xc_interface *xc;
2689 xs_daemon_open();
2690 xc = xc_interface_open(0, 0, 0);
2691 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2692 xc_gnttab_open(NULL, 0);
2693 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2694 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002695 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2696 return 0;
2697}
2698EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002699 compile_prog "" "$xen_libs"
2700 then
2701 xen_ctrl_version=40500
2702 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002703
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002704 elif
2705 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002706#include <xenctrl.h>
2707#include <xenstore.h>
2708#include <stdint.h>
2709#include <xen/hvm/hvm_info_table.h>
2710#if !defined(HVM_MAX_VCPUS)
2711# error HVM_MAX_VCPUS not defined
2712#endif
2713int main(void) {
2714 xc_interface *xc;
2715 xs_daemon_open();
2716 xc = xc_interface_open(0, 0, 0);
2717 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2718 xc_gnttab_open(NULL, 0);
2719 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2720 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002721 return 0;
2722}
2723EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002724 compile_prog "" "$xen_libs"
2725 then
2726 xen_ctrl_version=40200
2727 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002728
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002729 else
2730 if test "$xen" = "yes" ; then
2731 feature_not_found "xen (unsupported version)" \
2732 "Install a supported xen (xen 4.2 or newer)"
2733 fi
2734 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002735 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002736
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002737 if test "$xen" = yes; then
2738 if test $xen_ctrl_version -ge 40701 ; then
2739 libs_softmmu="$xen_stable_libs $libs_softmmu"
2740 fi
2741 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002742 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002743 fi
aliguorie37630c2009-04-22 15:19:10 +00002744fi
2745
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002746if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002747 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002748 xen_pci_passthrough=yes
2749 else
2750 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002751 error_exit "User requested feature Xen PCI Passthrough" \
2752 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002753 fi
2754 xen_pci_passthrough=no
2755 fi
2756fi
2757
aliguorie37630c2009-04-22 15:19:10 +00002758##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002759# Windows Hypervisor Platform accelerator (WHPX) check
2760if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002761 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002762 whpx="yes"
2763 else
2764 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002765 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002766 fi
2767 whpx="no"
2768 fi
2769fi
2770
2771##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002772# Sparse probe
2773if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002774 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002775 sparse=yes
2776 else
2777 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002778 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002779 fi
2780 sparse=no
2781 fi
2782fi
2783
2784##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002785# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002786if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002787 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002788 x11_cflags=$($pkg_config --cflags x11)
2789 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002790fi
2791
2792##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002793# GTK probe
2794
2795if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002796 gtkpackage="gtk+-3.0"
2797 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002798 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002799 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002800 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2801 gtk_libs=$($pkg_config --libs $gtkpackage)
2802 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002803 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002804 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002805 gtk_cflags="$gtk_cflags $x11_cflags"
2806 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002807 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002808 gtk="yes"
2809 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002810 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002811 else
2812 gtk="no"
2813 fi
2814fi
2815
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002816
2817##########################################
2818# GNUTLS probe
2819
2820if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002821 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002822 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002823 gnutls_cflags=$($pkg_config --cflags gnutls)
2824 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002825 # Packaging for the static libraries is not always correct.
2826 # At least ubuntu 18.04 ships only shared libraries.
2827 write_c_skeleton
2828 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002829 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002830 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2831 pass="yes"
2832 fi
2833 fi
2834 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002835 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002836 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002837 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002838 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002839fi
2840
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002841
2842# If user didn't give a --disable/enable-gcrypt flag,
2843# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002844# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002845if test -z "$gcrypt"
2846then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002847 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002848 then
2849 gcrypt="no"
2850 fi
2851fi
2852
2853# If user didn't give a --disable/enable-nettle flag,
2854# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002855# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002856if test -z "$nettle"
2857then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002858 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002859 then
2860 nettle="no"
2861 fi
2862fi
2863
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002864has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002865 if ! has "libgcrypt-config"
2866 then
2867 return 1
2868 fi
2869
2870 if test -n "$cross_prefix"
2871 then
Stefan Weil89138852016-05-16 15:10:20 +02002872 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002873 if test "$host-" != $cross_prefix
2874 then
2875 return 1
2876 fi
2877 fi
2878
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002879 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2880 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2881
2882 if test $maj != 1 || test $min -lt 5
2883 then
2884 return 1
2885 fi
2886
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002887 return 0
2888}
2889
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002890
2891if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002892 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002893 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002894 nettle_cflags=$($pkg_config --cflags nettle)
2895 nettle_libs=$($pkg_config --libs nettle)
2896 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002897 # Link test to make sure the given libraries work (e.g for static).
2898 write_c_skeleton
2899 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002900 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002901 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2902 if test -z "$gcrypt"; then
2903 gcrypt="no"
2904 fi
2905 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002906 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002907 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01002908 if test "$pass" = "yes"
2909 then
2910 cat > $TMPC << EOF
2911#include <nettle/xts.h>
2912int main(void) {
2913 return 0;
2914}
2915EOF
2916 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2917 nettle_xts=yes
2918 qemu_private_xts=no
2919 fi
2920 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002921 if test "$pass" = "no" && test "$nettle" = "yes"; then
2922 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002923 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002924 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002925 fi
2926fi
2927
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002928if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002929 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002930 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002931 gcrypt_cflags=$(libgcrypt-config --cflags)
2932 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002933 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002934 # as it "spreads unnecessary dependencies" which in
2935 # turn breaks static builds...
2936 if test "$static" = "yes"
2937 then
2938 gcrypt_libs="$gcrypt_libs -lgpg-error"
2939 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002940
Richard Hendersona73e82e2019-05-09 18:24:35 -07002941 # Link test to make sure the given libraries work (e.g for static).
2942 write_c_skeleton
2943 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002944 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002945 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2946 pass="yes"
2947 fi
2948 fi
2949 if test "$pass" = "yes"; then
2950 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002951 cat > $TMPC << EOF
2952#include <gcrypt.h>
2953int main(void) {
2954 gcry_mac_hd_t handle;
2955 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2956 GCRY_MAC_FLAG_SECURE, NULL);
2957 return 0;
2958}
2959EOF
2960 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2961 gcrypt_hmac=yes
2962 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01002963 cat > $TMPC << EOF
2964#include <gcrypt.h>
2965int main(void) {
2966 gcry_cipher_hd_t handle;
2967 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2968 return 0;
2969}
2970EOF
2971 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2972 gcrypt_xts=yes
2973 qemu_private_xts=no
2974 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002975 elif test "$gcrypt" = "yes"; then
2976 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002977 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002978 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002979 fi
2980fi
2981
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002982
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002983if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2984then
2985 error_exit "Only one of gcrypt & nettle can be enabled"
2986fi
2987
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002988##########################################
2989# libtasn1 - only for the TLS creds/session test suite
2990
2991tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002992tasn1_cflags=""
2993tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002994if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002995 tasn1_cflags=$($pkg_config --cflags libtasn1)
2996 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002997else
2998 tasn1=no
2999fi
3000
Daniel P. Berrangeed754742015-07-01 18:10:34 +01003001
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003002##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003003# PAM probe
3004
3005if test "$auth_pam" != "no"; then
3006 cat > $TMPC <<EOF
3007#include <security/pam_appl.h>
3008#include <stdio.h>
3009int main(void) {
3010 const char *service_name = "qemu";
3011 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003012 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003013 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01003014 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01003015 return 0;
3016}
3017EOF
3018 if compile_prog "" "-lpam" ; then
3019 auth_pam=yes
3020 else
3021 if test "$auth_pam" = "yes"; then
3022 feature_not_found "PAM" "Install PAM development package"
3023 else
3024 auth_pam=no
3025 fi
3026 fi
3027fi
3028
3029##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003030# getifaddrs (for tests/test-io-channel-socket )
3031
3032have_ifaddrs_h=yes
3033if ! check_include "ifaddrs.h" ; then
3034 have_ifaddrs_h=no
3035fi
3036
3037##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003038# VTE probe
3039
3040if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003041 vteminversion="0.32.0"
3042 if $pkg_config --exists "vte-2.91"; then
3043 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003044 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003045 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003046 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003047 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003048 vte_cflags=$($pkg_config --cflags $vtepackage)
3049 vte_libs=$($pkg_config --libs $vtepackage)
3050 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003051 vte="yes"
3052 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003053 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003054 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003055 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003056 fi
3057fi
3058
3059##########################################
bellard11d9f692004-04-02 20:55:59 +00003060# SDL probe
3061
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003062# Look for sdl configuration program (pkg-config or sdl2-config). Try
3063# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003064
Peter Xuc6093a02018-04-10 13:40:34 +08003065sdl_probe ()
3066{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003067 if $pkg_config sdl2 --exists; then
3068 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003069 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003070 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003071 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003072 sdlversion=$($sdlconfig --version)
3073 else
3074 if test "$sdl" = "yes" ; then
3075 feature_not_found "sdl" "Install SDL2-devel"
3076 fi
3077 sdl=no
3078 # no need to do the rest
3079 return
3080 fi
Carlo Marcelo Arenas Belónaee8a612019-07-10 15:55:28 -07003081 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003082 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3083 fi
3084
Juan Quintelaac119f92009-07-27 16:13:15 +02003085 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003086#include <SDL.h>
3087#undef main /* We don't want SDL to override our main() */
3088int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3089EOF
Stefan Weil89138852016-05-16 15:10:20 +02003090 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003091 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003092 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003093 if $pkg_config sdl2 --exists; then
3094 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003095 else
3096 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3097 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003098 else
Stefan Weil89138852016-05-16 15:10:20 +02003099 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003100 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003101 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003102 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003103
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003104 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003105 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003106 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003107 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3108 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003109 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003110 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003111 :
3112 else
3113 sdl=no
3114 fi
3115 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003116 else # sdl not found
3117 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003118 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003119 fi
3120 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003121 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003122}
3123
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003124sdl_image_probe ()
3125{
3126 if test "$sdl_image" != "no" ; then
3127 if $pkg_config SDL2_image --exists; then
3128 if test "$static" = "yes"; then
3129 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3130 else
3131 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3132 fi
3133 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3134 sdl_image=yes
3135
3136 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3137 sdl_libs="$sdl_libs $sdl_image_libs"
3138 else
3139 if test "$sdl_image" = "yes" ; then
3140 feature_not_found "sdl_image" "Install SDL Image devel"
3141 else
3142 sdl_image=no
3143 fi
3144 fi
3145 fi
3146}
3147
Peter Xuc6093a02018-04-10 13:40:34 +08003148if test "$sdl" != "no" ; then
3149 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003150fi
bellard11d9f692004-04-02 20:55:59 +00003151
aliguori5368a422009-03-03 17:37:21 +00003152if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003153 sdl_image_probe
3154else
3155 if test "$sdl_image" = "yes"; then
3156 echo "warning: SDL Image requested, but SDL is not available, disabling"
3157 fi
3158 sdl_image=no
3159fi
3160
3161if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003162 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003163#include <SDL.h>
3164#if defined(SDL_VIDEO_DRIVER_X11)
3165#include <X11/XKBlib.h>
3166#else
3167#error No x11 support
3168#endif
3169int main(void) { return 0; }
3170EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003171 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003172 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003173 sdl_cflags="$sdl_cflags $x11_cflags"
3174 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003175 fi
aliguori5368a422009-03-03 17:37:21 +00003176fi
3177
ths8f28f3f2007-01-05 21:25:54 +00003178##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003179# RDMA needs OpenFabrics libraries
3180if test "$rdma" != "no" ; then
3181 cat > $TMPC <<EOF
3182#include <rdma/rdma_cma.h>
3183int main(void) { return 0; }
3184EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003185 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003186 if compile_prog "" "$rdma_libs" ; then
3187 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003188 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003189 else
3190 if test "$rdma" = "yes" ; then
3191 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003192 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003193 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003194 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003195 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3196 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3197 fi
3198 rdma="no"
3199 fi
3200fi
3201
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003202##########################################
3203# PVRDMA detection
3204
3205cat > $TMPC <<EOF &&
3206#include <sys/mman.h>
3207
3208int
3209main(void)
3210{
3211 char buf = 0;
3212 void *addr = &buf;
3213 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3214
3215 return 0;
3216}
3217EOF
3218
3219if test "$rdma" = "yes" ; then
3220 case "$pvrdma" in
3221 "")
3222 if compile_prog "" ""; then
3223 pvrdma="yes"
3224 else
3225 pvrdma="no"
3226 fi
3227 ;;
3228 "yes")
3229 if ! compile_prog "" ""; then
3230 error_exit "PVRDMA is not supported since mremap is not implemented"
3231 fi
3232 pvrdma="yes"
3233 ;;
3234 "no")
3235 pvrdma="no"
3236 ;;
3237 esac
3238else
3239 if test "$pvrdma" = "yes" ; then
3240 error_exit "PVRDMA requires rdma suppport"
3241 fi
3242 pvrdma="no"
3243fi
ths8d5d2d42007-08-25 01:37:51 +00003244
Yuval Shaiaee108582019-08-18 16:21:06 +03003245# Let's see if enhanced reg_mr is supported
3246if test "$pvrdma" = "yes" ; then
3247
3248cat > $TMPC <<EOF &&
3249#include <infiniband/verbs.h>
3250
3251int
3252main(void)
3253{
3254 struct ibv_mr *mr;
3255 struct ibv_pd *pd = NULL;
3256 size_t length = 10;
3257 uint64_t iova = 0;
3258 int access = 0;
3259 void *addr = NULL;
3260
3261 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3262
3263 ibv_dereg_mr(mr);
3264
3265 return 0;
3266}
3267EOF
3268 if ! compile_prog "" "-libverbs"; then
3269 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3270 fi
3271fi
3272
ths8d5d2d42007-08-25 01:37:51 +00003273##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003274# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003275if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003276 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003277#include <sasl/sasl.h>
3278#include <stdio.h>
3279int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3280EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003281 # Assuming Cyrus-SASL installed in /usr prefix
3282 vnc_sasl_cflags=""
3283 vnc_sasl_libs="-lsasl2"
3284 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3285 vnc_sasl=yes
3286 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003287 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003288 else
3289 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003290 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003291 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003292 vnc_sasl=no
3293 fi
aliguori2f9606b2009-03-06 20:27:28 +00003294fi
3295
3296##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003297# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003298if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003299cat > $TMPC <<EOF
3300#include <stdio.h>
3301#include <jpeglib.h>
3302int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3303EOF
3304 vnc_jpeg_cflags=""
3305 vnc_jpeg_libs="-ljpeg"
3306 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3307 vnc_jpeg=yes
3308 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003309 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003310 else
3311 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003312 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003313 fi
3314 vnc_jpeg=no
3315 fi
3316fi
3317
3318##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003319# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003320if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003321cat > $TMPC <<EOF
3322//#include <stdio.h>
3323#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003324#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003325int main(void) {
3326 png_structp png_ptr;
3327 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003328 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003329}
3330EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003331 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003332 vnc_png_cflags=$($pkg_config libpng --cflags)
3333 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003334 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003335 vnc_png_cflags=""
3336 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003337 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003338 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3339 vnc_png=yes
3340 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003341 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003342 else
3343 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003344 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003345 fi
3346 vnc_png=no
3347 fi
3348fi
3349
3350##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003351# xkbcommon probe
3352if test "$xkbcommon" != "no" ; then
3353 if $pkg_config xkbcommon --exists; then
3354 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3355 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3356 xkbcommon=yes
3357 else
3358 if test "$xkbcommon" = "yes" ; then
3359 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3360 fi
3361 xkbcommon=no
3362 fi
3363fi
3364
aliguori76655d62009-03-06 20:27:37 +00003365
3366##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003367# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003368if test "$xfs" != "no" ; then
3369 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003370#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003371#include <xfs/xfs.h>
3372int main(void)
3373{
3374 xfsctl(NULL, 0, 0, NULL);
3375 return 0;
3376}
3377EOF
3378 if compile_prog "" "" ; then
3379 xfs="yes"
3380 else
3381 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003382 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003383 fi
3384 xfs=no
3385 fi
3386fi
3387
3388##########################################
ths8a16d272008-07-19 09:56:24 +00003389# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003390if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003391 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003392 cat > $TMPC << EOF
3393#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003394int main(void)
3395{
3396 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003397 char s[] = "";
3398 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003399 return 0;
3400}
ths8a16d272008-07-19 09:56:24 +00003401EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003402 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003403 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003404 else
3405 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003406 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003407 fi
3408 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003409 fi
ths8a16d272008-07-19 09:56:24 +00003410fi
3411
3412##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003413# netmap support probe
3414# Apart from looking for netmap headers, we make sure that the host API version
3415# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3416# a minor/major version number. Minor new features will be marked with values up
3417# to 15, and if something happens that requires a change to the backend we will
3418# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003419if test "$netmap" != "no" ; then
3420 cat > $TMPC << EOF
3421#include <inttypes.h>
3422#include <net/if.h>
3423#include <net/netmap.h>
3424#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003425#if (NETMAP_API < 11) || (NETMAP_API > 15)
3426#error
3427#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003428int main(void) { return 0; }
3429EOF
3430 if compile_prog "" "" ; then
3431 netmap=yes
3432 else
3433 if test "$netmap" = "yes" ; then
3434 feature_not_found "netmap"
3435 fi
3436 netmap=no
3437 fi
3438fi
3439
3440##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003441# libcap-ng library probe
3442if test "$cap_ng" != "no" ; then
3443 cap_libs="-lcap-ng"
3444 cat > $TMPC << EOF
3445#include <cap-ng.h>
3446int main(void)
3447{
3448 capng_capability_to_name(CAPNG_EFFECTIVE);
3449 return 0;
3450}
3451EOF
3452 if compile_prog "" "$cap_libs" ; then
3453 cap_ng=yes
3454 libs_tools="$cap_libs $libs_tools"
3455 else
3456 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003457 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003458 fi
3459 cap_ng=no
3460 fi
3461fi
3462
3463##########################################
malcc2de5c92008-06-28 19:13:06 +00003464# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003465
Stefan Weil89138852016-05-16 15:10:20 +02003466audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003467for drv in $audio_drv_list; do
3468 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003469 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003470 if $pkg_config alsa --exists; then
3471 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003472 if test "$drv" = "try-alsa"; then
3473 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3474 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003475 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003476 if test "$drv" = "try-alsa"; then
3477 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3478 else
3479 error_exit "$drv check failed" \
3480 "Make sure to have the $drv libs and headers installed."
3481 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003482 fi
malcc2de5c92008-06-28 19:13:06 +00003483 ;;
3484
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003485 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003486 if $pkg_config libpulse --exists; then
3487 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003488 if test "$drv" = "try-pa"; then
3489 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3490 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003491 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003492 if test "$drv" = "try-pa"; then
3493 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3494 else
3495 error_exit "$drv check failed" \
3496 "Make sure to have the $drv libs and headers installed."
3497 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003498 fi
malcb8e59f12008-07-02 21:03:08 +00003499 ;;
3500
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003501 sdl)
3502 if test "$sdl" = "no"; then
3503 error_exit "sdl not found or disabled, can not use sdl audio driver"
3504 fi
3505 ;;
3506
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003507 try-sdl)
3508 if test "$sdl" = "no"; then
3509 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3510 else
3511 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3512 fi
3513 ;;
3514
Juan Quintela997e6902009-08-03 14:46:29 +02003515 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003516 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003517 ;;
3518
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003519 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003520 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003521 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003522 ;;
3523
3524 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003525 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003526 ;;
3527
malce4c63a62008-07-19 16:15:16 +00003528 *)
malc1c9b2a52008-07-19 16:57:30 +00003529 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003530 error_exit "Unknown driver '$drv' selected" \
3531 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003532 }
3533 ;;
malcc2de5c92008-06-28 19:13:06 +00003534 esac
3535done
ths8f28f3f2007-01-05 21:25:54 +00003536
balrog4d3b6f62008-02-10 16:33:14 +00003537##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003538# BrlAPI probe
3539
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003540if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003541 brlapi_libs="-lbrlapi"
3542 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003543#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003544#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003545int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3546EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003547 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003548 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003549 else
3550 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003551 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003552 fi
3553 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003554 fi
3555fi
aurel322e4d9fb2008-04-08 06:01:02 +00003556
3557##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003558# iconv probe
3559if test "$iconv" != "no" ; then
3560 cat > $TMPC << EOF
3561#include <iconv.h>
3562int main(void) {
3563 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3564 return conv != (iconv_t) -1;
3565}
3566EOF
3567 iconv_prefix_list="/usr/local:/usr"
3568 iconv_lib_list=":-liconv"
3569 IFS=:
3570 for iconv_prefix in $iconv_prefix_list; do
3571 IFS=:
3572 iconv_cflags="-I$iconv_prefix/include"
3573 iconv_ldflags="-L$iconv_prefix/lib"
3574 for iconv_link in $iconv_lib_list; do
3575 unset IFS
3576 iconv_lib="$iconv_ldflags $iconv_link"
3577 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3578 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3579 iconv_found=yes
3580 break
3581 fi
3582 done
3583 if test "$iconv_found" = yes ; then
3584 break
3585 fi
3586 done
3587 if test "$iconv_found" = "yes" ; then
3588 iconv=yes
3589 else
3590 if test "$iconv" = "yes" ; then
3591 feature_not_found "iconv" "Install iconv devel"
3592 fi
3593 iconv=no
3594 fi
3595fi
3596
3597##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003598# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003599if test "$iconv" = "no" ; then
3600 # curses will need iconv
3601 curses=no
3602fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003603if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003604 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003605 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3606 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003607 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003608 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003609 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003610 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003611 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003612 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003613#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003614#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003615#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003616#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003617int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003618 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003619 wchar_t wch = L'w';
3620 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003621 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003622 addwstr(L"wide chars\n");
3623 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003624 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003625 codeset = nl_langinfo(CODESET);
3626 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003627}
balrog4d3b6f62008-02-10 16:33:14 +00003628EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003629 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003630 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003631 # Make sure we get the wide character prototypes
3632 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003633 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003634 for curses_lib in $curses_lib_list; do
3635 unset IFS
3636 if compile_prog "$curses_inc" "$curses_lib" ; then
3637 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003638 break
3639 fi
3640 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003641 if test "$curses_found" = yes ; then
3642 break
3643 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003644 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003645 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003646 if test "$curses_found" = "yes" ; then
3647 curses=yes
3648 else
3649 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003650 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003651 fi
3652 curses=no
3653 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003654fi
balrog4d3b6f62008-02-10 16:33:14 +00003655
blueswir1414f0da2008-08-15 18:20:52 +00003656##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003657# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003658if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003659 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003660 curlconfig="$pkg_config libcurl"
3661 else
3662 curlconfig=curl-config
3663 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003664 cat > $TMPC << EOF
3665#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003666int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003667EOF
Stefan Weil89138852016-05-16 15:10:20 +02003668 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3669 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003670 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003671 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003672 else
3673 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003674 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003675 fi
3676 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003677 fi
3678fi # test "$curl"
3679
3680##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003681# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003682
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003683glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003684glib_modules=gthread-2.0
3685if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003686 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003687fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003688if test "$plugins" = yes; then
3689 glib_modules="$glib_modules gmodule-2.0"
3690fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003691
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003692# This workaround is required due to a bug in pkg-config file for glib as it
3693# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3694
Eric Blakee633a5c2019-02-04 20:39:37 -06003695if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003696 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3697fi
3698
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003699for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003700 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003701 glib_cflags=$($pkg_config --cflags $i)
3702 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003703 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003704 LIBS="$glib_libs $LIBS"
3705 libs_qga="$glib_libs $libs_qga"
3706 else
3707 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3708 fi
3709done
3710
Marc-André Lureauf876b762019-02-21 12:07:00 +01003711if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3712 gio=yes
3713 gio_cflags=$($pkg_config --cflags gio-2.0)
3714 gio_libs=$($pkg_config --libs gio-2.0)
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003715 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
Marc-André Lureau0dba4892020-01-10 15:27:25 +04003716 if [ ! -x "$gdbus_codegen" ]; then
3717 gdbus_codegen=
3718 fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01003719else
3720 gio=no
3721fi
3722
Marc-André Lureau25a97a52019-09-27 11:34:42 +04003723if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3724 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3725 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3726fi
3727
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003728# Sanity check that the current size_t matches the
3729# size that glib thinks it should be. This catches
3730# problems on multi-arch where people try to build
3731# 32-bit QEMU while pointing at 64-bit glib headers
3732cat > $TMPC <<EOF
3733#include <glib.h>
3734#include <unistd.h>
3735
3736#define QEMU_BUILD_BUG_ON(x) \
3737 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3738
3739int main(void) {
3740 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3741 return 0;
3742}
3743EOF
3744
Stefan Weil5919e032016-04-28 23:33:41 +02003745if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003746 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3747 "You probably need to set PKG_CONFIG_LIBDIR"\
3748 "to point to the right pkg-config files for your"\
3749 "build target"
3750fi
3751
John Snowbbbf2e02015-03-25 18:57:38 -04003752# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3753cat > $TMPC << EOF
3754#include <glib.h>
3755int main(void) { return 0; }
3756EOF
3757if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3758 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3759 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3760 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3761 fi
3762fi
3763
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003764#########################################
3765# zlib check
3766
3767if test "$zlib" != "no" ; then
3768 if $pkg_config --exists zlib; then
3769 zlib_cflags=$($pkg_config --cflags zlib)
3770 zlib_libs=$($pkg_config --libs zlib)
3771 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3772 LIBS="$zlib_libs $LIBS"
3773 else
3774 cat > $TMPC << EOF
3775#include <zlib.h>
3776int main(void) { zlibVersion(); return 0; }
3777EOF
3778 if compile_prog "" "-lz" ; then
3779 LIBS="$LIBS -lz"
3780 else
3781 error_exit "zlib check failed" \
3782 "Make sure to have the zlib libs and headers installed."
3783 fi
3784 fi
3785fi
3786
Fam Zhenge26110c2014-02-10 14:48:57 +08003787##########################################
3788# SHA command probe for modules
3789if test "$modules" = yes; then
3790 shacmd_probe="sha1sum sha1 shasum"
3791 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003792 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003793 shacmd="$c"
3794 break
3795 fi
3796 done
3797 if test "$shacmd" = ""; then
3798 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3799 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003800fi
3801
3802##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003803# pixman support probe
3804
Eric Blakee633a5c2019-02-04 20:39:37 -06003805if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003806 pixman_cflags=
3807 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003808elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003809 pixman_cflags=$($pkg_config --cflags pixman-1)
3810 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003811else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003812 error_exit "pixman >= 0.21.8 not present." \
3813 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003814fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003815
3816##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003817# libmpathpersist probe
3818
3819if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003820 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003821 cat > $TMPC <<EOF
3822#include <libudev.h>
3823#include <mpath_persist.h>
3824unsigned mpath_mx_alloc_len = 1024;
3825int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003826static struct config *multipath_conf;
3827extern struct udev *udev;
3828extern struct config *get_multipath_config(void);
3829extern void put_multipath_config(struct config *conf);
3830struct udev *udev;
3831struct config *get_multipath_config(void) { return multipath_conf; }
3832void put_multipath_config(struct config *conf) { }
3833
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003834int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003835 udev = udev_new();
3836 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003837 return 0;
3838}
3839EOF
3840 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3841 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003842 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003843 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003844 # probe for the old API
3845 cat > $TMPC <<EOF
3846#include <libudev.h>
3847#include <mpath_persist.h>
3848unsigned mpath_mx_alloc_len = 1024;
3849int logsink;
3850int main(void) {
3851 struct udev *udev = udev_new();
3852 mpath_lib_init(udev);
3853 return 0;
3854}
3855EOF
3856 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3857 mpathpersist=yes
3858 mpathpersist_new_api=no
3859 else
3860 mpathpersist=no
3861 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003862 fi
3863else
3864 mpathpersist=no
3865fi
3866
3867##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003868# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003869PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003870
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003871pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003872cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003873#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003874static void *f(void *p) { return NULL; }
3875int main(void) {
3876 pthread_t thread;
3877 pthread_create(&thread, 0, f, 0);
3878 return 0;
3879}
blueswir1414f0da2008-08-15 18:20:52 +00003880EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003881if compile_prog "" "" ; then
3882 pthread=yes
3883else
3884 for pthread_lib in $PTHREADLIBS_LIST; do
3885 if compile_prog "" "$pthread_lib" ; then
3886 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003887 found=no
3888 for lib_entry in $LIBS; do
3889 if test "$lib_entry" = "$pthread_lib"; then
3890 found=yes
3891 break
3892 fi
3893 done
3894 if test "$found" = "no"; then
3895 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003896 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003897 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003898 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003899 break
3900 fi
3901 done
3902fi
blueswir1414f0da2008-08-15 18:20:52 +00003903
Eric Blakee633a5c2019-02-04 20:39:37 -06003904if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003905 error_exit "pthread check failed" \
3906 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003907fi
3908
Roman Bolshakov479a5742018-12-17 23:26:01 +03003909# check for pthread_setname_np with thread id
3910pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003911cat > $TMPC << EOF
3912#include <pthread.h>
3913
3914static void *f(void *p) { return NULL; }
3915int main(void)
3916{
3917 pthread_t thread;
3918 pthread_create(&thread, 0, f, 0);
3919 pthread_setname_np(thread, "QEMU");
3920 return 0;
3921}
3922EOF
3923if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003924 pthread_setname_np_w_tid=yes
3925fi
3926
3927# check for pthread_setname_np without thread id
3928pthread_setname_np_wo_tid=no
3929cat > $TMPC << EOF
3930#include <pthread.h>
3931
3932static void *f(void *p) { pthread_setname_np("QEMU"); }
3933int main(void)
3934{
3935 pthread_t thread;
3936 pthread_create(&thread, 0, f, 0);
3937 return 0;
3938}
3939EOF
3940if compile_prog "" "$pthread_lib" ; then
3941 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003942fi
3943
aliguoribf9298b2008-12-05 20:05:26 +00003944##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003945# rbd probe
3946if test "$rbd" != "no" ; then
3947 cat > $TMPC <<EOF
3948#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003949#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003950int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003951 rados_t cluster;
3952 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003953 return 0;
3954}
3955EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003956 rbd_libs="-lrbd -lrados"
3957 if compile_prog "" "$rbd_libs" ; then
3958 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003959 else
3960 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003961 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003962 fi
3963 rbd=no
3964 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003965fi
3966
3967##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003968# libssh probe
3969if test "$libssh" != "no" ; then
3970 if $pkg_config --exists libssh; then
3971 libssh_cflags=$($pkg_config libssh --cflags)
3972 libssh_libs=$($pkg_config libssh --libs)
3973 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003974 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02003975 if test "$libssh" = "yes" ; then
3976 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003977 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02003978 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003979 fi
3980fi
3981
3982##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003983# Check for libssh 0.8
3984# This is done like this instead of using the LIBSSH_VERSION_* and
3985# SSH_VERSION_* macros because some distributions in the past shipped
3986# snapshots of the future 0.8 from Git, and those snapshots did not
3987# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003988
Pino Toscanob10d49d2019-06-20 22:08:40 +02003989if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003990 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003991#include <libssh/libssh.h>
3992int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003993EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003994 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3995 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003996 fi
3997fi
3998
3999##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004000# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004001
4002if test "$linux_aio" != "no" ; then
4003 cat > $TMPC <<EOF
4004#include <libaio.h>
4005#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004006#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004007int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4008EOF
4009 if compile_prog "" "-laio" ; then
4010 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004011 else
4012 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004013 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004014 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004015 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004016 fi
4017fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00004018##########################################
4019# linux-io-uring probe
4020
4021if test "$linux_io_uring" != "no" ; then
4022 if $pkg_config liburing; then
4023 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4024 linux_io_uring_libs=$($pkg_config --libs liburing)
4025 linux_io_uring=yes
4026 else
4027 if test "$linux_io_uring" = "yes" ; then
4028 feature_not_found "linux io_uring" "Install liburing devel"
4029 fi
4030 linux_io_uring=no
4031 fi
4032fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004033
4034##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004035# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004036
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004037if test "$tpm" = ""; then
4038 if test "$mingw32" = "yes"; then
4039 tpm=no
4040 else
4041 tpm=yes
4042 fi
4043elif test "$tpm" = "yes"; then
4044 if test "$mingw32" = "yes" ; then
4045 error_exit "TPM emulation only available on POSIX systems"
4046 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004047fi
4048
4049##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004050# attr probe
4051
4052if test "$attr" != "no" ; then
4053 cat > $TMPC <<EOF
4054#include <stdio.h>
4055#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004056#ifdef CONFIG_LIBATTR
4057#include <attr/xattr.h>
4058#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004059#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004060#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004061int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4062EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004063 if compile_prog "" "" ; then
4064 attr=yes
4065 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004066 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004067 attr=yes
4068 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004069 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004070 else
4071 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004072 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004073 fi
4074 attr=no
4075 fi
4076fi
4077
4078##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004079# iovec probe
4080cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004081#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004082#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004083#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004084int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004085EOF
4086iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004087if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004088 iovec=yes
4089fi
4090
aurel32f652e6a2008-12-16 10:43:48 +00004091##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004092# preadv probe
4093cat > $TMPC <<EOF
4094#include <sys/types.h>
4095#include <sys/uio.h>
4096#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004097int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004098EOF
4099preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004100if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004101 preadv=yes
4102fi
4103
4104##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004105# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004106# fdt support is mandatory for at least some target architectures,
4107# so insist on it if we're building those system emulators.
4108fdt_required=no
4109for target in $target_list; do
4110 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004111 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004112 fdt_required=yes
4113 ;;
4114 esac
4115done
4116
4117if test "$fdt_required" = "yes"; then
4118 if test "$fdt" = "no"; then
4119 error_exit "fdt disabled but some requested targets require it." \
4120 "You can turn off fdt only if you also disable all the system emulation" \
4121 "targets which need it (by specifying a cut down --target-list)."
4122 fi
4123 fdt=yes
Philippe Mathieu-Daudé7ba4a4d2020-01-18 15:06:14 +01004124elif test "$fdt" != "yes" ; then
4125 fdt=no
Peter Maydelle169e1e2013-05-24 16:26:54 +01004126fi
4127
Juan Quintela2df87df2009-08-12 18:29:54 +02004128if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004129 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004130 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004131 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004132 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004133#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004134#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004135int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004136EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004137 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004138 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004139 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004140 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004141 # have GIT checkout, so activate dtc submodule
4142 if test -e "${source_path}/.git" ; then
4143 git_submodules="${git_submodules} dtc"
4144 fi
4145 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004146 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004147 mkdir -p dtc
4148 if [ "$pwd_is_source_path" != "y" ] ; then
4149 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4150 symlink "$source_path/dtc/scripts" "dtc/scripts"
4151 fi
4152 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004153 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4154 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004155 elif test "$fdt" = "yes" ; then
4156 # Not a git build & no libfdt found, prompt for system install
4157 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4158 "Please install the DTC (libfdt) devel package"
4159 else
4160 # don't have and don't want
4161 fdt_libs=
4162 fdt=no
4163 fi
aurel32f652e6a2008-12-16 10:43:48 +00004164 fi
4165fi
4166
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004167libs_softmmu="$libs_softmmu $fdt_libs"
4168
Michael Walle20ff0752011-03-07 23:32:39 +01004169##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004170# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004171
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004172gbm="no"
4173if $pkg_config gbm; then
4174 gbm_cflags="$($pkg_config --cflags gbm)"
4175 gbm_libs="$($pkg_config --libs gbm)"
4176 gbm="yes"
4177fi
4178
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004179if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004180 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004181 if $pkg_config $opengl_pkgs; then
4182 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4183 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004184 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004185 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4186 gtk_gl="yes"
4187 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004188 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004189 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004190 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004191 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004192 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004193 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004194 opengl_libs=""
4195 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004196 fi
4197fi
4198
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004199if test "$opengl" = "yes"; then
4200 cat > $TMPC << EOF
4201#include <epoxy/egl.h>
4202#ifndef EGL_MESA_image_dma_buf_export
4203# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4204#endif
4205int main(void) { return 0; }
4206EOF
4207 if compile_prog "" "" ; then
4208 opengl_dmabuf=yes
4209 fi
4210fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004211
Eric Blakee633a5c2019-02-04 20:39:37 -06004212if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004213 for target in $target_list; do
4214 case $target in
4215 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4216 need_x11=yes
4217 ;;
4218 esac
4219 done
4220fi
4221
Klim Kireeved279a02018-01-12 12:01:19 +03004222##########################################
4223# libxml2 probe
4224if test "$libxml2" != "no" ; then
4225 if $pkg_config --exists libxml-2.0; then
4226 libxml2="yes"
4227 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4228 libxml2_libs=$($pkg_config --libs libxml-2.0)
4229 else
4230 if test "$libxml2" = "yes"; then
4231 feature_not_found "libxml2" "Install libxml2 devel"
4232 fi
4233 libxml2="no"
4234 fi
4235fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004236
Bharata B Raoeb100392012-09-24 14:42:45 +05304237##########################################
4238# glusterfs probe
4239if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004240 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304241 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004242 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4243 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004244 if $pkg_config --atleast-version=4 glusterfs-api; then
4245 glusterfs_xlator_opt="yes"
4246 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004247 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304248 glusterfs_discard="yes"
4249 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304250 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304251 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304252 glusterfs_zerofill="yes"
4253 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004254 cat > $TMPC << EOF
4255#include <glusterfs/api/glfs.h>
4256
4257int
4258main(void)
4259{
4260 /* new glfs_ftruncate() passes two additional args */
4261 return glfs_ftruncate(NULL, 0, NULL, NULL);
4262}
4263EOF
4264 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4265 glusterfs_ftruncate_has_stat="yes"
4266 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004267 cat > $TMPC << EOF
4268#include <glusterfs/api/glfs.h>
4269
4270/* new glfs_io_cbk() passes two additional glfs_stat structs */
4271static void
4272glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4273{}
4274
4275int
4276main(void)
4277{
4278 glfs_io_cbk iocb = &glusterfs_iocb;
4279 iocb(NULL, 0 , NULL, NULL, NULL);
4280 return 0;
4281}
4282EOF
4283 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4284 glusterfs_iocb_has_stat="yes"
4285 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304286 else
4287 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004288 feature_not_found "GlusterFS backend support" \
4289 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304290 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304291 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304292 fi
4293fi
4294
aurel3239386ac2009-04-15 19:48:17 +00004295# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004296# emulator. This is done because older glibc versions don't
4297# have syscall stubs for these implemented. In that case we
4298# don't provide them even if kernel supports them.
4299#
4300inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004301cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004302#include <sys/inotify.h>
4303
4304int
4305main(void)
4306{
4307 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004308 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004309}
4310EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004311if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004312 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004313fi
4314
Riku Voipioc05c7a72010-03-26 15:25:11 +00004315inotify1=no
4316cat > $TMPC << EOF
4317#include <sys/inotify.h>
4318
4319int
4320main(void)
4321{
4322 /* try to start inotify */
4323 return inotify_init1(0);
4324}
4325EOF
4326if compile_prog "" "" ; then
4327 inotify1=yes
4328fi
4329
Riku Voipio099d6b02009-05-05 12:10:04 +03004330# check if pipe2 is there
4331pipe2=no
4332cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004333#include <unistd.h>
4334#include <fcntl.h>
4335
4336int main(void)
4337{
4338 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004339 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004340}
4341EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004342if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004343 pipe2=yes
4344fi
4345
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004346# check if accept4 is there
4347accept4=no
4348cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004349#include <sys/socket.h>
4350#include <stddef.h>
4351
4352int main(void)
4353{
4354 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4355 return 0;
4356}
4357EOF
4358if compile_prog "" "" ; then
4359 accept4=yes
4360fi
4361
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304362# check if tee/splice is there. vmsplice was added same time.
4363splice=no
4364cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304365#include <unistd.h>
4366#include <fcntl.h>
4367#include <limits.h>
4368
4369int main(void)
4370{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004371 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304372 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4373 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4374 return 0;
4375}
4376EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004377if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304378 splice=yes
4379fi
4380
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004381##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004382# libnuma probe
4383
4384if test "$numa" != "no" ; then
4385 cat > $TMPC << EOF
4386#include <numa.h>
4387int main(void) { return numa_available(); }
4388EOF
4389
4390 if compile_prog "" "-lnuma" ; then
4391 numa=yes
4392 libs_softmmu="-lnuma $libs_softmmu"
4393 else
4394 if test "$numa" = "yes" ; then
4395 feature_not_found "numa" "install numactl devel"
4396 fi
4397 numa=no
4398 fi
4399fi
4400
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004401if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4402 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4403 exit 1
4404fi
4405
Yang Zhong5a22ab72017-12-20 21:16:46 +08004406# Even if malloc_trim() is available, these non-libc memory allocators
4407# do not support it.
4408if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4409 if test "$malloc_trim" = "yes" ; then
4410 echo "Disabling malloc_trim with non-libc memory allocator"
4411 fi
4412 malloc_trim="no"
4413fi
4414
4415#######################################
4416# malloc_trim
4417
4418if test "$malloc_trim" != "no" ; then
4419 cat > $TMPC << EOF
4420#include <malloc.h>
4421int main(void) { malloc_trim(0); return 0; }
4422EOF
4423 if compile_prog "" "" ; then
4424 malloc_trim="yes"
4425 else
4426 malloc_trim="no"
4427 fi
4428fi
4429
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004430##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004431# tcmalloc probe
4432
4433if test "$tcmalloc" = "yes" ; then
4434 cat > $TMPC << EOF
4435#include <stdlib.h>
4436int main(void) { malloc(1); return 0; }
4437EOF
4438
4439 if compile_prog "" "-ltcmalloc" ; then
4440 LIBS="-ltcmalloc $LIBS"
4441 else
4442 feature_not_found "tcmalloc" "install gperftools devel"
4443 fi
4444fi
4445
4446##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004447# jemalloc probe
4448
4449if test "$jemalloc" = "yes" ; then
4450 cat > $TMPC << EOF
4451#include <stdlib.h>
4452int main(void) { malloc(1); return 0; }
4453EOF
4454
4455 if compile_prog "" "-ljemalloc" ; then
4456 LIBS="-ljemalloc $LIBS"
4457 else
4458 feature_not_found "jemalloc" "install jemalloc devel"
4459 fi
4460fi
4461
4462##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004463# signalfd probe
4464signalfd="no"
4465cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004466#include <unistd.h>
4467#include <sys/syscall.h>
4468#include <signal.h>
4469int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4470EOF
4471
4472if compile_prog "" "" ; then
4473 signalfd=yes
4474fi
4475
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004476# check if optreset global is declared by <getopt.h>
4477optreset="no"
4478cat > $TMPC << EOF
4479#include <getopt.h>
4480int main(void) { return optreset; }
4481EOF
4482
4483if compile_prog "" "" ; then
4484 optreset=yes
4485fi
4486
Riku Voipioc2882b92009-08-12 15:08:24 +03004487# check if eventfd is supported
4488eventfd=no
4489cat > $TMPC << EOF
4490#include <sys/eventfd.h>
4491
4492int main(void)
4493{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004494 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004495}
4496EOF
4497if compile_prog "" "" ; then
4498 eventfd=yes
4499fi
4500
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004501# check if memfd is supported
4502memfd=no
4503cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004504#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004505
4506int main(void)
4507{
4508 return memfd_create("foo", MFD_ALLOW_SEALING);
4509}
4510EOF
4511if compile_prog "" "" ; then
4512 memfd=yes
4513fi
4514
Cortland Tölva955727d2018-10-08 09:35:19 -07004515# check for usbfs
4516have_usbfs=no
4517if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004518 cat > $TMPC << EOF
4519#include <linux/usbdevice_fs.h>
4520
4521#ifndef USBDEVFS_GET_CAPABILITIES
4522#error "USBDEVFS_GET_CAPABILITIES undefined"
4523#endif
4524
4525#ifndef USBDEVFS_DISCONNECT_CLAIM
4526#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4527#endif
4528
4529int main(void)
4530{
4531 return 0;
4532}
4533EOF
4534 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004535 have_usbfs=yes
4536 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004537fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004538
Ulrich Hechtd0927932009-09-17 20:22:14 +03004539# check for fallocate
4540fallocate=no
4541cat > $TMPC << EOF
4542#include <fcntl.h>
4543
4544int main(void)
4545{
4546 fallocate(0, 0, 0, 0);
4547 return 0;
4548}
4549EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004550if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004551 fallocate=yes
4552fi
4553
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004554# check for fallocate hole punching
4555fallocate_punch_hole=no
4556cat > $TMPC << EOF
4557#include <fcntl.h>
4558#include <linux/falloc.h>
4559
4560int main(void)
4561{
4562 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4563 return 0;
4564}
4565EOF
4566if compile_prog "" "" ; then
4567 fallocate_punch_hole=yes
4568fi
4569
Denis V. Lunevb953f072015-01-30 11:42:14 +03004570# check that fallocate supports range zeroing inside the file
4571fallocate_zero_range=no
4572cat > $TMPC << EOF
4573#include <fcntl.h>
4574#include <linux/falloc.h>
4575
4576int main(void)
4577{
4578 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4579 return 0;
4580}
4581EOF
4582if compile_prog "" "" ; then
4583 fallocate_zero_range=yes
4584fi
4585
Kevin Wolfed911432014-09-29 17:12:59 +02004586# check for posix_fallocate
4587posix_fallocate=no
4588cat > $TMPC << EOF
4589#include <fcntl.h>
4590
4591int main(void)
4592{
4593 posix_fallocate(0, 0, 0);
4594 return 0;
4595}
4596EOF
4597if compile_prog "" "" ; then
4598 posix_fallocate=yes
4599fi
4600
Peter Maydellc727f472011-01-06 11:05:10 +00004601# check for sync_file_range
4602sync_file_range=no
4603cat > $TMPC << EOF
4604#include <fcntl.h>
4605
4606int main(void)
4607{
4608 sync_file_range(0, 0, 0, 0);
4609 return 0;
4610}
4611EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004612if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004613 sync_file_range=yes
4614fi
4615
Peter Maydelldace20d2011-01-10 13:11:24 +00004616# check for linux/fiemap.h and FS_IOC_FIEMAP
4617fiemap=no
4618cat > $TMPC << EOF
4619#include <sys/ioctl.h>
4620#include <linux/fs.h>
4621#include <linux/fiemap.h>
4622
4623int main(void)
4624{
4625 ioctl(0, FS_IOC_FIEMAP, 0);
4626 return 0;
4627}
4628EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004629if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004630 fiemap=yes
4631fi
4632
Ulrich Hechtd0927932009-09-17 20:22:14 +03004633# check for dup3
4634dup3=no
4635cat > $TMPC << EOF
4636#include <unistd.h>
4637
4638int main(void)
4639{
4640 dup3(0, 0, 0);
4641 return 0;
4642}
4643EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004644if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004645 dup3=yes
4646fi
4647
Alex Bligh4e0c6522013-08-21 16:02:43 +01004648# check for ppoll support
4649ppoll=no
4650cat > $TMPC << EOF
4651#include <poll.h>
4652
4653int main(void)
4654{
4655 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4656 ppoll(&pfd, 1, 0, 0);
4657 return 0;
4658}
4659EOF
4660if compile_prog "" "" ; then
4661 ppoll=yes
4662fi
4663
Alex Blighcd758dd2013-08-21 16:02:44 +01004664# check for prctl(PR_SET_TIMERSLACK , ... ) support
4665prctl_pr_set_timerslack=no
4666cat > $TMPC << EOF
4667#include <sys/prctl.h>
4668
4669int main(void)
4670{
4671 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4672 return 0;
4673}
4674EOF
4675if compile_prog "" "" ; then
4676 prctl_pr_set_timerslack=yes
4677fi
4678
Peter Maydell3b6edd12011-02-15 18:35:05 +00004679# check for epoll support
4680epoll=no
4681cat > $TMPC << EOF
4682#include <sys/epoll.h>
4683
4684int main(void)
4685{
4686 epoll_create(0);
4687 return 0;
4688}
4689EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004690if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004691 epoll=yes
4692fi
4693
Peter Maydell227f0212016-06-06 19:58:11 +01004694# epoll_create1 is a later addition
4695# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004696epoll_create1=no
4697cat > $TMPC << EOF
4698#include <sys/epoll.h>
4699
4700int main(void)
4701{
Peter Maydell19e83f62011-04-26 16:56:40 +01004702 /* Note that we use epoll_create1 as a value, not as
4703 * a function being called. This is necessary so that on
4704 * old SPARC glibc versions where the function was present in
4705 * the library but not declared in the header file we will
4706 * fail the configure check. (Otherwise we will get a compiler
4707 * warning but not an error, and will proceed to fail the
4708 * qemu compile where we compile with -Werror.)
4709 */
Blue Swirlc075a722012-08-09 20:21:25 +00004710 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004711}
4712EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004713if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004714 epoll_create1=yes
4715fi
4716
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004717# check for sendfile support
4718sendfile=no
4719cat > $TMPC << EOF
4720#include <sys/sendfile.h>
4721
4722int main(void)
4723{
4724 return sendfile(0, 0, 0, 0);
4725}
4726EOF
4727if compile_prog "" "" ; then
4728 sendfile=yes
4729fi
4730
Riku Voipio51834342014-06-22 11:25:42 +01004731# check for timerfd support (glibc 2.8 and newer)
4732timerfd=no
4733cat > $TMPC << EOF
4734#include <sys/timerfd.h>
4735
4736int main(void)
4737{
4738 return(timerfd_create(CLOCK_REALTIME, 0));
4739}
4740EOF
4741if compile_prog "" "" ; then
4742 timerfd=yes
4743fi
4744
Riku Voipio9af5c902014-08-12 15:58:57 +03004745# check for setns and unshare support
4746setns=no
4747cat > $TMPC << EOF
4748#include <sched.h>
4749
4750int main(void)
4751{
4752 int ret;
4753 ret = setns(0, 0);
4754 ret = unshare(0);
4755 return ret;
4756}
4757EOF
4758if compile_prog "" "" ; then
4759 setns=yes
4760fi
4761
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004762# clock_adjtime probe
4763clock_adjtime=no
4764cat > $TMPC <<EOF
4765#include <time.h>
4766
4767int main(void)
4768{
4769 return clock_adjtime(0, 0);
4770}
4771EOF
4772clock_adjtime=no
4773if compile_prog "" "" ; then
4774 clock_adjtime=yes
4775fi
4776
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004777# syncfs probe
4778syncfs=no
4779cat > $TMPC <<EOF
4780#include <unistd.h>
4781
4782int main(void)
4783{
4784 return syncfs(0);
4785}
4786EOF
4787syncfs=no
4788if compile_prog "" "" ; then
4789 syncfs=yes
4790fi
4791
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01004792# check for kcov support (kernel must be 4.4+, compiled with certain options)
4793kcov=no
4794if check_include sys/kcov.h ; then
4795 kcov=yes
4796fi
4797
Peter Maydell5f71eac2019-03-07 14:26:46 +00004798# Check we have a new enough version of sphinx-build
4799has_sphinx_build() {
4800 # This is a bit awkward but works: create a trivial document and
4801 # try to run it with our configuration file (which enforces a
4802 # version requirement). This will fail if either
4803 # sphinx-build doesn't exist at all or if it is too old.
4804 mkdir -p "$TMPDIR1/sphinx"
4805 touch "$TMPDIR1/sphinx/index.rst"
Peter Maydell2eb054c2020-02-13 17:56:18 +00004806 $sphinx_build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
Peter Maydell5f71eac2019-03-07 14:26:46 +00004807}
4808
pbrookcc8ae6d2006-04-23 17:57:59 +00004809# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004810if test "$docs" != "no" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004811 if has makeinfo && has pod2man && has_sphinx_build; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004812 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004813 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004814 if test "$docs" = "yes" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004815 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004816 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004817 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004818 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004819fi
4820
Stefan Weilf514f412009-10-11 12:44:07 +02004821# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004822byteswap_h=no
4823cat > $TMPC << EOF
4824#include <byteswap.h>
4825int main(void) { return bswap_32(0); }
4826EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004827if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004828 byteswap_h=yes
4829fi
4830
Stefan Weil75f13592013-01-05 12:17:38 +01004831# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004832bswap_h=no
4833cat > $TMPC << EOF
4834#include <sys/endian.h>
4835#include <sys/types.h>
4836#include <machine/bswap.h>
4837int main(void) { return bswap32(0); }
4838EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004839if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004840 bswap_h=yes
4841fi
4842
aliguorida93a1f2008-12-12 20:02:52 +00004843##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004844# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004845if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004846 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004847 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004848 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4849 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004850 else
4851 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004852 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004853 fi
4854 libiscsi="no"
4855 fi
4856fi
4857
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004858##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004859# Do we need libm
4860cat > $TMPC << EOF
4861#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004862int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004863EOF
4864if compile_prog "" "" ; then
4865 :
4866elif compile_prog "" "-lm" ; then
4867 LIBS="-lm $LIBS"
4868 libs_qga="-lm $libs_qga"
4869else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004870 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004871fi
4872
4873##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004874# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004875# uClibc provides 2 versions of clock_gettime(), one with realtime
4876# support and one without. This means that the clock_gettime() don't
4877# need -lrt. We still need it for timer_create() so we check for this
4878# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004879cat > $TMPC <<EOF
4880#include <signal.h>
4881#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004882int main(void) {
4883 timer_create(CLOCK_REALTIME, NULL, NULL);
4884 return clock_gettime(CLOCK_REALTIME, NULL);
4885}
aliguorida93a1f2008-12-12 20:02:52 +00004886EOF
4887
Juan Quintela52166aa2009-08-03 14:46:03 +02004888if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004889 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004890# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004891elif compile_prog "" "$pthread_lib -lrt" ; then
4892 LIBS="$LIBS -lrt"
4893 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004894fi
4895
Thomas Huthd99e97e2019-01-17 18:14:08 +01004896# Check whether we need to link libutil for openpty()
4897cat > $TMPC << EOF
4898extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4899int main(void) { return openpty(0, 0, 0, 0, 0); }
4900EOF
4901
4902if ! compile_prog "" "" ; then
4903 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004904 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004905 libs_tools="-lutil $libs_tools"
4906 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004907fi
4908
Blue Swirlde5071c2009-09-12 09:58:46 +00004909##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004910# spice probe
4911if test "$spice" != "no" ; then
4912 cat > $TMPC << EOF
4913#include <spice.h>
4914int main(void) { spice_server_new(); return 0; }
4915EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004916 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4917 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004918 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004919 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004920 compile_prog "$spice_cflags" "$spice_libs" ; then
4921 spice="yes"
4922 libs_softmmu="$libs_softmmu $spice_libs"
4923 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004924 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4925 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004926 else
4927 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004928 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004929 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004930 fi
4931 spice="no"
4932 fi
4933fi
4934
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004935# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004936if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004937 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004938 libcacard_cflags=$($pkg_config --cflags libcacard)
4939 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004940 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004941 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004942 if test "$smartcard" = "yes"; then
4943 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004944 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004945 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004946 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004947fi
4948
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004949# check for libusb
4950if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004951 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004952 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004953 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4954 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004955 else
4956 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004957 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004958 fi
4959 libusb="no"
4960 fi
4961fi
4962
Hans de Goede69354a82011-07-19 11:04:10 +02004963# check for usbredirparser for usb network redirection support
4964if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004965 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004966 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004967 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4968 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004969 else
4970 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004971 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004972 fi
4973 usb_redir="no"
4974 fi
4975fi
4976
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004977##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004978# check if we have VSS SDK headers for win
4979
Eric Blakee633a5c2019-02-04 20:39:37 -06004980if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4981 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004982 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004983 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004984 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4985 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004986 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004987 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4988 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004989 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004990 esac
4991 cat > $TMPC << EOF
4992#define __MIDL_user_allocate_free_DEFINED__
4993#include <inc/win2003/vss.h>
4994int main(void) { return VSS_CTX_BACKUP; }
4995EOF
4996 if compile_prog "$vss_win32_include" "" ; then
4997 guest_agent_with_vss="yes"
4998 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004999 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05005000 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005001 else
5002 if test "$vss_win32_sdk" != "" ; then
5003 echo "ERROR: Please download and install Microsoft VSS SDK:"
5004 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5005 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5006 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5007 echo "ERROR: The headers are extracted in the directory \`inc'."
5008 feature_not_found "VSS support"
5009 fi
5010 guest_agent_with_vss="no"
5011 fi
5012fi
5013
5014##########################################
5015# lookup Windows platform SDK (if not specified)
5016# The SDK is needed only to build .tlb (type library) file of guest agent
5017# VSS provider from the source. It is usually unnecessary because the
5018# pre-compiled .tlb file is included.
5019
Eric Blakee633a5c2019-02-04 20:39:37 -06005020if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5021 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005022 if test -z "$win_sdk"; then
5023 programfiles="$PROGRAMFILES"
5024 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5025 if test -n "$programfiles"; then
5026 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5027 else
5028 feature_not_found "Windows SDK"
5029 fi
5030 elif test "$win_sdk" = "no"; then
5031 win_sdk=""
5032 fi
5033fi
5034
5035##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005036# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005037if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005038 cat > $TMPC << EOF
5039#include <windows.h>
5040#include <ntddscsi.h>
5041int main(void) {
5042#if !defined(IOCTL_SCSI_GET_ADDRESS)
5043#error Missing required ioctl definitions
5044#endif
5045 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5046 return addr.Lun;
5047}
5048EOF
5049 if compile_prog "" "" ; then
5050 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005051 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005052 fi
5053fi
5054
5055##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005056# virgl renderer probe
5057
5058if test "$virglrenderer" != "no" ; then
5059 cat > $TMPC << EOF
5060#include <virglrenderer.h>
5061int main(void) { virgl_renderer_poll(); return 0; }
5062EOF
5063 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5064 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005065 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005066 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5067 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5068 virglrenderer="yes"
5069 else
5070 if test "$virglrenderer" = "yes" ; then
5071 feature_not_found "virglrenderer"
5072 fi
5073 virglrenderer="no"
5074 fi
5075fi
5076
5077##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005078# capstone
5079
Richard Hendersone219c492017-09-28 09:01:23 -07005080case "$capstone" in
5081 "" | yes)
5082 if $pkg_config capstone; then
5083 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005084 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005085 capstone=git
5086 elif test -e "${source_path}/capstone/Makefile" ; then
5087 capstone=internal
5088 elif test -z "$capstone" ; then
5089 capstone=no
5090 else
5091 feature_not_found "capstone" "Install capstone devel or git submodule"
5092 fi
5093 ;;
5094
5095 system)
5096 if ! $pkg_config capstone; then
5097 feature_not_found "capstone" "Install capstone devel"
5098 fi
5099 ;;
5100esac
5101
5102case "$capstone" in
5103 git | internal)
5104 if test "$capstone" = git; then
5105 git_submodules="${git_submodules} capstone"
5106 fi
5107 mkdir -p capstone
5108 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5109 if test "$mingw32" = "yes"; then
5110 LIBCAPSTONE=capstone.lib
5111 else
5112 LIBCAPSTONE=libcapstone.a
5113 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005114 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005115 ;;
5116
5117 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005118 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005119 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005120 ;;
5121
5122 no)
5123 ;;
5124 *)
5125 error_exit "Unknown state for capstone: $capstone"
5126 ;;
5127esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005128
5129##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005130# check if we have fdatasync
5131
5132fdatasync=no
5133cat > $TMPC << EOF
5134#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005135int main(void) {
5136#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5137return fdatasync(0);
5138#else
Stefan Weile172fe12012-04-06 21:33:20 +02005139#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005140#endif
5141}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005142EOF
5143if compile_prog "" "" ; then
5144 fdatasync=yes
5145fi
5146
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005147##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005148# check if we have madvise
5149
5150madvise=no
5151cat > $TMPC << EOF
5152#include <sys/types.h>
5153#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005154#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005155int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5156EOF
5157if compile_prog "" "" ; then
5158 madvise=yes
5159fi
5160
5161##########################################
5162# check if we have posix_madvise
5163
5164posix_madvise=no
5165cat > $TMPC << EOF
5166#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005167#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005168int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5169EOF
5170if compile_prog "" "" ; then
5171 posix_madvise=yes
5172fi
5173
5174##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005175# check if we have posix_memalign()
5176
5177posix_memalign=no
5178cat > $TMPC << EOF
5179#include <stdlib.h>
5180int main(void) {
5181 void *p;
5182 return posix_memalign(&p, 8, 8);
5183}
5184EOF
5185if compile_prog "" "" ; then
5186 posix_memalign=yes
5187fi
5188
5189##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005190# check if we have posix_syslog
5191
5192posix_syslog=no
5193cat > $TMPC << EOF
5194#include <syslog.h>
5195int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5196EOF
5197if compile_prog "" "" ; then
5198 posix_syslog=yes
5199fi
5200
5201##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005202# check if we have sem_timedwait
5203
5204sem_timedwait=no
5205cat > $TMPC << EOF
5206#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005207int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005208EOF
5209if compile_prog "" "" ; then
5210 sem_timedwait=yes
5211fi
5212
5213##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005214# check if we have strchrnul
5215
5216strchrnul=no
5217cat > $TMPC << EOF
5218#include <string.h>
5219int main(void);
5220// Use a haystack that the compiler shouldn't be able to constant fold
5221char *haystack = (char*)&main;
5222int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5223EOF
5224if compile_prog "" "" ; then
5225 strchrnul=yes
5226fi
5227
Jiufei Xue8a792b02019-04-17 03:08:56 +08005228#########################################
5229# check if we have st_atim
5230
5231st_atim=no
5232cat > $TMPC << EOF
5233#include <sys/stat.h>
5234#include <stddef.h>
5235int main(void) { return offsetof(struct stat, st_atim); }
5236EOF
5237if compile_prog "" "" ; then
5238 st_atim=yes
5239fi
5240
Keno Fischer5c99fa32018-06-29 12:32:10 +02005241##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005242# check if trace backend exists
5243
Lluís Vilanova5b808272014-05-27 15:02:14 +02005244$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005245if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02005246 error_exit "invalid trace backends" \
5247 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005248fi
5249
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005250##########################################
5251# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005252if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005253 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005254#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005255int main(void) { return 0; }
5256EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005257 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005258 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005259 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005260 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005261 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005262 fi
5263 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005264 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005265 else
5266 urcu_bp_libs="-lurcu-bp"
5267 fi
5268
5269 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5270 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005271 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005272 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005273 fi
5274fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005275
5276##########################################
5277# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02005278if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005279 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005280 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005281 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005282 trace_backend_stap="no"
5283 if has 'stap' ; then
5284 trace_backend_stap="yes"
5285 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005286fi
5287
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005288##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005289# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305290
Peter Maydell7c2acc72013-04-08 12:11:27 +01005291# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005292# is sigcontext. On Windows the only valid backend is the Windows
5293# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005294
5295ucontext_works=no
5296if test "$darwin" != "yes"; then
5297 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305298#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005299#ifdef __stub_makecontext
5300#error Ignoring glibc stub makecontext which will always fail
5301#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005302int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305303EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005304 if compile_prog "" "" ; then
5305 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305306 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005307fi
5308
5309if test "$coroutine" = ""; then
5310 if test "$mingw32" = "yes"; then
5311 coroutine=win32
5312 elif test "$ucontext_works" = "yes"; then
5313 coroutine=ucontext
5314 else
5315 coroutine=sigaltstack
5316 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005317else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005318 case $coroutine in
5319 windows)
5320 if test "$mingw32" != "yes"; then
5321 error_exit "'windows' coroutine backend only valid for Windows"
5322 fi
5323 # Unfortunately the user visible backend name doesn't match the
5324 # coroutine-*.c filename for this case, so we have to adjust it here.
5325 coroutine=win32
5326 ;;
5327 ucontext)
5328 if test "$ucontext_works" != "yes"; then
5329 feature_not_found "ucontext"
5330 fi
5331 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005332 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005333 if test "$mingw32" = "yes"; then
5334 error_exit "only the 'windows' coroutine backend is valid for Windows"
5335 fi
5336 ;;
5337 *)
5338 error_exit "unknown coroutine backend $coroutine"
5339 ;;
5340 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305341fi
5342
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005343if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005344 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005345fi
5346
Peter Lieven7d992e42016-09-27 11:58:45 +02005347if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005348 if test "$coroutine_pool" = "yes"; then
5349 echo "WARN: disabling coroutine pool for stack usage debugging"
5350 coroutine_pool=no
5351 fi
5352fi
5353
5354
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305355##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305356# check if we have open_by_handle_at
5357
Stefan Weil4e1797f2012-06-18 22:11:06 +02005358open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305359cat > $TMPC << EOF
5360#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005361#if !defined(AT_EMPTY_PATH)
5362# error missing definition
5363#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005364int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005365#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305366EOF
5367if compile_prog "" "" ; then
5368 open_by_handle_at=yes
5369fi
5370
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305371########################################
5372# check if we have linux/magic.h
5373
5374linux_magic_h=no
5375cat > $TMPC << EOF
5376#include <linux/magic.h>
5377int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005378 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305379}
5380EOF
5381if compile_prog "" "" ; then
5382 linux_magic_h=yes
5383fi
5384
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005385########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005386# check whether we can disable warning option with a pragma (this is needed
5387# to silence warnings in the headers of some versions of external libraries).
5388# This test has to be compiled with -Werror as otherwise an unknown pragma is
5389# only a warning.
5390#
5391# If we can't selectively disable warning in the code, disable -Werror so that
5392# the build doesn't fail anyway.
5393
Peter Maydell06d71fa2012-07-30 16:13:07 +01005394pragma_disable_unused_but_set=no
5395cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005396#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005397#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005398#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005399
Peter Maydell06d71fa2012-07-30 16:13:07 +01005400int main(void) {
5401 return 0;
5402}
5403EOF
5404if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005405 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005406else
5407 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005408fi
5409
5410########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005411# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005412
5413valgrind_h=no
5414cat > $TMPC << EOF
5415#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005416int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005417 return 0;
5418}
5419EOF
5420if compile_prog "" "" ; then
5421 valgrind_h=yes
5422fi
5423
5424########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005425# check if environ is declared
5426
5427has_environ=no
5428cat > $TMPC << EOF
5429#include <unistd.h>
5430int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005431 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005432 return 0;
5433}
5434EOF
5435if compile_prog "" "" ; then
5436 has_environ=yes
5437fi
5438
Richard Henderson76a347e2012-12-28 14:17:02 -08005439########################################
5440# check if cpuid.h is usable.
5441
Richard Henderson76a347e2012-12-28 14:17:02 -08005442cat > $TMPC << EOF
5443#include <cpuid.h>
5444int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005445 unsigned a, b, c, d;
5446 int max = __get_cpuid_max(0, 0);
5447
5448 if (max >= 1) {
5449 __cpuid(1, a, b, c, d);
5450 }
5451
5452 if (max >= 7) {
5453 __cpuid_count(7, 0, a, b, c, d);
5454 }
5455
5456 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005457}
5458EOF
5459if compile_prog "" "" ; then
5460 cpuid_h=yes
5461fi
5462
Richard Henderson5dd89902017-07-18 18:40:18 -10005463##########################################
5464# avx2 optimization requirement check
5465#
5466# There is no point enabling this if cpuid.h is not usable,
5467# since we won't be able to select the new routines.
5468
Eric Blakee633a5c2019-02-04 20:39:37 -06005469if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005470 cat > $TMPC << EOF
5471#pragma GCC push_options
5472#pragma GCC target("avx2")
5473#include <cpuid.h>
5474#include <immintrin.h>
5475static int bar(void *a) {
5476 __m256i x = *(__m256i *)a;
5477 return _mm256_testz_si256(x, x);
5478}
5479int main(int argc, char *argv[]) { return bar(argv[0]); }
5480EOF
5481 if compile_object "" ; then
5482 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005483 else
5484 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005485 fi
5486fi
5487
Richard Hendersonf5401662013-02-16 12:46:59 -08005488########################################
5489# check if __[u]int128_t is usable.
5490
5491int128=no
5492cat > $TMPC << EOF
5493__int128_t a;
5494__uint128_t b;
5495int main (void) {
5496 a = a + b;
5497 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005498 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005499 return 0;
5500}
5501EOF
5502if compile_prog "" "" ; then
5503 int128=yes
5504fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005505
Richard Henderson7ebee432016-06-29 21:10:59 -07005506#########################################
5507# See if 128-bit atomic operations are supported.
5508
5509atomic128=no
5510if test "$int128" = "yes"; then
5511 cat > $TMPC << EOF
5512int main(void)
5513{
5514 unsigned __int128 x = 0, y = 0;
5515 y = __atomic_load_16(&x, 0);
5516 __atomic_store_16(&x, y, 0);
5517 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5518 return 0;
5519}
5520EOF
5521 if compile_prog "" "" ; then
5522 atomic128=yes
5523 fi
5524fi
5525
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005526cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005527if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005528 cat > $TMPC << EOF
5529int main(void)
5530{
5531 unsigned __int128 x = 0, y = 0;
5532 __sync_val_compare_and_swap_16(&x, y, x);
5533 return 0;
5534}
5535EOF
5536 if compile_prog "" "" ; then
5537 cmpxchg128=yes
5538 fi
5539fi
5540
Richard Hendersondf79b992016-09-02 12:23:57 -07005541#########################################
5542# See if 64-bit atomic operations are supported.
5543# Note that without __atomic builtins, we can only
5544# assume atomic loads/stores max at pointer size.
5545
5546cat > $TMPC << EOF
5547#include <stdint.h>
5548int main(void)
5549{
5550 uint64_t x = 0, y = 0;
5551#ifdef __ATOMIC_RELAXED
5552 y = __atomic_load_8(&x, 0);
5553 __atomic_store_8(&x, y, 0);
5554 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5555 __atomic_exchange_8(&x, y, 0);
5556 __atomic_fetch_add_8(&x, y, 0);
5557#else
5558 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5559 __sync_lock_test_and_set(&x, y);
5560 __sync_val_compare_and_swap(&x, y, 0);
5561 __sync_fetch_and_add(&x, y);
5562#endif
5563 return 0;
5564}
5565EOF
5566if compile_prog "" "" ; then
5567 atomic64=yes
5568fi
5569
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005570#########################################
5571# See if --dynamic-list is supported by the linker
5572ld_dynamic_list="no"
5573if test "$static" = "no" ; then
5574 cat > $TMPTXT <<EOF
5575{
5576 foo;
5577};
5578EOF
5579
5580 cat > $TMPC <<EOF
5581#include <stdio.h>
5582void foo(void);
5583
5584void foo(void)
5585{
5586 printf("foo\n");
5587}
5588
5589int main(void)
5590{
5591 foo();
5592 return 0;
5593}
5594EOF
5595
5596 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5597 ld_dynamic_list="yes"
5598 fi
5599fi
5600
5601#########################################
5602# See if -exported_symbols_list is supported by the linker
5603
5604ld_exported_symbols_list="no"
5605if test "$static" = "no" ; then
5606 cat > $TMPTXT <<EOF
5607 _foo
5608EOF
5609
5610 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5611 ld_exported_symbols_list="yes"
5612 fi
5613fi
5614
5615if test "$plugins" = "yes" &&
5616 test "$ld_dynamic_list" = "no" &&
5617 test "$ld_exported_symbols_list" = "no" ; then
5618 error_exit \
5619 "Plugin support requires dynamic linking and specifying a set of symbols " \
5620 "that are exported to plugins. Unfortunately your linker doesn't " \
5621 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5622 "for this purpose. You can't build with --static."
5623fi
5624
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005625########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005626# See if 16-byte vector operations are supported.
5627# Even without a vector unit the compiler may expand these.
5628# There is a bug in old GCC for PPC that crashes here.
5629# Unfortunately it's the system compiler for Centos 7.
5630
5631cat > $TMPC << EOF
5632typedef unsigned char U1 __attribute__((vector_size(16)));
5633typedef unsigned short U2 __attribute__((vector_size(16)));
5634typedef unsigned int U4 __attribute__((vector_size(16)));
5635typedef unsigned long long U8 __attribute__((vector_size(16)));
5636typedef signed char S1 __attribute__((vector_size(16)));
5637typedef signed short S2 __attribute__((vector_size(16)));
5638typedef signed int S4 __attribute__((vector_size(16)));
5639typedef signed long long S8 __attribute__((vector_size(16)));
5640static U1 a1, b1;
5641static U2 a2, b2;
5642static U4 a4, b4;
5643static U8 a8, b8;
5644static S1 c1;
5645static S2 c2;
5646static S4 c4;
5647static S8 c8;
5648static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005649void helper(void *d, void *a, int shift, int i);
5650void helper(void *d, void *a, int shift, int i)
5651{
5652 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5653 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5654 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5655 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5656}
Richard Hendersondb432672017-09-15 14:11:45 -07005657int main(void)
5658{
5659 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5660 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5661 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5662 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5663 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5664 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5665 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5666 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5667 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5668 return 0;
5669}
5670EOF
5671
5672vector16=no
5673if compile_prog "" "" ; then
5674 vector16=yes
5675fi
5676
5677########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005678# See if __attribute__((alias)) is supported.
5679# This false for Xcode 9, but has been remedied for Xcode 10.
5680# Unfortunately, travis uses Xcode 9 by default.
5681
5682attralias=no
5683cat > $TMPC << EOF
5684int x = 1;
5685extern const int y __attribute__((alias("x")));
5686int main(void) { return 0; }
5687EOF
5688if compile_prog "" "" ; then
5689 attralias=yes
5690fi
5691
5692########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005693# check if getauxval is available.
5694
5695getauxval=no
5696cat > $TMPC << EOF
5697#include <sys/auxv.h>
5698int main(void) {
5699 return getauxval(AT_HWCAP) == 0;
5700}
5701EOF
5702if compile_prog "" "" ; then
5703 getauxval=yes
5704fi
5705
John Snowfd0e6052015-03-25 18:57:39 -04005706########################################
5707# check if ccache is interfering with
5708# semantic analysis of macros
5709
John Snow5e4dfd32015-10-28 13:56:40 -04005710unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005711ccache_cpp2=no
5712cat > $TMPC << EOF
5713static const int Z = 1;
5714#define fn() ({ Z; })
5715#define TAUT(X) ((X) == Z)
5716#define PAREN(X, Y) (X == Y)
5717#define ID(X) (X)
5718int main(int argc, char *argv[])
5719{
5720 int x = 0, y = 0;
5721 x = ID(x);
5722 x = fn();
5723 fn();
5724 if (PAREN(x, y)) return 0;
5725 if (TAUT(Z)) return 0;
5726 return 0;
5727}
5728EOF
5729
5730if ! compile_object "-Werror"; then
5731 ccache_cpp2=yes
5732fi
5733
John Snowb553a042015-11-03 15:43:42 -05005734#################################################
5735# clang does not support glibc + FORTIFY_SOURCE.
5736
5737if test "$fortify_source" != "no"; then
5738 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5739 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005740 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005741 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005742 fortify_source="no";
5743 else
5744 fortify_source="yes"
5745 fi
5746fi
5747
Fam Zheng1efad062018-06-01 17:26:43 +08005748###############################################
5749# Check if copy_file_range is provided by glibc
5750have_copy_file_range=no
5751cat > $TMPC << EOF
5752#include <unistd.h>
5753int main(void) {
5754 copy_file_range(0, NULL, 0, NULL, 0, 0);
5755 return 0;
5756}
5757EOF
5758if compile_prog "" "" ; then
5759 have_copy_file_range=yes
5760fi
5761
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305762##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005763# check if struct fsxattr is available via linux/fs.h
5764
5765have_fsxattr=no
5766cat > $TMPC << EOF
5767#include <linux/fs.h>
5768struct fsxattr foo;
5769int main(void) {
5770 return 0;
5771}
5772EOF
5773if compile_prog "" "" ; then
5774 have_fsxattr=yes
5775fi
5776
Peter Maydellb66e10e2016-06-08 18:34:32 +01005777##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005778# check for usable membarrier system call
5779if test "$membarrier" = "yes"; then
5780 have_membarrier=no
5781 if test "$mingw32" = "yes" ; then
5782 have_membarrier=yes
5783 elif test "$linux" = "yes" ; then
5784 cat > $TMPC << EOF
5785 #include <linux/membarrier.h>
5786 #include <sys/syscall.h>
5787 #include <unistd.h>
5788 #include <stdlib.h>
5789 int main(void) {
5790 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5791 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5792 exit(0);
5793 }
5794EOF
5795 if compile_prog "" "" ; then
5796 have_membarrier=yes
5797 fi
5798 fi
5799 if test "$have_membarrier" = "no"; then
5800 feature_not_found "membarrier" "membarrier system call not available"
5801 fi
5802else
5803 # Do not enable it by default even for Mingw32, because it doesn't
5804 # work on Wine.
5805 membarrier=no
5806fi
5807
5808##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005809# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005810have_rtnetlink=no
5811cat > $TMPC << EOF
5812#include <linux/rtnetlink.h>
5813int main(void) {
5814 return IFLA_PROTO_DOWN;
5815}
5816EOF
5817if compile_prog "" "" ; then
5818 have_rtnetlink=yes
5819fi
5820
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005821##########################################
5822# check for usable AF_VSOCK environment
5823have_af_vsock=no
5824cat > $TMPC << EOF
5825#include <errno.h>
5826#include <sys/types.h>
5827#include <sys/socket.h>
5828#if !defined(AF_VSOCK)
5829# error missing AF_VSOCK flag
5830#endif
5831#include <linux/vm_sockets.h>
5832int main(void) {
5833 int sock, ret;
5834 struct sockaddr_vm svm;
5835 socklen_t len = sizeof(svm);
5836 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5837 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5838 if ((ret == -1) && (errno == ENOTCONN)) {
5839 return 0;
5840 }
5841 return -1;
5842}
5843EOF
5844if compile_prog "" "" ; then
5845 have_af_vsock=yes
5846fi
5847
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005848##########################################
5849# check for usable AF_ALG environment
Thomas Huth4f673662020-02-03 16:55:34 +01005850have_afalg=no
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005851cat > $TMPC << EOF
5852#include <errno.h>
5853#include <sys/types.h>
5854#include <sys/socket.h>
5855#include <linux/if_alg.h>
5856int main(void) {
5857 int sock;
5858 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5859 return sock;
5860}
5861EOF
5862if compile_prog "" "" ; then
5863 have_afalg=yes
5864fi
5865if test "$crypto_afalg" = "yes"
5866then
5867 if test "$have_afalg" != "yes"
5868 then
5869 error_exit "AF_ALG requested but could not be detected"
5870 fi
5871fi
5872
5873
James Clarke6969ec62016-06-06 12:02:50 +01005874#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005875# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005876if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005877 cat > $TMPC << EOF
5878#include <Hypervisor/hv.h>
5879int main() { return 0;}
5880EOF
5881 if ! compile_object ""; then
5882 hvf='no'
5883 else
5884 hvf='yes'
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01005885 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005886 fi
5887fi
5888
5889#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005890# Sparc implicitly links with --relax, which is
5891# incompatible with -r, so --no-relax should be
5892# given. It does no harm to give it on other
5893# platforms too.
5894
5895# Note: the prototype is needed since QEMU_CFLAGS
5896# contains -Wmissing-prototypes
5897cat > $TMPC << EOF
5898extern int foo(void);
5899int foo(void) { return 0; }
5900EOF
5901if ! compile_object ""; then
5902 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5903fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005904for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5905 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5906 LD_REL_FLAGS=$i
5907 break
5908 fi
5909done
5910if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5911 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005912fi
5913
Jan Vesely277abf12016-04-29 13:15:23 -04005914##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005915# check for sysmacros.h
5916
5917have_sysmacros=no
5918cat > $TMPC << EOF
5919#include <sys/sysmacros.h>
5920int main(void) {
5921 return makedev(0, 0);
5922}
5923EOF
5924if compile_prog "" "" ; then
5925 have_sysmacros=yes
5926fi
5927
5928##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005929# Veritas HyperScale block driver VxHS
5930# Check if libvxhs is installed
5931
5932if test "$vxhs" != "no" ; then
5933 cat > $TMPC <<EOF
5934#include <stdint.h>
5935#include <qnio/qnio_api.h>
5936
5937void *vxhs_callback;
5938
5939int main(void) {
5940 iio_init(QNIO_VERSION, vxhs_callback);
5941 return 0;
5942}
5943EOF
5944 vxhs_libs="-lvxhs -lssl"
5945 if compile_prog "" "$vxhs_libs" ; then
5946 vxhs=yes
5947 else
5948 if test "$vxhs" = "yes" ; then
5949 feature_not_found "vxhs block device" "Install libvxhs See github"
5950 fi
5951 vxhs=no
5952 fi
5953fi
5954
5955##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005956# check for _Static_assert()
5957
5958have_static_assert=no
5959cat > $TMPC << EOF
5960_Static_assert(1, "success");
5961int main(void) {
5962 return 0;
5963}
5964EOF
5965if compile_prog "" "" ; then
5966 have_static_assert=yes
5967fi
5968
5969##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005970# check for utmpx.h, it is missing e.g. on OpenBSD
5971
5972have_utmpx=no
5973cat > $TMPC << EOF
5974#include <utmpx.h>
5975struct utmpx user_info;
5976int main(void) {
5977 return 0;
5978}
5979EOF
5980if compile_prog "" "" ; then
5981 have_utmpx=yes
5982fi
5983
5984##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07005985# check for getrandom()
5986
5987have_getrandom=no
5988cat > $TMPC << EOF
5989#include <sys/random.h>
5990int main(void) {
5991 return getrandom(0, 0, GRND_NONBLOCK);
5992}
5993EOF
5994if compile_prog "" "" ; then
5995 have_getrandom=yes
5996fi
5997
5998##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005999# checks for sanitizers
6000
Marc-André Lureau247724c2018-01-16 16:11:51 +01006001have_asan=no
6002have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006003have_asan_iface_h=no
6004have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01006005
6006if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006007 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01006008 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6009 have_asan=yes
6010 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01006011
6012 # we could use a simple skeleton for flags checks, but this also
6013 # detect the static linking issue of ubsan, see also:
6014 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6015 cat > $TMPC << EOF
6016#include <stdlib.h>
6017int main(void) {
6018 void *tmp = malloc(10);
6019 return *(int *)(tmp + 2);
6020}
6021EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01006022 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6023 have_ubsan=yes
6024 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006025
6026 if check_include "sanitizer/asan_interface.h" ; then
6027 have_asan_iface_h=yes
6028 fi
6029
6030 cat > $TMPC << EOF
6031#include <sanitizer/asan_interface.h>
6032int main(void) {
6033 __sanitizer_start_switch_fiber(0, 0, 0);
6034 return 0;
6035}
6036EOF
6037 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6038 have_asan_iface_fiber=yes
6039 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006040fi
6041
6042##########################################
Junyan He17824402018-07-18 15:47:59 +08006043# check for libpmem
6044
6045if test "$libpmem" != "no"; then
6046 if $pkg_config --exists "libpmem"; then
6047 libpmem="yes"
6048 libpmem_libs=$($pkg_config --libs libpmem)
6049 libpmem_cflags=$($pkg_config --cflags libpmem)
6050 libs_softmmu="$libs_softmmu $libpmem_libs"
6051 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6052 else
6053 if test "$libpmem" = "yes" ; then
6054 feature_not_found "libpmem" "Install nvml or pmdk"
6055 fi
6056 libpmem="no"
6057 fi
6058fi
6059
6060##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006061# check for slirp
6062
6063case "$slirp" in
6064 "" | yes)
6065 if $pkg_config slirp; then
6066 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006067 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6068 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006069 elif test -e "${source_path}/slirp/Makefile" ; then
6070 slirp=internal
6071 elif test -z "$slirp" ; then
6072 slirp=no
6073 else
6074 feature_not_found "slirp" "Install slirp devel or git submodule"
6075 fi
6076 ;;
6077
6078 system)
6079 if ! $pkg_config slirp; then
6080 feature_not_found "slirp" "Install slirp devel"
6081 fi
6082 ;;
6083esac
6084
6085case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006086 git | internal)
6087 if test "$slirp" = git; then
6088 git_submodules="${git_submodules} slirp"
6089 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006090 mkdir -p slirp
6091 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6092 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
Paolo Bonzinib965e8c2019-12-11 14:41:51 +01006093 if test "$mingw32" = "yes" ; then
6094 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6095 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006096 ;;
6097
6098 system)
6099 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6100 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6101 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6102 ;;
6103
6104 no)
6105 ;;
6106 *)
6107 error_exit "Unknown state for slirp: $slirp"
6108 ;;
6109esac
6110
6111
6112##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006113# End of CC checks
6114# After here, no more $cc or $ld runs
6115
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006116write_c_skeleton
6117
Blue Swirl1d728c32012-05-01 18:45:39 +00006118if test "$gcov" = "yes" ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006119 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6120 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006121elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006122 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006123elif test "$debug" = "no"; then
6124 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006125fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006126
Marc-André Lureau247724c2018-01-16 16:11:51 +01006127if test "$have_asan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006128 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6129 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006130 if test "$have_asan_iface_h" = "no" ; then
6131 echo "ASAN build enabled, but ASAN header missing." \
6132 "Without code annotation, the report may be inferior."
6133 elif test "$have_asan_iface_fiber" = "no" ; then
6134 echo "ASAN build enabled, but ASAN header is too old." \
6135 "Without code annotation, the report may be inferior."
6136 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006137fi
6138if test "$have_ubsan" = "yes"; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006139 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6140 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
Marc-André Lureau247724c2018-01-16 16:11:51 +01006141fi
6142
Peter Lieven6542aa92014-02-03 10:26:13 +01006143##########################################
6144# Do we have libnfs
6145if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006146 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006147 libnfs="yes"
6148 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006149 else
6150 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006151 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006152 fi
6153 libnfs="no"
6154 fi
6155fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006156
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006157##########################################
6158# Do we have libudev
6159if test "$libudev" != "no" ; then
6160 if $pkg_config libudev && test "$static" != "yes"; then
6161 libudev="yes"
6162 libudev_libs=$($pkg_config --libs libudev)
6163 else
6164 libudev="no"
6165 fi
6166fi
6167
Peter Maydell6ca026c2012-07-18 15:10:18 +01006168# Now we've finished running tests it's OK to add -Werror to the compiler flags
6169if test "$werror" = "yes"; then
6170 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6171fi
6172
Juan Quintelae86ecd42009-08-03 14:45:59 +02006173if test "$solaris" = "no" ; then
6174 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006175 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006176 fi
6177fi
6178
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006179# test if pod2man has --utf8 option
6180if pod2man --help | grep -q utf8; then
6181 POD2MAN="pod2man --utf8"
6182else
6183 POD2MAN="pod2man"
6184fi
6185
Blue Swirl952afb72010-09-19 08:36:34 +00006186# Use ASLR, no-SEH and DEP if available
6187if test "$mingw32" = "yes" ; then
6188 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006189 if ld_has $flag ; then
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006190 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
Blue Swirl952afb72010-09-19 08:36:34 +00006191 fi
6192 done
6193fi
6194
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006195# Disable OpenBSD W^X if available
6196if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6197 cat > $TMPC <<EOF
6198 int main(void) { return 0; }
6199EOF
6200 wx_ldflags="-Wl,-z,wxneeded"
6201 if compile_prog "" "$wx_ldflags"; then
6202 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6203 fi
6204fi
6205
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006206qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006207qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006208qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006209qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006210qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006211qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006212
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006213# We can only support ivshmem if we have eventfd
6214if [ "$eventfd" = "yes" ]; then
6215 ivshmem=yes
6216fi
6217
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006218tools=""
6219if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006220 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006221 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6222 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006223 fi
6224 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006225 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006226 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006227 if [ "$curl" = "yes" ]; then
6228 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006229 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006230fi
6231if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006232 if test "$linux" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006233 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006234 virtfs=yes
6235 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6236 else
6237 if test "$virtfs" = yes; then
Paolo Bonzini7e462612019-11-29 12:16:32 +01006238 error_exit "VirtFS requires libcap-ng devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306239 fi
Andreas Färber17500372012-05-01 01:12:03 +02006240 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006241 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006242 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6243 mpath=yes
6244 else
6245 if test "$mpath" = yes; then
6246 error_exit "Multipath requires libmpathpersist devel"
6247 fi
6248 mpath=no
6249 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006250 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6251 else
6252 if test "$virtfs" = yes; then
6253 error_exit "VirtFS is supported only on Linux"
6254 fi
6255 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006256 if test "$mpath" = yes; then
6257 error_exit "Multipath is supported only on Linux"
6258 fi
6259 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306260 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006261 if test "$xkbcommon" = "yes"; then
6262 tools="qemu-keymap\$(EXESUF) $tools"
6263 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006264fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006265
6266# Probe for guest agent support/options
6267
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006268if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006269 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6270 guest_agent=no
6271 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006272 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006273 guest_agent=yes
6274 elif [ "$guest_agent" != yes ]; then
6275 guest_agent=no
6276 else
6277 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006278 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006279fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006280
Michael Roth9d6bc272015-08-26 10:49:13 -05006281# Guest agent Window MSI package
6282
6283if test "$guest_agent" != yes; then
6284 if test "$guest_agent_msi" = yes; then
6285 error_exit "MSI guest agent package requires guest agent enabled"
6286 fi
6287 guest_agent_msi=no
6288elif test "$mingw32" != "yes"; then
6289 if test "$guest_agent_msi" = "yes"; then
6290 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6291 fi
6292 guest_agent_msi=no
6293elif ! has wixl; then
6294 if test "$guest_agent_msi" = "yes"; then
6295 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6296 fi
6297 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006298else
6299 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6300 # disabled explicitly
6301 if test "$guest_agent_msi" != "no"; then
6302 guest_agent_msi=yes
6303 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006304fi
6305
Michael Roth1a349042015-08-26 11:14:31 -05006306if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006307 if test "$guest_agent_with_vss" = "yes"; then
6308 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6309 fi
6310
6311 if test "$QEMU_GA_MANUFACTURER" = ""; then
6312 QEMU_GA_MANUFACTURER=QEMU
6313 fi
6314
6315 if test "$QEMU_GA_DISTRO" = ""; then
6316 QEMU_GA_DISTRO=Linux
6317 fi
6318
6319 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006320 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006321 fi
6322
Stefan Weil89138852016-05-16 15:10:20 +02006323 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006324
6325 case "$cpu" in
6326 x86_64)
6327 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6328 ;;
6329 i386)
6330 QEMU_GA_MSI_ARCH="-D Arch=32"
6331 ;;
6332 *)
6333 error_exit "CPU $cpu not supported for building installation package"
6334 ;;
6335 esac
6336fi
6337
Paolo Bonzinica35f782010-05-26 16:08:29 +02006338# Mac OS X ships with a broken assembler
6339roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006340if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6341 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6342 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006343 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006344 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6345 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6346 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006347 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6348 ld_i386_emulation="$emu"
6349 roms="optionrom"
6350 break
6351 fi
6352 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006353fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006354
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006355# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006356if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006357 write_c_skeleton
6358 if compile_prog "-march=z900" ""; then
6359 roms="$roms s390-ccw"
6360 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006361fi
6362
Richard Henderson964c6fa2013-06-21 19:10:16 -07006363# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006364if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006365 textseg_addr=
6366 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006367 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6368 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006369 textseg_addr=0x60000000
6370 ;;
6371 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006372 # A 256M aligned address, high in the address space, with enough
6373 # room for the code_gen_buffer above it before the stack.
6374 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006375 ;;
6376 esac
6377 if [ -n "$textseg_addr" ]; then
6378 cat > $TMPC <<EOF
6379 int main(void) { return 0; }
6380EOF
6381 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6382 if ! compile_prog "" "$textseg_ldflags"; then
6383 # In case ld does not support -Ttext-segment, edit the default linker
6384 # script via sed to set the .text start addr. This is needed on FreeBSD
6385 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006386 if ! $ld --verbose >/dev/null 2>&1; then
6387 error_exit \
6388 "We need to link the QEMU user mode binaries at a" \
6389 "specific text address. Unfortunately your linker" \
6390 "doesn't support either the -Ttext-segment option or" \
6391 "printing the default linker script with --verbose." \
6392 "If you don't want the user mode binaries, pass the" \
6393 "--disable-user option to configure."
6394 fi
6395
Richard Henderson964c6fa2013-06-21 19:10:16 -07006396 $ld --verbose | sed \
6397 -e '1,/==================================================/d' \
6398 -e '/==================================================/,$d' \
6399 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6400 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6401 textseg_ldflags="-Wl,-T../config-host.ld"
6402 fi
6403 fi
6404fi
6405
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006406# Check that the C++ compiler exists and works with the C compiler.
6407# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6408if has $cxx; then
6409 cat > $TMPC <<EOF
6410int c_function(void);
6411int main(void) { return c_function(); }
6412EOF
6413
6414 compile_object
6415
6416 cat > $TMPCXX <<EOF
6417extern "C" {
6418 int c_function(void);
6419}
6420int c_function(void) { return 42; }
6421EOF
6422
6423 update_cxxflags
6424
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01006425 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006426 # C++ compiler $cxx works ok with C compiler $cc
6427 :
6428 else
6429 echo "C++ compiler $cxx does not work with C compiler $cc"
6430 echo "Disabling C++ specific optional code"
6431 cxx=
6432 fi
6433else
6434 echo "No C++ compiler available; disabling C++ specific optional code"
6435 cxx=
6436fi
6437
Cole Robinson02d34f62016-05-06 14:03:09 -04006438echo_version() {
6439 if test "$1" = "yes" ; then
6440 echo "($2)"
6441 fi
6442}
6443
Jan Kiszka50e12062014-10-02 10:03:55 +02006444# prepend pixman and ftd flags after all config tests are done
6445QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006446QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006447libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006448
bellard43ce4df2003-06-09 19:53:12 +00006449echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006450echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006451echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006452echo "binary directory $(eval echo $bindir)"
6453echo "library directory $(eval echo $libdir)"
6454echo "module directory $(eval echo $qemu_moddir)"
6455echo "libexec directory $(eval echo $libexecdir)"
6456echo "include directory $(eval echo $includedir)"
6457echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006458if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006459echo "local state directory $(eval echo $local_statedir)"
6460echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006461echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006462else
6463echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006464echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006465fi
Paolo Bonzinibc4486f2019-12-11 15:33:49 +01006466echo "Build directory $(pwd)"
bellard5a671352003-10-01 00:13:48 +00006467echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006468echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006469echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006470echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006471echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006472echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006473echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006474echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006475echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006476echo "QEMU_CFLAGS $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006477echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006478echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006479echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006480echo "python $python ($python_version)"
Peter Maydell2eb054c2020-02-13 17:56:18 +00006481if test "$docs" != "no"; then
6482 echo "sphinx-build $sphinx_build"
6483fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006484echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6485if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006486 echo "smbd $smbd"
6487fi
Fam Zheng17969262014-02-10 14:48:56 +08006488echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006489echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006490echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006491echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006492echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006493echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006494echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006495echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006496echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006497if test "$darwin" = "yes" ; then
6498 echo "Cocoa support $cocoa"
6499fi
Stefan Weil89138852016-05-16 15:10:20 +02006500echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006501echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006502echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006503echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006504echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006505echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006506echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006507echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006508if test "$gcrypt" = "yes"
6509then
6510 echo " hmac $gcrypt_hmac"
6511 echo " XTS $gcrypt_xts"
6512fi
Stefan Weil89138852016-05-16 15:10:20 +02006513echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006514if test "$nettle" = "yes"
6515then
6516 echo " XTS $nettle_xts"
6517fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006518echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006519echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006520echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006521echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006522echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006523echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006524echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006525echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006526echo "Block whitelist (rw) $block_drv_rw_whitelist"
6527echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306528echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006529echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006530echo "VNC support $vnc"
6531if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006532 echo "VNC SASL support $vnc_sasl"
6533 echo "VNC JPEG support $vnc_jpeg"
6534 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006535fi
aliguorie37630c2009-04-22 15:19:10 +00006536echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006537if test "$xen" = "yes" ; then
6538 echo "xen ctrl version $xen_ctrl_version"
6539fi
aurel322e4d9fb2008-04-08 06:01:02 +00006540echo "brlapi support $brlapi"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006541echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006542echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006543echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006544echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006545echo "Linux AIO support $linux_aio"
Aarushi Mehtac10dd852020-01-20 14:18:44 +00006546echo "Linux io_uring support $linux_io_uring"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006547echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006548echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006549echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006550echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006551echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006552echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006553echo "TCG support $tcg"
6554if test "$tcg" = "yes" ; then
6555 echo "TCG debug enabled $debug_tcg"
6556 echo "TCG interpreter $tcg_interpreter"
6557fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006558echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006559echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006560echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006561echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006562echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006563echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006564echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006565echo "madvise $madvise"
6566echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006567echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006568echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006569echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006570echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006571echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006572echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006573echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006574echo "vhost-user-fs support $vhost_user_fs"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006575echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006576if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006577echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006578fi
Stefan Weil89138852016-05-16 15:10:20 +02006579echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006580echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006581echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006582echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006583echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006584echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006585echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006586echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006587echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006588echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006589echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006590echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006591echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006592echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006593echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006594echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006595echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006596echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006597echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006598echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306599echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006600echo "gcov $gcov_tool"
6601echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006602echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006603echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006604echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006605echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006606echo "lzo support $lzo"
6607echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006608echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006609echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006610echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006611echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006612echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006613echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006614echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006615echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006616echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006617echo "bochs support $bochs"
6618echo "cloop support $cloop"
6619echo "dmg support $dmg"
6620echo "qcow v1 support $qcow1"
6621echo "vdi support $vdi"
6622echo "vvfat support $vvfat"
6623echo "qed support $qed"
6624echo "parallels support $parallels"
6625echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006626echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006627echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006628echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006629echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006630echo "plugin support $plugins"
bellard67b915a2004-03-31 23:37:16 +00006631
Peter Maydell898be3e2017-03-21 14:31:57 +00006632if test "$supported_cpu" = "no"; then
6633 echo
6634 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6635 echo
6636 echo "CPU host architecture $cpu support is not currently maintained."
6637 echo "The QEMU project intends to remove support for this host CPU in"
6638 echo "a future release if nobody volunteers to maintain it and to"
6639 echo "provide a build host for our continuous integration setup."
6640 echo "configure has succeeded and you can continue to build, but"
6641 echo "if you care about QEMU on this platform you should contact"
6642 echo "us upstream at qemu-devel@nongnu.org."
6643fi
6644
6645if test "$supported_os" = "no"; then
6646 echo
6647 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6648 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006649 echo "Host OS $targetos support is not currently maintained."
6650 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006651 echo "a future release if nobody volunteers to maintain it and to"
6652 echo "provide a build host for our continuous integration setup."
6653 echo "configure has succeeded and you can continue to build, but"
6654 echo "if you care about QEMU on this platform you should contact"
6655 echo "us upstream at qemu-devel@nongnu.org."
6656fi
6657
Juan Quintela98ec69a2009-07-16 18:34:18 +02006658config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006659
Stefan Weildbd99ae2013-01-01 18:33:44 +01006660echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6661
Juan Quintela98ec69a2009-07-16 18:34:18 +02006662echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006663echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006664
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006665echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006666echo "prefix=$prefix" >> $config_host_mak
6667echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006668echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006669echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006670echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006671echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006672echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006673echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006674echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006675echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006676echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006677echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006678if test "$mingw32" = "no" ; then
6679 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6680fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006681echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006682echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006683echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006684echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006685echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006686echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006687echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006688echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006689echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006690
Juan Quintela98ec69a2009-07-16 18:34:18 +02006691echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006692
Paolo Bonzinif3494742019-01-23 14:56:17 +08006693if test "$default_devices" = "yes" ; then
6694 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6695else
6696 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6697fi
aurel32f8393942009-04-13 18:45:38 +00006698if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006699 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006700fi
aliguori1625af82009-04-05 17:41:02 +00006701if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006702 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006703fi
bellard7d132992003-03-06 23:23:54 +00006704if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006705 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006706fi
bellard67b915a2004-03-31 23:37:16 +00006707if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006708 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006709 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006710 version_major=${rc_version%%.*}
6711 rc_version=${rc_version#*.}
6712 version_minor=${rc_version%%.*}
6713 rc_version=${rc_version#*.}
6714 version_subminor=${rc_version%%.*}
6715 version_micro=0
6716 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6717 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006718 if test "$guest_agent_with_vss" = "yes" ; then
6719 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006720 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006721 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6722 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006723 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006724 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006725 fi
Michael Roth1a349042015-08-26 11:14:31 -05006726 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006727 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006728 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6729 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6730 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6731 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6732 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6733 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6734 fi
pbrook210fa552007-02-27 21:04:49 +00006735else
Juan Quintela35f4df22009-07-27 16:13:07 +02006736 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006737fi
blueswir1128ab2f2008-08-15 18:33:42 +00006738
Mark McLoughlindffcb712009-10-22 17:49:11 +01006739if test "$linux" = "yes" ; then
6740 echo "CONFIG_LINUX=y" >> $config_host_mak
6741fi
6742
bellard83fb7ad2004-07-05 21:25:26 +00006743if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006744 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006745fi
malcb29fe3e2008-11-18 01:42:22 +00006746
bellardec530c82006-04-25 22:36:06 +00006747if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006748 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006749fi
Andreas Färber179cf402010-09-20 00:50:43 +02006750if test "$haiku" = "yes" ; then
6751 echo "CONFIG_HAIKU=y" >> $config_host_mak
6752fi
bellard97a847b2003-08-10 21:36:04 +00006753if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006754 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006755fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006756if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006757 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006758fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006759if test "$want_tools" = "yes" ; then
6760 echo "CONFIG_TOOLS=y" >> $config_host_mak
6761fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006762if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006763 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006764 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006765 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6766 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6767fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006768if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006769 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006770fi
ths8a16d272008-07-19 09:56:24 +00006771if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006772 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006773 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006774fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006775if test "$netmap" = "yes" ; then
6776 echo "CONFIG_NETMAP=y" >> $config_host_mak
6777fi
Gonglei015a33b2014-07-01 20:58:08 +08006778if test "$l2tpv3" = "yes" ; then
6779 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6780fi
Paolo Bonzini4cc600d2020-02-04 17:11:04 +01006781if test "$gprof" = "yes" ; then
6782 echo "CONFIG_GPROF=y" >> $config_host_mak
6783fi
Corey Bryant47e98652012-01-26 09:42:26 -05006784if test "$cap_ng" = "yes" ; then
Paolo Bonzinia358bca2019-11-29 11:42:53 +01006785 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
Corey Bryant47e98652012-01-26 09:42:26 -05006786fi
Juan Quintela2358a492009-07-27 16:13:25 +02006787echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006788for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006789 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006790 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006791 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006792 echo "$def=m" >> $config_host_mak ;;
6793 *)
6794 echo "$def=y" >> $config_host_mak ;;
6795 esac
malc0c58ac12008-06-25 21:04:05 +00006796done
Fam Zhengb1149912017-09-07 16:29:13 +08006797echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6798echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6799echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6800echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6801echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006802if test "$audio_win_int" = "yes" ; then
6803 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6804fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006805echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6806echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006807if test "$vnc" = "yes" ; then
6808 echo "CONFIG_VNC=y" >> $config_host_mak
6809fi
aliguori2f9606b2009-03-06 20:27:28 +00006810if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006811 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006812fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006813if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006814 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006815fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006816if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006817 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006818fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006819if test "$xkbcommon" = "yes" ; then
6820 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6821 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6822fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006823if test "$xfs" = "yes" ; then
6824 echo "CONFIG_XFS=y" >> $config_host_mak
6825fi
Stefan Weil89138852016-05-16 15:10:20 +02006826qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006827echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006828echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006829echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006830echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006831if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006832 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006833fi
Fam Zheng17969262014-02-10 14:48:56 +08006834if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006835 # $shacmd can generate a hash started with digit, which the compiler doesn't
6836 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006837 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006838 echo "CONFIG_MODULES=y" >> $config_host_mak
6839fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006840if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006841 echo "CONFIG_X11=y" >> $config_host_mak
6842 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6843 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6844fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006845if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006846 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006847 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006848 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006849 if test "$sdl_image" = "yes" ; then
6850 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6851 fi
bellard49ecc3f2007-11-07 19:25:15 +00006852fi
6853if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006854 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006855fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006856if test "$iconv" = "yes" ; then
6857 echo "CONFIG_ICONV=y" >> $config_host_mak
6858 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6859 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6860fi
balrog4d3b6f62008-02-10 16:33:14 +00006861if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006862 echo "CONFIG_CURSES=m" >> $config_host_mak
6863 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6864 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006865fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006866if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006867 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006868fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006869if test "$accept4" = "yes" ; then
6870 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6871fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306872if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006873 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306874fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006875if test "$eventfd" = "yes" ; then
6876 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6877fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006878if test "$memfd" = "yes" ; then
6879 echo "CONFIG_MEMFD=y" >> $config_host_mak
6880fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006881if test "$have_usbfs" = "yes" ; then
6882 echo "CONFIG_USBFS=y" >> $config_host_mak
6883fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006884if test "$fallocate" = "yes" ; then
6885 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6886fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006887if test "$fallocate_punch_hole" = "yes" ; then
6888 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6889fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006890if test "$fallocate_zero_range" = "yes" ; then
6891 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6892fi
Kevin Wolfed911432014-09-29 17:12:59 +02006893if test "$posix_fallocate" = "yes" ; then
6894 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6895fi
Peter Maydellc727f472011-01-06 11:05:10 +00006896if test "$sync_file_range" = "yes" ; then
6897 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6898fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006899if test "$fiemap" = "yes" ; then
6900 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6901fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006902if test "$dup3" = "yes" ; then
6903 echo "CONFIG_DUP3=y" >> $config_host_mak
6904fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006905if test "$ppoll" = "yes" ; then
6906 echo "CONFIG_PPOLL=y" >> $config_host_mak
6907fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006908if test "$prctl_pr_set_timerslack" = "yes" ; then
6909 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6910fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006911if test "$epoll" = "yes" ; then
6912 echo "CONFIG_EPOLL=y" >> $config_host_mak
6913fi
6914if test "$epoll_create1" = "yes" ; then
6915 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6916fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006917if test "$sendfile" = "yes" ; then
6918 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6919fi
Riku Voipio51834342014-06-22 11:25:42 +01006920if test "$timerfd" = "yes" ; then
6921 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6922fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006923if test "$setns" = "yes" ; then
6924 echo "CONFIG_SETNS=y" >> $config_host_mak
6925fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006926if test "$clock_adjtime" = "yes" ; then
6927 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6928fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006929if test "$syncfs" = "yes" ; then
6930 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6931fi
Aleksandar Markovicdb37dd82020-01-16 23:49:49 +01006932if test "$kcov" = "yes" ; then
6933 echo "CONFIG_KCOV=y" >> $config_host_mak
6934fi
aurel323b3f24a2009-04-15 16:12:13 +00006935if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006936 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006937fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006938if test "$inotify1" = "yes" ; then
6939 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6940fi
Peter Maydell401bc052017-09-05 13:19:32 +01006941if test "$sem_timedwait" = "yes" ; then
6942 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6943fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006944if test "$strchrnul" = "yes" ; then
6945 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6946fi
Jiufei Xue8a792b02019-04-17 03:08:56 +08006947if test "$st_atim" = "yes" ; then
6948 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6949fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006950if test "$byteswap_h" = "yes" ; then
6951 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6952fi
6953if test "$bswap_h" = "yes" ; then
6954 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6955fi
Alexander Graf769ce762009-05-11 17:41:42 +02006956if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006957 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006958 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006959 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006960fi
aurel322e4d9fb2008-04-08 06:01:02 +00006961if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006962 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006963 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006964fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006965if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006966 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006967 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006968 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006969 if test "$gtk_gl" = "yes" ; then
6970 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6971 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006972fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01006973if test "$gio" = "yes" ; then
6974 echo "CONFIG_GIO=y" >> $config_host_mak
6975 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6976 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
Marc-André Lureau25a97a52019-09-27 11:34:42 +04006977 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
Marc-André Lureauf876b762019-02-21 12:07:00 +01006978fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006979echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006980if test "$gnutls" = "yes" ; then
6981 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6982fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006983if test "$gcrypt" = "yes" ; then
6984 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006985 if test "$gcrypt_hmac" = "yes" ; then
6986 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6987 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006988fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006989if test "$nettle" = "yes" ; then
6990 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006991 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006992fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006993if test "$qemu_private_xts" = "yes" ; then
6994 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6995fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006996if test "$tasn1" = "yes" ; then
6997 echo "CONFIG_TASN1=y" >> $config_host_mak
6998fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006999if test "$auth_pam" = "yes" ; then
7000 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7001fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00007002if test "$have_ifaddrs_h" = "yes" ; then
7003 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7004fi
Eric Blake6b39b062016-10-11 10:46:23 -05007005if test "$have_broken_size_max" = "yes" ; then
7006 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7007fi
Jan Vesely277abf12016-04-29 13:15:23 -04007008
7009# Work around a system header bug with some kernel/XFS header
7010# versions where they both try to define 'struct fsxattr':
7011# xfs headers will not try to redefine structs from linux headers
7012# if this macro is set.
7013if test "$have_fsxattr" = "yes" ; then
7014 echo "HAVE_FSXATTR=y" >> $config_host_mak
7015fi
Fam Zheng1efad062018-06-01 17:26:43 +08007016if test "$have_copy_file_range" = "yes" ; then
7017 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7018fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01007019if test "$vte" = "yes" ; then
7020 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007021 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01007022 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06007023fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02007024if test "$virglrenderer" = "yes" ; then
7025 echo "CONFIG_VIRGL=y" >> $config_host_mak
7026 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7027 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7028fi
aliguorie37630c2009-04-22 15:19:10 +00007029if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02007030 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00007031 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00007032fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02007033if test "$linux_aio" = "yes" ; then
7034 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7035fi
Aarushi Mehtac10dd852020-01-20 14:18:44 +00007036if test "$linux_io_uring" = "yes" ; then
7037 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7038 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7039 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7040fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007041if test "$attr" = "yes" ; then
7042 echo "CONFIG_ATTR=y" >> $config_host_mak
7043fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007044if test "$libattr" = "yes" ; then
7045 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7046fi
Meador Inge983eef52012-02-24 14:00:42 +05307047if test "$virtfs" = "yes" ; then
7048 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007049fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007050if test "$mpath" = "yes" ; then
7051 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007052 if test "$mpathpersist_new_api" = "yes"; then
7053 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7054 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007055fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007056if test "$vhost_scsi" = "yes" ; then
7057 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7058fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007059if test "$vhost_net" = "yes" ; then
7060 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7061fi
7062if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007063 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007064fi
Gonglei042cea22018-03-01 21:46:28 +08007065if test "$vhost_crypto" = "yes" ; then
7066 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7067fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007068if test "$vhost_vsock" = "yes" ; then
7069 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7070fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007071if test "$vhost_kernel" = "yes" ; then
7072 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7073fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007074if test "$vhost_user" = "yes" ; then
7075 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7076fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007077if test "$vhost_user_fs" = "yes" ; then
7078 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7079fi
ths77755342008-11-27 15:45:16 +00007080if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007081 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007082fi
aliguoribf9298b2008-12-05 20:05:26 +00007083if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007084 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007085fi
aliguoriceb42de2009-04-07 18:43:28 +00007086if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007087 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007088fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007089if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007090 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007091fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007092if test "$membarrier" = "yes" ; then
7093 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7094fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007095if test "$signalfd" = "yes" ; then
7096 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7097fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007098if test "$optreset" = "yes" ; then
7099 echo "HAVE_OPTRESET=y" >> $config_host_mak
7100fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007101if test "$tcg" = "yes"; then
7102 echo "CONFIG_TCG=y" >> $config_host_mak
7103 if test "$tcg_interpreter" = "yes" ; then
7104 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7105 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007106fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007107if test "$fdatasync" = "yes" ; then
7108 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7109fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007110if test "$madvise" = "yes" ; then
7111 echo "CONFIG_MADVISE=y" >> $config_host_mak
7112fi
7113if test "$posix_madvise" = "yes" ; then
7114 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7115fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007116if test "$posix_memalign" = "yes" ; then
7117 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7118fi
bellard97a847b2003-08-10 21:36:04 +00007119
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007120if test "$spice" = "yes" ; then
7121 echo "CONFIG_SPICE=y" >> $config_host_mak
7122fi
7123
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007124if test "$smartcard" = "yes" ; then
7125 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007126 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7127 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007128fi
7129
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007130if test "$libusb" = "yes" ; then
7131 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007132 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7133 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007134fi
7135
Hans de Goede69354a82011-07-19 11:04:10 +02007136if test "$usb_redir" = "yes" ; then
7137 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007138 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7139 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007140fi
7141
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007142if test "$opengl" = "yes" ; then
7143 echo "CONFIG_OPENGL=y" >> $config_host_mak
7144 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007145 if test "$opengl_dmabuf" = "yes" ; then
7146 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7147 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007148fi
7149
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007150if test "$gbm" = "yes" ; then
7151 echo "CONFIG_GBM=y" >> $config_host_mak
7152 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7153 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7154fi
7155
7156
Yang Zhong5a22ab72017-12-20 21:16:46 +08007157if test "$malloc_trim" = "yes" ; then
7158 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7159fi
7160
Liang Li99f2dbd2016-03-08 13:53:16 +08007161if test "$avx2_opt" = "yes" ; then
7162 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7163fi
7164
qiaonuohan607dacd2014-02-18 14:11:30 +08007165if test "$lzo" = "yes" ; then
7166 echo "CONFIG_LZO=y" >> $config_host_mak
7167fi
7168
7169if test "$snappy" = "yes" ; then
7170 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7171fi
7172
Peter Wu6b383c02015-01-06 18:48:14 +01007173if test "$bzip2" = "yes" ; then
7174 echo "CONFIG_BZIP2=y" >> $config_host_mak
7175 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7176fi
7177
Julio Faracco83bc1f92018-11-05 13:08:04 -02007178if test "$lzfse" = "yes" ; then
7179 echo "CONFIG_LZFSE=y" >> $config_host_mak
7180 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7181fi
7182
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007183if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007184 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007185 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7186 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007187fi
7188
Peter Lieven6542aa92014-02-03 10:26:13 +01007189if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007190 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7191 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007192fi
7193
Eduardo Otubof7945732012-08-14 18:44:05 -03007194if test "$seccomp" = "yes"; then
7195 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007196 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7197 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007198fi
7199
bellard83fb7ad2004-07-05 21:25:26 +00007200# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007201if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007202 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007203fi
7204
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007205if test "$localtime_r" = "yes" ; then
7206 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7207fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007208if test "$qom_cast_debug" = "yes" ; then
7209 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7210fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007211if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007212 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007213 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7214 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007215fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007216
Peter Maydell7c2acc72013-04-08 12:11:27 +01007217echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007218if test "$coroutine_pool" = "yes" ; then
7219 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7220else
7221 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7222fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307223
Peter Lieven7d992e42016-09-27 11:58:45 +02007224if test "$debug_stack_usage" = "yes" ; then
7225 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7226fi
7227
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007228if test "$crypto_afalg" = "yes" ; then
7229 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7230fi
7231
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307232if test "$open_by_handle_at" = "yes" ; then
7233 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7234fi
7235
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307236if test "$linux_magic_h" = "yes" ; then
7237 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7238fi
7239
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007240if test "$pragma_diagnostic_available" = "yes" ; then
7241 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007242fi
7243
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007244if test "$valgrind_h" = "yes" ; then
7245 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7246fi
7247
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007248if test "$have_asan_iface_fiber" = "yes" ; then
7249 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7250fi
7251
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007252if test "$has_environ" = "yes" ; then
7253 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7254fi
7255
Richard Henderson76a347e2012-12-28 14:17:02 -08007256if test "$cpuid_h" = "yes" ; then
7257 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7258fi
7259
Richard Hendersonf5401662013-02-16 12:46:59 -08007260if test "$int128" = "yes" ; then
7261 echo "CONFIG_INT128=y" >> $config_host_mak
7262fi
7263
Richard Henderson7ebee432016-06-29 21:10:59 -07007264if test "$atomic128" = "yes" ; then
7265 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7266fi
7267
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007268if test "$cmpxchg128" = "yes" ; then
7269 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7270fi
7271
Richard Hendersondf79b992016-09-02 12:23:57 -07007272if test "$atomic64" = "yes" ; then
7273 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7274fi
7275
Richard Hendersondb432672017-09-15 14:11:45 -07007276if test "$vector16" = "yes" ; then
7277 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7278fi
7279
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007280if test "$attralias" = "yes" ; then
7281 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7282fi
7283
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007284if test "$getauxval" = "yes" ; then
7285 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7286fi
7287
Bharata B Raoeb100392012-09-24 14:42:45 +05307288if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007289 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007290 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7291 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307292fi
7293
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007294if test "$glusterfs_xlator_opt" = "yes" ; then
7295 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7296fi
7297
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307298if test "$glusterfs_discard" = "yes" ; then
7299 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7300fi
7301
Niels de Vosdf3a4292017-05-28 12:01:14 +05307302if test "$glusterfs_fallocate" = "yes" ; then
7303 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7304fi
7305
Bharata B Rao7c815372013-12-21 14:51:25 +05307306if test "$glusterfs_zerofill" = "yes" ; then
7307 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7308fi
7309
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007310if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7311 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7312fi
7313
Niels de Vos0e3b8912019-03-05 16:46:34 +01007314if test "$glusterfs_iocb_has_stat" = "yes" ; then
7315 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7316fi
7317
Pino Toscanob10d49d2019-06-20 22:08:40 +02007318if test "$libssh" = "yes" ; then
7319 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7320 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7321 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007322fi
7323
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007324if test "$live_block_migration" = "yes" ; then
7325 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7326fi
7327
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007328if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007329 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007330fi
7331
Lluís Vilanova5b808272014-05-27 15:02:14 +02007332echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7333if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02007334 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307335fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007336if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02007337 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7338 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007339 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007340fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007341if have_backend "log"; then
7342 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02007343fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007344if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02007345 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7346fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007347if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02007348 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7349 if test "$trace_backend_stap" = "yes" ; then
7350 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7351 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007352fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02007353if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007354 if test "$linux" = "yes" ; then
7355 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007356 else
Stewart Smith21684af2014-01-24 12:39:10 +11007357 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007358 fi
7359fi
Paul Durrant0a852412016-08-04 14:44:14 +01007360if have_backend "syslog"; then
7361 if test "$posix_syslog" = "yes" ; then
7362 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7363 else
7364 feature_not_found "syslog(trace backend)" "syslog not available"
7365 fi
7366fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007367echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7368
Michael R. Hines2da776d2013-07-22 10:01:54 -04007369if test "$rdma" = "yes" ; then
7370 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007371 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007372fi
7373
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007374if test "$pvrdma" = "yes" ; then
7375 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7376fi
7377
Laurent Vivier575b22b2016-06-02 22:14:15 +02007378if test "$have_rtnetlink" = "yes" ; then
7379 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7380fi
7381
Klim Kireeved279a02018-01-12 12:01:19 +03007382if test "$libxml2" = "yes" ; then
7383 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7384 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7385 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7386fi
7387
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007388if test "$replication" = "yes" ; then
7389 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7390fi
7391
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007392if test "$have_af_vsock" = "yes" ; then
7393 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7394fi
7395
Christopher Covington4d043512016-12-28 15:04:33 -05007396if test "$have_sysmacros" = "yes" ; then
7397 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7398fi
7399
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007400if test "$have_static_assert" = "yes" ; then
7401 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7402fi
7403
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007404if test "$have_utmpx" = "yes" ; then
7405 echo "HAVE_UTMPX=y" >> $config_host_mak
7406fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007407if test "$have_getrandom" = "yes" ; then
7408 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7409fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007410if test "$ivshmem" = "yes" ; then
7411 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7412fi
Richard Hendersone219c492017-09-28 09:01:23 -07007413if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007414 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7415fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007416if test "$debug_mutex" = "yes" ; then
7417 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7418fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007419
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007420# Hold two types of flag:
7421# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7422# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007423# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007424# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007425if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007426 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007427 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7428elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7429 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7430 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007431fi
7432
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007433if test "$vxhs" = "yes" ; then
7434 echo "CONFIG_VXHS=y" >> $config_host_mak
7435 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7436fi
7437
Junyan He17824402018-07-18 15:47:59 +08007438if test "$libpmem" = "yes" ; then
7439 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7440fi
7441
Jeff Cody2f740132018-11-07 07:36:44 +01007442if test "$bochs" = "yes" ; then
7443 echo "CONFIG_BOCHS=y" >> $config_host_mak
7444fi
7445if test "$cloop" = "yes" ; then
7446 echo "CONFIG_CLOOP=y" >> $config_host_mak
7447fi
7448if test "$dmg" = "yes" ; then
7449 echo "CONFIG_DMG=y" >> $config_host_mak
7450fi
7451if test "$qcow1" = "yes" ; then
7452 echo "CONFIG_QCOW1=y" >> $config_host_mak
7453fi
7454if test "$vdi" = "yes" ; then
7455 echo "CONFIG_VDI=y" >> $config_host_mak
7456fi
7457if test "$vvfat" = "yes" ; then
7458 echo "CONFIG_VVFAT=y" >> $config_host_mak
7459fi
7460if test "$qed" = "yes" ; then
7461 echo "CONFIG_QED=y" >> $config_host_mak
7462fi
7463if test "$parallels" = "yes" ; then
7464 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7465fi
7466if test "$sheepdog" = "yes" ; then
7467 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7468fi
7469
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007470if test "$plugins" = "yes" ; then
7471 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7472 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007473 # Copy the export object list to the build dir
7474 if test "$ld_dynamic_list" = "yes" ; then
7475 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7476 ld_symbols=qemu-plugins-ld.symbols
7477 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7478 elif test "$ld_exported_symbols_list" = "yes" ; then
7479 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7480 ld64_symbols=qemu-plugins-ld64.symbols
7481 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7482 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7483 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7484 else
7485 error_exit \
7486 "If \$plugins=yes, either \$ld_dynamic_list or " \
7487 "\$ld_exported_symbols_list should have been set to 'yes'."
7488 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007489fi
7490
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007491if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007492 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007493elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007494 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007495elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007496 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007497elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007498 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007499elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007500 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007501elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007502 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007503else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007504 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007505fi
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007506
Juan Quintela98ec69a2009-07-16 18:34:18 +02007507echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007508echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007509echo "MAKE=$make" >> $config_host_mak
7510echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007511echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7512echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007513echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7514echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007515echo "PYTHON=$python" >> $config_host_mak
Peter Maydell2eb054c2020-02-13 17:56:18 +00007516echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007517echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007518if $iasl -h > /dev/null 2>&1; then
7519 echo "IASL=$iasl" >> $config_host_mak
7520fi
Juan Quintela804edf22009-07-27 16:12:49 +02007521echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007522echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007523echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007524echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007525echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007526echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007527echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007528echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007529echo "OBJCOPY=$objcopy" >> $config_host_mak
7530echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007531echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007532echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007533echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007534echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007535echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007536echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007537echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007538echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007539echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007540if test "$sparse" = "yes" ; then
7541 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007542 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007543 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007544 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7545 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7546fi
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007547echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007548echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007549echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007550echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007551echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007552echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007553echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007554echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007555echo "DSOSUF=$DSOSUF" >> $config_host_mak
7556echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007557echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007558echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7559echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007560echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007561if test "$gcov" = "yes" ; then
7562 echo "CONFIG_GCOV=y" >> $config_host_mak
7563 echo "GCOV=$gcov_tool" >> $config_host_mak
7564fi
Juan Quintela804edf22009-07-27 16:12:49 +02007565
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007566if test "$libudev" != "no"; then
7567 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7568 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7569fi
7570
Philippe Mathieu-Daudé05dfa222019-11-08 12:45:30 +01007571if test "$edk2_blobs" = "yes" ; then
7572 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7573fi
7574
Peter Maydell6efd7512011-11-30 11:59:04 +00007575# use included Linux headers
7576if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007577 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007578 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007579 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007580 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007581 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007582 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007583 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007584 ;;
7585 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007586 linux_arch=s390
7587 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007588 aarch64)
7589 linux_arch=arm64
7590 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007591 mips64)
7592 linux_arch=mips
7593 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007594 *)
7595 # For most CPUs the kernel architecture name and QEMU CPU name match.
7596 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007597 ;;
7598 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007599 # For non-KVM architectures we will not have asm headers
7600 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7601 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7602 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007603fi
7604
bellard1d14ffa2005-10-30 18:58:22 +00007605for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007606target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007607config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007608target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007609target_aligned_only="no"
7610case "$target_name" in
7611 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7612 target_aligned_only="yes"
7613 ;;
7614esac
bellard97a847b2003-08-10 21:36:04 +00007615target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007616case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007617 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 +00007618 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007619 ;;
7620esac
bellard97a847b2003-08-10 21:36:04 +00007621target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007622target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007623target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007624target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007625case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007626 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007627 target_softmmu="yes"
7628 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007629 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007630 target_user_only="yes"
7631 target_linux_user="yes"
7632 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007633 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007634 target_user_only="yes"
7635 target_bsd_user="yes"
7636 ;;
pbrook9e407a82007-05-26 16:38:53 +00007637 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007638 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007639 exit 1
7640 ;;
7641esac
ths831b7822007-01-18 20:06:33 +00007642
bellard97a847b2003-08-10 21:36:04 +00007643mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007644echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007645
pbrooke5fe0c52006-06-11 13:32:59 +00007646bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007647mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007648interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007649gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007650
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007651TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007652TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007653TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007654
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007655case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007656 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007657 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307658 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007659 ;;
7660 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007661 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007662 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307663 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007664 ;;
7665 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007666 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00007667 ;;
7668 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007669 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007670 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007671 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007672 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007673 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007674 aarch64|aarch64_be)
7675 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007676 TARGET_BASE_ARCH=arm
7677 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007678 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007679 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 +01007680 ;;
aurel322408a522008-04-20 20:19:44 +00007681 cris)
aurel322408a522008-04-20 20:19:44 +00007682 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007683 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007684 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08007685 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007686 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007687 ;;
aurel322408a522008-04-20 20:19:44 +00007688 m68k)
aurel322408a522008-04-20 20:19:44 +00007689 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007690 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00007691 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007692 microblaze|microblazeel)
7693 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007694 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007695 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007696 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007697 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007698 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007699 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007700 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007701 ;;
7702 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007703 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007704 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007705 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007706 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007707 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007708 ;;
7709 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007710 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007711 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007712 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007713 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007714 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007715 moxie)
7716 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007717 nios2)
7718 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007719 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007720 TARGET_ARCH=openrisc
7721 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007722 ;;
aurel322408a522008-04-20 20:19:44 +00007723 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007724 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007725 ;;
aurel322408a522008-04-20 20:19:44 +00007726 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007727 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007728 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307729 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007730 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007731 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007732 ppc64le)
7733 TARGET_ARCH=ppc64
7734 TARGET_BASE_ARCH=ppc
7735 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307736 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007737 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 -05007738 ;;
aurel322408a522008-04-20 20:19:44 +00007739 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007740 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007741 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007742 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007743 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007744 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007745 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007746 riscv32)
7747 TARGET_BASE_ARCH=riscv
7748 TARGET_ABI_DIR=riscv
7749 mttcg=yes
Jonathan Behrensab9056f2019-10-14 11:45:28 -04007750 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
Michael Clark25fa1942018-03-03 01:32:59 +13007751 ;;
7752 riscv64)
7753 TARGET_BASE_ARCH=riscv
7754 TARGET_ABI_DIR=riscv
7755 mttcg=yes
Jonathan Behrensab9056f2019-10-14 11:45:28 -04007756 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
Michael Clark25fa1942018-03-03 01:32:59 +13007757 ;;
aurel322408a522008-04-20 20:19:44 +00007758 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007759 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007760 bflt="yes"
7761 ;;
7762 sparc)
aurel322408a522008-04-20 20:19:44 +00007763 ;;
7764 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007765 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007766 ;;
7767 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007768 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007769 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007770 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02007771 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007772 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007773 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007774 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007775 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 +01007776 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007777 tilegx)
7778 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007779 tricore)
7780 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007781 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007782 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007783 xtensa|xtensaeb)
7784 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007785 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007786 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007787 ;;
aurel322408a522008-04-20 20:19:44 +00007788 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007789 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007790 ;;
7791esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007792# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7793if [ "$TARGET_BASE_ARCH" = "" ]; then
7794 TARGET_BASE_ARCH=$TARGET_ARCH
7795fi
7796
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007797symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7798
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007799upper() {
7800 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7801}
7802
Stefan Weil89138852016-05-16 15:10:20 +02007803target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007804echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007805echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007806echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007807if [ "$TARGET_ABI_DIR" = "" ]; then
7808 TARGET_ABI_DIR=$TARGET_ARCH
7809fi
Juan Quintela25be2102009-10-07 02:41:00 +02007810echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007811if [ "$HOST_VARIANT_DIR" != "" ]; then
7812 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7813fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007814
7815if supported_xen_target $target; then
7816 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007817 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007818 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007819 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007820 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007821else
7822 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007823fi
7824if supported_kvm_target $target; then
7825 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007826 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7827else
7828 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007829fi
7830if supported_hax_target $target; then
7831 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007832fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007833if supported_hvf_target $target; then
7834 echo "CONFIG_HVF=y" >> $config_target_mak
7835fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007836if supported_whpx_target $target; then
7837 echo "CONFIG_WHPX=y" >> $config_target_mak
7838fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007839if test "$target_aligned_only" = "yes" ; then
7840 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7841fi
bellardde83cd02003-06-15 20:25:43 +00007842if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007843 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007844fi
7845if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007846 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007847 if test "$mttcg" = "yes" ; then
7848 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7849 fi
bellardde83cd02003-06-15 20:25:43 +00007850fi
bellard997344f2003-10-27 21:10:39 +00007851if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007852 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007853 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007854fi
ths831b7822007-01-18 20:06:33 +00007855if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007856 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007857fi
pbrook56aebc82008-10-11 17:55:29 +00007858list=""
7859if test ! -z "$gdb_xml_files" ; then
7860 for x in $gdb_xml_files; do
7861 list="$list $source_path/gdb-xml/$x"
7862 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007863 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007864fi
bellardde83cd02003-06-15 20:25:43 +00007865
Eric Blakee633a5c2019-02-04 20:39:37 -06007866if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007867 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007868fi
blueswir184778502008-10-26 20:33:16 +00007869if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007870 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007871fi
bellard5b0753e2005-03-01 21:37:28 +00007872
Alex Bennée716a5072018-04-10 12:19:40 +01007873
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007874# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007875
Juan Quintela4afddb52009-08-03 14:46:45 +02007876cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007877ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007878
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007879disas_config() {
7880 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7881 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7882}
7883
Juan Quintela64656022009-08-03 14:46:53 +02007884for i in $ARCH $TARGET_BASE_ARCH ; do
7885 case "$i" in
7886 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007887 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007888 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007889 aarch64)
7890 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007891 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007892 fi
7893 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007894 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007895 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007896 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007897 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007898 fi
Juan Quintela64656022009-08-03 14:46:53 +02007899 ;;
7900 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007901 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007902 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007903 hppa)
7904 disas_config "HPPA"
7905 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007906 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007907 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007908 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007909 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007910 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007911 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007912 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007913 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007914 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007915 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007916 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007917 ;;
7918 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007919 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007920 if test -n "${cxx}"; then
7921 disas_config "NANOMIPS"
7922 fi
Juan Quintela64656022009-08-03 14:46:53 +02007923 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007924 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007925 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007926 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007927 nios2)
7928 disas_config "NIOS2"
7929 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007930 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007931 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007932 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007933 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007934 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007935 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007936 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007937 disas_config "RISCV"
7938 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007939 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007940 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007941 ;;
7942 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007943 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007944 ;;
7945 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007946 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007947 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007948 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007949 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007950 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007951 esac
7952done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007953if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007954 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007955fi
Juan Quintela64656022009-08-03 14:46:53 +02007956
Juan Quintela6ee71262009-08-03 14:46:47 +02007957case "$ARCH" in
7958alpha)
7959 # Ensure there's only a single GP
7960 cflags="-msmall-data $cflags"
7961;;
7962esac
7963
Juan Quintelad02c1db2009-08-03 14:46:50 +02007964if test "$gprof" = "yes" ; then
Juan Quintelad02c1db2009-08-03 14:46:50 +02007965 if test "$target_linux_user" = "yes" ; then
7966 cflags="-p $cflags"
7967 ldflags="-p $ldflags"
7968 fi
7969 if test "$target_softmmu" = "yes" ; then
7970 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007971 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007972 fi
7973fi
7974
Eric Blakee633a5c2019-02-04 20:39:37 -06007975if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007976 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007977fi
Juan Quintelafa282482009-07-22 22:37:39 +02007978
Christian Borntraegere9a35912017-08-23 12:16:23 +02007979# Newer kernels on s390 check for an S390_PGSTE program header and
7980# enable the pgste page table extensions in that case. This makes
7981# the vm.allocate_pgste sysctl unnecessary. We enable this program
7982# header if
7983# - we build on s390x
7984# - we build the system emulation for s390x (qemu-system-s390x)
7985# - KVM is enabled
7986# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06007987if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7988 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02007989 if ld_has --s390-pgste ; then
7990 ldflags="-Wl,--s390-pgste $ldflags"
7991 fi
7992fi
7993
Paolo Bonzinidb5adea2019-12-11 15:34:27 +01007994echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007995echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007996
bellard97a847b2003-08-10 21:36:04 +00007997done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007998
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007999echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8000echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8001
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03008002if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008003 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008004fi
Richard Hendersone219c492017-09-28 09:01:23 -07008005if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02008006 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07008007fi
8008if test -n "$LIBCAPSTONE"; then
8009 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8010fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10008011
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08008012if test "$numa" = "yes"; then
8013 echo "CONFIG_NUMA=y" >> $config_host_mak
8014fi
8015
John Snowfd0e6052015-03-25 18:57:39 -04008016if test "$ccache_cpp2" = "yes"; then
8017 echo "export CCACHE_CPP2=y" >> $config_host_mak
8018fi
8019
Peter Maydelle29e5c62018-11-02 11:52:38 +00008020# If we're using a separate build tree, set it up now.
8021# DIRS are directories which we simply mkdir in the build tree;
8022# LINKS are things to symlink back into the source tree
8023# (these can be both files and directories).
8024# Caution: do not add files or directories here using wildcards. This
8025# will result in problems later if a new file matching the wildcard is
8026# added to the source tree -- nothing will cause configure to be rerun
8027# so the build tree will be missing the link back to the new file, and
8028# tests might fail. Prefer to keep the relevant files in their own
8029# directory and symlink the directory instead.
Thomas Huth1cf43232019-09-10 16:41:20 +02008030DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8031DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02008032DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10008033DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008034DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008035LINKS="Makefile"
8036LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8037LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04008038LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008039LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00008040LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8041LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
8042LINKS="$LINKS pc-bios/qemu-icon.bmp"
8043LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00008044LINKS="$LINKS tests/acceptance tests/data"
8045LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008046LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008047for bios_file in \
8048 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008049 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008050 $source_path/pc-bios/*.rom \
8051 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008052 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008053 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008054 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008055 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008056 $source_path/pc-bios/palcode-*
8057do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008058 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008059done
8060mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008061for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008062 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008063 symlink "$source_path/$f" "$f"
8064 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008065done
Paul Brook1ad21342009-05-19 16:17:58 +01008066
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008067(for i in $cross_cc_vars; do
8068 export $i
8069done
Alex Bennéeafc3a8f2019-11-28 16:35:24 +01008070export target_list source_path use_containers
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008071$source_path/tests/tcg/configure.sh)
8072
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008073# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008074for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008075 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008076 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008077 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008078 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008079 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008080 echo "CC=$cc" >> $config_mak
8081 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008082 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008083 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008084 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008085 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008086 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008087done
8088
Max Reitz76c75602014-05-24 23:24:56 +02008089# set up qemu-iotests in this build directory
8090iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008091
8092echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8093echo >> "$iotests_common_env"
8094echo "export PYTHON='$python'" >> "$iotests_common_env"
8095
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008096# Save the configure command line for later reuse.
8097cat <<EOD >config.status
8098#!/bin/sh
8099# Generated by configure.
8100# Run this file to recreate the current configuration.
8101# Compiler output produced by configure, useful for debugging
8102# configure, is in config.log if it exists.
8103EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008104
8105preserve_env() {
8106 envname=$1
8107
8108 eval envval=\$$envname
8109
8110 if test -n "$envval"
8111 then
8112 echo "$envname='$envval'" >> config.status
8113 echo "export $envname" >> config.status
8114 else
8115 echo "unset $envname" >> config.status
8116 fi
8117}
8118
8119# Preserve various env variables that influence what
8120# features/build target configure will detect
8121preserve_env AR
8122preserve_env AS
8123preserve_env CC
8124preserve_env CPP
8125preserve_env CXX
8126preserve_env INSTALL
8127preserve_env LD
8128preserve_env LD_LIBRARY_PATH
8129preserve_env LIBTOOL
8130preserve_env MAKE
8131preserve_env NM
8132preserve_env OBJCOPY
8133preserve_env PATH
8134preserve_env PKG_CONFIG
8135preserve_env PKG_CONFIG_LIBDIR
8136preserve_env PKG_CONFIG_PATH
8137preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008138preserve_env SDL2_CONFIG
8139preserve_env SMBD
8140preserve_env STRIP
8141preserve_env WINDRES
8142
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008143printf "exec" >>config.status
8144printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008145echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008146chmod +x config.status
8147
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008148rm -r "$TMPDIR1"