blob: efe165edf9a505abdf49529aad3c4c92bb3caddf [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.
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100104 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
105
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"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100129 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $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=""
aliguoriac0df512008-12-29 17:14:15 +0000305
Daniel P. Berrange92712822017-09-29 11:11:58 +0100306if test -e "$source_path/.git"
307then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100308 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100309 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500310 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
311 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100312else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100313 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100314 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100315
316 if ! test -f "$source_path/ui/keycodemapdb/README"
317 then
318 echo
319 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
320 echo
321 echo "This is not a GIT checkout but module content appears to"
322 echo "be missing. Do not use 'git archive' or GitHub download links"
323 echo "to acquire QEMU source archives. Non-GIT builds are only"
324 echo "supported with source archives linked from:"
325 echo
Peter Maydella3e3b522019-07-22 14:07:39 +0100326 echo " https://www.qemu.org/download/#source"
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100327 echo
328 echo "Developers working with GIT can use scripts/archive-source.sh"
329 echo "if they need to create valid source archives."
330 echo
331 exit 1
332 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100333fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100334git="git"
aliguoriac0df512008-12-29 17:14:15 +0000335
Stefan Weilafb63eb2012-09-26 22:04:38 +0200336# Don't accept a target_list environment variable.
337unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000338unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100339
340# Default value for a variable defining feature "foo".
341# * foo="no" feature will only be used if --enable-foo arg is given
342# * foo="" feature will be searched for, and if found, will be used
343# unless --disable-foo is given
344# * foo="yes" this value will only be set by --enable-foo flag.
345# feature will searched for,
346# if not found, configure exits with error
347#
348# Always add --enable-foo and --disable-foo command line args.
349# Distributions want to ensure that several features are compiled in, and it
350# is impossible without a --enable-foo that exits if a feature is not found.
351
352bluez=""
353brlapi=""
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=""
Corey Bryant47e98652012-01-26 09:42:26 -0500374cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100375attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200376libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100377xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200378tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100379membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100380vhost_net=""
381vhost_crypto=""
382vhost_scsi=""
383vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200384vhost_user=""
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +0100385vhost_user_fs=""
Bradd41a75a2011-07-26 23:11:26 -0400386kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100387hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500388hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800389whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400390rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300391pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100392gprof="no"
393debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100394debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100395sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500396fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100397strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200398tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100399bigendian="no"
400mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000401gcov="no"
402gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100403EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800404DSOSUF=".so"
405LDFLAGS_SHARED="-shared"
406modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100407prefix="/usr/local"
408mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300409datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200410firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300411qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100412bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300413libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400414libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200415includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100416sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300417local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100418confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100419slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100420oss_lib=""
421bsd="no"
422linux="no"
423solaris="no"
424profiler="no"
425cocoa="no"
426softmmu="yes"
427linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100428bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100429blobs="yes"
430pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200431pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200432qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300433trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100434trace_file="trace"
435spice=""
436rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200437smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100438libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200439usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100440opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100441opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000442cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100443avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300444zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700445capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200446lzo=""
447snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100448bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200449lzfse=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400450guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400451guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500452guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300453guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400454vss_win32_sdk=""
455win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100456want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100457libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100458libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100459coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200460coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200461debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400462crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300463seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530464glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400465glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530466glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530467glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530468glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100469glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100470glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600471gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200472gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100473tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100474gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100475nettle=""
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +0100476nettle_xts="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100477gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800478gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100479gcrypt_xts="no"
480qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100481auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100482vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200483virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800484tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200485libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100486live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800487numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800488tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200489jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800490replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700491vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100492bochs="yes"
493cloop="yes"
494dmg="yes"
495qcow1="yes"
496vdi="yes"
497vvfat="yes"
498qed="yes"
499parallels="yes"
500sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300501libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200502debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800503libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800504default_devices="yes"
Alex Bennée40e8c6f2019-06-13 14:52:25 +0100505plugins="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100506
Peter Maydell898be3e2017-03-21 14:31:57 +0000507supported_cpu="no"
508supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100509bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800510malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000511
aliguoriac0df512008-12-29 17:14:15 +0000512# parse CC options first
513for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200514 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000515 case "$opt" in
516 --cross-prefix=*) cross_prefix="$optarg"
517 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100518 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000519 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400520 --cxx=*) CXX="$optarg"
521 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200522 --cpu=*) cpu="$optarg"
523 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100524 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200525 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100526 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100527 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100528 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100529 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200530 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100531 --enable-debug-info) debug_info="yes"
532 ;;
533 --disable-debug-info) debug_info="no"
534 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100535 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
536 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100537 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
538 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200539 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100540 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100541 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200542 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100543 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200544 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100545 ;;
aliguoriac0df512008-12-29 17:14:15 +0000546 esac
547done
aliguoriac0df512008-12-29 17:14:15 +0000548# OS specific
549# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100550# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000551
Peter Maydelle49d0212012-12-07 15:39:13 +0000552# Preferred compiler:
553# ${CC} (if set)
554# ${cross_prefix}gcc (if cross-prefix specified)
555# system compiler
556if test -z "${CC}${cross_prefix}"; then
557 cc="$host_cc"
558else
559 cc="${CC-${cross_prefix}gcc}"
560fi
561
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400562if test -z "${CXX}${cross_prefix}"; then
563 cxx="c++"
564else
565 cxx="${CXX-${cross_prefix}g++}"
566fi
567
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500568ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700569as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700570ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000571cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500572objcopy="${OBJCOPY-${cross_prefix}objcopy}"
573ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800574ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200575nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500576strip="${STRIP-${cross_prefix}strip}"
577windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300578pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
579query_pkg_config() {
580 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
581}
582pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000583sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000584
Peter Maydell45d285a2013-10-21 21:03:06 +0100585# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
586ARFLAGS="${ARFLAGS-rv}"
587
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200588# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100589# We use -fwrapv to tell the compiler that we require a C dialect where
590# left shift of signed integers is well defined and has the expected
591# 2s-complement style results. (Both clang and gcc agree that it
592# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100593QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400594QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100595QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200596QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200597QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100598if test "$debug_info" = "yes"; then
599 CFLAGS="-g $CFLAGS"
600 LDFLAGS="-g $LDFLAGS"
601fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200602
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300603# running configure in the source tree?
604# we know that's the case if configure is there.
605if test -f "./configure"; then
606 pwd_is_source_path="y"
607else
608 pwd_is_source_path="n"
609fi
610
aliguoriac0df512008-12-29 17:14:15 +0000611check_define() {
612cat > $TMPC <<EOF
613#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000614#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000615#endif
616int main(void) { return 0; }
617EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200618 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000619}
620
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200621check_include() {
622cat > $TMPC <<EOF
623#include <$1>
624int main(void) { return 0; }
625EOF
626 compile_object
627}
628
John Snow93b25862015-03-25 18:57:37 -0400629write_c_skeleton() {
630 cat > $TMPC <<EOF
631int main(void) { return 0; }
632EOF
633}
634
Peter Maydellbbea4052012-08-14 15:35:34 +0100635if check_define __linux__ ; then
636 targetos="Linux"
637elif check_define _WIN32 ; then
638 targetos='MINGW32'
639elif check_define __OpenBSD__ ; then
640 targetos='OpenBSD'
641elif check_define __sun__ ; then
642 targetos='SunOS'
643elif check_define __HAIKU__ ; then
644 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100645elif check_define __FreeBSD__ ; then
646 targetos='FreeBSD'
647elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
648 targetos='GNU/kFreeBSD'
649elif check_define __DragonFly__ ; then
650 targetos='DragonFly'
651elif check_define __NetBSD__; then
652 targetos='NetBSD'
653elif check_define __APPLE__; then
654 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100655else
Peter Maydell951fedf2017-07-13 16:15:32 +0100656 # This is a fatal error, but don't report it yet, because we
657 # might be going to just print the --help text, or it might
658 # be the result of a missing compiler.
659 targetos='bogus'
660 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100661fi
662
663# Some host OSes need non-standard checks for which CPU to use.
664# Note that these checks are broken for cross-compilation: if you're
665# cross-compiling to one of these OSes then you'll need to specify
666# the correct CPU with the --cpu option.
667case $targetos in
668Darwin)
669 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
670 # run 64-bit userspace code.
671 # If the user didn't specify a CPU explicitly and the kernel says this is
672 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
673 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
674 cpu="x86_64"
675 fi
676 ;;
677SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200678 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100679 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
680 cpu="x86_64"
681 fi
682esac
683
Juan Quintela2ff6b912009-08-03 14:45:55 +0200684if test ! -z "$cpu" ; then
685 # command line argument
686 :
687elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000688 cpu="i386"
689elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700690 if check_define __ILP32__ ; then
691 cpu="x32"
692 else
693 cpu="x86_64"
694 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000695elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000696 if check_define __arch64__ ; then
697 cpu="sparc64"
698 else
699 cpu="sparc"
700 fi
malcfdf7ed92009-01-14 18:39:52 +0000701elif check_define _ARCH_PPC ; then
702 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700703 if check_define _LITTLE_ENDIAN ; then
704 cpu="ppc64le"
705 else
706 cpu="ppc64"
707 fi
malcfdf7ed92009-01-14 18:39:52 +0000708 else
709 cpu="ppc"
710 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200711elif check_define __mips__ ; then
712 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200713elif check_define __s390__ ; then
714 if check_define __s390x__ ; then
715 cpu="s390x"
716 else
717 cpu="s390"
718 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000719elif check_define __riscv ; then
720 if check_define _LP64 ; then
721 cpu="riscv64"
722 else
723 cpu="riscv32"
724 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100725elif check_define __arm__ ; then
726 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100727elif check_define __aarch64__ ; then
728 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000729else
Stefan Weil89138852016-05-16 15:10:20 +0200730 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000731fi
732
Peter Maydell359bc952011-12-24 13:07:25 +0000733ARCH=
734# Normalise host CPU name and set ARCH.
735# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000736case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200737 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000738 supported_cpu="yes"
739 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700740 ppc64le)
741 ARCH="ppc64"
742 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700743 ;;
bellard7d132992003-03-06 23:23:54 +0000744 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000745 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000746 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000747 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000748 x86_64|amd64)
749 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000750 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000751 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100752 armv*b|armv*l|arm)
753 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000754 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000755 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100756 aarch64)
757 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000758 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100759 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200760 mips*)
761 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000762 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200763 ;;
blueswir131422552007-04-16 18:27:06 +0000764 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000765 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100766 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000767 ;;
bellard7d132992003-03-06 23:23:54 +0000768 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000769 # This will result in either an error or falling back to TCI later
770 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000771 ;;
772esac
Peter Maydell359bc952011-12-24 13:07:25 +0000773if test -z "$ARCH"; then
774 ARCH="$cpu"
775fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200776
bellard7d132992003-03-06 23:23:54 +0000777# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200778
Stacey Sonadfc3e92014-06-08 09:57:22 -0700779# host *BSD for user mode
780HOST_VARIANT_DIR=""
781
bellard7d132992003-03-06 23:23:54 +0000782case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000783MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200784 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100785 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100786 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200787 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200788 if check_include dsound.h; then
789 audio_drv_list="dsound"
790 else
791 audio_drv_list=""
792 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000793 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000794;;
ths5c40d2b2007-06-23 16:03:36 +0000795GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100796 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100797 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200798 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000799;;
bellard7d3505c2004-05-12 19:32:15 +0000800FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200801 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100802 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100803 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200804 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100805 # needed for kinfo_getvmmap(3) in libutil.h
806 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500807 # needed for kinfo_getproc
808 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100809 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700810 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000811 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000812;;
blueswir1c5e97232009-03-07 20:06:23 +0000813DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200814 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100815 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100816 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200817 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700818 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000819;;
bellard7d3505c2004-05-12 19:32:15 +0000820NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200821 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100822 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100823 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100824 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200825 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200826 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700827 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200828 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000829;;
830OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200831 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100832 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100833 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200834 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700835 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500836 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000837;;
bellard83fb7ad2004-07-05 21:25:26 +0000838Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200839 bsd="yes"
840 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100841 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500842 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800843 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200844 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200845 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200846 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200847 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200848 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100849 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200850 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200851 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200852 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100853 # Disable attempts to use ObjectiveC features in os/object.h since they
854 # won't work when we're compiling with gcc as a C compiler.
855 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700856 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000857 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000858;;
bellardec530c82006-04-25 22:36:06 +0000859SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200860 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100861 make="${MAKE-gmake}"
862 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400863 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200864 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100865 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200866 fi
867 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000868# needed for CMSG_ macros in sys/socket.h
869 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
870# needed for TIOCWIN* defines in termios.h
871 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200872 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200873 solarisnetlibs="-lsocket -lnsl -lresolv"
874 LIBS="$solarisnetlibs $LIBS"
875 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000876;;
Andreas Färber179cf402010-09-20 00:50:43 +0200877Haiku)
878 haiku="yes"
879 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
880 LIBS="-lposix_error_mapper -lnetwork $LIBS"
881;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000882Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100883 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200884 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200885 linux="yes"
886 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200887 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600888 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000889 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200890 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000891;;
bellard7d132992003-03-06 23:23:54 +0000892esac
893
bellard7d3505c2004-05-12 19:32:15 +0000894if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000895 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200896 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000897 fi
bellard7d3505c2004-05-12 19:32:15 +0000898fi
899
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100900: ${make=${MAKE-make}}
901: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000902# We prefer python 3.x. A bare 'python' is traditionally
903# python 2.x, but some distros have it as python 3.x, so
904# we check that before python2
905python=
906for binary in "${PYTHON-python3}" python python2
907do
908 if has "$binary"
909 then
910 python="$binary"
911 break
912 fi
913done
Brade2d88302011-09-02 16:53:28 -0400914: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100915
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100916# Default objcc to clang if available, otherwise use CC
917if has clang; then
918 objcc=clang
919else
920 objcc="$cc"
921fi
922
Juan Quintela3457a3f2009-08-03 14:46:07 +0200923if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200924 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800925 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100926 # MinGW needs -mthreads for TLS and macro _MT.
927 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100928 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400929 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100930 if compile_prog "" "-liberty" ; then
931 LIBS="-liberty $LIBS"
932 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200933 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200934 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300935 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300936 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200937 bindir="\${prefix}"
938 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200939 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200940 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300941 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200942fi
943
Anthony Liguori487fefd2009-06-11 13:28:25 -0500944werror=""
bellard85aa5182007-11-11 20:17:03 +0000945
bellard7d132992003-03-06 23:23:54 +0000946for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200947 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000948 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000949 --help|-h) show_help=yes
950 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400951 --version|-V) exec cat $source_path/VERSION
952 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000953 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000954 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000955 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000956 ;;
aliguoriac0df512008-12-29 17:14:15 +0000957 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000958 ;;
aliguoriac0df512008-12-29 17:14:15 +0000959 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000960 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000961 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000962 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400963 --cxx=*)
964 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200965 --iasl=*) iasl="$optarg"
966 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100967 --objcc=*) objcc="$optarg"
968 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000969 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000970 ;;
pbrook6a882642006-04-17 13:57:12 +0000971 --install=*) install="$optarg"
972 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000973 --python=*) python="$optarg"
974 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000975 --gcov=*) gcov_tool="$optarg"
976 ;;
Brade2d88302011-09-02 16:53:28 -0400977 --smbd=*) smbd="$optarg"
978 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200979 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000980 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100981 --extra-cxxflags=*)
982 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200983 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000984 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100985 --enable-debug-info)
986 ;;
987 --disable-debug-info)
988 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100989 --cross-cc-*)
990 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800991 --enable-modules)
992 modules="yes"
993 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000994 --disable-modules)
995 modules="no"
996 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200997 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000998 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000999 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001000 if test "$target_list_exclude"; then
1001 error_exit "Can't mix --target-list with --target-list-exclude"
1002 fi
1003 ;;
1004 --target-list-exclude=*) target_list_exclude="$optarg"
1005 if test "$target_list"; then
1006 error_exit "Can't mix --target-list-exclude with --target-list"
1007 fi
bellardde83cd02003-06-15 20:25:43 +00001008 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001009 --enable-trace-backends=*) trace_backends="$optarg"
1010 ;;
1011 # XXX: backwards compatibility
1012 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001013 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001014 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001015 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001016 --with-default-devices) default_devices="yes"
1017 ;;
1018 --without-default-devices) default_devices="no"
1019 ;;
bellard7d132992003-03-06 23:23:54 +00001020 --enable-gprof) gprof="yes"
1021 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001022 --enable-gcov) gcov="yes"
1023 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001024 --static)
1025 static="yes"
1026 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001027 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001028 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001029 --mandir=*) mandir="$optarg"
1030 ;;
1031 --bindir=*) bindir="$optarg"
1032 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001033 --libdir=*) libdir="$optarg"
1034 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001035 --libexecdir=*) libexecdir="$optarg"
1036 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001037 --includedir=*) includedir="$optarg"
1038 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001039 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001040 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001041 --with-confsuffix=*) confsuffix="$optarg"
1042 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001043 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001044 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001045 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001046 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001047 --localstatedir=*) local_statedir="$optarg"
1048 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001049 --firmwarepath=*) firmwarepath="$optarg"
1050 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001051 --host=*|--build=*|\
1052 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001053 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001054 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1055 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1056 # These switches are silently ignored, for compatibility with
1057 # autoconf-generated configure scripts. This allows QEMU's
1058 # configure to be used by RPM and similar macros that set
1059 # lots of directory switches by default.
1060 ;;
bellard97a847b2003-08-10 21:36:04 +00001061 --disable-sdl) sdl="no"
1062 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001063 --enable-sdl) sdl="yes"
1064 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001065 --disable-sdl-image) sdl_image="no"
1066 ;;
1067 --enable-sdl-image) sdl_image="yes"
1068 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001069 --disable-qom-cast-debug) qom_cast_debug="no"
1070 ;;
1071 --enable-qom-cast-debug) qom_cast_debug="yes"
1072 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301073 --disable-virtfs) virtfs="no"
1074 ;;
1075 --enable-virtfs) virtfs="yes"
1076 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001077 --disable-mpath) mpath="no"
1078 ;;
1079 --enable-mpath) mpath="yes"
1080 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001081 --disable-vnc) vnc="no"
1082 ;;
1083 --enable-vnc) vnc="yes"
1084 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001085 --oss-lib=*) oss_lib="$optarg"
1086 ;;
malc0c58ac12008-06-25 21:04:05 +00001087 --audio-drv-list=*) audio_drv_list="$optarg"
1088 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001089 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001090 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001091 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001092 ;;
aurel32f8393942009-04-13 18:45:38 +00001093 --enable-debug-tcg) debug_tcg="yes"
1094 ;;
1095 --disable-debug-tcg) debug_tcg="no"
1096 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001097 --enable-debug)
1098 # Enable debugging options that aren't excessively noisy
1099 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001100 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001101 debug="yes"
1102 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001103 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001104 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001105 --enable-sanitizers) sanitizers="yes"
1106 ;;
1107 --disable-sanitizers) sanitizers="no"
1108 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001109 --enable-sparse) sparse="yes"
1110 ;;
1111 --disable-sparse) sparse="no"
1112 ;;
aliguori1625af82009-04-05 17:41:02 +00001113 --disable-strip) strip_opt="no"
1114 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001115 --disable-vnc-sasl) vnc_sasl="no"
1116 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001117 --enable-vnc-sasl) vnc_sasl="yes"
1118 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001119 --disable-vnc-jpeg) vnc_jpeg="no"
1120 ;;
1121 --enable-vnc-jpeg) vnc_jpeg="yes"
1122 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001123 --disable-vnc-png) vnc_png="no"
1124 ;;
1125 --enable-vnc-png) vnc_png="yes"
1126 ;;
bellard443f1372004-06-04 11:13:20 +00001127 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001128 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001129 --enable-slirp=git) slirp="git"
1130 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001131 --enable-slirp=system) slirp="system"
1132 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001133 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001134 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001135 --enable-vde) vde="yes"
1136 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001137 --disable-netmap) netmap="no"
1138 ;;
1139 --enable-netmap) netmap="yes"
1140 ;;
aliguorie37630c2009-04-22 15:19:10 +00001141 --disable-xen) xen="no"
1142 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001143 --enable-xen) xen="yes"
1144 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001145 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1146 ;;
1147 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1148 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001149 --disable-brlapi) brlapi="no"
1150 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001151 --enable-brlapi) brlapi="yes"
1152 ;;
balrogfb599c92008-09-28 23:49:55 +00001153 --disable-bluez) bluez="no"
1154 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001155 --enable-bluez) bluez="yes"
1156 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001157 --disable-kvm) kvm="no"
1158 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001159 --enable-kvm) kvm="yes"
1160 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001161 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001162 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001163 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001164 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001165 --disable-hvf) hvf="no"
1166 ;;
1167 --enable-hvf) hvf="yes"
1168 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001169 --disable-whpx) whpx="no"
1170 ;;
1171 --enable-whpx) whpx="yes"
1172 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001173 --disable-tcg-interpreter) tcg_interpreter="no"
1174 ;;
1175 --enable-tcg-interpreter) tcg_interpreter="yes"
1176 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001177 --disable-cap-ng) cap_ng="no"
1178 ;;
1179 --enable-cap-ng) cap_ng="yes"
1180 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001181 --disable-tcg) tcg="no"
1182 ;;
1183 --enable-tcg) tcg="yes"
1184 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001185 --disable-malloc-trim) malloc_trim="no"
1186 ;;
1187 --enable-malloc-trim) malloc_trim="yes"
1188 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001189 --disable-spice) spice="no"
1190 ;;
1191 --enable-spice) spice="yes"
1192 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001193 --disable-libiscsi) libiscsi="no"
1194 ;;
1195 --enable-libiscsi) libiscsi="yes"
1196 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001197 --disable-libnfs) libnfs="no"
1198 ;;
1199 --enable-libnfs) libnfs="yes"
1200 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001201 --enable-profiler) profiler="yes"
1202 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001203 --disable-cocoa) cocoa="no"
1204 ;;
malcc2de5c92008-06-28 19:13:06 +00001205 --enable-cocoa)
1206 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001207 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001208 ;;
pbrookcad25d62006-03-19 16:31:11 +00001209 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001210 ;;
pbrookcad25d62006-03-19 16:31:11 +00001211 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001212 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001213 --disable-user)
1214 linux_user="no" ;
1215 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001216 ;;
1217 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001218 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001219 ;;
ths831b7822007-01-18 20:06:33 +00001220 --enable-linux-user) linux_user="yes"
1221 ;;
blueswir184778502008-10-26 20:33:16 +00001222 --disable-bsd-user) bsd_user="no"
1223 ;;
1224 --enable-bsd-user) bsd_user="yes"
1225 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001226 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001227 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001228 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001229 ;;
bellard85aa5182007-11-11 20:17:03 +00001230 --enable-werror) werror="yes"
1231 ;;
1232 --disable-werror) werror="no"
1233 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001234 --enable-stack-protector) stack_protector="yes"
1235 ;;
1236 --disable-stack-protector) stack_protector="no"
1237 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001238 --disable-curses) curses="no"
1239 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001240 --enable-curses) curses="yes"
1241 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001242 --disable-iconv) iconv="no"
1243 ;;
1244 --enable-iconv) iconv="yes"
1245 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001246 --disable-curl) curl="no"
1247 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001248 --enable-curl) curl="yes"
1249 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001250 --disable-fdt) fdt="no"
1251 ;;
1252 --enable-fdt) fdt="yes"
1253 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001254 --disable-linux-aio) linux_aio="no"
1255 ;;
1256 --enable-linux-aio) linux_aio="yes"
1257 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001258 --disable-attr) attr="no"
1259 ;;
1260 --enable-attr) attr="yes"
1261 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001262 --disable-membarrier) membarrier="no"
1263 ;;
1264 --enable-membarrier) membarrier="yes"
1265 ;;
ths77755342008-11-27 15:45:16 +00001266 --disable-blobs) blobs="no"
1267 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001268 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001269 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001270 --with-coroutine=*) coroutine="$optarg"
1271 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001272 --disable-coroutine-pool) coroutine_pool="no"
1273 ;;
1274 --enable-coroutine-pool) coroutine_pool="yes"
1275 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001276 --enable-debug-stack-usage) debug_stack_usage="yes"
1277 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001278 --enable-crypto-afalg) crypto_afalg="yes"
1279 ;;
1280 --disable-crypto-afalg) crypto_afalg="no"
1281 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001282 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001283 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001284 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001285 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001286 --disable-vhost-net) vhost_net="no"
1287 ;;
1288 --enable-vhost-net) vhost_net="yes"
1289 ;;
Gonglei042cea22018-03-01 21:46:28 +08001290 --disable-vhost-crypto) vhost_crypto="no"
1291 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001292 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001293 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001294 --disable-vhost-scsi) vhost_scsi="no"
1295 ;;
1296 --enable-vhost-scsi) vhost_scsi="yes"
1297 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001298 --disable-vhost-vsock) vhost_vsock="no"
1299 ;;
1300 --enable-vhost-vsock) vhost_vsock="yes"
1301 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001302 --disable-vhost-user-fs) vhost_user_fs="no"
1303 ;;
1304 --enable-vhost-user-fs) vhost_user_fs="yes"
1305 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001306 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001307 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001308 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001309 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001310 --disable-rbd) rbd="no"
1311 ;;
1312 --enable-rbd) rbd="yes"
1313 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001314 --disable-xfsctl) xfs="no"
1315 ;;
1316 --enable-xfsctl) xfs="yes"
1317 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001318 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001319 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001320 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001321 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001322 --disable-libusb) libusb="no"
1323 ;;
1324 --enable-libusb) libusb="yes"
1325 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001326 --disable-usb-redir) usb_redir="no"
1327 ;;
1328 --enable-usb-redir) usb_redir="yes"
1329 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001330 --disable-zlib-test) zlib="no"
1331 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001332 --disable-lzo) lzo="no"
1333 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001334 --enable-lzo) lzo="yes"
1335 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001336 --disable-snappy) snappy="no"
1337 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001338 --enable-snappy) snappy="yes"
1339 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001340 --disable-bzip2) bzip2="no"
1341 ;;
1342 --enable-bzip2) bzip2="yes"
1343 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001344 --enable-lzfse) lzfse="yes"
1345 ;;
1346 --disable-lzfse) lzfse="no"
1347 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001348 --enable-guest-agent) guest_agent="yes"
1349 ;;
1350 --disable-guest-agent) guest_agent="no"
1351 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001352 --enable-guest-agent-msi) guest_agent_msi="yes"
1353 ;;
1354 --disable-guest-agent-msi) guest_agent_msi="no"
1355 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001356 --with-vss-sdk) vss_win32_sdk=""
1357 ;;
1358 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1359 ;;
1360 --without-vss-sdk) vss_win32_sdk="no"
1361 ;;
1362 --with-win-sdk) win_sdk=""
1363 ;;
1364 --with-win-sdk=*) win_sdk="$optarg"
1365 ;;
1366 --without-win-sdk) win_sdk="no"
1367 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001368 --enable-tools) want_tools="yes"
1369 ;;
1370 --disable-tools) want_tools="no"
1371 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001372 --enable-seccomp) seccomp="yes"
1373 ;;
1374 --disable-seccomp) seccomp="no"
1375 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301376 --disable-glusterfs) glusterfs="no"
1377 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001378 --disable-avx2) avx2_opt="no"
1379 ;;
1380 --enable-avx2) avx2_opt="yes"
1381 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301382 --enable-glusterfs) glusterfs="yes"
1383 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001384 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1385 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001386 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001387 --enable-vhdx|--disable-vhdx)
1388 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1389 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001390 --enable-uuid|--disable-uuid)
1391 echo "$0: $opt is obsolete, UUID support is always built" >&2
1392 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001393 --disable-gtk) gtk="no"
1394 ;;
1395 --enable-gtk) gtk="yes"
1396 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001397 --tls-priority=*) tls_priority="$optarg"
1398 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001399 --disable-gnutls) gnutls="no"
1400 ;;
1401 --enable-gnutls) gnutls="yes"
1402 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001403 --disable-nettle) nettle="no"
1404 ;;
1405 --enable-nettle) nettle="yes"
1406 ;;
1407 --disable-gcrypt) gcrypt="no"
1408 ;;
1409 --enable-gcrypt) gcrypt="yes"
1410 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001411 --disable-auth-pam) auth_pam="no"
1412 ;;
1413 --enable-auth-pam) auth_pam="yes"
1414 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001415 --enable-rdma) rdma="yes"
1416 ;;
1417 --disable-rdma) rdma="no"
1418 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001419 --enable-pvrdma) pvrdma="yes"
1420 ;;
1421 --disable-pvrdma) pvrdma="no"
1422 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001423 --disable-vte) vte="no"
1424 ;;
1425 --enable-vte) vte="yes"
1426 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001427 --disable-virglrenderer) virglrenderer="no"
1428 ;;
1429 --enable-virglrenderer) virglrenderer="yes"
1430 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001431 --disable-tpm) tpm="no"
1432 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001433 --enable-tpm) tpm="yes"
1434 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001435 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001436 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001437 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001438 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001439 --disable-live-block-migration) live_block_migration="no"
1440 ;;
1441 --enable-live-block-migration) live_block_migration="yes"
1442 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001443 --disable-numa) numa="no"
1444 ;;
1445 --enable-numa) numa="yes"
1446 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001447 --disable-libxml2) libxml2="no"
1448 ;;
1449 --enable-libxml2) libxml2="yes"
1450 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001451 --disable-tcmalloc) tcmalloc="no"
1452 ;;
1453 --enable-tcmalloc) tcmalloc="yes"
1454 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001455 --disable-jemalloc) jemalloc="no"
1456 ;;
1457 --enable-jemalloc) jemalloc="yes"
1458 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001459 --disable-replication) replication="no"
1460 ;;
1461 --enable-replication) replication="yes"
1462 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001463 --disable-vxhs) vxhs="no"
1464 ;;
1465 --enable-vxhs) vxhs="yes"
1466 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001467 --disable-bochs) bochs="no"
1468 ;;
1469 --enable-bochs) bochs="yes"
1470 ;;
1471 --disable-cloop) cloop="no"
1472 ;;
1473 --enable-cloop) cloop="yes"
1474 ;;
1475 --disable-dmg) dmg="no"
1476 ;;
1477 --enable-dmg) dmg="yes"
1478 ;;
1479 --disable-qcow1) qcow1="no"
1480 ;;
1481 --enable-qcow1) qcow1="yes"
1482 ;;
1483 --disable-vdi) vdi="no"
1484 ;;
1485 --enable-vdi) vdi="yes"
1486 ;;
1487 --disable-vvfat) vvfat="no"
1488 ;;
1489 --enable-vvfat) vvfat="yes"
1490 ;;
1491 --disable-qed) qed="no"
1492 ;;
1493 --enable-qed) qed="yes"
1494 ;;
1495 --disable-parallels) parallels="no"
1496 ;;
1497 --enable-parallels) parallels="yes"
1498 ;;
1499 --disable-sheepdog) sheepdog="no"
1500 ;;
1501 --enable-sheepdog) sheepdog="yes"
1502 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001503 --disable-vhost-user) vhost_user="no"
1504 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001505 --enable-vhost-user) vhost_user="yes"
1506 ;;
1507 --disable-vhost-kernel) vhost_kernel="no"
1508 ;;
1509 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001510 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001511 --disable-capstone) capstone="no"
1512 ;;
1513 --enable-capstone) capstone="yes"
1514 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001515 --enable-capstone=git) capstone="git"
1516 ;;
1517 --enable-capstone=system) capstone="system"
1518 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001519 --with-git=*) git="$optarg"
1520 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001521 --enable-git-update) git_update=yes
1522 ;;
1523 --disable-git-update) git_update=no
1524 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001525 --enable-debug-mutex) debug_mutex=yes
1526 ;;
1527 --disable-debug-mutex) debug_mutex=no
1528 ;;
Junyan He17824402018-07-18 15:47:59 +08001529 --enable-libpmem) libpmem=yes
1530 ;;
1531 --disable-libpmem) libpmem=no
1532 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001533 --enable-xkbcommon) xkbcommon=yes
1534 ;;
1535 --disable-xkbcommon) xkbcommon=no
1536 ;;
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001537 --enable-plugins) plugins="yes"
1538 ;;
1539 --disable-plugins) plugins="no"
1540 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001541 *)
1542 echo "ERROR: unknown option $opt"
1543 echo "Try '$0 --help' for more information"
1544 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001545 ;;
bellard7d132992003-03-06 23:23:54 +00001546 esac
1547done
1548
bellard40293e52008-01-31 11:32:10 +00001549case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001550 ppc)
1551 CPU_CFLAGS="-m32"
1552 LDFLAGS="-m32 $LDFLAGS"
1553 ;;
1554 ppc64)
1555 CPU_CFLAGS="-m64"
1556 LDFLAGS="-m64 $LDFLAGS"
1557 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001558 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001559 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1560 LDFLAGS="-m32 -mv8plus $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001561 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001562 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001563 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001564 LDFLAGS="-m64 $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001565 ;;
ths76d83bd2007-11-18 21:22:10 +00001566 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001567 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001568 LDFLAGS="-m31 $LDFLAGS"
1569 ;;
1570 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001571 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001572 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001573 ;;
bellard40293e52008-01-31 11:32:10 +00001574 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001575 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001576 LDFLAGS="-m32 $LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001577 ;;
1578 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001579 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1580 # If we truly care, we should simply detect this case at
1581 # runtime and generate the fallback to serial emulation.
1582 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001583 LDFLAGS="-m64 $LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001584 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001585 x32)
1586 CPU_CFLAGS="-mx32"
1587 LDFLAGS="-mx32 $LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001588 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001589 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001590esac
1591
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001592eval "cross_cc_${cpu}=\$host_cc"
1593cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001594QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001595
Peter Maydellaffc88c2016-06-13 11:32:24 +01001596# For user-mode emulation the host arch has to be one we explicitly
1597# support, even if we're using TCI.
1598if [ "$ARCH" = "unknown" ]; then
1599 bsd_user="no"
1600 linux_user="no"
1601fi
1602
Peter Maydell60e0df22011-05-03 14:50:13 +01001603default_target_list=""
1604
Peter Maydell6e92f822013-05-20 16:16:15 +01001605mak_wilds=""
1606
1607if [ "$softmmu" = "yes" ]; then
1608 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001609fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001610if [ "$linux_user" = "yes" ]; then
1611 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001612fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001613if [ "$bsd_user" = "yes" ]; then
1614 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001615fi
1616
Alex Bennée447e1332019-03-19 11:59:12 +00001617if test -z "$target_list_exclude"; then
1618 for config in $mak_wilds; do
1619 default_target_list="${default_target_list} $(basename "$config" .mak)"
1620 done
1621else
1622 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1623 for config in $mak_wilds; do
1624 target="$(basename "$config" .mak)"
1625 exclude="no"
1626 for excl in $exclude_list; do
1627 if test "$excl" = "$target"; then
1628 exclude="yes"
1629 break;
1630 fi
1631 done
1632 if test "$exclude" = "no"; then
1633 default_target_list="${default_target_list} $target"
1634 fi
1635 done
1636fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001637
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001638# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001639trace_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 +01001640
pbrookaf5db582006-04-08 14:26:41 +00001641if test x"$show_help" = x"yes" ; then
1642cat << EOF
1643
1644Usage: configure [options]
1645Options: [defaults in brackets after descriptions]
1646
Stefan Weil08fb77e2013-12-18 22:09:39 +01001647Standard options:
1648 --help print this message
1649 --prefix=PREFIX install in PREFIX [$prefix]
1650 --interp-prefix=PREFIX where to find shared libraries, etc.
1651 use %M for cpu name [$interp_prefix]
1652 --target-list=LIST set target list (default: build everything)
1653$(echo Available targets: $default_target_list | \
1654 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001655 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001656
1657Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001658 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1659 --cc=CC use C compiler CC [$cc]
1660 --iasl=IASL use ACPI compiler IASL [$iasl]
1661 --host-cc=CC use C compiler CC [$host_cc] for code run at
1662 build time
1663 --cxx=CXX use C++ compiler CXX [$cxx]
1664 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1665 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001666 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001667 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001668 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001669 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001670 --make=MAKE use specified make [$make]
1671 --install=INSTALL use specified install [$install]
1672 --python=PYTHON use specified python [$python]
1673 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001674 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001675 --static enable static build [$static]
1676 --mandir=PATH install man pages in PATH
1677 --datadir=PATH install firmware in PATH$confsuffix
1678 --docdir=PATH install documentation in PATH$confsuffix
1679 --bindir=PATH install binaries in PATH
1680 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001681 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001682 --sysconfdir=PATH install config in PATH$confsuffix
1683 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001684 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001685 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001686 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001687 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001688 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001689 --disable-strip disable stripping binaries
1690 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001691 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001692 --audio-drv-list=LIST set audio drivers list:
1693 Available drivers: $audio_possible_drivers
1694 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1695 --block-drv-rw-whitelist=L
1696 set block driver read-write whitelist
1697 (affects only QEMU, not qemu-img)
1698 --block-drv-ro-whitelist=L
1699 set block driver read-only whitelist
1700 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001701 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001702 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001703 --with-trace-file=NAME Full PATH,NAME of file to store traces
1704 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001705 --disable-slirp disable SLIRP userspace network connectivity
1706 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001707 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001708 --oss-lib path to OSS library
1709 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001710 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001711 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001712 --enable-gcov enable test coverage analysis with gcov
1713 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001714 --disable-blobs disable installing provided firmware blobs
1715 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1716 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001717 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001718 --enable-gprof QEMU profiling with gprof
1719 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001720 --enable-debug-stack-usage
1721 track the maximum stack usage of stacks created by qemu_alloc_stack
Alex Bennée40e8c6f2019-06-13 14:52:25 +01001722 --enable-plugins
1723 enable plugins via shared library loading
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001724
1725Optional features, enabled with --enable-FEATURE and
1726disabled with --disable-FEATURE, default is enabled if available:
1727
1728 system all system emulation targets
1729 user supported user emulation targets
1730 linux-user all linux usermode emulation targets
1731 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001732 docs build documentation
1733 guest-agent build the QEMU Guest Agent
1734 guest-agent-msi build guest agent Windows MSI installation package
1735 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001736 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001737 debug-tcg TCG debugging (default is disabled)
1738 debug-info debugging information
1739 sparse sparse checker
1740
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001741 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001742 nettle nettle cryptography support
1743 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001744 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001745 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001746 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001747 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001748 vte vte support for the gtk UI
1749 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001750 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001751 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001752 vnc-sasl SASL encryption for VNC server
1753 vnc-jpeg JPEG lossy compression for VNC server
1754 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001755 cocoa Cocoa UI (Mac OS X only)
1756 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001757 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001758 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001759 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001760 brlapi BrlAPI (Braile)
1761 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001762 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001763 fdt fdt device tree
1764 bluez bluez stack connectivity
1765 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001766 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001767 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001768 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001769 rdma Enable RDMA-based migration
1770 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001771 vde support for vde network
1772 netmap support for netmap network
1773 linux-aio Linux AIO support
1774 cap-ng libcap-ng support
1775 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001776 vhost-net vhost-net kernel acceleration support
1777 vhost-vsock virtio sockets device support
1778 vhost-scsi vhost-scsi kernel target support
1779 vhost-crypto vhost-user-crypto backend support
1780 vhost-kernel vhost kernel backend support
1781 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001782 spice spice
1783 rbd rados block device (rbd)
1784 libiscsi iscsi support
1785 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001786 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001787 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001788 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001789 usb-redir usb network redirection support
1790 lzo support of lzo compression library
1791 snappy support of snappy compression library
1792 bzip2 support of bzip2 compression library
1793 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001794 lzfse support of lzfse compression library
1795 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001796 seccomp seccomp support
1797 coroutine-pool coroutine freelist (better performance)
1798 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001799 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001800 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001801 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001802 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001803 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001804 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001805 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001806 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001807 opengl opengl support
1808 virglrenderer virgl rendering support
1809 xfsctl xfsctl support
1810 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001811 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001812 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001813 bochs bochs image format support
1814 cloop cloop image format support
1815 dmg dmg image format support
1816 qcow1 qcow v1 image format support
1817 vdi vdi image format support
1818 vvfat vvfat image format support
1819 qed qed image format support
1820 parallels parallels image format support
1821 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001822 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001823 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001824 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001825 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001826 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001827
1828NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001829EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001830exit 0
pbrookaf5db582006-04-08 14:26:41 +00001831fi
1832
Thomas Huth9c790242019-03-11 11:20:34 +01001833# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001834rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001835
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001836if test -z "$python"
1837then
1838 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001839fi
1840
1841# Note that if the Python conditional here evaluates True we will exit
1842# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001843if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1844 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001845 "Use --python=/path/to/python to specify a supported Python."
1846fi
1847
Cleber Rosa755ee702018-11-09 10:07:07 -05001848# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001849python_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 -05001850
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001851# Suppress writing compiled files
1852python="$python -B"
1853
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001854# Check that the C compiler works. Doing this here before testing
1855# the host CPU ensures that we had a valid CC to autodetect the
1856# $cpu var (and we should bail right here if that's not the case).
1857# It also allows the help message to be printed without a CC.
1858write_c_skeleton;
1859if compile_object ; then
1860 : C compiler works ok
1861else
1862 error_exit "\"$cc\" either does not exist or does not work"
1863fi
1864if ! compile_prog ; then
1865 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1866fi
1867
Peter Maydell359bc952011-12-24 13:07:25 +00001868# Now we have handled --enable-tcg-interpreter and know we're not just
1869# printing the help message, bail out if the host CPU isn't supported.
1870if test "$ARCH" = "unknown"; then
1871 if test "$tcg_interpreter" = "yes" ; then
1872 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001873 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001874 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001875 fi
1876fi
1877
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001878# Consult white-list to determine whether to enable werror
1879# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001880if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001881 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001882 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001883 werror="yes"
1884 else
1885 werror="no"
1886 fi
1887fi
1888
Peter Maydellfb59dab2017-03-28 14:01:52 +01001889if test "$bogus_os" = "yes"; then
1890 # Now that we know that we're not printing the help and that
1891 # the compiler works (so the results of the check_defines we used
1892 # to identify the OS are reliable), if we didn't recognize the
1893 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001894 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001895fi
1896
Thomas Huthefc6c072018-12-03 10:12:32 +01001897# Check whether the compiler matches our minimum requirements:
1898cat > $TMPC << EOF
1899#if defined(__clang_major__) && defined(__clang_minor__)
1900# ifdef __apple_build_version__
1901# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1902# error You need at least XCode Clang v5.1 to compile QEMU
1903# endif
1904# else
1905# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1906# error You need at least Clang v3.4 to compile QEMU
1907# endif
1908# endif
1909#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1910# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1911# error You need at least GCC v4.8 to compile QEMU
1912# endif
1913#else
1914# error You either need GCC or Clang to compiler QEMU
1915#endif
1916int main (void) { return 0; }
1917EOF
1918if ! compile_prog "" "" ; then
1919 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1920fi
1921
Paolo Bonzini8d050952010-12-23 11:43:52 +01001922gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1923gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001924gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001925gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001926gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001927gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001928# Note that we do not add -Werror to gcc_flags here, because that would
1929# enable it for all configure tests. If a configure test failed due
1930# to -Werror this would just silently disable some features,
1931# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001932
1933cc_has_warning_flag() {
1934 write_c_skeleton;
1935
Peter Maydella1d29d62012-10-27 22:19:07 +01001936 # Use the positive sense of the flag when testing for -Wno-wombat
1937 # support (gcc will happily accept the -Wno- form of unknown
1938 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001939 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1940 compile_prog "-Werror $optflag" ""
1941}
1942
1943for flag in $gcc_flags; do
1944 if cc_has_warning_flag $flag ; then
1945 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001946 fi
1947done
1948
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001949if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001950 cat > $TMPC << EOF
1951int main(int argc, char *argv[])
1952{
1953 char arr[64], *p = arr, *c = argv[0];
1954 while (*c) {
1955 *p++ = *c++;
1956 }
1957 return 0;
1958}
1959EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001960 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001961 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001962 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001963 # We need to check both a compile and a link, since some compiler
1964 # setups fail only on a .c->.o compile and some only at link time
1965 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1966 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001967 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001968 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001969 break
1970 fi
1971 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001972 if test "$stack_protector" = yes; then
1973 if test $sp_on = 0; then
1974 error_exit "Stack protector not supported"
1975 fi
1976 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001977fi
1978
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001979# Disable -Wmissing-braces on older compilers that warn even for
1980# the "universal" C zero initializer {0}.
1981cat > $TMPC << EOF
1982struct {
1983 int a[2];
1984} x = {0};
1985EOF
1986if compile_object "-Werror" "" ; then
1987 :
1988else
1989 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1990fi
1991
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001992# Our module code doesn't support Windows
1993if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
1994 error_exit "Modules are not available for Windows"
1995fi
1996
Thomas Huthd376e9d2018-12-03 11:41:38 +01001997# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001998if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001999 if test "$modules" = "yes" ; then
2000 error_exit "static and modules are mutually incompatible"
2001 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002002 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002003 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002004 else
2005 pie="no"
2006 fi
2007fi
2008
Emilio G. Cota768b7852015-04-29 13:09:02 +02002009# Unconditional check for compiler __thread support
2010 cat > $TMPC << EOF
2011static __thread int tls_var;
2012int main(void) { return tls_var; }
2013EOF
2014
2015if ! compile_prog "-Werror" "" ; then
2016 error_exit "Your compiler does not support the __thread specifier for " \
2017 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2018fi
2019
Avi Kivity40d64442011-11-15 20:12:17 +02002020if test "$pie" = ""; then
2021 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002022 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002023 ;;
2024 *)
2025 pie="no"
2026 ;;
2027 esac
2028fi
2029
2030if test "$pie" != "no" ; then
2031 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002032
2033#ifdef __linux__
2034# define THREAD __thread
2035#else
2036# define THREAD
2037#endif
2038
2039static THREAD int tls_var;
2040
2041int main(void) { return tls_var; }
2042
Avi Kivity40d64442011-11-15 20:12:17 +02002043EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002044 # check we support --no-pie first...
2045 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2046 CFLAGS_NOPIE="-fno-pie"
2047 LDFLAGS_NOPIE="-nopie"
2048 fi
2049
Avi Kivity40d64442011-11-15 20:12:17 +02002050 if compile_prog "-fPIE -DPIE" "-pie"; then
2051 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2052 LDFLAGS="-pie $LDFLAGS"
2053 pie="yes"
2054 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2055 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2056 fi
2057 else
2058 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002059 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002060 else
2061 echo "Disabling PIE due to missing toolchain support"
2062 pie="no"
2063 fi
2064 fi
2065fi
2066
Paolo Bonzini09dada42013-04-17 16:26:47 +02002067##########################################
2068# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2069# use i686 as default anyway, but for those that don't, an explicit
2070# specification is necessary
2071
2072if test "$cpu" = "i386"; then
2073 cat > $TMPC << EOF
2074static int sfaa(int *ptr)
2075{
2076 return __sync_fetch_and_and(ptr, 0);
2077}
2078
2079int main(void)
2080{
2081 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002082 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002083 sfaa(&val);
2084 return val;
2085}
2086EOF
2087 if ! compile_prog "" "" ; then
2088 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2089 fi
2090fi
2091
2092#########################################
bellardec530c82006-04-25 22:36:06 +00002093# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002094
bellardec530c82006-04-25 22:36:06 +00002095if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002096 if has $install; then
2097 :
2098 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002099 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2100 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2101 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002102 fi
Stefan Weil89138852016-05-16 15:10:20 +02002103 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002104 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2105 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2106 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002107 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002108 if has ar; then
2109 :
2110 else
bellardec530c82006-04-25 22:36:06 +00002111 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002112 error_exit "No path includes ar" \
2113 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002114 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002115 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002116 fi
ths5fafdf22007-09-16 21:08:06 +00002117fi
bellardec530c82006-04-25 22:36:06 +00002118
Stefan Weilafb63eb2012-09-26 22:04:38 +02002119if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002120 for target in $default_target_list; do
2121 supported_target $target 2>/dev/null && \
2122 target_list="$target_list $target"
2123 done
2124 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002125else
Stefan Weil89138852016-05-16 15:10:20 +02002126 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002127 for target in $target_list; do
2128 # Check that we recognised the target name; this allows a more
2129 # friendly error message than if we let it fall through.
2130 case " $default_target_list " in
2131 *" $target "*)
2132 ;;
2133 *)
2134 error_exit "Unknown target name '$target'"
2135 ;;
2136 esac
2137 supported_target $target || exit 1
2138 done
bellard5327cf42005-01-10 23:18:50 +00002139fi
Peter Maydell25b48332013-05-20 16:16:16 +01002140
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002141# see if system emulation was really requested
2142case " $target_list " in
2143 *"-softmmu "*) softmmu=yes
2144 ;;
2145 *) softmmu=no
2146 ;;
2147esac
bellard5327cf42005-01-10 23:18:50 +00002148
Juan Quintela249247c2009-08-12 18:20:25 +02002149feature_not_found() {
2150 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002151 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002152
Peter Maydell76ad07a2013-04-08 12:11:26 +01002153 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002154 "configure was not able to find it." \
2155 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002156}
2157
bellard7d132992003-03-06 23:23:54 +00002158# ---
2159# big/little endian test
2160cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002161short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2162short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2163extern int foo(short *, short *);
2164int main(int argc, char *argv[]) {
2165 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002166}
2167EOF
2168
Mike Frysinger61cc9192013-06-30 23:30:18 -04002169if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002170 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002171 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002172 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002173 bigendian="no"
2174 else
2175 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002176 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002177else
2178 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002179fi
2180
Juan Quintelab0a47e72009-08-12 18:29:49 +02002181##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002182# cocoa implies not SDL or GTK
2183# (the cocoa UI code currently assumes it is always the active UI
2184# and doesn't interact well with other UI frontend code)
2185if test "$cocoa" = "yes"; then
2186 if test "$sdl" = "yes"; then
2187 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2188 fi
2189 if test "$gtk" = "yes"; then
2190 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2191 fi
2192 gtk=no
2193 sdl=no
2194fi
2195
Eric Blake6b39b062016-10-11 10:46:23 -05002196# Some versions of Mac OS X incorrectly define SIZE_MAX
2197cat > $TMPC << EOF
2198#include <stdint.h>
2199#include <stdio.h>
2200int main(int argc, char *argv[]) {
2201 return printf("%zu", SIZE_MAX);
2202}
2203EOF
2204have_broken_size_max=no
2205if ! compile_object -Werror ; then
2206 have_broken_size_max=yes
2207fi
2208
Peter Maydella30878e2015-08-14 16:10:52 +01002209##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002210# L2TPV3 probe
2211
2212cat > $TMPC <<EOF
2213#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002214#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002215int main(void) { return sizeof(struct mmsghdr); }
2216EOF
2217if compile_prog "" "" ; then
2218 l2tpv3=yes
2219else
2220 l2tpv3=no
2221fi
2222
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002223#########################################
2224# vhost interdependencies and host support
2225
2226# vhost backends
2227test "$vhost_user" = "" && vhost_user=yes
2228if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2229 error_exit "vhost-user isn't available on win32"
2230fi
2231test "$vhost_kernel" = "" && vhost_kernel=$linux
2232if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2233 error_exit "vhost-kernel is only available on Linux"
2234fi
2235
2236# vhost-kernel devices
2237test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2238if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2239 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2240fi
2241test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2242if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2243 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2244fi
2245
2246# vhost-user backends
2247test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2248if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2249 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2250fi
2251test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2252if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2253 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2254fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002255test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2256if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2257 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2258fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002259
2260# OR the vhost-kernel and vhost-user values for simplicity
2261if test "$vhost_net" = ""; then
2262 test "$vhost_net_user" = "yes" && vhost_net=yes
2263 test "$vhost_kernel" = "yes" && vhost_net=yes
2264fi
2265
Gonglei015a33b2014-07-01 20:58:08 +08002266##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002267# MinGW / Mingw-w64 localtime_r/gmtime_r check
2268
2269if test "$mingw32" = "yes"; then
2270 # Some versions of MinGW / Mingw-w64 lack localtime_r
2271 # and gmtime_r entirely.
2272 #
2273 # Some versions of Mingw-w64 define a macro for
2274 # localtime_r/gmtime_r.
2275 #
2276 # Some versions of Mingw-w64 will define functions
2277 # for localtime_r/gmtime_r, but only if you have
2278 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2279 # though, unistd.h and pthread.h both define
2280 # that for you.
2281 #
2282 # So this #undef localtime_r and #include <unistd.h>
2283 # are not in fact redundant.
2284cat > $TMPC << EOF
2285#include <unistd.h>
2286#include <time.h>
2287#undef localtime_r
2288int main(void) { localtime_r(NULL, NULL); return 0; }
2289EOF
2290 if compile_prog "" "" ; then
2291 localtime_r="yes"
2292 else
2293 localtime_r="no"
2294 fi
2295fi
2296
2297##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002298# pkg-config probe
2299
2300if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002301 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002302fi
2303
2304##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002305# NPTL probe
2306
Peter Maydell24cb36a2013-07-16 18:45:00 +01002307if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002308 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002309#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002310#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002311int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002312#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2313#error bork
2314#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002315 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002316}
2317EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002318 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002319 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002320 fi
pbrookbd0c5662008-05-29 14:34:11 +00002321fi
2322
balrogac629222008-10-11 09:56:04 +00002323##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002324# lzo check
2325
2326if test "$lzo" != "no" ; then
2327 cat > $TMPC << EOF
2328#include <lzo/lzo1x.h>
2329int main(void) { lzo_version(); return 0; }
2330EOF
2331 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002332 libs_softmmu="$libs_softmmu -llzo2"
2333 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002334 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002335 if test "$lzo" = "yes"; then
2336 feature_not_found "liblzo2" "Install liblzo2 devel"
2337 fi
2338 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002339 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002340fi
2341
2342##########################################
2343# snappy check
2344
2345if test "$snappy" != "no" ; then
2346 cat > $TMPC << EOF
2347#include <snappy-c.h>
2348int main(void) { snappy_max_compressed_length(4096); return 0; }
2349EOF
2350 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002351 libs_softmmu="$libs_softmmu -lsnappy"
2352 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002353 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002354 if test "$snappy" = "yes"; then
2355 feature_not_found "libsnappy" "Install libsnappy devel"
2356 fi
2357 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002358 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002359fi
2360
2361##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002362# bzip2 check
2363
2364if test "$bzip2" != "no" ; then
2365 cat > $TMPC << EOF
2366#include <bzlib.h>
2367int main(void) { BZ2_bzlibVersion(); return 0; }
2368EOF
2369 if compile_prog "" "-lbz2" ; then
2370 bzip2="yes"
2371 else
2372 if test "$bzip2" = "yes"; then
2373 feature_not_found "libbzip2" "Install libbzip2 devel"
2374 fi
2375 bzip2="no"
2376 fi
2377fi
2378
2379##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002380# lzfse check
2381
2382if test "$lzfse" != "no" ; then
2383 cat > $TMPC << EOF
2384#include <lzfse.h>
2385int main(void) { lzfse_decode_scratch_size(); return 0; }
2386EOF
2387 if compile_prog "" "-llzfse" ; then
2388 lzfse="yes"
2389 else
2390 if test "$lzfse" = "yes"; then
2391 feature_not_found "lzfse" "Install lzfse devel"
2392 fi
2393 lzfse="no"
2394 fi
2395fi
2396
2397##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002398# libseccomp check
2399
2400if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002401 libseccomp_minver="2.3.0"
2402 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002403 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2404 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002405 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002406 else
Andrew Jones693e5912015-09-30 11:59:18 -04002407 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002408 feature_not_found "libseccomp" \
2409 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002410 fi
2411 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002412 fi
2413fi
2414##########################################
aliguorie37630c2009-04-22 15:19:10 +00002415# xen probe
2416
Juan Quintelafc321b42009-08-12 18:29:55 +02002417if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002418 # Check whether Xen library path is specified via --extra-ldflags to avoid
2419 # overriding this setting with pkg-config output. If not, try pkg-config
2420 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002421
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002422 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2423 $pkg_config --exists xencontrol ; then
2424 xen_ctrl_version="$(printf '%d%02d%02d' \
2425 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2426 xen=yes
2427 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2428 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002429 if $pkg_config --exists xentoolcore; then
2430 xen_pc="$xen_pc xentoolcore"
2431 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002432 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2433 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002434 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002435
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002436 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002437 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002438
2439 # First we test whether Xen headers and libraries are available.
2440 # If no, we are done and there is no Xen support.
2441 # If yes, more tests are run to detect the Xen version.
2442
2443 # Xen (any)
2444 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002445#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002446int main(void) {
2447 return 0;
2448}
2449EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002450 if ! compile_prog "" "$xen_libs" ; then
2451 # Xen not found
2452 if test "$xen" = "yes" ; then
2453 feature_not_found "xen" "Install xen devel"
2454 fi
2455 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002456
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002457 # Xen unstable
2458 elif
2459 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002460#undef XC_WANT_COMPAT_DEVICEMODEL_API
2461#define __XEN_TOOLS__
2462#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002463#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002464int main(void) {
2465 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002466 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002467
2468 xd = xendevicemodel_open(0, 0);
2469 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2470
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002471 xfmem = xenforeignmemory_open(0, 0);
2472 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2473
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002474 return 0;
2475}
2476EOF
2477 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2478 then
2479 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2480 xen_ctrl_version=41100
2481 xen=yes
2482 elif
2483 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002484#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2485#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002486#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002487int main(void) {
2488 xenforeignmemory_handle *xfmem;
2489
2490 xfmem = xenforeignmemory_open(0, 0);
2491 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002492 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002493
2494 return 0;
2495}
2496EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002497 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002498 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002499 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002500 xen_ctrl_version=41000
2501 xen=yes
2502 elif
2503 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002504#undef XC_WANT_COMPAT_DEVICEMODEL_API
2505#define __XEN_TOOLS__
2506#include <xendevicemodel.h>
2507int main(void) {
2508 xendevicemodel_handle *xd;
2509
2510 xd = xendevicemodel_open(0, 0);
2511 xendevicemodel_close(xd);
2512
2513 return 0;
2514}
2515EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002516 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2517 then
2518 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2519 xen_ctrl_version=40900
2520 xen=yes
2521 elif
2522 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002523/*
2524 * If we have stable libs the we don't want the libxc compat
2525 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002526 *
2527 * Also, check if xengnttab_grant_copy_segment_t is defined and
2528 * grant copy operation is implemented.
2529 */
2530#undef XC_WANT_COMPAT_EVTCHN_API
2531#undef XC_WANT_COMPAT_GNTTAB_API
2532#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2533#include <xenctrl.h>
2534#include <xenstore.h>
2535#include <xenevtchn.h>
2536#include <xengnttab.h>
2537#include <xenforeignmemory.h>
2538#include <stdint.h>
2539#include <xen/hvm/hvm_info_table.h>
2540#if !defined(HVM_MAX_VCPUS)
2541# error HVM_MAX_VCPUS not defined
2542#endif
2543int main(void) {
2544 xc_interface *xc = NULL;
2545 xenforeignmemory_handle *xfmem;
2546 xenevtchn_handle *xe;
2547 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002548 xengnttab_grant_copy_segment_t* seg = NULL;
2549
2550 xs_daemon_open();
2551
2552 xc = xc_interface_open(0, 0, 0);
2553 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2554 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2555 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2556 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002557
2558 xfmem = xenforeignmemory_open(0, 0);
2559 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2560
2561 xe = xenevtchn_open(0, 0);
2562 xenevtchn_fd(xe);
2563
2564 xg = xengnttab_open(0, 0);
2565 xengnttab_grant_copy(xg, 0, seg);
2566
2567 return 0;
2568}
2569EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002570 compile_prog "" "$xen_libs $xen_stable_libs"
2571 then
2572 xen_ctrl_version=40800
2573 xen=yes
2574 elif
2575 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002576/*
2577 * If we have stable libs the we don't want the libxc compat
2578 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002579 */
2580#undef XC_WANT_COMPAT_EVTCHN_API
2581#undef XC_WANT_COMPAT_GNTTAB_API
2582#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2583#include <xenctrl.h>
2584#include <xenstore.h>
2585#include <xenevtchn.h>
2586#include <xengnttab.h>
2587#include <xenforeignmemory.h>
2588#include <stdint.h>
2589#include <xen/hvm/hvm_info_table.h>
2590#if !defined(HVM_MAX_VCPUS)
2591# error HVM_MAX_VCPUS not defined
2592#endif
2593int main(void) {
2594 xc_interface *xc = NULL;
2595 xenforeignmemory_handle *xfmem;
2596 xenevtchn_handle *xe;
2597 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002598
2599 xs_daemon_open();
2600
2601 xc = xc_interface_open(0, 0, 0);
2602 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2603 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2604 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2605 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002606
2607 xfmem = xenforeignmemory_open(0, 0);
2608 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2609
2610 xe = xenevtchn_open(0, 0);
2611 xenevtchn_fd(xe);
2612
2613 xg = xengnttab_open(0, 0);
2614 xengnttab_map_grant_ref(xg, 0, 0, 0);
2615
2616 return 0;
2617}
2618EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002619 compile_prog "" "$xen_libs $xen_stable_libs"
2620 then
2621 xen_ctrl_version=40701
2622 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002623
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002624 # Xen 4.6
2625 elif
2626 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002627#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002628#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002629#include <stdint.h>
2630#include <xen/hvm/hvm_info_table.h>
2631#if !defined(HVM_MAX_VCPUS)
2632# error HVM_MAX_VCPUS not defined
2633#endif
2634int main(void) {
2635 xc_interface *xc;
2636 xs_daemon_open();
2637 xc = xc_interface_open(0, 0, 0);
2638 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2639 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002640 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002641 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002642 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002643 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002644 return 0;
2645}
2646EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002647 compile_prog "" "$xen_libs"
2648 then
2649 xen_ctrl_version=40600
2650 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002651
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002652 # Xen 4.5
2653 elif
2654 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002655#include <xenctrl.h>
2656#include <xenstore.h>
2657#include <stdint.h>
2658#include <xen/hvm/hvm_info_table.h>
2659#if !defined(HVM_MAX_VCPUS)
2660# error HVM_MAX_VCPUS not defined
2661#endif
2662int main(void) {
2663 xc_interface *xc;
2664 xs_daemon_open();
2665 xc = xc_interface_open(0, 0, 0);
2666 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2667 xc_gnttab_open(NULL, 0);
2668 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2669 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002670 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2671 return 0;
2672}
2673EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002674 compile_prog "" "$xen_libs"
2675 then
2676 xen_ctrl_version=40500
2677 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002678
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002679 elif
2680 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002681#include <xenctrl.h>
2682#include <xenstore.h>
2683#include <stdint.h>
2684#include <xen/hvm/hvm_info_table.h>
2685#if !defined(HVM_MAX_VCPUS)
2686# error HVM_MAX_VCPUS not defined
2687#endif
2688int main(void) {
2689 xc_interface *xc;
2690 xs_daemon_open();
2691 xc = xc_interface_open(0, 0, 0);
2692 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2693 xc_gnttab_open(NULL, 0);
2694 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2695 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002696 return 0;
2697}
2698EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002699 compile_prog "" "$xen_libs"
2700 then
2701 xen_ctrl_version=40200
2702 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002703
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002704 else
2705 if test "$xen" = "yes" ; then
2706 feature_not_found "xen (unsupported version)" \
2707 "Install a supported xen (xen 4.2 or newer)"
2708 fi
2709 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002710 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002711
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002712 if test "$xen" = yes; then
2713 if test $xen_ctrl_version -ge 40701 ; then
2714 libs_softmmu="$xen_stable_libs $libs_softmmu"
2715 fi
2716 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002717 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002718 fi
aliguorie37630c2009-04-22 15:19:10 +00002719fi
2720
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002721if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002722 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002723 xen_pci_passthrough=yes
2724 else
2725 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002726 error_exit "User requested feature Xen PCI Passthrough" \
2727 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002728 fi
2729 xen_pci_passthrough=no
2730 fi
2731fi
2732
aliguorie37630c2009-04-22 15:19:10 +00002733##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002734# Windows Hypervisor Platform accelerator (WHPX) check
2735if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002736 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002737 whpx="yes"
2738 else
2739 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002740 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002741 fi
2742 whpx="no"
2743 fi
2744fi
2745
2746##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002747# Sparse probe
2748if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002749 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002750 sparse=yes
2751 else
2752 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002753 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002754 fi
2755 sparse=no
2756 fi
2757fi
2758
2759##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002760# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002761if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002762 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002763 x11_cflags=$($pkg_config --cflags x11)
2764 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002765fi
2766
2767##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002768# GTK probe
2769
2770if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002771 gtkpackage="gtk+-3.0"
2772 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002773 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002774 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002775 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2776 gtk_libs=$($pkg_config --libs $gtkpackage)
2777 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002778 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002779 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002780 gtk_cflags="$gtk_cflags $x11_cflags"
2781 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002782 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002783 gtk="yes"
2784 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002785 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002786 else
2787 gtk="no"
2788 fi
2789fi
2790
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002791
2792##########################################
2793# GNUTLS probe
2794
2795if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002796 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002797 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002798 gnutls_cflags=$($pkg_config --cflags gnutls)
2799 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002800 # Packaging for the static libraries is not always correct.
2801 # At least ubuntu 18.04 ships only shared libraries.
2802 write_c_skeleton
2803 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002804 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002805 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2806 pass="yes"
2807 fi
2808 fi
2809 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002810 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002811 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002812 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002813 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002814fi
2815
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002816
2817# If user didn't give a --disable/enable-gcrypt flag,
2818# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002819# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002820if test -z "$gcrypt"
2821then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002822 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002823 then
2824 gcrypt="no"
2825 fi
2826fi
2827
2828# If user didn't give a --disable/enable-nettle flag,
2829# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002830# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002831if test -z "$nettle"
2832then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002833 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002834 then
2835 nettle="no"
2836 fi
2837fi
2838
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002839has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002840 if ! has "libgcrypt-config"
2841 then
2842 return 1
2843 fi
2844
2845 if test -n "$cross_prefix"
2846 then
Stefan Weil89138852016-05-16 15:10:20 +02002847 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002848 if test "$host-" != $cross_prefix
2849 then
2850 return 1
2851 fi
2852 fi
2853
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002854 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2855 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2856
2857 if test $maj != 1 || test $min -lt 5
2858 then
2859 return 1
2860 fi
2861
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002862 return 0
2863}
2864
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002865
2866if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002867 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002868 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002869 nettle_cflags=$($pkg_config --cflags nettle)
2870 nettle_libs=$($pkg_config --libs nettle)
2871 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002872 # Link test to make sure the given libraries work (e.g for static).
2873 write_c_skeleton
2874 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002875 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002876 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2877 if test -z "$gcrypt"; then
2878 gcrypt="no"
2879 fi
2880 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002881 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002882 fi
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01002883 if test "$pass" = "yes"
2884 then
2885 cat > $TMPC << EOF
2886#include <nettle/xts.h>
2887int main(void) {
2888 return 0;
2889}
2890EOF
2891 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2892 nettle_xts=yes
2893 qemu_private_xts=no
2894 fi
2895 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002896 if test "$pass" = "no" && test "$nettle" = "yes"; then
2897 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002898 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002899 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002900 fi
2901fi
2902
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002903if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002904 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002905 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002906 gcrypt_cflags=$(libgcrypt-config --cflags)
2907 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002908 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002909 # as it "spreads unnecessary dependencies" which in
2910 # turn breaks static builds...
2911 if test "$static" = "yes"
2912 then
2913 gcrypt_libs="$gcrypt_libs -lgpg-error"
2914 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002915
Richard Hendersona73e82e2019-05-09 18:24:35 -07002916 # Link test to make sure the given libraries work (e.g for static).
2917 write_c_skeleton
2918 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002919 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002920 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2921 pass="yes"
2922 fi
2923 fi
2924 if test "$pass" = "yes"; then
2925 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002926 cat > $TMPC << EOF
2927#include <gcrypt.h>
2928int main(void) {
2929 gcry_mac_hd_t handle;
2930 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2931 GCRY_MAC_FLAG_SECURE, NULL);
2932 return 0;
2933}
2934EOF
2935 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2936 gcrypt_hmac=yes
2937 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01002938 cat > $TMPC << EOF
2939#include <gcrypt.h>
2940int main(void) {
2941 gcry_cipher_hd_t handle;
2942 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2943 return 0;
2944}
2945EOF
2946 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2947 gcrypt_xts=yes
2948 qemu_private_xts=no
2949 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002950 elif test "$gcrypt" = "yes"; then
2951 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002952 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002953 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002954 fi
2955fi
2956
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002957
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002958if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2959then
2960 error_exit "Only one of gcrypt & nettle can be enabled"
2961fi
2962
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002963##########################################
2964# libtasn1 - only for the TLS creds/session test suite
2965
2966tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002967tasn1_cflags=""
2968tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002969if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002970 tasn1_cflags=$($pkg_config --cflags libtasn1)
2971 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002972else
2973 tasn1=no
2974fi
2975
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002976
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002977##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002978# PAM probe
2979
2980if test "$auth_pam" != "no"; then
2981 cat > $TMPC <<EOF
2982#include <security/pam_appl.h>
2983#include <stdio.h>
2984int main(void) {
2985 const char *service_name = "qemu";
2986 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01002987 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002988 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01002989 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002990 return 0;
2991}
2992EOF
2993 if compile_prog "" "-lpam" ; then
2994 auth_pam=yes
2995 else
2996 if test "$auth_pam" = "yes"; then
2997 feature_not_found "PAM" "Install PAM development package"
2998 else
2999 auth_pam=no
3000 fi
3001 fi
3002fi
3003
3004##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00003005# getifaddrs (for tests/test-io-channel-socket )
3006
3007have_ifaddrs_h=yes
3008if ! check_include "ifaddrs.h" ; then
3009 have_ifaddrs_h=no
3010fi
3011
3012##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003013# VTE probe
3014
3015if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003016 vteminversion="0.32.0"
3017 if $pkg_config --exists "vte-2.91"; then
3018 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003019 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003020 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003021 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003022 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003023 vte_cflags=$($pkg_config --cflags $vtepackage)
3024 vte_libs=$($pkg_config --libs $vtepackage)
3025 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003026 vte="yes"
3027 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003028 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003029 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003030 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003031 fi
3032fi
3033
3034##########################################
bellard11d9f692004-04-02 20:55:59 +00003035# SDL probe
3036
Carlo Marcelo Arenas BelĂłnaee8a612019-07-10 15:55:28 -07003037# Look for sdl configuration program (pkg-config or sdl2-config). Try
3038# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003039
Peter Xuc6093a02018-04-10 13:40:34 +08003040sdl_probe ()
3041{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003042 if $pkg_config sdl2 --exists; then
3043 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003044 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas BelĂłnaee8a612019-07-10 15:55:28 -07003045 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003046 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003047 sdlversion=$($sdlconfig --version)
3048 else
3049 if test "$sdl" = "yes" ; then
3050 feature_not_found "sdl" "Install SDL2-devel"
3051 fi
3052 sdl=no
3053 # no need to do the rest
3054 return
3055 fi
Carlo Marcelo Arenas BelĂłnaee8a612019-07-10 15:55:28 -07003056 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003057 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3058 fi
3059
Juan Quintelaac119f92009-07-27 16:13:15 +02003060 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003061#include <SDL.h>
3062#undef main /* We don't want SDL to override our main() */
3063int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3064EOF
Stefan Weil89138852016-05-16 15:10:20 +02003065 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003066 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003067 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003068 if $pkg_config sdl2 --exists; then
3069 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003070 else
3071 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3072 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003073 else
Stefan Weil89138852016-05-16 15:10:20 +02003074 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003075 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003076 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003077 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003078
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003079 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003080 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003081 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003082 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3083 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003084 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003085 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003086 :
3087 else
3088 sdl=no
3089 fi
3090 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003091 else # sdl not found
3092 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003093 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003094 fi
3095 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003096 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003097}
3098
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003099sdl_image_probe ()
3100{
3101 if test "$sdl_image" != "no" ; then
3102 if $pkg_config SDL2_image --exists; then
3103 if test "$static" = "yes"; then
3104 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3105 else
3106 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3107 fi
3108 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3109 sdl_image=yes
3110
3111 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3112 sdl_libs="$sdl_libs $sdl_image_libs"
3113 else
3114 if test "$sdl_image" = "yes" ; then
3115 feature_not_found "sdl_image" "Install SDL Image devel"
3116 else
3117 sdl_image=no
3118 fi
3119 fi
3120 fi
3121}
3122
Peter Xuc6093a02018-04-10 13:40:34 +08003123if test "$sdl" != "no" ; then
3124 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003125fi
bellard11d9f692004-04-02 20:55:59 +00003126
aliguori5368a422009-03-03 17:37:21 +00003127if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003128 sdl_image_probe
3129else
3130 if test "$sdl_image" = "yes"; then
3131 echo "warning: SDL Image requested, but SDL is not available, disabling"
3132 fi
3133 sdl_image=no
3134fi
3135
3136if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003137 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003138#include <SDL.h>
3139#if defined(SDL_VIDEO_DRIVER_X11)
3140#include <X11/XKBlib.h>
3141#else
3142#error No x11 support
3143#endif
3144int main(void) { return 0; }
3145EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003146 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003147 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003148 sdl_cflags="$sdl_cflags $x11_cflags"
3149 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003150 fi
aliguori5368a422009-03-03 17:37:21 +00003151fi
3152
ths8f28f3f2007-01-05 21:25:54 +00003153##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003154# RDMA needs OpenFabrics libraries
3155if test "$rdma" != "no" ; then
3156 cat > $TMPC <<EOF
3157#include <rdma/rdma_cma.h>
3158int main(void) { return 0; }
3159EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003160 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003161 if compile_prog "" "$rdma_libs" ; then
3162 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003163 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003164 else
3165 if test "$rdma" = "yes" ; then
3166 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003167 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003168 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003169 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003170 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3171 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3172 fi
3173 rdma="no"
3174 fi
3175fi
3176
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003177##########################################
3178# PVRDMA detection
3179
3180cat > $TMPC <<EOF &&
3181#include <sys/mman.h>
3182
3183int
3184main(void)
3185{
3186 char buf = 0;
3187 void *addr = &buf;
3188 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3189
3190 return 0;
3191}
3192EOF
3193
3194if test "$rdma" = "yes" ; then
3195 case "$pvrdma" in
3196 "")
3197 if compile_prog "" ""; then
3198 pvrdma="yes"
3199 else
3200 pvrdma="no"
3201 fi
3202 ;;
3203 "yes")
3204 if ! compile_prog "" ""; then
3205 error_exit "PVRDMA is not supported since mremap is not implemented"
3206 fi
3207 pvrdma="yes"
3208 ;;
3209 "no")
3210 pvrdma="no"
3211 ;;
3212 esac
3213else
3214 if test "$pvrdma" = "yes" ; then
3215 error_exit "PVRDMA requires rdma suppport"
3216 fi
3217 pvrdma="no"
3218fi
ths8d5d2d42007-08-25 01:37:51 +00003219
Yuval Shaiaee108582019-08-18 16:21:06 +03003220# Let's see if enhanced reg_mr is supported
3221if test "$pvrdma" = "yes" ; then
3222
3223cat > $TMPC <<EOF &&
3224#include <infiniband/verbs.h>
3225
3226int
3227main(void)
3228{
3229 struct ibv_mr *mr;
3230 struct ibv_pd *pd = NULL;
3231 size_t length = 10;
3232 uint64_t iova = 0;
3233 int access = 0;
3234 void *addr = NULL;
3235
3236 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3237
3238 ibv_dereg_mr(mr);
3239
3240 return 0;
3241}
3242EOF
3243 if ! compile_prog "" "-libverbs"; then
3244 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3245 fi
3246fi
3247
ths8d5d2d42007-08-25 01:37:51 +00003248##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003249# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003250if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003251 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003252#include <sasl/sasl.h>
3253#include <stdio.h>
3254int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3255EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003256 # Assuming Cyrus-SASL installed in /usr prefix
3257 vnc_sasl_cflags=""
3258 vnc_sasl_libs="-lsasl2"
3259 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3260 vnc_sasl=yes
3261 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003262 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003263 else
3264 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003265 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003266 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003267 vnc_sasl=no
3268 fi
aliguori2f9606b2009-03-06 20:27:28 +00003269fi
3270
3271##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003272# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003273if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003274cat > $TMPC <<EOF
3275#include <stdio.h>
3276#include <jpeglib.h>
3277int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3278EOF
3279 vnc_jpeg_cflags=""
3280 vnc_jpeg_libs="-ljpeg"
3281 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3282 vnc_jpeg=yes
3283 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003284 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003285 else
3286 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003287 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003288 fi
3289 vnc_jpeg=no
3290 fi
3291fi
3292
3293##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003294# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003295if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003296cat > $TMPC <<EOF
3297//#include <stdio.h>
3298#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003299#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003300int main(void) {
3301 png_structp png_ptr;
3302 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003303 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003304}
3305EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003306 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003307 vnc_png_cflags=$($pkg_config libpng --cflags)
3308 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003309 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003310 vnc_png_cflags=""
3311 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003312 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003313 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3314 vnc_png=yes
3315 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003316 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003317 else
3318 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003319 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003320 fi
3321 vnc_png=no
3322 fi
3323fi
3324
3325##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003326# xkbcommon probe
3327if test "$xkbcommon" != "no" ; then
3328 if $pkg_config xkbcommon --exists; then
3329 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3330 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3331 xkbcommon=yes
3332 else
3333 if test "$xkbcommon" = "yes" ; then
3334 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3335 fi
3336 xkbcommon=no
3337 fi
3338fi
3339
aliguori76655d62009-03-06 20:27:37 +00003340
3341##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003342# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003343if test "$xfs" != "no" ; then
3344 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003345#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003346#include <xfs/xfs.h>
3347int main(void)
3348{
3349 xfsctl(NULL, 0, 0, NULL);
3350 return 0;
3351}
3352EOF
3353 if compile_prog "" "" ; then
3354 xfs="yes"
3355 else
3356 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003357 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003358 fi
3359 xfs=no
3360 fi
3361fi
3362
3363##########################################
ths8a16d272008-07-19 09:56:24 +00003364# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003365if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003366 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003367 cat > $TMPC << EOF
3368#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003369int main(void)
3370{
3371 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003372 char s[] = "";
3373 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003374 return 0;
3375}
ths8a16d272008-07-19 09:56:24 +00003376EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003377 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003378 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003379 else
3380 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003381 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003382 fi
3383 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003384 fi
ths8a16d272008-07-19 09:56:24 +00003385fi
3386
3387##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003388# netmap support probe
3389# Apart from looking for netmap headers, we make sure that the host API version
3390# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3391# a minor/major version number. Minor new features will be marked with values up
3392# to 15, and if something happens that requires a change to the backend we will
3393# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003394if test "$netmap" != "no" ; then
3395 cat > $TMPC << EOF
3396#include <inttypes.h>
3397#include <net/if.h>
3398#include <net/netmap.h>
3399#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003400#if (NETMAP_API < 11) || (NETMAP_API > 15)
3401#error
3402#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003403int main(void) { return 0; }
3404EOF
3405 if compile_prog "" "" ; then
3406 netmap=yes
3407 else
3408 if test "$netmap" = "yes" ; then
3409 feature_not_found "netmap"
3410 fi
3411 netmap=no
3412 fi
3413fi
3414
3415##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003416# libcap-ng library probe
3417if test "$cap_ng" != "no" ; then
3418 cap_libs="-lcap-ng"
3419 cat > $TMPC << EOF
3420#include <cap-ng.h>
3421int main(void)
3422{
3423 capng_capability_to_name(CAPNG_EFFECTIVE);
3424 return 0;
3425}
3426EOF
3427 if compile_prog "" "$cap_libs" ; then
3428 cap_ng=yes
3429 libs_tools="$cap_libs $libs_tools"
3430 else
3431 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003432 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003433 fi
3434 cap_ng=no
3435 fi
3436fi
3437
3438##########################################
malcc2de5c92008-06-28 19:13:06 +00003439# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003440
Stefan Weil89138852016-05-16 15:10:20 +02003441audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003442for drv in $audio_drv_list; do
3443 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003444 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003445 if $pkg_config alsa --exists; then
3446 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003447 if test "$drv" = "try-alsa"; then
3448 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3449 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003450 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003451 if test "$drv" = "try-alsa"; then
3452 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3453 else
3454 error_exit "$drv check failed" \
3455 "Make sure to have the $drv libs and headers installed."
3456 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003457 fi
malcc2de5c92008-06-28 19:13:06 +00003458 ;;
3459
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003460 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003461 if $pkg_config libpulse --exists; then
3462 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003463 if test "$drv" = "try-pa"; then
3464 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3465 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003466 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003467 if test "$drv" = "try-pa"; then
3468 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3469 else
3470 error_exit "$drv check failed" \
3471 "Make sure to have the $drv libs and headers installed."
3472 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003473 fi
malcb8e59f12008-07-02 21:03:08 +00003474 ;;
3475
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003476 sdl)
3477 if test "$sdl" = "no"; then
3478 error_exit "sdl not found or disabled, can not use sdl audio driver"
3479 fi
3480 ;;
3481
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003482 try-sdl)
3483 if test "$sdl" = "no"; then
3484 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3485 else
3486 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3487 fi
3488 ;;
3489
Juan Quintela997e6902009-08-03 14:46:29 +02003490 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003491 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003492 ;;
3493
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003494 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003495 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003496 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003497 ;;
3498
3499 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003500 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003501 ;;
3502
malce4c63a62008-07-19 16:15:16 +00003503 *)
malc1c9b2a52008-07-19 16:57:30 +00003504 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003505 error_exit "Unknown driver '$drv' selected" \
3506 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003507 }
3508 ;;
malcc2de5c92008-06-28 19:13:06 +00003509 esac
3510done
ths8f28f3f2007-01-05 21:25:54 +00003511
balrog4d3b6f62008-02-10 16:33:14 +00003512##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003513# BrlAPI probe
3514
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003515if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003516 brlapi_libs="-lbrlapi"
3517 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003518#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003519#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003520int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3521EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003522 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003523 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003524 else
3525 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003526 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003527 fi
3528 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003529 fi
3530fi
aurel322e4d9fb2008-04-08 06:01:02 +00003531
3532##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003533# iconv probe
3534if test "$iconv" != "no" ; then
3535 cat > $TMPC << EOF
3536#include <iconv.h>
3537int main(void) {
3538 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3539 return conv != (iconv_t) -1;
3540}
3541EOF
3542 iconv_prefix_list="/usr/local:/usr"
3543 iconv_lib_list=":-liconv"
3544 IFS=:
3545 for iconv_prefix in $iconv_prefix_list; do
3546 IFS=:
3547 iconv_cflags="-I$iconv_prefix/include"
3548 iconv_ldflags="-L$iconv_prefix/lib"
3549 for iconv_link in $iconv_lib_list; do
3550 unset IFS
3551 iconv_lib="$iconv_ldflags $iconv_link"
3552 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3553 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3554 iconv_found=yes
3555 break
3556 fi
3557 done
3558 if test "$iconv_found" = yes ; then
3559 break
3560 fi
3561 done
3562 if test "$iconv_found" = "yes" ; then
3563 iconv=yes
3564 else
3565 if test "$iconv" = "yes" ; then
3566 feature_not_found "iconv" "Install iconv devel"
3567 fi
3568 iconv=no
3569 fi
3570fi
3571
3572##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003573# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003574if test "$iconv" = "no" ; then
3575 # curses will need iconv
3576 curses=no
3577fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003578if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003579 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003580 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3581 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003582 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003583 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003584 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003585 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003586 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003587 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003588#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003589#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003590#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003591#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003592int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003593 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003594 wchar_t wch = L'w';
3595 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003596 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003597 addwstr(L"wide chars\n");
3598 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003599 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003600 codeset = nl_langinfo(CODESET);
3601 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003602}
balrog4d3b6f62008-02-10 16:33:14 +00003603EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003604 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003605 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003606 # Make sure we get the wide character prototypes
3607 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003608 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003609 for curses_lib in $curses_lib_list; do
3610 unset IFS
3611 if compile_prog "$curses_inc" "$curses_lib" ; then
3612 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003613 break
3614 fi
3615 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003616 if test "$curses_found" = yes ; then
3617 break
3618 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003619 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003620 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003621 if test "$curses_found" = "yes" ; then
3622 curses=yes
3623 else
3624 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003625 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003626 fi
3627 curses=no
3628 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003629fi
balrog4d3b6f62008-02-10 16:33:14 +00003630
blueswir1414f0da2008-08-15 18:20:52 +00003631##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003632# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003633if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003634 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003635 curlconfig="$pkg_config libcurl"
3636 else
3637 curlconfig=curl-config
3638 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003639 cat > $TMPC << EOF
3640#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003641int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003642EOF
Stefan Weil89138852016-05-16 15:10:20 +02003643 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3644 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003645 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003646 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003647 else
3648 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003649 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003650 fi
3651 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003652 fi
3653fi # test "$curl"
3654
3655##########################################
balrogfb599c92008-09-28 23:49:55 +00003656# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003657if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003658 cat > $TMPC << EOF
3659#include <bluetooth/bluetooth.h>
3660int main(void) { return bt_error(0); }
3661EOF
Stefan Weil89138852016-05-16 15:10:20 +02003662 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3663 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003664 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003665 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003666 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003667 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003668 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003669 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003670 fi
balroge820e3f2008-09-30 02:27:44 +00003671 bluez="no"
3672 fi
balrogfb599c92008-09-28 23:49:55 +00003673fi
3674
3675##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003676# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003677
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003678glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003679glib_modules=gthread-2.0
3680if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003681 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003682fi
Emilio G. Cota54cb65d2017-08-30 18:39:53 -04003683if test "$plugins" = yes; then
3684 glib_modules="$glib_modules gmodule-2.0"
3685fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003686
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003687# This workaround is required due to a bug in pkg-config file for glib as it
3688# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3689
Eric Blakee633a5c2019-02-04 20:39:37 -06003690if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003691 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3692fi
3693
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003694for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003695 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003696 glib_cflags=$($pkg_config --cflags $i)
3697 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003698 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003699 LIBS="$glib_libs $LIBS"
3700 libs_qga="$glib_libs $libs_qga"
3701 else
3702 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3703 fi
3704done
3705
Marc-André Lureauf876b762019-02-21 12:07:00 +01003706if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3707 gio=yes
3708 gio_cflags=$($pkg_config --cflags gio-2.0)
3709 gio_libs=$($pkg_config --libs gio-2.0)
3710else
3711 gio=no
3712fi
3713
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003714# Sanity check that the current size_t matches the
3715# size that glib thinks it should be. This catches
3716# problems on multi-arch where people try to build
3717# 32-bit QEMU while pointing at 64-bit glib headers
3718cat > $TMPC <<EOF
3719#include <glib.h>
3720#include <unistd.h>
3721
3722#define QEMU_BUILD_BUG_ON(x) \
3723 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3724
3725int main(void) {
3726 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3727 return 0;
3728}
3729EOF
3730
Stefan Weil5919e032016-04-28 23:33:41 +02003731if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003732 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3733 "You probably need to set PKG_CONFIG_LIBDIR"\
3734 "to point to the right pkg-config files for your"\
3735 "build target"
3736fi
3737
John Snowbbbf2e02015-03-25 18:57:38 -04003738# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3739cat > $TMPC << EOF
3740#include <glib.h>
3741int main(void) { return 0; }
3742EOF
3743if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3744 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3745 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3746 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3747 fi
3748fi
3749
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003750#########################################
3751# zlib check
3752
3753if test "$zlib" != "no" ; then
3754 if $pkg_config --exists zlib; then
3755 zlib_cflags=$($pkg_config --cflags zlib)
3756 zlib_libs=$($pkg_config --libs zlib)
3757 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3758 LIBS="$zlib_libs $LIBS"
3759 else
3760 cat > $TMPC << EOF
3761#include <zlib.h>
3762int main(void) { zlibVersion(); return 0; }
3763EOF
3764 if compile_prog "" "-lz" ; then
3765 LIBS="$LIBS -lz"
3766 else
3767 error_exit "zlib check failed" \
3768 "Make sure to have the zlib libs and headers installed."
3769 fi
3770 fi
3771fi
3772
Fam Zhenge26110c2014-02-10 14:48:57 +08003773##########################################
3774# SHA command probe for modules
3775if test "$modules" = yes; then
3776 shacmd_probe="sha1sum sha1 shasum"
3777 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003778 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003779 shacmd="$c"
3780 break
3781 fi
3782 done
3783 if test "$shacmd" = ""; then
3784 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3785 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003786fi
3787
3788##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003789# pixman support probe
3790
Eric Blakee633a5c2019-02-04 20:39:37 -06003791if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003792 pixman_cflags=
3793 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003794elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003795 pixman_cflags=$($pkg_config --cflags pixman-1)
3796 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003797else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003798 error_exit "pixman >= 0.21.8 not present." \
3799 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003800fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003801
3802##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003803# libmpathpersist probe
3804
3805if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003806 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003807 cat > $TMPC <<EOF
3808#include <libudev.h>
3809#include <mpath_persist.h>
3810unsigned mpath_mx_alloc_len = 1024;
3811int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003812static struct config *multipath_conf;
3813extern struct udev *udev;
3814extern struct config *get_multipath_config(void);
3815extern void put_multipath_config(struct config *conf);
3816struct udev *udev;
3817struct config *get_multipath_config(void) { return multipath_conf; }
3818void put_multipath_config(struct config *conf) { }
3819
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003820int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003821 udev = udev_new();
3822 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003823 return 0;
3824}
3825EOF
3826 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3827 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003828 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003829 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003830 # probe for the old API
3831 cat > $TMPC <<EOF
3832#include <libudev.h>
3833#include <mpath_persist.h>
3834unsigned mpath_mx_alloc_len = 1024;
3835int logsink;
3836int main(void) {
3837 struct udev *udev = udev_new();
3838 mpath_lib_init(udev);
3839 return 0;
3840}
3841EOF
3842 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3843 mpathpersist=yes
3844 mpathpersist_new_api=no
3845 else
3846 mpathpersist=no
3847 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003848 fi
3849else
3850 mpathpersist=no
3851fi
3852
3853##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303854# libcap probe
3855
3856if test "$cap" != "no" ; then
3857 cat > $TMPC <<EOF
3858#include <stdio.h>
3859#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003860int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303861EOF
3862 if compile_prog "" "-lcap" ; then
3863 cap=yes
3864 else
3865 cap=no
3866 fi
3867fi
3868
3869##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003870# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003871PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003872
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003873pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003874cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003875#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003876static void *f(void *p) { return NULL; }
3877int main(void) {
3878 pthread_t thread;
3879 pthread_create(&thread, 0, f, 0);
3880 return 0;
3881}
blueswir1414f0da2008-08-15 18:20:52 +00003882EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003883if compile_prog "" "" ; then
3884 pthread=yes
3885else
3886 for pthread_lib in $PTHREADLIBS_LIST; do
3887 if compile_prog "" "$pthread_lib" ; then
3888 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003889 found=no
3890 for lib_entry in $LIBS; do
3891 if test "$lib_entry" = "$pthread_lib"; then
3892 found=yes
3893 break
3894 fi
3895 done
3896 if test "$found" = "no"; then
3897 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003898 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003899 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003900 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003901 break
3902 fi
3903 done
3904fi
blueswir1414f0da2008-08-15 18:20:52 +00003905
Eric Blakee633a5c2019-02-04 20:39:37 -06003906if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003907 error_exit "pthread check failed" \
3908 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003909fi
3910
Roman Bolshakov479a5742018-12-17 23:26:01 +03003911# check for pthread_setname_np with thread id
3912pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003913cat > $TMPC << EOF
3914#include <pthread.h>
3915
3916static void *f(void *p) { return NULL; }
3917int main(void)
3918{
3919 pthread_t thread;
3920 pthread_create(&thread, 0, f, 0);
3921 pthread_setname_np(thread, "QEMU");
3922 return 0;
3923}
3924EOF
3925if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003926 pthread_setname_np_w_tid=yes
3927fi
3928
3929# check for pthread_setname_np without thread id
3930pthread_setname_np_wo_tid=no
3931cat > $TMPC << EOF
3932#include <pthread.h>
3933
3934static void *f(void *p) { pthread_setname_np("QEMU"); }
3935int main(void)
3936{
3937 pthread_t thread;
3938 pthread_create(&thread, 0, f, 0);
3939 return 0;
3940}
3941EOF
3942if compile_prog "" "$pthread_lib" ; then
3943 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003944fi
3945
aliguoribf9298b2008-12-05 20:05:26 +00003946##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003947# rbd probe
3948if test "$rbd" != "no" ; then
3949 cat > $TMPC <<EOF
3950#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003951#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003952int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003953 rados_t cluster;
3954 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003955 return 0;
3956}
3957EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003958 rbd_libs="-lrbd -lrados"
3959 if compile_prog "" "$rbd_libs" ; then
3960 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003961 else
3962 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003963 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003964 fi
3965 rbd=no
3966 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003967fi
3968
3969##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003970# libssh probe
3971if test "$libssh" != "no" ; then
3972 if $pkg_config --exists libssh; then
3973 libssh_cflags=$($pkg_config libssh --cflags)
3974 libssh_libs=$($pkg_config libssh --libs)
3975 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003976 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02003977 if test "$libssh" = "yes" ; then
3978 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003979 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02003980 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003981 fi
3982fi
3983
3984##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003985# Check for libssh 0.8
3986# This is done like this instead of using the LIBSSH_VERSION_* and
3987# SSH_VERSION_* macros because some distributions in the past shipped
3988# snapshots of the future 0.8 from Git, and those snapshots did not
3989# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003990
Pino Toscanob10d49d2019-06-20 22:08:40 +02003991if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003992 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003993#include <libssh/libssh.h>
3994int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003995EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003996 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3997 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003998 fi
3999fi
4000
4001##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004002# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004003
4004if test "$linux_aio" != "no" ; then
4005 cat > $TMPC <<EOF
4006#include <libaio.h>
4007#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004008#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004009int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4010EOF
4011 if compile_prog "" "-laio" ; then
4012 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004013 else
4014 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004015 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004016 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03004017 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02004018 fi
4019fi
4020
4021##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004022# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004023
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08004024if test "$tpm" = ""; then
4025 if test "$mingw32" = "yes"; then
4026 tpm=no
4027 else
4028 tpm=yes
4029 fi
4030elif test "$tpm" = "yes"; then
4031 if test "$mingw32" = "yes" ; then
4032 error_exit "TPM emulation only available on POSIX systems"
4033 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01004034fi
4035
4036##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004037# attr probe
4038
4039if test "$attr" != "no" ; then
4040 cat > $TMPC <<EOF
4041#include <stdio.h>
4042#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004043#ifdef CONFIG_LIBATTR
4044#include <attr/xattr.h>
4045#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004046#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004047#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004048int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4049EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004050 if compile_prog "" "" ; then
4051 attr=yes
4052 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004053 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004054 attr=yes
4055 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004056 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004057 else
4058 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004059 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004060 fi
4061 attr=no
4062 fi
4063fi
4064
4065##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004066# iovec probe
4067cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004068#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004069#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004070#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004071int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004072EOF
4073iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004074if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004075 iovec=yes
4076fi
4077
aurel32f652e6a2008-12-16 10:43:48 +00004078##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004079# preadv probe
4080cat > $TMPC <<EOF
4081#include <sys/types.h>
4082#include <sys/uio.h>
4083#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004084int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004085EOF
4086preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004087if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004088 preadv=yes
4089fi
4090
4091##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004092# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004093# fdt support is mandatory for at least some target architectures,
4094# so insist on it if we're building those system emulators.
4095fdt_required=no
4096for target in $target_list; do
4097 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004098 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004099 fdt_required=yes
4100 ;;
4101 esac
4102done
4103
4104if test "$fdt_required" = "yes"; then
4105 if test "$fdt" = "no"; then
4106 error_exit "fdt disabled but some requested targets require it." \
4107 "You can turn off fdt only if you also disable all the system emulation" \
4108 "targets which need it (by specifying a cut down --target-list)."
4109 fi
4110 fdt=yes
4111fi
4112
Juan Quintela2df87df2009-08-12 18:29:54 +02004113if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004114 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004115 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004116 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004117 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004118#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004119#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004120int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004121EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004122 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004123 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004124 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004125 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004126 # have GIT checkout, so activate dtc submodule
4127 if test -e "${source_path}/.git" ; then
4128 git_submodules="${git_submodules} dtc"
4129 fi
4130 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004131 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004132 mkdir -p dtc
4133 if [ "$pwd_is_source_path" != "y" ] ; then
4134 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4135 symlink "$source_path/dtc/scripts" "dtc/scripts"
4136 fi
4137 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004138 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4139 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004140 elif test "$fdt" = "yes" ; then
4141 # Not a git build & no libfdt found, prompt for system install
4142 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4143 "Please install the DTC (libfdt) devel package"
4144 else
4145 # don't have and don't want
4146 fdt_libs=
4147 fdt=no
4148 fi
aurel32f652e6a2008-12-16 10:43:48 +00004149 fi
4150fi
4151
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004152libs_softmmu="$libs_softmmu $fdt_libs"
4153
Michael Walle20ff0752011-03-07 23:32:39 +01004154##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004155# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004156
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004157gbm="no"
4158if $pkg_config gbm; then
4159 gbm_cflags="$($pkg_config --cflags gbm)"
4160 gbm_libs="$($pkg_config --libs gbm)"
4161 gbm="yes"
4162fi
4163
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004164if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004165 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004166 if $pkg_config $opengl_pkgs; then
4167 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4168 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004169 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004170 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4171 gtk_gl="yes"
4172 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004173 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004174 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004175 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004176 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004177 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004178 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004179 opengl_libs=""
4180 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004181 fi
4182fi
4183
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004184if test "$opengl" = "yes"; then
4185 cat > $TMPC << EOF
4186#include <epoxy/egl.h>
4187#ifndef EGL_MESA_image_dma_buf_export
4188# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4189#endif
4190int main(void) { return 0; }
4191EOF
4192 if compile_prog "" "" ; then
4193 opengl_dmabuf=yes
4194 fi
4195fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004196
Eric Blakee633a5c2019-02-04 20:39:37 -06004197if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004198 for target in $target_list; do
4199 case $target in
4200 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4201 need_x11=yes
4202 ;;
4203 esac
4204 done
4205fi
4206
Klim Kireeved279a02018-01-12 12:01:19 +03004207##########################################
4208# libxml2 probe
4209if test "$libxml2" != "no" ; then
4210 if $pkg_config --exists libxml-2.0; then
4211 libxml2="yes"
4212 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4213 libxml2_libs=$($pkg_config --libs libxml-2.0)
4214 else
4215 if test "$libxml2" = "yes"; then
4216 feature_not_found "libxml2" "Install libxml2 devel"
4217 fi
4218 libxml2="no"
4219 fi
4220fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004221
Bharata B Raoeb100392012-09-24 14:42:45 +05304222##########################################
4223# glusterfs probe
4224if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004225 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304226 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004227 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4228 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004229 if $pkg_config --atleast-version=4 glusterfs-api; then
4230 glusterfs_xlator_opt="yes"
4231 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004232 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304233 glusterfs_discard="yes"
4234 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304235 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304236 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304237 glusterfs_zerofill="yes"
4238 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004239 cat > $TMPC << EOF
4240#include <glusterfs/api/glfs.h>
4241
4242int
4243main(void)
4244{
4245 /* new glfs_ftruncate() passes two additional args */
4246 return glfs_ftruncate(NULL, 0, NULL, NULL);
4247}
4248EOF
4249 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4250 glusterfs_ftruncate_has_stat="yes"
4251 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004252 cat > $TMPC << EOF
4253#include <glusterfs/api/glfs.h>
4254
4255/* new glfs_io_cbk() passes two additional glfs_stat structs */
4256static void
4257glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4258{}
4259
4260int
4261main(void)
4262{
4263 glfs_io_cbk iocb = &glusterfs_iocb;
4264 iocb(NULL, 0 , NULL, NULL, NULL);
4265 return 0;
4266}
4267EOF
4268 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4269 glusterfs_iocb_has_stat="yes"
4270 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304271 else
4272 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004273 feature_not_found "GlusterFS backend support" \
4274 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304275 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304276 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304277 fi
4278fi
4279
aurel3239386ac2009-04-15 19:48:17 +00004280# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004281# emulator. This is done because older glibc versions don't
4282# have syscall stubs for these implemented. In that case we
4283# don't provide them even if kernel supports them.
4284#
4285inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004286cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004287#include <sys/inotify.h>
4288
4289int
4290main(void)
4291{
4292 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004293 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004294}
4295EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004296if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004297 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004298fi
4299
Riku Voipioc05c7a72010-03-26 15:25:11 +00004300inotify1=no
4301cat > $TMPC << EOF
4302#include <sys/inotify.h>
4303
4304int
4305main(void)
4306{
4307 /* try to start inotify */
4308 return inotify_init1(0);
4309}
4310EOF
4311if compile_prog "" "" ; then
4312 inotify1=yes
4313fi
4314
Riku Voipio099d6b02009-05-05 12:10:04 +03004315# check if pipe2 is there
4316pipe2=no
4317cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004318#include <unistd.h>
4319#include <fcntl.h>
4320
4321int main(void)
4322{
4323 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004324 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004325}
4326EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004327if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004328 pipe2=yes
4329fi
4330
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004331# check if accept4 is there
4332accept4=no
4333cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004334#include <sys/socket.h>
4335#include <stddef.h>
4336
4337int main(void)
4338{
4339 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4340 return 0;
4341}
4342EOF
4343if compile_prog "" "" ; then
4344 accept4=yes
4345fi
4346
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304347# check if tee/splice is there. vmsplice was added same time.
4348splice=no
4349cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304350#include <unistd.h>
4351#include <fcntl.h>
4352#include <limits.h>
4353
4354int main(void)
4355{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004356 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304357 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4358 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4359 return 0;
4360}
4361EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004362if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304363 splice=yes
4364fi
4365
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004366##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004367# libnuma probe
4368
4369if test "$numa" != "no" ; then
4370 cat > $TMPC << EOF
4371#include <numa.h>
4372int main(void) { return numa_available(); }
4373EOF
4374
4375 if compile_prog "" "-lnuma" ; then
4376 numa=yes
4377 libs_softmmu="-lnuma $libs_softmmu"
4378 else
4379 if test "$numa" = "yes" ; then
4380 feature_not_found "numa" "install numactl devel"
4381 fi
4382 numa=no
4383 fi
4384fi
4385
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004386if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4387 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4388 exit 1
4389fi
4390
Yang Zhong5a22ab72017-12-20 21:16:46 +08004391# Even if malloc_trim() is available, these non-libc memory allocators
4392# do not support it.
4393if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4394 if test "$malloc_trim" = "yes" ; then
4395 echo "Disabling malloc_trim with non-libc memory allocator"
4396 fi
4397 malloc_trim="no"
4398fi
4399
4400#######################################
4401# malloc_trim
4402
4403if test "$malloc_trim" != "no" ; then
4404 cat > $TMPC << EOF
4405#include <malloc.h>
4406int main(void) { malloc_trim(0); return 0; }
4407EOF
4408 if compile_prog "" "" ; then
4409 malloc_trim="yes"
4410 else
4411 malloc_trim="no"
4412 fi
4413fi
4414
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004415##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004416# tcmalloc probe
4417
4418if test "$tcmalloc" = "yes" ; then
4419 cat > $TMPC << EOF
4420#include <stdlib.h>
4421int main(void) { malloc(1); return 0; }
4422EOF
4423
4424 if compile_prog "" "-ltcmalloc" ; then
4425 LIBS="-ltcmalloc $LIBS"
4426 else
4427 feature_not_found "tcmalloc" "install gperftools devel"
4428 fi
4429fi
4430
4431##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004432# jemalloc probe
4433
4434if test "$jemalloc" = "yes" ; then
4435 cat > $TMPC << EOF
4436#include <stdlib.h>
4437int main(void) { malloc(1); return 0; }
4438EOF
4439
4440 if compile_prog "" "-ljemalloc" ; then
4441 LIBS="-ljemalloc $LIBS"
4442 else
4443 feature_not_found "jemalloc" "install jemalloc devel"
4444 fi
4445fi
4446
4447##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004448# signalfd probe
4449signalfd="no"
4450cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004451#include <unistd.h>
4452#include <sys/syscall.h>
4453#include <signal.h>
4454int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4455EOF
4456
4457if compile_prog "" "" ; then
4458 signalfd=yes
4459fi
4460
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004461# check if optreset global is declared by <getopt.h>
4462optreset="no"
4463cat > $TMPC << EOF
4464#include <getopt.h>
4465int main(void) { return optreset; }
4466EOF
4467
4468if compile_prog "" "" ; then
4469 optreset=yes
4470fi
4471
Riku Voipioc2882b92009-08-12 15:08:24 +03004472# check if eventfd is supported
4473eventfd=no
4474cat > $TMPC << EOF
4475#include <sys/eventfd.h>
4476
4477int main(void)
4478{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004479 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004480}
4481EOF
4482if compile_prog "" "" ; then
4483 eventfd=yes
4484fi
4485
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004486# check if memfd is supported
4487memfd=no
4488cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004489#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004490
4491int main(void)
4492{
4493 return memfd_create("foo", MFD_ALLOW_SEALING);
4494}
4495EOF
4496if compile_prog "" "" ; then
4497 memfd=yes
4498fi
4499
Cortland Tölva955727d2018-10-08 09:35:19 -07004500# check for usbfs
4501have_usbfs=no
4502if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004503 cat > $TMPC << EOF
4504#include <linux/usbdevice_fs.h>
4505
4506#ifndef USBDEVFS_GET_CAPABILITIES
4507#error "USBDEVFS_GET_CAPABILITIES undefined"
4508#endif
4509
4510#ifndef USBDEVFS_DISCONNECT_CLAIM
4511#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4512#endif
4513
4514int main(void)
4515{
4516 return 0;
4517}
4518EOF
4519 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004520 have_usbfs=yes
4521 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004522fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004523
Ulrich Hechtd0927932009-09-17 20:22:14 +03004524# check for fallocate
4525fallocate=no
4526cat > $TMPC << EOF
4527#include <fcntl.h>
4528
4529int main(void)
4530{
4531 fallocate(0, 0, 0, 0);
4532 return 0;
4533}
4534EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004535if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004536 fallocate=yes
4537fi
4538
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004539# check for fallocate hole punching
4540fallocate_punch_hole=no
4541cat > $TMPC << EOF
4542#include <fcntl.h>
4543#include <linux/falloc.h>
4544
4545int main(void)
4546{
4547 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4548 return 0;
4549}
4550EOF
4551if compile_prog "" "" ; then
4552 fallocate_punch_hole=yes
4553fi
4554
Denis V. Lunevb953f072015-01-30 11:42:14 +03004555# check that fallocate supports range zeroing inside the file
4556fallocate_zero_range=no
4557cat > $TMPC << EOF
4558#include <fcntl.h>
4559#include <linux/falloc.h>
4560
4561int main(void)
4562{
4563 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4564 return 0;
4565}
4566EOF
4567if compile_prog "" "" ; then
4568 fallocate_zero_range=yes
4569fi
4570
Kevin Wolfed911432014-09-29 17:12:59 +02004571# check for posix_fallocate
4572posix_fallocate=no
4573cat > $TMPC << EOF
4574#include <fcntl.h>
4575
4576int main(void)
4577{
4578 posix_fallocate(0, 0, 0);
4579 return 0;
4580}
4581EOF
4582if compile_prog "" "" ; then
4583 posix_fallocate=yes
4584fi
4585
Peter Maydellc727f472011-01-06 11:05:10 +00004586# check for sync_file_range
4587sync_file_range=no
4588cat > $TMPC << EOF
4589#include <fcntl.h>
4590
4591int main(void)
4592{
4593 sync_file_range(0, 0, 0, 0);
4594 return 0;
4595}
4596EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004597if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004598 sync_file_range=yes
4599fi
4600
Peter Maydelldace20d2011-01-10 13:11:24 +00004601# check for linux/fiemap.h and FS_IOC_FIEMAP
4602fiemap=no
4603cat > $TMPC << EOF
4604#include <sys/ioctl.h>
4605#include <linux/fs.h>
4606#include <linux/fiemap.h>
4607
4608int main(void)
4609{
4610 ioctl(0, FS_IOC_FIEMAP, 0);
4611 return 0;
4612}
4613EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004614if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004615 fiemap=yes
4616fi
4617
Ulrich Hechtd0927932009-09-17 20:22:14 +03004618# check for dup3
4619dup3=no
4620cat > $TMPC << EOF
4621#include <unistd.h>
4622
4623int main(void)
4624{
4625 dup3(0, 0, 0);
4626 return 0;
4627}
4628EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004629if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004630 dup3=yes
4631fi
4632
Alex Bligh4e0c6522013-08-21 16:02:43 +01004633# check for ppoll support
4634ppoll=no
4635cat > $TMPC << EOF
4636#include <poll.h>
4637
4638int main(void)
4639{
4640 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4641 ppoll(&pfd, 1, 0, 0);
4642 return 0;
4643}
4644EOF
4645if compile_prog "" "" ; then
4646 ppoll=yes
4647fi
4648
Alex Blighcd758dd2013-08-21 16:02:44 +01004649# check for prctl(PR_SET_TIMERSLACK , ... ) support
4650prctl_pr_set_timerslack=no
4651cat > $TMPC << EOF
4652#include <sys/prctl.h>
4653
4654int main(void)
4655{
4656 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4657 return 0;
4658}
4659EOF
4660if compile_prog "" "" ; then
4661 prctl_pr_set_timerslack=yes
4662fi
4663
Peter Maydell3b6edd12011-02-15 18:35:05 +00004664# check for epoll support
4665epoll=no
4666cat > $TMPC << EOF
4667#include <sys/epoll.h>
4668
4669int main(void)
4670{
4671 epoll_create(0);
4672 return 0;
4673}
4674EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004675if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004676 epoll=yes
4677fi
4678
Peter Maydell227f0212016-06-06 19:58:11 +01004679# epoll_create1 is a later addition
4680# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004681epoll_create1=no
4682cat > $TMPC << EOF
4683#include <sys/epoll.h>
4684
4685int main(void)
4686{
Peter Maydell19e83f62011-04-26 16:56:40 +01004687 /* Note that we use epoll_create1 as a value, not as
4688 * a function being called. This is necessary so that on
4689 * old SPARC glibc versions where the function was present in
4690 * the library but not declared in the header file we will
4691 * fail the configure check. (Otherwise we will get a compiler
4692 * warning but not an error, and will proceed to fail the
4693 * qemu compile where we compile with -Werror.)
4694 */
Blue Swirlc075a722012-08-09 20:21:25 +00004695 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004696}
4697EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004698if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004699 epoll_create1=yes
4700fi
4701
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004702# check for sendfile support
4703sendfile=no
4704cat > $TMPC << EOF
4705#include <sys/sendfile.h>
4706
4707int main(void)
4708{
4709 return sendfile(0, 0, 0, 0);
4710}
4711EOF
4712if compile_prog "" "" ; then
4713 sendfile=yes
4714fi
4715
Riku Voipio51834342014-06-22 11:25:42 +01004716# check for timerfd support (glibc 2.8 and newer)
4717timerfd=no
4718cat > $TMPC << EOF
4719#include <sys/timerfd.h>
4720
4721int main(void)
4722{
4723 return(timerfd_create(CLOCK_REALTIME, 0));
4724}
4725EOF
4726if compile_prog "" "" ; then
4727 timerfd=yes
4728fi
4729
Riku Voipio9af5c902014-08-12 15:58:57 +03004730# check for setns and unshare support
4731setns=no
4732cat > $TMPC << EOF
4733#include <sched.h>
4734
4735int main(void)
4736{
4737 int ret;
4738 ret = setns(0, 0);
4739 ret = unshare(0);
4740 return ret;
4741}
4742EOF
4743if compile_prog "" "" ; then
4744 setns=yes
4745fi
4746
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004747# clock_adjtime probe
4748clock_adjtime=no
4749cat > $TMPC <<EOF
4750#include <time.h>
4751
4752int main(void)
4753{
4754 return clock_adjtime(0, 0);
4755}
4756EOF
4757clock_adjtime=no
4758if compile_prog "" "" ; then
4759 clock_adjtime=yes
4760fi
4761
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004762# syncfs probe
4763syncfs=no
4764cat > $TMPC <<EOF
4765#include <unistd.h>
4766
4767int main(void)
4768{
4769 return syncfs(0);
4770}
4771EOF
4772syncfs=no
4773if compile_prog "" "" ; then
4774 syncfs=yes
4775fi
4776
Peter Maydell5f71eac2019-03-07 14:26:46 +00004777# Check we have a new enough version of sphinx-build
4778has_sphinx_build() {
4779 # This is a bit awkward but works: create a trivial document and
4780 # try to run it with our configuration file (which enforces a
4781 # version requirement). This will fail if either
4782 # sphinx-build doesn't exist at all or if it is too old.
4783 mkdir -p "$TMPDIR1/sphinx"
4784 touch "$TMPDIR1/sphinx/index.rst"
4785 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4786}
4787
pbrookcc8ae6d2006-04-23 17:57:59 +00004788# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004789if test "$docs" != "no" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004790 if has makeinfo && has pod2man && has_sphinx_build; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004791 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004792 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004793 if test "$docs" = "yes" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004794 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004795 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004796 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004797 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004798fi
4799
Stefan Weilf514f412009-10-11 12:44:07 +02004800# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004801byteswap_h=no
4802cat > $TMPC << EOF
4803#include <byteswap.h>
4804int main(void) { return bswap_32(0); }
4805EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004806if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004807 byteswap_h=yes
4808fi
4809
Stefan Weil75f13592013-01-05 12:17:38 +01004810# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004811bswap_h=no
4812cat > $TMPC << EOF
4813#include <sys/endian.h>
4814#include <sys/types.h>
4815#include <machine/bswap.h>
4816int main(void) { return bswap32(0); }
4817EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004818if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004819 bswap_h=yes
4820fi
4821
aliguorida93a1f2008-12-12 20:02:52 +00004822##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004823# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004824if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004825 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004826 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004827 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4828 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004829 else
4830 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004831 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004832 fi
4833 libiscsi="no"
4834 fi
4835fi
4836
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004837##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004838# Do we need libm
4839cat > $TMPC << EOF
4840#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004841int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004842EOF
4843if compile_prog "" "" ; then
4844 :
4845elif compile_prog "" "-lm" ; then
4846 LIBS="-lm $LIBS"
4847 libs_qga="-lm $libs_qga"
4848else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004849 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004850fi
4851
4852##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004853# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004854# uClibc provides 2 versions of clock_gettime(), one with realtime
4855# support and one without. This means that the clock_gettime() don't
4856# need -lrt. We still need it for timer_create() so we check for this
4857# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004858cat > $TMPC <<EOF
4859#include <signal.h>
4860#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004861int main(void) {
4862 timer_create(CLOCK_REALTIME, NULL, NULL);
4863 return clock_gettime(CLOCK_REALTIME, NULL);
4864}
aliguorida93a1f2008-12-12 20:02:52 +00004865EOF
4866
Juan Quintela52166aa2009-08-03 14:46:03 +02004867if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004868 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004869# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004870elif compile_prog "" "$pthread_lib -lrt" ; then
4871 LIBS="$LIBS -lrt"
4872 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004873fi
4874
Thomas Huthd99e97e2019-01-17 18:14:08 +01004875# Check whether we need to link libutil for openpty()
4876cat > $TMPC << EOF
4877extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4878int main(void) { return openpty(0, 0, 0, 0, 0); }
4879EOF
4880
4881if ! compile_prog "" "" ; then
4882 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004883 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004884 libs_tools="-lutil $libs_tools"
4885 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004886fi
4887
Blue Swirlde5071c2009-09-12 09:58:46 +00004888##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004889# spice probe
4890if test "$spice" != "no" ; then
4891 cat > $TMPC << EOF
4892#include <spice.h>
4893int main(void) { spice_server_new(); return 0; }
4894EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004895 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4896 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004897 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004898 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004899 compile_prog "$spice_cflags" "$spice_libs" ; then
4900 spice="yes"
4901 libs_softmmu="$libs_softmmu $spice_libs"
4902 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004903 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4904 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004905 else
4906 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004907 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004908 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004909 fi
4910 spice="no"
4911 fi
4912fi
4913
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004914# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004915if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004916 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004917 libcacard_cflags=$($pkg_config --cflags libcacard)
4918 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004919 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004920 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004921 if test "$smartcard" = "yes"; then
4922 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004923 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004924 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004925 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004926fi
4927
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004928# check for libusb
4929if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004930 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004931 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004932 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4933 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004934 else
4935 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004936 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004937 fi
4938 libusb="no"
4939 fi
4940fi
4941
Hans de Goede69354a82011-07-19 11:04:10 +02004942# check for usbredirparser for usb network redirection support
4943if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004944 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004945 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004946 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4947 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004948 else
4949 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004950 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004951 fi
4952 usb_redir="no"
4953 fi
4954fi
4955
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004956##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004957# check if we have VSS SDK headers for win
4958
Eric Blakee633a5c2019-02-04 20:39:37 -06004959if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4960 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004961 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004962 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004963 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4964 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004965 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004966 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4967 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004968 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004969 esac
4970 cat > $TMPC << EOF
4971#define __MIDL_user_allocate_free_DEFINED__
4972#include <inc/win2003/vss.h>
4973int main(void) { return VSS_CTX_BACKUP; }
4974EOF
4975 if compile_prog "$vss_win32_include" "" ; then
4976 guest_agent_with_vss="yes"
4977 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004978 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004979 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004980 else
4981 if test "$vss_win32_sdk" != "" ; then
4982 echo "ERROR: Please download and install Microsoft VSS SDK:"
4983 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4984 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4985 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4986 echo "ERROR: The headers are extracted in the directory \`inc'."
4987 feature_not_found "VSS support"
4988 fi
4989 guest_agent_with_vss="no"
4990 fi
4991fi
4992
4993##########################################
4994# lookup Windows platform SDK (if not specified)
4995# The SDK is needed only to build .tlb (type library) file of guest agent
4996# VSS provider from the source. It is usually unnecessary because the
4997# pre-compiled .tlb file is included.
4998
Eric Blakee633a5c2019-02-04 20:39:37 -06004999if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5000 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005001 if test -z "$win_sdk"; then
5002 programfiles="$PROGRAMFILES"
5003 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5004 if test -n "$programfiles"; then
5005 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5006 else
5007 feature_not_found "Windows SDK"
5008 fi
5009 elif test "$win_sdk" = "no"; then
5010 win_sdk=""
5011 fi
5012fi
5013
5014##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05005015# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06005016if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05005017 cat > $TMPC << EOF
5018#include <windows.h>
5019#include <ntddscsi.h>
5020int main(void) {
5021#if !defined(IOCTL_SCSI_GET_ADDRESS)
5022#error Missing required ioctl definitions
5023#endif
5024 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5025 return addr.Lun;
5026}
5027EOF
5028 if compile_prog "" "" ; then
5029 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08005030 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05005031 fi
5032fi
5033
5034##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005035# virgl renderer probe
5036
5037if test "$virglrenderer" != "no" ; then
5038 cat > $TMPC << EOF
5039#include <virglrenderer.h>
5040int main(void) { virgl_renderer_poll(); return 0; }
5041EOF
5042 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5043 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02005044 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005045 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5046 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5047 virglrenderer="yes"
5048 else
5049 if test "$virglrenderer" = "yes" ; then
5050 feature_not_found "virglrenderer"
5051 fi
5052 virglrenderer="no"
5053 fi
5054fi
5055
5056##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005057# capstone
5058
Richard Hendersone219c492017-09-28 09:01:23 -07005059case "$capstone" in
5060 "" | yes)
5061 if $pkg_config capstone; then
5062 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005063 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005064 capstone=git
5065 elif test -e "${source_path}/capstone/Makefile" ; then
5066 capstone=internal
5067 elif test -z "$capstone" ; then
5068 capstone=no
5069 else
5070 feature_not_found "capstone" "Install capstone devel or git submodule"
5071 fi
5072 ;;
5073
5074 system)
5075 if ! $pkg_config capstone; then
5076 feature_not_found "capstone" "Install capstone devel"
5077 fi
5078 ;;
5079esac
5080
5081case "$capstone" in
5082 git | internal)
5083 if test "$capstone" = git; then
5084 git_submodules="${git_submodules} capstone"
5085 fi
5086 mkdir -p capstone
5087 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5088 if test "$mingw32" = "yes"; then
5089 LIBCAPSTONE=capstone.lib
5090 else
5091 LIBCAPSTONE=libcapstone.a
5092 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005093 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005094 ;;
5095
5096 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005097 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005098 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005099 ;;
5100
5101 no)
5102 ;;
5103 *)
5104 error_exit "Unknown state for capstone: $capstone"
5105 ;;
5106esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005107
5108##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005109# check if we have fdatasync
5110
5111fdatasync=no
5112cat > $TMPC << EOF
5113#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005114int main(void) {
5115#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5116return fdatasync(0);
5117#else
Stefan Weile172fe12012-04-06 21:33:20 +02005118#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005119#endif
5120}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005121EOF
5122if compile_prog "" "" ; then
5123 fdatasync=yes
5124fi
5125
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005126##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005127# check if we have madvise
5128
5129madvise=no
5130cat > $TMPC << EOF
5131#include <sys/types.h>
5132#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005133#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005134int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5135EOF
5136if compile_prog "" "" ; then
5137 madvise=yes
5138fi
5139
5140##########################################
5141# check if we have posix_madvise
5142
5143posix_madvise=no
5144cat > $TMPC << EOF
5145#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005146#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005147int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5148EOF
5149if compile_prog "" "" ; then
5150 posix_madvise=yes
5151fi
5152
5153##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005154# check if we have posix_memalign()
5155
5156posix_memalign=no
5157cat > $TMPC << EOF
5158#include <stdlib.h>
5159int main(void) {
5160 void *p;
5161 return posix_memalign(&p, 8, 8);
5162}
5163EOF
5164if compile_prog "" "" ; then
5165 posix_memalign=yes
5166fi
5167
5168##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005169# check if we have posix_syslog
5170
5171posix_syslog=no
5172cat > $TMPC << EOF
5173#include <syslog.h>
5174int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5175EOF
5176if compile_prog "" "" ; then
5177 posix_syslog=yes
5178fi
5179
5180##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005181# check if we have sem_timedwait
5182
5183sem_timedwait=no
5184cat > $TMPC << EOF
5185#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005186int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005187EOF
5188if compile_prog "" "" ; then
5189 sem_timedwait=yes
5190fi
5191
5192##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005193# check if we have strchrnul
5194
5195strchrnul=no
5196cat > $TMPC << EOF
5197#include <string.h>
5198int main(void);
5199// Use a haystack that the compiler shouldn't be able to constant fold
5200char *haystack = (char*)&main;
5201int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5202EOF
5203if compile_prog "" "" ; then
5204 strchrnul=yes
5205fi
5206
5207##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005208# check if trace backend exists
5209
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005210$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005211if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005212 error_exit "invalid trace backends" \
5213 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005214fi
5215
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005216##########################################
5217# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005218if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005219 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005220#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005221int main(void) { return 0; }
5222EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005223 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005224 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005225 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005226 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005227 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005228 fi
5229 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005230 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005231 else
5232 urcu_bp_libs="-lurcu-bp"
5233 fi
5234
5235 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5236 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005237 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005238 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005239 fi
5240fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005241
5242##########################################
5243# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005244if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005245 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005246 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005247 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005248 trace_backend_stap="no"
5249 if has 'stap' ; then
5250 trace_backend_stap="yes"
5251 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005252fi
5253
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005254##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005255# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305256
Peter Maydell7c2acc72013-04-08 12:11:27 +01005257# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005258# is sigcontext. On Windows the only valid backend is the Windows
5259# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005260
5261ucontext_works=no
5262if test "$darwin" != "yes"; then
5263 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305264#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005265#ifdef __stub_makecontext
5266#error Ignoring glibc stub makecontext which will always fail
5267#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005268int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305269EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005270 if compile_prog "" "" ; then
5271 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305272 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005273fi
5274
5275if test "$coroutine" = ""; then
5276 if test "$mingw32" = "yes"; then
5277 coroutine=win32
5278 elif test "$ucontext_works" = "yes"; then
5279 coroutine=ucontext
5280 else
5281 coroutine=sigaltstack
5282 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005283else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005284 case $coroutine in
5285 windows)
5286 if test "$mingw32" != "yes"; then
5287 error_exit "'windows' coroutine backend only valid for Windows"
5288 fi
5289 # Unfortunately the user visible backend name doesn't match the
5290 # coroutine-*.c filename for this case, so we have to adjust it here.
5291 coroutine=win32
5292 ;;
5293 ucontext)
5294 if test "$ucontext_works" != "yes"; then
5295 feature_not_found "ucontext"
5296 fi
5297 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005298 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005299 if test "$mingw32" = "yes"; then
5300 error_exit "only the 'windows' coroutine backend is valid for Windows"
5301 fi
5302 ;;
5303 *)
5304 error_exit "unknown coroutine backend $coroutine"
5305 ;;
5306 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305307fi
5308
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005309if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005310 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005311fi
5312
Peter Lieven7d992e42016-09-27 11:58:45 +02005313if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005314 if test "$coroutine_pool" = "yes"; then
5315 echo "WARN: disabling coroutine pool for stack usage debugging"
5316 coroutine_pool=no
5317 fi
5318fi
5319
5320
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305321##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305322# check if we have open_by_handle_at
5323
Stefan Weil4e1797f2012-06-18 22:11:06 +02005324open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305325cat > $TMPC << EOF
5326#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005327#if !defined(AT_EMPTY_PATH)
5328# error missing definition
5329#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005330int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005331#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305332EOF
5333if compile_prog "" "" ; then
5334 open_by_handle_at=yes
5335fi
5336
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305337########################################
5338# check if we have linux/magic.h
5339
5340linux_magic_h=no
5341cat > $TMPC << EOF
5342#include <linux/magic.h>
5343int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005344 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305345}
5346EOF
5347if compile_prog "" "" ; then
5348 linux_magic_h=yes
5349fi
5350
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005351########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005352# check whether we can disable warning option with a pragma (this is needed
5353# to silence warnings in the headers of some versions of external libraries).
5354# This test has to be compiled with -Werror as otherwise an unknown pragma is
5355# only a warning.
5356#
5357# If we can't selectively disable warning in the code, disable -Werror so that
5358# the build doesn't fail anyway.
5359
Peter Maydell06d71fa2012-07-30 16:13:07 +01005360pragma_disable_unused_but_set=no
5361cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005362#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005363#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005364#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005365
Peter Maydell06d71fa2012-07-30 16:13:07 +01005366int main(void) {
5367 return 0;
5368}
5369EOF
5370if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005371 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005372else
5373 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005374fi
5375
5376########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005377# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005378
5379valgrind_h=no
5380cat > $TMPC << EOF
5381#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005382int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005383 return 0;
5384}
5385EOF
5386if compile_prog "" "" ; then
5387 valgrind_h=yes
5388fi
5389
5390########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005391# check if environ is declared
5392
5393has_environ=no
5394cat > $TMPC << EOF
5395#include <unistd.h>
5396int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005397 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005398 return 0;
5399}
5400EOF
5401if compile_prog "" "" ; then
5402 has_environ=yes
5403fi
5404
Richard Henderson76a347e2012-12-28 14:17:02 -08005405########################################
5406# check if cpuid.h is usable.
5407
Richard Henderson76a347e2012-12-28 14:17:02 -08005408cat > $TMPC << EOF
5409#include <cpuid.h>
5410int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005411 unsigned a, b, c, d;
5412 int max = __get_cpuid_max(0, 0);
5413
5414 if (max >= 1) {
5415 __cpuid(1, a, b, c, d);
5416 }
5417
5418 if (max >= 7) {
5419 __cpuid_count(7, 0, a, b, c, d);
5420 }
5421
5422 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005423}
5424EOF
5425if compile_prog "" "" ; then
5426 cpuid_h=yes
5427fi
5428
Richard Henderson5dd89902017-07-18 18:40:18 -10005429##########################################
5430# avx2 optimization requirement check
5431#
5432# There is no point enabling this if cpuid.h is not usable,
5433# since we won't be able to select the new routines.
5434
Eric Blakee633a5c2019-02-04 20:39:37 -06005435if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005436 cat > $TMPC << EOF
5437#pragma GCC push_options
5438#pragma GCC target("avx2")
5439#include <cpuid.h>
5440#include <immintrin.h>
5441static int bar(void *a) {
5442 __m256i x = *(__m256i *)a;
5443 return _mm256_testz_si256(x, x);
5444}
5445int main(int argc, char *argv[]) { return bar(argv[0]); }
5446EOF
5447 if compile_object "" ; then
5448 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005449 else
5450 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005451 fi
5452fi
5453
Richard Hendersonf5401662013-02-16 12:46:59 -08005454########################################
5455# check if __[u]int128_t is usable.
5456
5457int128=no
5458cat > $TMPC << EOF
5459__int128_t a;
5460__uint128_t b;
5461int main (void) {
5462 a = a + b;
5463 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005464 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005465 return 0;
5466}
5467EOF
5468if compile_prog "" "" ; then
5469 int128=yes
5470fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005471
Richard Henderson7ebee432016-06-29 21:10:59 -07005472#########################################
5473# See if 128-bit atomic operations are supported.
5474
5475atomic128=no
5476if test "$int128" = "yes"; then
5477 cat > $TMPC << EOF
5478int main(void)
5479{
5480 unsigned __int128 x = 0, y = 0;
5481 y = __atomic_load_16(&x, 0);
5482 __atomic_store_16(&x, y, 0);
5483 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5484 return 0;
5485}
5486EOF
5487 if compile_prog "" "" ; then
5488 atomic128=yes
5489 fi
5490fi
5491
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005492cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005493if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005494 cat > $TMPC << EOF
5495int main(void)
5496{
5497 unsigned __int128 x = 0, y = 0;
5498 __sync_val_compare_and_swap_16(&x, y, x);
5499 return 0;
5500}
5501EOF
5502 if compile_prog "" "" ; then
5503 cmpxchg128=yes
5504 fi
5505fi
5506
Richard Hendersondf79b992016-09-02 12:23:57 -07005507#########################################
5508# See if 64-bit atomic operations are supported.
5509# Note that without __atomic builtins, we can only
5510# assume atomic loads/stores max at pointer size.
5511
5512cat > $TMPC << EOF
5513#include <stdint.h>
5514int main(void)
5515{
5516 uint64_t x = 0, y = 0;
5517#ifdef __ATOMIC_RELAXED
5518 y = __atomic_load_8(&x, 0);
5519 __atomic_store_8(&x, y, 0);
5520 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5521 __atomic_exchange_8(&x, y, 0);
5522 __atomic_fetch_add_8(&x, y, 0);
5523#else
5524 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5525 __sync_lock_test_and_set(&x, y);
5526 __sync_val_compare_and_swap(&x, y, 0);
5527 __sync_fetch_and_add(&x, y);
5528#endif
5529 return 0;
5530}
5531EOF
5532if compile_prog "" "" ; then
5533 atomic64=yes
5534fi
5535
Emilio G. Cota26fffe22018-10-21 13:56:29 -04005536#########################################
5537# See if --dynamic-list is supported by the linker
5538ld_dynamic_list="no"
5539if test "$static" = "no" ; then
5540 cat > $TMPTXT <<EOF
5541{
5542 foo;
5543};
5544EOF
5545
5546 cat > $TMPC <<EOF
5547#include <stdio.h>
5548void foo(void);
5549
5550void foo(void)
5551{
5552 printf("foo\n");
5553}
5554
5555int main(void)
5556{
5557 foo();
5558 return 0;
5559}
5560EOF
5561
5562 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5563 ld_dynamic_list="yes"
5564 fi
5565fi
5566
5567#########################################
5568# See if -exported_symbols_list is supported by the linker
5569
5570ld_exported_symbols_list="no"
5571if test "$static" = "no" ; then
5572 cat > $TMPTXT <<EOF
5573 _foo
5574EOF
5575
5576 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5577 ld_exported_symbols_list="yes"
5578 fi
5579fi
5580
5581if test "$plugins" = "yes" &&
5582 test "$ld_dynamic_list" = "no" &&
5583 test "$ld_exported_symbols_list" = "no" ; then
5584 error_exit \
5585 "Plugin support requires dynamic linking and specifying a set of symbols " \
5586 "that are exported to plugins. Unfortunately your linker doesn't " \
5587 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5588 "for this purpose. You can't build with --static."
5589fi
5590
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005591########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005592# See if 16-byte vector operations are supported.
5593# Even without a vector unit the compiler may expand these.
5594# There is a bug in old GCC for PPC that crashes here.
5595# Unfortunately it's the system compiler for Centos 7.
5596
5597cat > $TMPC << EOF
5598typedef unsigned char U1 __attribute__((vector_size(16)));
5599typedef unsigned short U2 __attribute__((vector_size(16)));
5600typedef unsigned int U4 __attribute__((vector_size(16)));
5601typedef unsigned long long U8 __attribute__((vector_size(16)));
5602typedef signed char S1 __attribute__((vector_size(16)));
5603typedef signed short S2 __attribute__((vector_size(16)));
5604typedef signed int S4 __attribute__((vector_size(16)));
5605typedef signed long long S8 __attribute__((vector_size(16)));
5606static U1 a1, b1;
5607static U2 a2, b2;
5608static U4 a4, b4;
5609static U8 a8, b8;
5610static S1 c1;
5611static S2 c2;
5612static S4 c4;
5613static S8 c8;
5614static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005615void helper(void *d, void *a, int shift, int i);
5616void helper(void *d, void *a, int shift, int i)
5617{
5618 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5619 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5620 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5621 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5622}
Richard Hendersondb432672017-09-15 14:11:45 -07005623int main(void)
5624{
5625 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5626 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5627 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5628 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5629 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5630 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5631 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5632 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5633 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5634 return 0;
5635}
5636EOF
5637
5638vector16=no
5639if compile_prog "" "" ; then
5640 vector16=yes
5641fi
5642
5643########################################
Richard Hendersondb8aaae2019-10-13 16:12:19 -07005644# See if __attribute__((alias)) is supported.
5645# This false for Xcode 9, but has been remedied for Xcode 10.
5646# Unfortunately, travis uses Xcode 9 by default.
5647
5648attralias=no
5649cat > $TMPC << EOF
5650int x = 1;
5651extern const int y __attribute__((alias("x")));
5652int main(void) { return 0; }
5653EOF
5654if compile_prog "" "" ; then
5655 attralias=yes
5656fi
5657
5658########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005659# check if getauxval is available.
5660
5661getauxval=no
5662cat > $TMPC << EOF
5663#include <sys/auxv.h>
5664int main(void) {
5665 return getauxval(AT_HWCAP) == 0;
5666}
5667EOF
5668if compile_prog "" "" ; then
5669 getauxval=yes
5670fi
5671
John Snowfd0e6052015-03-25 18:57:39 -04005672########################################
5673# check if ccache is interfering with
5674# semantic analysis of macros
5675
John Snow5e4dfd32015-10-28 13:56:40 -04005676unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005677ccache_cpp2=no
5678cat > $TMPC << EOF
5679static const int Z = 1;
5680#define fn() ({ Z; })
5681#define TAUT(X) ((X) == Z)
5682#define PAREN(X, Y) (X == Y)
5683#define ID(X) (X)
5684int main(int argc, char *argv[])
5685{
5686 int x = 0, y = 0;
5687 x = ID(x);
5688 x = fn();
5689 fn();
5690 if (PAREN(x, y)) return 0;
5691 if (TAUT(Z)) return 0;
5692 return 0;
5693}
5694EOF
5695
5696if ! compile_object "-Werror"; then
5697 ccache_cpp2=yes
5698fi
5699
John Snowb553a042015-11-03 15:43:42 -05005700#################################################
5701# clang does not support glibc + FORTIFY_SOURCE.
5702
5703if test "$fortify_source" != "no"; then
5704 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5705 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005706 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005707 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005708 fortify_source="no";
5709 else
5710 fortify_source="yes"
5711 fi
5712fi
5713
Fam Zheng1efad062018-06-01 17:26:43 +08005714###############################################
5715# Check if copy_file_range is provided by glibc
5716have_copy_file_range=no
5717cat > $TMPC << EOF
5718#include <unistd.h>
5719int main(void) {
5720 copy_file_range(0, NULL, 0, NULL, 0, 0);
5721 return 0;
5722}
5723EOF
5724if compile_prog "" "" ; then
5725 have_copy_file_range=yes
5726fi
5727
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305728##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005729# check if struct fsxattr is available via linux/fs.h
5730
5731have_fsxattr=no
5732cat > $TMPC << EOF
5733#include <linux/fs.h>
5734struct fsxattr foo;
5735int main(void) {
5736 return 0;
5737}
5738EOF
5739if compile_prog "" "" ; then
5740 have_fsxattr=yes
5741fi
5742
Peter Maydellb66e10e2016-06-08 18:34:32 +01005743##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005744# check for usable membarrier system call
5745if test "$membarrier" = "yes"; then
5746 have_membarrier=no
5747 if test "$mingw32" = "yes" ; then
5748 have_membarrier=yes
5749 elif test "$linux" = "yes" ; then
5750 cat > $TMPC << EOF
5751 #include <linux/membarrier.h>
5752 #include <sys/syscall.h>
5753 #include <unistd.h>
5754 #include <stdlib.h>
5755 int main(void) {
5756 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5757 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5758 exit(0);
5759 }
5760EOF
5761 if compile_prog "" "" ; then
5762 have_membarrier=yes
5763 fi
5764 fi
5765 if test "$have_membarrier" = "no"; then
5766 feature_not_found "membarrier" "membarrier system call not available"
5767 fi
5768else
5769 # Do not enable it by default even for Mingw32, because it doesn't
5770 # work on Wine.
5771 membarrier=no
5772fi
5773
5774##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005775# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005776have_rtnetlink=no
5777cat > $TMPC << EOF
5778#include <linux/rtnetlink.h>
5779int main(void) {
5780 return IFLA_PROTO_DOWN;
5781}
5782EOF
5783if compile_prog "" "" ; then
5784 have_rtnetlink=yes
5785fi
5786
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005787##########################################
5788# check for usable AF_VSOCK environment
5789have_af_vsock=no
5790cat > $TMPC << EOF
5791#include <errno.h>
5792#include <sys/types.h>
5793#include <sys/socket.h>
5794#if !defined(AF_VSOCK)
5795# error missing AF_VSOCK flag
5796#endif
5797#include <linux/vm_sockets.h>
5798int main(void) {
5799 int sock, ret;
5800 struct sockaddr_vm svm;
5801 socklen_t len = sizeof(svm);
5802 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5803 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5804 if ((ret == -1) && (errno == ENOTCONN)) {
5805 return 0;
5806 }
5807 return -1;
5808}
5809EOF
5810if compile_prog "" "" ; then
5811 have_af_vsock=yes
5812fi
5813
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005814##########################################
5815# check for usable AF_ALG environment
5816hava_afalg=no
5817cat > $TMPC << EOF
5818#include <errno.h>
5819#include <sys/types.h>
5820#include <sys/socket.h>
5821#include <linux/if_alg.h>
5822int main(void) {
5823 int sock;
5824 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5825 return sock;
5826}
5827EOF
5828if compile_prog "" "" ; then
5829 have_afalg=yes
5830fi
5831if test "$crypto_afalg" = "yes"
5832then
5833 if test "$have_afalg" != "yes"
5834 then
5835 error_exit "AF_ALG requested but could not be detected"
5836 fi
5837fi
5838
5839
James Clarke6969ec62016-06-06 12:02:50 +01005840#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005841# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005842if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005843 cat > $TMPC << EOF
5844#include <Hypervisor/hv.h>
5845int main() { return 0;}
5846EOF
5847 if ! compile_object ""; then
5848 hvf='no'
5849 else
5850 hvf='yes'
5851 LDFLAGS="-framework Hypervisor $LDFLAGS"
5852 fi
5853fi
5854
5855#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005856# Sparc implicitly links with --relax, which is
5857# incompatible with -r, so --no-relax should be
5858# given. It does no harm to give it on other
5859# platforms too.
5860
5861# Note: the prototype is needed since QEMU_CFLAGS
5862# contains -Wmissing-prototypes
5863cat > $TMPC << EOF
5864extern int foo(void);
5865int foo(void) { return 0; }
5866EOF
5867if ! compile_object ""; then
5868 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5869fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005870for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5871 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5872 LD_REL_FLAGS=$i
5873 break
5874 fi
5875done
5876if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5877 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005878fi
5879
Jan Vesely277abf12016-04-29 13:15:23 -04005880##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005881# check for sysmacros.h
5882
5883have_sysmacros=no
5884cat > $TMPC << EOF
5885#include <sys/sysmacros.h>
5886int main(void) {
5887 return makedev(0, 0);
5888}
5889EOF
5890if compile_prog "" "" ; then
5891 have_sysmacros=yes
5892fi
5893
5894##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005895# Veritas HyperScale block driver VxHS
5896# Check if libvxhs is installed
5897
5898if test "$vxhs" != "no" ; then
5899 cat > $TMPC <<EOF
5900#include <stdint.h>
5901#include <qnio/qnio_api.h>
5902
5903void *vxhs_callback;
5904
5905int main(void) {
5906 iio_init(QNIO_VERSION, vxhs_callback);
5907 return 0;
5908}
5909EOF
5910 vxhs_libs="-lvxhs -lssl"
5911 if compile_prog "" "$vxhs_libs" ; then
5912 vxhs=yes
5913 else
5914 if test "$vxhs" = "yes" ; then
5915 feature_not_found "vxhs block device" "Install libvxhs See github"
5916 fi
5917 vxhs=no
5918 fi
5919fi
5920
5921##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005922# check for _Static_assert()
5923
5924have_static_assert=no
5925cat > $TMPC << EOF
5926_Static_assert(1, "success");
5927int main(void) {
5928 return 0;
5929}
5930EOF
5931if compile_prog "" "" ; then
5932 have_static_assert=yes
5933fi
5934
5935##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005936# check for utmpx.h, it is missing e.g. on OpenBSD
5937
5938have_utmpx=no
5939cat > $TMPC << EOF
5940#include <utmpx.h>
5941struct utmpx user_info;
5942int main(void) {
5943 return 0;
5944}
5945EOF
5946if compile_prog "" "" ; then
5947 have_utmpx=yes
5948fi
5949
5950##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07005951# check for getrandom()
5952
5953have_getrandom=no
5954cat > $TMPC << EOF
5955#include <sys/random.h>
5956int main(void) {
5957 return getrandom(0, 0, GRND_NONBLOCK);
5958}
5959EOF
5960if compile_prog "" "" ; then
5961 have_getrandom=yes
5962fi
5963
5964##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005965# checks for sanitizers
5966
Marc-André Lureau247724c2018-01-16 16:11:51 +01005967have_asan=no
5968have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005969have_asan_iface_h=no
5970have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005971
5972if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005973 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005974 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5975 have_asan=yes
5976 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005977
5978 # we could use a simple skeleton for flags checks, but this also
5979 # detect the static linking issue of ubsan, see also:
5980 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5981 cat > $TMPC << EOF
5982#include <stdlib.h>
5983int main(void) {
5984 void *tmp = malloc(10);
5985 return *(int *)(tmp + 2);
5986}
5987EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005988 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5989 have_ubsan=yes
5990 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005991
5992 if check_include "sanitizer/asan_interface.h" ; then
5993 have_asan_iface_h=yes
5994 fi
5995
5996 cat > $TMPC << EOF
5997#include <sanitizer/asan_interface.h>
5998int main(void) {
5999 __sanitizer_start_switch_fiber(0, 0, 0);
6000 return 0;
6001}
6002EOF
6003 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6004 have_asan_iface_fiber=yes
6005 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006006fi
6007
6008##########################################
Junyan He17824402018-07-18 15:47:59 +08006009# check for libpmem
6010
6011if test "$libpmem" != "no"; then
6012 if $pkg_config --exists "libpmem"; then
6013 libpmem="yes"
6014 libpmem_libs=$($pkg_config --libs libpmem)
6015 libpmem_cflags=$($pkg_config --cflags libpmem)
6016 libs_softmmu="$libs_softmmu $libpmem_libs"
6017 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6018 else
6019 if test "$libpmem" = "yes" ; then
6020 feature_not_found "libpmem" "Install nvml or pmdk"
6021 fi
6022 libpmem="no"
6023 fi
6024fi
6025
6026##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006027# check for slirp
6028
6029case "$slirp" in
6030 "" | yes)
6031 if $pkg_config slirp; then
6032 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006033 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6034 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006035 elif test -e "${source_path}/slirp/Makefile" ; then
6036 slirp=internal
6037 elif test -z "$slirp" ; then
6038 slirp=no
6039 else
6040 feature_not_found "slirp" "Install slirp devel or git submodule"
6041 fi
6042 ;;
6043
6044 system)
6045 if ! $pkg_config slirp; then
6046 feature_not_found "slirp" "Install slirp devel"
6047 fi
6048 ;;
6049esac
6050
6051case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006052 git | internal)
6053 if test "$slirp" = git; then
6054 git_submodules="${git_submodules} slirp"
6055 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006056 mkdir -p slirp
6057 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
6058 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
6059 ;;
6060
6061 system)
6062 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6063 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6064 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6065 ;;
6066
6067 no)
6068 ;;
6069 *)
6070 error_exit "Unknown state for slirp: $slirp"
6071 ;;
6072esac
6073
6074
6075##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02006076# End of CC checks
6077# After here, no more $cc or $ld runs
6078
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006079write_c_skeleton
6080
Blue Swirl1d728c32012-05-01 18:45:39 +00006081if test "$gcov" = "yes" ; then
6082 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
6083 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05006084elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02006085 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01006086elif test "$debug" = "no"; then
6087 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006088fi
Juan Quintelaa316e372009-09-30 01:10:55 +02006089
Marc-André Lureau247724c2018-01-16 16:11:51 +01006090if test "$have_asan" = "yes"; then
6091 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006092 if test "$have_asan_iface_h" = "no" ; then
6093 echo "ASAN build enabled, but ASAN header missing." \
6094 "Without code annotation, the report may be inferior."
6095 elif test "$have_asan_iface_fiber" = "no" ; then
6096 echo "ASAN build enabled, but ASAN header is too old." \
6097 "Without code annotation, the report may be inferior."
6098 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01006099fi
6100if test "$have_ubsan" = "yes"; then
6101 CFLAGS="-fsanitize=undefined $CFLAGS"
6102fi
6103
Peter Lieven6542aa92014-02-03 10:26:13 +01006104##########################################
6105# Do we have libnfs
6106if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006107 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006108 libnfs="yes"
6109 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006110 else
6111 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006112 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006113 fi
6114 libnfs="no"
6115 fi
6116fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006117
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006118##########################################
6119# Do we have libudev
6120if test "$libudev" != "no" ; then
6121 if $pkg_config libudev && test "$static" != "yes"; then
6122 libudev="yes"
6123 libudev_libs=$($pkg_config --libs libudev)
6124 else
6125 libudev="no"
6126 fi
6127fi
6128
Peter Maydell6ca026c2012-07-18 15:10:18 +01006129# Now we've finished running tests it's OK to add -Werror to the compiler flags
6130if test "$werror" = "yes"; then
6131 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6132fi
6133
Juan Quintelae86ecd42009-08-03 14:45:59 +02006134if test "$solaris" = "no" ; then
6135 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02006136 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006137 fi
6138fi
6139
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006140# test if pod2man has --utf8 option
6141if pod2man --help | grep -q utf8; then
6142 POD2MAN="pod2man --utf8"
6143else
6144 POD2MAN="pod2man"
6145fi
6146
Blue Swirl952afb72010-09-19 08:36:34 +00006147# Use ASLR, no-SEH and DEP if available
6148if test "$mingw32" = "yes" ; then
6149 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006150 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00006151 LDFLAGS="-Wl,$flag $LDFLAGS"
6152 fi
6153 done
6154fi
6155
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006156# Disable OpenBSD W^X if available
6157if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6158 cat > $TMPC <<EOF
6159 int main(void) { return 0; }
6160EOF
6161 wx_ldflags="-Wl,-z,wxneeded"
6162 if compile_prog "" "$wx_ldflags"; then
6163 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6164 fi
6165fi
6166
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006167qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006168qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006169qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006170qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006171qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006172qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006173
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006174# We can only support ivshmem if we have eventfd
6175if [ "$eventfd" = "yes" ]; then
6176 ivshmem=yes
6177fi
6178
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006179tools=""
6180if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006181 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006182 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6183 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006184 fi
6185 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006186 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006187 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006188 if [ "$curl" = "yes" ]; then
6189 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006190 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006191fi
6192if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006193 if test "$linux" = yes; then
6194 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006195 virtfs=yes
6196 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6197 else
6198 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006199 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306200 fi
Andreas Färber17500372012-05-01 01:12:03 +02006201 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006202 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006203 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6204 mpath=yes
6205 else
6206 if test "$mpath" = yes; then
6207 error_exit "Multipath requires libmpathpersist devel"
6208 fi
6209 mpath=no
6210 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006211 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6212 else
6213 if test "$virtfs" = yes; then
6214 error_exit "VirtFS is supported only on Linux"
6215 fi
6216 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006217 if test "$mpath" = yes; then
6218 error_exit "Multipath is supported only on Linux"
6219 fi
6220 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306221 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006222 if test "$xkbcommon" = "yes"; then
6223 tools="qemu-keymap\$(EXESUF) $tools"
6224 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006225fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006226
6227# Probe for guest agent support/options
6228
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006229if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006230 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6231 guest_agent=no
6232 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006233 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006234 guest_agent=yes
6235 elif [ "$guest_agent" != yes ]; then
6236 guest_agent=no
6237 else
6238 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006239 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006240fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006241
Michael Roth9d6bc272015-08-26 10:49:13 -05006242# Guest agent Window MSI package
6243
6244if test "$guest_agent" != yes; then
6245 if test "$guest_agent_msi" = yes; then
6246 error_exit "MSI guest agent package requires guest agent enabled"
6247 fi
6248 guest_agent_msi=no
6249elif test "$mingw32" != "yes"; then
6250 if test "$guest_agent_msi" = "yes"; then
6251 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6252 fi
6253 guest_agent_msi=no
6254elif ! has wixl; then
6255 if test "$guest_agent_msi" = "yes"; then
6256 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6257 fi
6258 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006259else
6260 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6261 # disabled explicitly
6262 if test "$guest_agent_msi" != "no"; then
6263 guest_agent_msi=yes
6264 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006265fi
6266
Michael Roth1a349042015-08-26 11:14:31 -05006267if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006268 if test "$guest_agent_with_vss" = "yes"; then
6269 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6270 fi
6271
6272 if test "$QEMU_GA_MANUFACTURER" = ""; then
6273 QEMU_GA_MANUFACTURER=QEMU
6274 fi
6275
6276 if test "$QEMU_GA_DISTRO" = ""; then
6277 QEMU_GA_DISTRO=Linux
6278 fi
6279
6280 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006281 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006282 fi
6283
Stefan Weil89138852016-05-16 15:10:20 +02006284 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006285
6286 case "$cpu" in
6287 x86_64)
6288 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6289 ;;
6290 i386)
6291 QEMU_GA_MSI_ARCH="-D Arch=32"
6292 ;;
6293 *)
6294 error_exit "CPU $cpu not supported for building installation package"
6295 ;;
6296 esac
6297fi
6298
Paolo Bonzinica35f782010-05-26 16:08:29 +02006299# Mac OS X ships with a broken assembler
6300roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006301if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6302 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6303 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006304 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006305 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6306 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6307 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006308 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6309 ld_i386_emulation="$emu"
6310 roms="optionrom"
6311 break
6312 fi
6313 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006314fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006315
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006316# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006317if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006318 write_c_skeleton
6319 if compile_prog "-march=z900" ""; then
6320 roms="$roms s390-ccw"
6321 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006322fi
6323
Richard Henderson964c6fa2013-06-21 19:10:16 -07006324# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006325if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006326 textseg_addr=
6327 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006328 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6329 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006330 textseg_addr=0x60000000
6331 ;;
6332 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006333 # A 256M aligned address, high in the address space, with enough
6334 # room for the code_gen_buffer above it before the stack.
6335 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006336 ;;
6337 esac
6338 if [ -n "$textseg_addr" ]; then
6339 cat > $TMPC <<EOF
6340 int main(void) { return 0; }
6341EOF
6342 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6343 if ! compile_prog "" "$textseg_ldflags"; then
6344 # In case ld does not support -Ttext-segment, edit the default linker
6345 # script via sed to set the .text start addr. This is needed on FreeBSD
6346 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006347 if ! $ld --verbose >/dev/null 2>&1; then
6348 error_exit \
6349 "We need to link the QEMU user mode binaries at a" \
6350 "specific text address. Unfortunately your linker" \
6351 "doesn't support either the -Ttext-segment option or" \
6352 "printing the default linker script with --verbose." \
6353 "If you don't want the user mode binaries, pass the" \
6354 "--disable-user option to configure."
6355 fi
6356
Richard Henderson964c6fa2013-06-21 19:10:16 -07006357 $ld --verbose | sed \
6358 -e '1,/==================================================/d' \
6359 -e '/==================================================/,$d' \
6360 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6361 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6362 textseg_ldflags="-Wl,-T../config-host.ld"
6363 fi
6364 fi
6365fi
6366
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006367# Check that the C++ compiler exists and works with the C compiler.
6368# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6369if has $cxx; then
6370 cat > $TMPC <<EOF
6371int c_function(void);
6372int main(void) { return c_function(); }
6373EOF
6374
6375 compile_object
6376
6377 cat > $TMPCXX <<EOF
6378extern "C" {
6379 int c_function(void);
6380}
6381int c_function(void) { return 42; }
6382EOF
6383
6384 update_cxxflags
6385
6386 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6387 # C++ compiler $cxx works ok with C compiler $cc
6388 :
6389 else
6390 echo "C++ compiler $cxx does not work with C compiler $cc"
6391 echo "Disabling C++ specific optional code"
6392 cxx=
6393 fi
6394else
6395 echo "No C++ compiler available; disabling C++ specific optional code"
6396 cxx=
6397fi
6398
Cole Robinson02d34f62016-05-06 14:03:09 -04006399echo_version() {
6400 if test "$1" = "yes" ; then
6401 echo "($2)"
6402 fi
6403}
6404
Jan Kiszka50e12062014-10-02 10:03:55 +02006405# prepend pixman and ftd flags after all config tests are done
6406QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006407QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006408libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006409
bellard43ce4df2003-06-09 19:53:12 +00006410echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006411echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006412echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006413echo "binary directory $(eval echo $bindir)"
6414echo "library directory $(eval echo $libdir)"
6415echo "module directory $(eval echo $qemu_moddir)"
6416echo "libexec directory $(eval echo $libexecdir)"
6417echo "include directory $(eval echo $includedir)"
6418echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006419if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006420echo "local state directory $(eval echo $local_statedir)"
6421echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006422echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006423else
6424echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006425echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006426fi
bellard5a671352003-10-01 00:13:48 +00006427echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006428echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006429echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006430echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006431echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006432echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006433echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006434echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006435echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006436echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006437echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006438echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006439echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006440echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006441echo "python $python ($python_version)"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006442echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6443if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006444 echo "smbd $smbd"
6445fi
Fam Zheng17969262014-02-10 14:48:56 +08006446echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006447echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006448echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006449echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006450echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006451echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006452echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006453echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006454echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006455if test "$darwin" = "yes" ; then
6456 echo "Cocoa support $cocoa"
6457fi
Stefan Weil89138852016-05-16 15:10:20 +02006458echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006459echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006460echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006461echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006462echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006463echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006464echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006465echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006466if test "$gcrypt" = "yes"
6467then
6468 echo " hmac $gcrypt_hmac"
6469 echo " XTS $gcrypt_xts"
6470fi
Stefan Weil89138852016-05-16 15:10:20 +02006471echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangédc2207a2019-10-14 17:28:27 +01006472if test "$nettle" = "yes"
6473then
6474 echo " XTS $nettle_xts"
6475fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006476echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006477echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006478echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006479echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006480echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006481echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006482echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006483echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006484echo "Block whitelist (rw) $block_drv_rw_whitelist"
6485echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306486echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006487echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006488echo "VNC support $vnc"
6489if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006490 echo "VNC SASL support $vnc_sasl"
6491 echo "VNC JPEG support $vnc_jpeg"
6492 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006493fi
aliguorie37630c2009-04-22 15:19:10 +00006494echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006495if test "$xen" = "yes" ; then
6496 echo "xen ctrl version $xen_ctrl_version"
6497fi
aurel322e4d9fb2008-04-08 06:01:02 +00006498echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006499echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006500echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006501echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006502echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006503echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006504echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006505echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006506echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006507echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006508echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006509echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006510echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006511echo "TCG support $tcg"
6512if test "$tcg" = "yes" ; then
6513 echo "TCG debug enabled $debug_tcg"
6514 echo "TCG interpreter $tcg_interpreter"
6515fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006516echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006517echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006518echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006519echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006520echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006521echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006522echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006523echo "madvise $madvise"
6524echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006525echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006526echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006527echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006528echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006529echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006530echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006531echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006532echo "vhost-user-fs support $vhost_user_fs"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006533echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006534if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006535echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006536fi
Stefan Weil89138852016-05-16 15:10:20 +02006537echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006538echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006539echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006540echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006541echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006542echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006543echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006544echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006545echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006546echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006547echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006548echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006549echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006550echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006551echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006552echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006553echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006554echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006555echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006556echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306557echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006558echo "gcov $gcov_tool"
6559echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006560echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006561echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006562echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006563echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006564echo "lzo support $lzo"
6565echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006566echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006567echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006568echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006569echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006570echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006571echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006572echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006573echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006574echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006575echo "bochs support $bochs"
6576echo "cloop support $cloop"
6577echo "dmg support $dmg"
6578echo "qcow v1 support $qcow1"
6579echo "vdi support $vdi"
6580echo "vvfat support $vvfat"
6581echo "qed support $qed"
6582echo "parallels support $parallels"
6583echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006584echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006585echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006586echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006587echo "default devices $default_devices"
Alex Bennée40e8c6f2019-06-13 14:52:25 +01006588echo "plugin support $plugins"
bellard67b915a2004-03-31 23:37:16 +00006589
Peter Maydell898be3e2017-03-21 14:31:57 +00006590if test "$supported_cpu" = "no"; then
6591 echo
6592 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6593 echo
6594 echo "CPU host architecture $cpu support is not currently maintained."
6595 echo "The QEMU project intends to remove support for this host CPU in"
6596 echo "a future release if nobody volunteers to maintain it and to"
6597 echo "provide a build host for our continuous integration setup."
6598 echo "configure has succeeded and you can continue to build, but"
6599 echo "if you care about QEMU on this platform you should contact"
6600 echo "us upstream at qemu-devel@nongnu.org."
6601fi
6602
6603if test "$supported_os" = "no"; then
6604 echo
6605 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6606 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006607 echo "Host OS $targetos support is not currently maintained."
6608 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006609 echo "a future release if nobody volunteers to maintain it and to"
6610 echo "provide a build host for our continuous integration setup."
6611 echo "configure has succeeded and you can continue to build, but"
6612 echo "if you care about QEMU on this platform you should contact"
6613 echo "us upstream at qemu-devel@nongnu.org."
6614fi
6615
Eduardo Habkoste5abf592019-05-03 16:37:21 -03006616# Note that if the Python conditional here evaluates True we will exit
6617# with status 1 which is a shell 'false' value.
6618if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6619 echo
6620 echo "warning: Python 2 support is deprecated" >&2
6621 echo "warning: Python 3 will be required for building future versions of QEMU" >&2
Cleber Rosa406ab2f2019-08-26 11:58:32 -04006622 python2="y"
Eduardo Habkoste5abf592019-05-03 16:37:21 -03006623fi
6624
Juan Quintela98ec69a2009-07-16 18:34:18 +02006625config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006626
Stefan Weildbd99ae2013-01-01 18:33:44 +01006627echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6628
Juan Quintela98ec69a2009-07-16 18:34:18 +02006629echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006630echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006631
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006632echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006633echo "prefix=$prefix" >> $config_host_mak
6634echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006635echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006636echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006637echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006638echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006639echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006640echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006641echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006642echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006643echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006644echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006645if test "$mingw32" = "no" ; then
6646 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6647fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006648echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006649echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006650echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006651echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006652echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006653echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006654echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006655echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006656echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006657
Juan Quintela98ec69a2009-07-16 18:34:18 +02006658echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006659
Paolo Bonzinif3494742019-01-23 14:56:17 +08006660if test "$default_devices" = "yes" ; then
6661 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6662else
6663 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6664fi
aurel32f8393942009-04-13 18:45:38 +00006665if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006666 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006667fi
aliguori1625af82009-04-05 17:41:02 +00006668if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006669 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006670fi
bellard7d132992003-03-06 23:23:54 +00006671if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006672 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006673fi
bellard67b915a2004-03-31 23:37:16 +00006674if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006675 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006676 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006677 version_major=${rc_version%%.*}
6678 rc_version=${rc_version#*.}
6679 version_minor=${rc_version%%.*}
6680 rc_version=${rc_version#*.}
6681 version_subminor=${rc_version%%.*}
6682 version_micro=0
6683 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6684 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006685 if test "$guest_agent_with_vss" = "yes" ; then
6686 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006687 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006688 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6689 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006690 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006691 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006692 fi
Michael Roth1a349042015-08-26 11:14:31 -05006693 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006694 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006695 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6696 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6697 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6698 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6699 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6700 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6701 fi
pbrook210fa552007-02-27 21:04:49 +00006702else
Juan Quintela35f4df22009-07-27 16:13:07 +02006703 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006704fi
blueswir1128ab2f2008-08-15 18:33:42 +00006705
Mark McLoughlindffcb712009-10-22 17:49:11 +01006706if test "$linux" = "yes" ; then
6707 echo "CONFIG_LINUX=y" >> $config_host_mak
6708fi
6709
bellard83fb7ad2004-07-05 21:25:26 +00006710if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006711 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006712fi
malcb29fe3e2008-11-18 01:42:22 +00006713
bellardec530c82006-04-25 22:36:06 +00006714if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006715 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006716fi
Andreas Färber179cf402010-09-20 00:50:43 +02006717if test "$haiku" = "yes" ; then
6718 echo "CONFIG_HAIKU=y" >> $config_host_mak
6719fi
bellard97a847b2003-08-10 21:36:04 +00006720if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006721 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006722fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006723if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006724 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006725fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006726if test "$want_tools" = "yes" ; then
6727 echo "CONFIG_TOOLS=y" >> $config_host_mak
6728fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006729if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006730 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006731 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006732 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6733 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6734fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006735if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006736 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006737fi
ths8a16d272008-07-19 09:56:24 +00006738if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006739 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006740 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006741fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006742if test "$netmap" = "yes" ; then
6743 echo "CONFIG_NETMAP=y" >> $config_host_mak
6744fi
Gonglei015a33b2014-07-01 20:58:08 +08006745if test "$l2tpv3" = "yes" ; then
6746 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6747fi
Corey Bryant47e98652012-01-26 09:42:26 -05006748if test "$cap_ng" = "yes" ; then
6749 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6750fi
Juan Quintela2358a492009-07-27 16:13:25 +02006751echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006752for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006753 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006754 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006755 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006756 echo "$def=m" >> $config_host_mak ;;
6757 *)
6758 echo "$def=y" >> $config_host_mak ;;
6759 esac
malc0c58ac12008-06-25 21:04:05 +00006760done
Fam Zhengb1149912017-09-07 16:29:13 +08006761echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6762echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6763echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6764echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6765echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006766if test "$audio_win_int" = "yes" ; then
6767 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6768fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006769echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6770echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006771if test "$vnc" = "yes" ; then
6772 echo "CONFIG_VNC=y" >> $config_host_mak
6773fi
aliguori2f9606b2009-03-06 20:27:28 +00006774if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006775 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006776fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006777if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006778 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006779fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006780if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006781 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006782fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006783if test "$xkbcommon" = "yes" ; then
6784 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6785 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6786fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006787if test "$xfs" = "yes" ; then
6788 echo "CONFIG_XFS=y" >> $config_host_mak
6789fi
Stefan Weil89138852016-05-16 15:10:20 +02006790qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006791echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006792echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006793echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006794echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006795if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006796 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006797fi
Fam Zheng17969262014-02-10 14:48:56 +08006798if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006799 # $shacmd can generate a hash started with digit, which the compiler doesn't
6800 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006801 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006802 echo "CONFIG_MODULES=y" >> $config_host_mak
6803fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006804if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006805 echo "CONFIG_X11=y" >> $config_host_mak
6806 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6807 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6808fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006809if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006810 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006811 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006812 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006813 if test "$sdl_image" = "yes" ; then
6814 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6815 fi
bellard49ecc3f2007-11-07 19:25:15 +00006816fi
6817if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006818 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006819fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006820if test "$iconv" = "yes" ; then
6821 echo "CONFIG_ICONV=y" >> $config_host_mak
6822 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6823 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6824fi
balrog4d3b6f62008-02-10 16:33:14 +00006825if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006826 echo "CONFIG_CURSES=m" >> $config_host_mak
6827 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6828 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006829fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006830if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006831 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006832fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006833if test "$accept4" = "yes" ; then
6834 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6835fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306836if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006837 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306838fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006839if test "$eventfd" = "yes" ; then
6840 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6841fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006842if test "$memfd" = "yes" ; then
6843 echo "CONFIG_MEMFD=y" >> $config_host_mak
6844fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006845if test "$have_usbfs" = "yes" ; then
6846 echo "CONFIG_USBFS=y" >> $config_host_mak
6847fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006848if test "$fallocate" = "yes" ; then
6849 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6850fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006851if test "$fallocate_punch_hole" = "yes" ; then
6852 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6853fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006854if test "$fallocate_zero_range" = "yes" ; then
6855 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6856fi
Kevin Wolfed911432014-09-29 17:12:59 +02006857if test "$posix_fallocate" = "yes" ; then
6858 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6859fi
Peter Maydellc727f472011-01-06 11:05:10 +00006860if test "$sync_file_range" = "yes" ; then
6861 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6862fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006863if test "$fiemap" = "yes" ; then
6864 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6865fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006866if test "$dup3" = "yes" ; then
6867 echo "CONFIG_DUP3=y" >> $config_host_mak
6868fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006869if test "$ppoll" = "yes" ; then
6870 echo "CONFIG_PPOLL=y" >> $config_host_mak
6871fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006872if test "$prctl_pr_set_timerslack" = "yes" ; then
6873 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6874fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006875if test "$epoll" = "yes" ; then
6876 echo "CONFIG_EPOLL=y" >> $config_host_mak
6877fi
6878if test "$epoll_create1" = "yes" ; then
6879 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6880fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006881if test "$sendfile" = "yes" ; then
6882 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6883fi
Riku Voipio51834342014-06-22 11:25:42 +01006884if test "$timerfd" = "yes" ; then
6885 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6886fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006887if test "$setns" = "yes" ; then
6888 echo "CONFIG_SETNS=y" >> $config_host_mak
6889fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006890if test "$clock_adjtime" = "yes" ; then
6891 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6892fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006893if test "$syncfs" = "yes" ; then
6894 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6895fi
aurel323b3f24a2009-04-15 16:12:13 +00006896if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006897 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006898fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006899if test "$inotify1" = "yes" ; then
6900 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6901fi
Peter Maydell401bc052017-09-05 13:19:32 +01006902if test "$sem_timedwait" = "yes" ; then
6903 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6904fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006905if test "$strchrnul" = "yes" ; then
6906 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6907fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006908if test "$byteswap_h" = "yes" ; then
6909 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6910fi
6911if test "$bswap_h" = "yes" ; then
6912 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6913fi
Alexander Graf769ce762009-05-11 17:41:42 +02006914if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006915 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006916 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006917 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006918fi
aurel322e4d9fb2008-04-08 06:01:02 +00006919if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006920 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006921 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006922fi
balrogfb599c92008-09-28 23:49:55 +00006923if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006924 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006925 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006926fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006927if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006928 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006929 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006930 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006931 if test "$gtk_gl" = "yes" ; then
6932 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6933 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006934fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01006935if test "$gio" = "yes" ; then
6936 echo "CONFIG_GIO=y" >> $config_host_mak
6937 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6938 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6939fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006940echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006941if test "$gnutls" = "yes" ; then
6942 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6943fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006944if test "$gcrypt" = "yes" ; then
6945 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006946 if test "$gcrypt_hmac" = "yes" ; then
6947 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6948 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006949fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006950if test "$nettle" = "yes" ; then
6951 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006952 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006953fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006954if test "$qemu_private_xts" = "yes" ; then
6955 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6956fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006957if test "$tasn1" = "yes" ; then
6958 echo "CONFIG_TASN1=y" >> $config_host_mak
6959fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006960if test "$auth_pam" = "yes" ; then
6961 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6962fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006963if test "$have_ifaddrs_h" = "yes" ; then
6964 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6965fi
Eric Blake6b39b062016-10-11 10:46:23 -05006966if test "$have_broken_size_max" = "yes" ; then
6967 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6968fi
Jan Vesely277abf12016-04-29 13:15:23 -04006969
6970# Work around a system header bug with some kernel/XFS header
6971# versions where they both try to define 'struct fsxattr':
6972# xfs headers will not try to redefine structs from linux headers
6973# if this macro is set.
6974if test "$have_fsxattr" = "yes" ; then
6975 echo "HAVE_FSXATTR=y" >> $config_host_mak
6976fi
Fam Zheng1efad062018-06-01 17:26:43 +08006977if test "$have_copy_file_range" = "yes" ; then
6978 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6979fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006980if test "$vte" = "yes" ; then
6981 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006982 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006983 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006984fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006985if test "$virglrenderer" = "yes" ; then
6986 echo "CONFIG_VIRGL=y" >> $config_host_mak
6987 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6988 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6989fi
aliguorie37630c2009-04-22 15:19:10 +00006990if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006991 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006992 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006993fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006994if test "$linux_aio" = "yes" ; then
6995 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6996fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006997if test "$attr" = "yes" ; then
6998 echo "CONFIG_ATTR=y" >> $config_host_mak
6999fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02007000if test "$libattr" = "yes" ; then
7001 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7002fi
Meador Inge983eef52012-02-24 14:00:42 +05307003if test "$virtfs" = "yes" ; then
7004 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07007005fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007006if test "$mpath" = "yes" ; then
7007 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03007008 if test "$mpathpersist_new_api" = "yes"; then
7009 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7010 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02007011fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00007012if test "$vhost_scsi" = "yes" ; then
7013 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7014fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01007015if test "$vhost_net" = "yes" ; then
7016 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7017fi
7018if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01007019 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03007020fi
Gonglei042cea22018-03-01 21:46:28 +08007021if test "$vhost_crypto" = "yes" ; then
7022 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7023fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01007024if test "$vhost_vsock" = "yes" ; then
7025 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7026fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01007027if test "$vhost_kernel" = "yes" ; then
7028 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7029fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007030if test "$vhost_user" = "yes" ; then
7031 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7032fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01007033if test "$vhost_user_fs" = "yes" ; then
7034 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7035fi
ths77755342008-11-27 15:45:16 +00007036if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02007037 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00007038fi
aliguoribf9298b2008-12-05 20:05:26 +00007039if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007040 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00007041fi
aliguoriceb42de2009-04-07 18:43:28 +00007042if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007043 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00007044fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007045if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02007046 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00007047fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01007048if test "$membarrier" = "yes" ; then
7049 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7050fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03007051if test "$signalfd" = "yes" ; then
7052 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7053fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00007054if test "$optreset" = "yes" ; then
7055 echo "HAVE_OPTRESET=y" >> $config_host_mak
7056fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02007057if test "$tcg" = "yes"; then
7058 echo "CONFIG_TCG=y" >> $config_host_mak
7059 if test "$tcg_interpreter" = "yes" ; then
7060 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7061 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02007062fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00007063if test "$fdatasync" = "yes" ; then
7064 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7065fi
Andreas Färbere78815a2010-09-25 11:26:05 +00007066if test "$madvise" = "yes" ; then
7067 echo "CONFIG_MADVISE=y" >> $config_host_mak
7068fi
7069if test "$posix_madvise" = "yes" ; then
7070 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7071fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02007072if test "$posix_memalign" = "yes" ; then
7073 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7074fi
bellard97a847b2003-08-10 21:36:04 +00007075
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01007076if test "$spice" = "yes" ; then
7077 echo "CONFIG_SPICE=y" >> $config_host_mak
7078fi
7079
Marc-André Lureau7b02f542015-08-30 11:48:40 +02007080if test "$smartcard" = "yes" ; then
7081 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08007082 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7083 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02007084fi
7085
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007086if test "$libusb" = "yes" ; then
7087 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08007088 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7089 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01007090fi
7091
Hans de Goede69354a82011-07-19 11:04:10 +02007092if test "$usb_redir" = "yes" ; then
7093 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08007094 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7095 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02007096fi
7097
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01007098if test "$opengl" = "yes" ; then
7099 echo "CONFIG_OPENGL=y" >> $config_host_mak
7100 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01007101 if test "$opengl_dmabuf" = "yes" ; then
7102 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7103 fi
Michael Walle20ff0752011-03-07 23:32:39 +01007104fi
7105
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007106if test "$gbm" = "yes" ; then
7107 echo "CONFIG_GBM=y" >> $config_host_mak
7108 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7109 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7110fi
7111
7112
Yang Zhong5a22ab72017-12-20 21:16:46 +08007113if test "$malloc_trim" = "yes" ; then
7114 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7115fi
7116
Liang Li99f2dbd2016-03-08 13:53:16 +08007117if test "$avx2_opt" = "yes" ; then
7118 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7119fi
7120
qiaonuohan607dacd2014-02-18 14:11:30 +08007121if test "$lzo" = "yes" ; then
7122 echo "CONFIG_LZO=y" >> $config_host_mak
7123fi
7124
7125if test "$snappy" = "yes" ; then
7126 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7127fi
7128
Peter Wu6b383c02015-01-06 18:48:14 +01007129if test "$bzip2" = "yes" ; then
7130 echo "CONFIG_BZIP2=y" >> $config_host_mak
7131 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7132fi
7133
Julio Faracco83bc1f92018-11-05 13:08:04 -02007134if test "$lzfse" = "yes" ; then
7135 echo "CONFIG_LZFSE=y" >> $config_host_mak
7136 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7137fi
7138
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007139if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007140 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007141 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7142 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007143fi
7144
Peter Lieven6542aa92014-02-03 10:26:13 +01007145if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007146 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7147 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007148fi
7149
Eduardo Otubof7945732012-08-14 18:44:05 -03007150if test "$seccomp" = "yes"; then
7151 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007152 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7153 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007154fi
7155
bellard83fb7ad2004-07-05 21:25:26 +00007156# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007157if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007158 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007159fi
7160
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007161if test "$localtime_r" = "yes" ; then
7162 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7163fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007164if test "$qom_cast_debug" = "yes" ; then
7165 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7166fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007167if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007168 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007169 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7170 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007171fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007172
Peter Maydell7c2acc72013-04-08 12:11:27 +01007173echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007174if test "$coroutine_pool" = "yes" ; then
7175 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7176else
7177 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7178fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307179
Peter Lieven7d992e42016-09-27 11:58:45 +02007180if test "$debug_stack_usage" = "yes" ; then
7181 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7182fi
7183
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007184if test "$crypto_afalg" = "yes" ; then
7185 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7186fi
7187
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307188if test "$open_by_handle_at" = "yes" ; then
7189 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7190fi
7191
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307192if test "$linux_magic_h" = "yes" ; then
7193 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7194fi
7195
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007196if test "$pragma_diagnostic_available" = "yes" ; then
7197 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007198fi
7199
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007200if test "$valgrind_h" = "yes" ; then
7201 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7202fi
7203
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007204if test "$have_asan_iface_fiber" = "yes" ; then
7205 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7206fi
7207
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007208if test "$has_environ" = "yes" ; then
7209 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7210fi
7211
Richard Henderson76a347e2012-12-28 14:17:02 -08007212if test "$cpuid_h" = "yes" ; then
7213 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7214fi
7215
Richard Hendersonf5401662013-02-16 12:46:59 -08007216if test "$int128" = "yes" ; then
7217 echo "CONFIG_INT128=y" >> $config_host_mak
7218fi
7219
Richard Henderson7ebee432016-06-29 21:10:59 -07007220if test "$atomic128" = "yes" ; then
7221 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7222fi
7223
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007224if test "$cmpxchg128" = "yes" ; then
7225 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7226fi
7227
Richard Hendersondf79b992016-09-02 12:23:57 -07007228if test "$atomic64" = "yes" ; then
7229 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7230fi
7231
Richard Hendersondb432672017-09-15 14:11:45 -07007232if test "$vector16" = "yes" ; then
7233 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7234fi
7235
Richard Hendersondb8aaae2019-10-13 16:12:19 -07007236if test "$attralias" = "yes" ; then
7237 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7238fi
7239
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007240if test "$getauxval" = "yes" ; then
7241 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7242fi
7243
Bharata B Raoeb100392012-09-24 14:42:45 +05307244if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007245 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007246 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7247 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307248fi
7249
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007250if test "$glusterfs_xlator_opt" = "yes" ; then
7251 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7252fi
7253
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307254if test "$glusterfs_discard" = "yes" ; then
7255 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7256fi
7257
Niels de Vosdf3a4292017-05-28 12:01:14 +05307258if test "$glusterfs_fallocate" = "yes" ; then
7259 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7260fi
7261
Bharata B Rao7c815372013-12-21 14:51:25 +05307262if test "$glusterfs_zerofill" = "yes" ; then
7263 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7264fi
7265
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007266if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7267 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7268fi
7269
Niels de Vos0e3b8912019-03-05 16:46:34 +01007270if test "$glusterfs_iocb_has_stat" = "yes" ; then
7271 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7272fi
7273
Pino Toscanob10d49d2019-06-20 22:08:40 +02007274if test "$libssh" = "yes" ; then
7275 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7276 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7277 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007278fi
7279
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007280if test "$live_block_migration" = "yes" ; then
7281 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7282fi
7283
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007284if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007285 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007286fi
7287
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007288echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7289if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007290 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307291fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007292if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007293 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7294 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007295 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007296fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007297if have_backend "log"; then
7298 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02007299fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007300if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007301 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7302fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007303if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007304 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7305 if test "$trace_backend_stap" = "yes" ; then
7306 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7307 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007308fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007309if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007310 if test "$linux" = "yes" ; then
7311 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007312 else
Stewart Smith21684af2014-01-24 12:39:10 +11007313 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007314 fi
7315fi
Paul Durrant0a852412016-08-04 14:44:14 +01007316if have_backend "syslog"; then
7317 if test "$posix_syslog" = "yes" ; then
7318 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7319 else
7320 feature_not_found "syslog(trace backend)" "syslog not available"
7321 fi
7322fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007323echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7324
Michael R. Hines2da776d2013-07-22 10:01:54 -04007325if test "$rdma" = "yes" ; then
7326 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007327 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007328fi
7329
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007330if test "$pvrdma" = "yes" ; then
7331 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7332fi
7333
Laurent Vivier575b22b2016-06-02 22:14:15 +02007334if test "$have_rtnetlink" = "yes" ; then
7335 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7336fi
7337
Klim Kireeved279a02018-01-12 12:01:19 +03007338if test "$libxml2" = "yes" ; then
7339 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7340 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7341 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7342fi
7343
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007344if test "$replication" = "yes" ; then
7345 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7346fi
7347
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007348if test "$have_af_vsock" = "yes" ; then
7349 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7350fi
7351
Christopher Covington4d043512016-12-28 15:04:33 -05007352if test "$have_sysmacros" = "yes" ; then
7353 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7354fi
7355
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007356if test "$have_static_assert" = "yes" ; then
7357 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7358fi
7359
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007360if test "$have_utmpx" = "yes" ; then
7361 echo "HAVE_UTMPX=y" >> $config_host_mak
7362fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007363if test "$have_getrandom" = "yes" ; then
7364 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7365fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007366if test "$ivshmem" = "yes" ; then
7367 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7368fi
Richard Hendersone219c492017-09-28 09:01:23 -07007369if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007370 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7371fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007372if test "$debug_mutex" = "yes" ; then
7373 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7374fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007375
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007376# Hold two types of flag:
7377# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7378# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007379# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007380# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007381if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007382 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007383 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7384elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7385 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7386 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007387fi
7388
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007389if test "$vxhs" = "yes" ; then
7390 echo "CONFIG_VXHS=y" >> $config_host_mak
7391 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7392fi
7393
Junyan He17824402018-07-18 15:47:59 +08007394if test "$libpmem" = "yes" ; then
7395 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7396fi
7397
Jeff Cody2f740132018-11-07 07:36:44 +01007398if test "$bochs" = "yes" ; then
7399 echo "CONFIG_BOCHS=y" >> $config_host_mak
7400fi
7401if test "$cloop" = "yes" ; then
7402 echo "CONFIG_CLOOP=y" >> $config_host_mak
7403fi
7404if test "$dmg" = "yes" ; then
7405 echo "CONFIG_DMG=y" >> $config_host_mak
7406fi
7407if test "$qcow1" = "yes" ; then
7408 echo "CONFIG_QCOW1=y" >> $config_host_mak
7409fi
7410if test "$vdi" = "yes" ; then
7411 echo "CONFIG_VDI=y" >> $config_host_mak
7412fi
7413if test "$vvfat" = "yes" ; then
7414 echo "CONFIG_VVFAT=y" >> $config_host_mak
7415fi
7416if test "$qed" = "yes" ; then
7417 echo "CONFIG_QED=y" >> $config_host_mak
7418fi
7419if test "$parallels" = "yes" ; then
7420 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7421fi
7422if test "$sheepdog" = "yes" ; then
7423 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7424fi
7425
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007426if test "$plugins" = "yes" ; then
7427 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7428 LIBS="-ldl $LIBS"
Emilio G. Cota26fffe22018-10-21 13:56:29 -04007429 # Copy the export object list to the build dir
7430 if test "$ld_dynamic_list" = "yes" ; then
7431 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7432 ld_symbols=qemu-plugins-ld.symbols
7433 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7434 elif test "$ld_exported_symbols_list" = "yes" ; then
7435 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7436 ld64_symbols=qemu-plugins-ld64.symbols
7437 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7438 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7439 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7440 else
7441 error_exit \
7442 "If \$plugins=yes, either \$ld_dynamic_list or " \
7443 "\$ld_exported_symbols_list should have been set to 'yes'."
7444 fi
Alex Bennée40e8c6f2019-06-13 14:52:25 +01007445fi
7446
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007447if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007448 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007449elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007450 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007451elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007452 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007453elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007454 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007455elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007456 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007457elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007458 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007459else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007460 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007461fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007462QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007463
Juan Quintela98ec69a2009-07-16 18:34:18 +02007464echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007465echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007466echo "MAKE=$make" >> $config_host_mak
7467echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007468echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7469echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007470echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7471echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007472echo "PYTHON=$python" >> $config_host_mak
Cleber Rosa406ab2f2019-08-26 11:58:32 -04007473echo "PYTHON2=$python2" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007474echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007475if $iasl -h > /dev/null 2>&1; then
7476 echo "IASL=$iasl" >> $config_host_mak
7477fi
Juan Quintela804edf22009-07-27 16:12:49 +02007478echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007479echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007480echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007481echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007482echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007483echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007484echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007485echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007486echo "OBJCOPY=$objcopy" >> $config_host_mak
7487echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007488echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007489echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007490echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007491echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007492echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007493echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007494echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007495echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007496echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007497if test "$sparse" = "yes" ; then
7498 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007499 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007500 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007501 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7502 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7503fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007504echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007505echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007506echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007507echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007508echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007509echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007510echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007511echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007512echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007513echo "DSOSUF=$DSOSUF" >> $config_host_mak
7514echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007515echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007516echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7517echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007518echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007519if test "$gcov" = "yes" ; then
7520 echo "CONFIG_GCOV=y" >> $config_host_mak
7521 echo "GCOV=$gcov_tool" >> $config_host_mak
7522fi
Juan Quintela804edf22009-07-27 16:12:49 +02007523
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007524if test "$libudev" != "no"; then
7525 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7526 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7527fi
7528
Peter Maydell6efd7512011-11-30 11:59:04 +00007529# use included Linux headers
7530if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007531 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007532 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007533 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007534 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007535 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007536 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007537 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007538 ;;
7539 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007540 linux_arch=s390
7541 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007542 aarch64)
7543 linux_arch=arm64
7544 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007545 mips64)
7546 linux_arch=mips
7547 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007548 *)
7549 # For most CPUs the kernel architecture name and QEMU CPU name match.
7550 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007551 ;;
7552 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007553 # For non-KVM architectures we will not have asm headers
7554 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7555 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7556 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007557fi
7558
bellard1d14ffa2005-10-30 18:58:22 +00007559for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007560target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007561config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007562target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007563target_aligned_only="no"
7564case "$target_name" in
7565 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7566 target_aligned_only="yes"
7567 ;;
7568esac
bellard97a847b2003-08-10 21:36:04 +00007569target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007570case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007571 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 +00007572 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007573 ;;
7574esac
bellard97a847b2003-08-10 21:36:04 +00007575target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007576target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007577target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007578target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007579case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007580 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007581 target_softmmu="yes"
7582 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007583 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007584 target_user_only="yes"
7585 target_linux_user="yes"
7586 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007587 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007588 target_user_only="yes"
7589 target_bsd_user="yes"
7590 ;;
pbrook9e407a82007-05-26 16:38:53 +00007591 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007592 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007593 exit 1
7594 ;;
7595esac
ths831b7822007-01-18 20:06:33 +00007596
bellard97a847b2003-08-10 21:36:04 +00007597mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007598echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007599
pbrooke5fe0c52006-06-11 13:32:59 +00007600bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007601mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007602interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007603gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007604
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007605TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007606TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007607TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007608
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007609case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007610 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007611 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307612 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007613 ;;
7614 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007615 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007616 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307617 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007618 ;;
7619 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007620 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00007621 ;;
7622 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007623 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007624 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007625 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007626 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007627 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007628 aarch64|aarch64_be)
7629 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007630 TARGET_BASE_ARCH=arm
7631 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007632 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007633 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 +01007634 ;;
aurel322408a522008-04-20 20:19:44 +00007635 cris)
aurel322408a522008-04-20 20:19:44 +00007636 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007637 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007638 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08007639 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007640 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007641 ;;
aurel322408a522008-04-20 20:19:44 +00007642 m68k)
aurel322408a522008-04-20 20:19:44 +00007643 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007644 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00007645 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007646 microblaze|microblazeel)
7647 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007648 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007649 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007650 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007651 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007652 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007653 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007654 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007655 ;;
7656 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007657 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007658 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007659 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007660 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007661 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007662 ;;
7663 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007664 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007665 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007666 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007667 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007668 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007669 moxie)
7670 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007671 nios2)
7672 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007673 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007674 TARGET_ARCH=openrisc
7675 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007676 ;;
aurel322408a522008-04-20 20:19:44 +00007677 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007678 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007679 ;;
aurel322408a522008-04-20 20:19:44 +00007680 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007681 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007682 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307683 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007684 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007685 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007686 ppc64le)
7687 TARGET_ARCH=ppc64
7688 TARGET_BASE_ARCH=ppc
7689 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307690 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007691 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 -05007692 ;;
aurel322408a522008-04-20 20:19:44 +00007693 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007694 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007695 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007696 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007697 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007698 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007699 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007700 riscv32)
7701 TARGET_BASE_ARCH=riscv
7702 TARGET_ABI_DIR=riscv
7703 mttcg=yes
Jonathan Behrensab9056f2019-10-14 11:45:28 -04007704 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 +13007705 ;;
7706 riscv64)
7707 TARGET_BASE_ARCH=riscv
7708 TARGET_ABI_DIR=riscv
7709 mttcg=yes
Jonathan Behrensab9056f2019-10-14 11:45:28 -04007710 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 +13007711 ;;
aurel322408a522008-04-20 20:19:44 +00007712 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007713 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007714 bflt="yes"
7715 ;;
7716 sparc)
aurel322408a522008-04-20 20:19:44 +00007717 ;;
7718 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007719 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007720 ;;
7721 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007722 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007723 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007724 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02007725 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007726 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007727 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007728 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007729 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 +01007730 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007731 tilegx)
7732 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007733 tricore)
7734 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007735 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007736 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007737 xtensa|xtensaeb)
7738 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007739 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007740 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007741 ;;
aurel322408a522008-04-20 20:19:44 +00007742 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007743 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007744 ;;
7745esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007746# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7747if [ "$TARGET_BASE_ARCH" = "" ]; then
7748 TARGET_BASE_ARCH=$TARGET_ARCH
7749fi
7750
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007751symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7752
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007753upper() {
7754 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7755}
7756
Stefan Weil89138852016-05-16 15:10:20 +02007757target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007758echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007759echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007760echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007761if [ "$TARGET_ABI_DIR" = "" ]; then
7762 TARGET_ABI_DIR=$TARGET_ARCH
7763fi
Juan Quintela25be2102009-10-07 02:41:00 +02007764echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007765if [ "$HOST_VARIANT_DIR" != "" ]; then
7766 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7767fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007768
7769if supported_xen_target $target; then
7770 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007771 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007772 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007773 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007774 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007775else
7776 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007777fi
7778if supported_kvm_target $target; then
7779 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007780 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7781else
7782 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007783fi
7784if supported_hax_target $target; then
7785 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007786fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007787if supported_hvf_target $target; then
7788 echo "CONFIG_HVF=y" >> $config_target_mak
7789fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007790if supported_whpx_target $target; then
7791 echo "CONFIG_WHPX=y" >> $config_target_mak
7792fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007793if test "$target_aligned_only" = "yes" ; then
7794 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7795fi
bellardde83cd02003-06-15 20:25:43 +00007796if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007797 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007798fi
7799if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007800 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007801 if test "$mttcg" = "yes" ; then
7802 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7803 fi
bellardde83cd02003-06-15 20:25:43 +00007804fi
bellard997344f2003-10-27 21:10:39 +00007805if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007806 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007807 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007808fi
ths831b7822007-01-18 20:06:33 +00007809if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007810 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007811fi
pbrook56aebc82008-10-11 17:55:29 +00007812list=""
7813if test ! -z "$gdb_xml_files" ; then
7814 for x in $gdb_xml_files; do
7815 list="$list $source_path/gdb-xml/$x"
7816 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007817 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007818fi
bellardde83cd02003-06-15 20:25:43 +00007819
Eric Blakee633a5c2019-02-04 20:39:37 -06007820if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007821 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007822fi
blueswir184778502008-10-26 20:33:16 +00007823if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007824 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007825fi
bellard5b0753e2005-03-01 21:37:28 +00007826
Alex Bennée716a5072018-04-10 12:19:40 +01007827
Juan Quintela4afddb52009-08-03 14:46:45 +02007828# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007829
Juan Quintela4afddb52009-08-03 14:46:45 +02007830cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007831ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007832
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007833disas_config() {
7834 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7835 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7836}
7837
Juan Quintela64656022009-08-03 14:46:53 +02007838for i in $ARCH $TARGET_BASE_ARCH ; do
7839 case "$i" in
7840 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007841 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007842 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007843 aarch64)
7844 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007845 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007846 fi
7847 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007848 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007849 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007850 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007851 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007852 fi
Juan Quintela64656022009-08-03 14:46:53 +02007853 ;;
7854 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007855 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007856 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007857 hppa)
7858 disas_config "HPPA"
7859 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007860 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007861 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007862 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007863 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007864 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007865 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007866 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007867 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007868 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007869 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007870 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007871 ;;
7872 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007873 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007874 if test -n "${cxx}"; then
7875 disas_config "NANOMIPS"
7876 fi
Juan Quintela64656022009-08-03 14:46:53 +02007877 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007878 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007879 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007880 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007881 nios2)
7882 disas_config "NIOS2"
7883 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007884 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007885 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007886 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007887 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007888 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007889 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007890 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007891 disas_config "RISCV"
7892 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007893 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007894 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007895 ;;
7896 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007897 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007898 ;;
7899 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007900 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007901 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007902 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007903 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007904 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007905 esac
7906done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007907if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007908 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007909fi
Juan Quintela64656022009-08-03 14:46:53 +02007910
Juan Quintela6ee71262009-08-03 14:46:47 +02007911case "$ARCH" in
7912alpha)
7913 # Ensure there's only a single GP
7914 cflags="-msmall-data $cflags"
7915;;
7916esac
7917
Juan Quintelad02c1db2009-08-03 14:46:50 +02007918if test "$gprof" = "yes" ; then
Philippe Mathieu-Daudé0acf7de2019-01-03 16:09:50 +01007919 echo "TARGET_GPROF=y" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007920 if test "$target_linux_user" = "yes" ; then
7921 cflags="-p $cflags"
7922 ldflags="-p $ldflags"
7923 fi
7924 if test "$target_softmmu" = "yes" ; then
7925 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007926 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007927 fi
7928fi
7929
Eric Blakee633a5c2019-02-04 20:39:37 -06007930if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007931 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007932fi
Juan Quintelafa282482009-07-22 22:37:39 +02007933
Christian Borntraegere9a35912017-08-23 12:16:23 +02007934# Newer kernels on s390 check for an S390_PGSTE program header and
7935# enable the pgste page table extensions in that case. This makes
7936# the vm.allocate_pgste sysctl unnecessary. We enable this program
7937# header if
7938# - we build on s390x
7939# - we build the system emulation for s390x (qemu-system-s390x)
7940# - KVM is enabled
7941# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06007942if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7943 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02007944 if ld_has --s390-pgste ; then
7945 ldflags="-Wl,--s390-pgste $ldflags"
7946 fi
7947fi
7948
Juan Quintela25be2102009-10-07 02:41:00 +02007949echo "LDFLAGS+=$ldflags" >> $config_target_mak
7950echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007951
bellard97a847b2003-08-10 21:36:04 +00007952done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007953
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007954echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7955echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7956
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007957if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02007958 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007959fi
Richard Hendersone219c492017-09-28 09:01:23 -07007960if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02007961 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07007962fi
7963if test -n "$LIBCAPSTONE"; then
7964 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7965fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007966
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007967if test "$numa" = "yes"; then
7968 echo "CONFIG_NUMA=y" >> $config_host_mak
7969fi
7970
John Snowfd0e6052015-03-25 18:57:39 -04007971if test "$ccache_cpp2" = "yes"; then
7972 echo "export CCACHE_CPP2=y" >> $config_host_mak
7973fi
7974
Peter Maydelle29e5c62018-11-02 11:52:38 +00007975# If we're using a separate build tree, set it up now.
7976# DIRS are directories which we simply mkdir in the build tree;
7977# LINKS are things to symlink back into the source tree
7978# (these can be both files and directories).
7979# Caution: do not add files or directories here using wildcards. This
7980# will result in problems later if a new file matching the wildcard is
7981# added to the source tree -- nothing will cause configure to be rerun
7982# so the build tree will be missing the link back to the new file, and
7983# tests might fail. Prefer to keep the relevant files in their own
7984# directory and symlink the directory instead.
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02007985DIRS="tests tests/tcg tests/tcg/lm32 tests/libqos tests/qapi-schema tests/qemu-iotests tests/vm"
Emanuele Giuseppe Espositofc281c82018-06-13 17:07:21 +02007986DIRS="$DIRS tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007987DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10007988DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007989DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02007990LINKS="Makefile"
7991LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
7992LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Emilio G. Cota671f7602018-10-25 12:57:04 -04007993LINKS="$LINKS tests/plugin/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007994LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007995LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7996LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7997LINKS="$LINKS pc-bios/qemu-icon.bmp"
7998LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007999LINKS="$LINKS tests/acceptance tests/data"
8000LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05008001LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07008002for bios_file in \
8003 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11008004 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07008005 $source_path/pc-bios/*.rom \
8006 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00008007 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07008008 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01008009 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01008010 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07008011 $source_path/pc-bios/palcode-*
8012do
Peter Maydelle29e5c62018-11-02 11:52:38 +00008013 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008014done
8015mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00008016for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03008017 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01008018 symlink "$source_path/$f" "$f"
8019 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01008020done
Paul Brook1ad21342009-05-19 16:17:58 +01008021
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02008022(for i in $cross_cc_vars; do
8023 export $i
8024done
8025export target_list source_path
8026$source_path/tests/tcg/configure.sh)
8027
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008028# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06008029for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008030 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01008031 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008032 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07008033 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07008034 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008035 echo "CC=$cc" >> $config_mak
8036 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00008037 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008038 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03008039 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008040 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08008041 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05008042done
8043
Max Reitz76c75602014-05-24 23:24:56 +02008044# set up qemu-iotests in this build directory
8045iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02008046
8047echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8048echo >> "$iotests_common_env"
8049echo "export PYTHON='$python'" >> "$iotests_common_env"
8050
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008051# Save the configure command line for later reuse.
8052cat <<EOD >config.status
8053#!/bin/sh
8054# Generated by configure.
8055# Run this file to recreate the current configuration.
8056# Compiler output produced by configure, useful for debugging
8057# configure, is in config.log if it exists.
8058EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008059
8060preserve_env() {
8061 envname=$1
8062
8063 eval envval=\$$envname
8064
8065 if test -n "$envval"
8066 then
8067 echo "$envname='$envval'" >> config.status
8068 echo "export $envname" >> config.status
8069 else
8070 echo "unset $envname" >> config.status
8071 fi
8072}
8073
8074# Preserve various env variables that influence what
8075# features/build target configure will detect
8076preserve_env AR
8077preserve_env AS
8078preserve_env CC
8079preserve_env CPP
8080preserve_env CXX
8081preserve_env INSTALL
8082preserve_env LD
8083preserve_env LD_LIBRARY_PATH
8084preserve_env LIBTOOL
8085preserve_env MAKE
8086preserve_env NM
8087preserve_env OBJCOPY
8088preserve_env PATH
8089preserve_env PKG_CONFIG
8090preserve_env PKG_CONFIG_LIBDIR
8091preserve_env PKG_CONFIG_PATH
8092preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01008093preserve_env SDL2_CONFIG
8094preserve_env SMBD
8095preserve_env STRIP
8096preserve_env WINDRES
8097
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008098printf "exec" >>config.status
8099printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008100echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008101chmod +x config.status
8102
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008103rm -r "$TMPDIR1"