blob: d1e9e457ce2da7e17192ea75d4f5d7f30d5df0de [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"
bellard7d132992003-03-06 23:23:54 +000033
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020034rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000035
Peter Maydellb48e3612011-11-23 17:26:44 +000036# Print a helpful header at the top of config.log
37echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000038printf "# Configured with:" >> config.log
39printf " '%s'" "$0" "$@" >> config.log
40echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000041echo "#" >> config.log
42
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020043print_error() {
44 (echo
Peter Maydell76ad07a2013-04-08 12:11:26 +010045 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020050 echo) >&2
51}
52
53error_exit() {
54 print_error "$@"
Peter Maydell76ad07a2013-04-08 12:11:26 +010055 exit 1
56}
57
Peter Maydell9c83ffd2014-02-25 18:27:49 +000058do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
Ian Jackson8bbe05d2017-09-25 16:41:03 +010063 if test -n "$BASH_VERSION"; then eval '
64 echo >>config.log "
65funcs: ${FUNCNAME[*]}
66lines: ${BASH_LINENO[*]}"
67 '; fi
Peter Maydell9c83ffd2014-02-25 18:27:49 +000068 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010070 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
75 return 0
76 fi
77 # Don't bother rerunning the compile if we were already using -Werror
78 case "$*" in
79 *-Werror*)
80 return 0
81 ;;
82 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000083 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010085 error_exit "configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010089}
90
Peter Maydell9c83ffd2014-02-25 18:27:49 +000091do_cc() {
92 do_compiler "$cc" "$@"
93}
94
95do_cxx() {
96 do_compiler "$cxx" "$@"
97}
98
99update_cxxflags() {
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
104
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000105 for arg in $QEMU_CFLAGS; do
106 case $arg in
107 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
109 ;;
Thomas Huth7be41672019-01-07 11:25:22 +0100110 -std=gnu99)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
112 ;;
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000113 *)
114 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
115 ;;
116 esac
117 done
118}
119
Juan Quintela52166aa2009-08-03 14:46:03 +0200120compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400121 local_cflags="$1"
122 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200123}
124
125compile_prog() {
126 local_cflags="$1"
127 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100128 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200129}
130
Paolo Bonzini11568d62010-12-23 11:43:58 +0100131# symbolically link $1 to $2. Portable version of "ln -sf".
132symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100133 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800134 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100135 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100136}
137
LoĂŻc Minier0dba6192010-01-28 21:26:51 +0000138# check whether a command is available to this shell (may be either an
139# executable or a builtin)
140has() {
141 type "$1" >/dev/null 2>&1
142}
143
144# search for an executable in PATH
145path_of() {
146 local_command="$1"
147 local_ifs="$IFS"
148 local_dir=""
149
150 # pathname has a dir component?
151 if [ "${local_command#*/}" != "$local_command" ]; then
152 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
153 echo "$local_command"
154 return 0
155 fi
156 fi
157 if [ -z "$local_command" ]; then
158 return 1
159 fi
160
161 IFS=:
162 for local_dir in $PATH; do
163 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
164 echo "$local_dir/$local_command"
165 IFS="${local_ifs:-$(printf ' \t\n')}"
166 return 0
167 fi
168 done
169 # not found
170 IFS="${local_ifs:-$(printf ' \t\n')}"
171 return 1
172}
173
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200174have_backend () {
175 echo "$trace_backends" | grep "$1" >/dev/null
176}
177
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200178glob() {
179 eval test -z '"${1#'"$2"'}"'
180}
181
182supported_hax_target() {
183 test "$hax" = "yes" || return 1
184 glob "$1" "*-softmmu" || return 1
185 case "${1%-softmmu}" in
186 i386|x86_64)
187 return 0
188 ;;
189 esac
190 return 1
191}
192
193supported_kvm_target() {
194 test "$kvm" = "yes" || return 1
195 glob "$1" "*-softmmu" || return 1
196 case "${1%-softmmu}:$cpu" in
197 arm:arm | aarch64:aarch64 | \
198 i386:i386 | i386:x86_64 | i386:x32 | \
199 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
200 mips:mips | mipsel:mips | \
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700201 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200202 s390x:s390x)
203 return 0
204 ;;
205 esac
206 return 1
207}
208
209supported_xen_target() {
210 test "$xen" = "yes" || return 1
211 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200212 # Only i386 and x86_64 provide the xenpv machine.
213 case "${1%-softmmu}" in
214 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200215 return 0
216 ;;
217 esac
218 return 1
219}
220
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500221supported_hvf_target() {
222 test "$hvf" = "yes" || return 1
223 glob "$1" "*-softmmu" || return 1
224 case "${1%-softmmu}" in
225 x86_64)
226 return 0
227 ;;
228 esac
229 return 1
230}
231
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800232supported_whpx_target() {
233 test "$whpx" = "yes" || return 1
234 glob "$1" "*-softmmu" || return 1
235 case "${1%-softmmu}" in
236 i386|x86_64)
237 return 0
238 ;;
239 esac
240 return 1
241}
242
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200243supported_target() {
244 case "$1" in
245 *-softmmu)
246 ;;
247 *-linux-user)
248 if test "$linux" != "yes"; then
249 print_error "Target '$target' is only available on a Linux host"
250 return 1
251 fi
252 ;;
253 *-bsd-user)
254 if test "$bsd" != "yes"; then
255 print_error "Target '$target' is only available on a BSD host"
256 return 1
257 fi
258 ;;
259 *)
260 print_error "Invalid target name '$target'"
261 return 1
262 ;;
263 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200264 test "$tcg" = "yes" && return 0
265 supported_kvm_target "$1" && return 0
266 supported_xen_target "$1" && return 0
267 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500268 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800269 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200270 print_error "TCG disabled, but hardware accelerator not available for '$target'"
271 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200272}
273
Christian Borntraegere9a35912017-08-23 12:16:23 +0200274
275ld_has() {
276 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
277}
278
Peter Maydell79d77bc2019-04-29 17:35:57 +0100279# make source path absolute
Antonio Ospite14211822019-05-26 16:47:46 +0200280source_path=$(cd "$(dirname -- "$0")"; pwd)
281
Antonio Ospite4ace32e2019-05-26 16:47:47 +0200282if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
283then
284 error_exit "main directory cannot contain spaces nor colons"
285fi
286
Antonio Ospite14211822019-05-26 16:47:46 +0200287# default parameters
Juan Quintela2ff6b912009-08-03 14:45:55 +0200288cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300289iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000290interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000291static="no"
bellard7d132992003-03-06 23:23:54 +0000292cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000293audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800294block_drv_rw_whitelist=""
295block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000296host_cc="cc"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +0100297libs_cpu=""
Juan Quintela73da3752009-08-03 14:46:26 +0200298libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200299libs_tools=""
malcd5631632009-10-10 01:13:41 +0400300audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500301libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100302debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100303stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000304
Daniel P. Berrange92712822017-09-29 11:11:58 +0100305if test -e "$source_path/.git"
306then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100307 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100308 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500309 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
310 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100311else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100312 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100313 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100314
315 if ! test -f "$source_path/ui/keycodemapdb/README"
316 then
317 echo
318 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
319 echo
320 echo "This is not a GIT checkout but module content appears to"
321 echo "be missing. Do not use 'git archive' or GitHub download links"
322 echo "to acquire QEMU source archives. Non-GIT builds are only"
323 echo "supported with source archives linked from:"
324 echo
Peter Maydella3e3b522019-07-22 14:07:39 +0100325 echo " https://www.qemu.org/download/#source"
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100326 echo
327 echo "Developers working with GIT can use scripts/archive-source.sh"
328 echo "if they need to create valid source archives."
329 echo
330 exit 1
331 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100332fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100333git="git"
aliguoriac0df512008-12-29 17:14:15 +0000334
Stefan Weilafb63eb2012-09-26 22:04:38 +0200335# Don't accept a target_list environment variable.
336unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000337unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100338
339# Default value for a variable defining feature "foo".
340# * foo="no" feature will only be used if --enable-foo arg is given
341# * foo="" feature will be searched for, and if found, will be used
342# unless --disable-foo is given
343# * foo="yes" this value will only be set by --enable-foo flag.
344# feature will searched for,
345# if not found, configure exits with error
346#
347# Always add --enable-foo and --disable-foo command line args.
348# Distributions want to ensure that several features are compiled in, and it
349# is impossible without a --enable-foo that exits if a feature is not found.
350
351bluez=""
352brlapi=""
353curl=""
354curses=""
355docs=""
356fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100357netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100358sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000359sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530360virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200361mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100362vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100363sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365vnc_sasl=""
366vnc_jpeg=""
367vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200368xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100369xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000370xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000371xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100372linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500373cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100374attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200375libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100376xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200377tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100378membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100379vhost_net=""
380vhost_crypto=""
381vhost_scsi=""
382vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200383vhost_user=""
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +0100384vhost_user_fs=""
Bradd41a75a2011-07-26 23:11:26 -0400385kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100386hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500387hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800388whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400389rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300390pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100391gprof="no"
392debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100393debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100394sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500395fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100396strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200397tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100398bigendian="no"
399mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000400gcov="no"
401gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100402EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800403DSOSUF=".so"
404LDFLAGS_SHARED="-shared"
405modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100406prefix="/usr/local"
407mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300408datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200409firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300410qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100411bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300412libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400413libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200414includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100415sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300416local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100417confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100418slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100419oss_lib=""
420bsd="no"
421linux="no"
422solaris="no"
423profiler="no"
424cocoa="no"
425softmmu="yes"
426linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100427bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100428blobs="yes"
429pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200430pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200431qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300432trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100433trace_file="trace"
434spice=""
435rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200436smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100437libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200438usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100439opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100440opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000441cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100442avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300443zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700444capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200445lzo=""
446snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100447bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200448lzfse=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400449guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400450guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500451guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300452guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400453vss_win32_sdk=""
454win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100455want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100456libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100457libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100458coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200459coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200460debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400461crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300462seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530463glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400464glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530465glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530466glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530467glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100468glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100469glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600470gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200471gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100472tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100473gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100474nettle=""
475gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800476gcrypt_hmac="no"
Daniel P. Berrangée0576942019-10-14 17:28:27 +0100477gcrypt_xts="no"
478qemu_private_xts="yes"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100479auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100480vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200481virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800482tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200483libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100484live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800485numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800486tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200487jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800488replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700489vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100490bochs="yes"
491cloop="yes"
492dmg="yes"
493qcow1="yes"
494vdi="yes"
495vvfat="yes"
496qed="yes"
497parallels="yes"
498sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300499libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200500debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800501libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800502default_devices="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100503
Peter Maydell898be3e2017-03-21 14:31:57 +0000504supported_cpu="no"
505supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100506bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800507malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000508
aliguoriac0df512008-12-29 17:14:15 +0000509# parse CC options first
510for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200511 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000512 case "$opt" in
513 --cross-prefix=*) cross_prefix="$optarg"
514 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100515 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000516 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400517 --cxx=*) CXX="$optarg"
518 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200519 --cpu=*) cpu="$optarg"
520 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100521 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200522 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100523 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100524 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100525 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100526 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200527 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100528 --enable-debug-info) debug_info="yes"
529 ;;
530 --disable-debug-info) debug_info="no"
531 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100532 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
533 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100534 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
535 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200536 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100537 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100538 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200539 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100540 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200541 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100542 ;;
aliguoriac0df512008-12-29 17:14:15 +0000543 esac
544done
aliguoriac0df512008-12-29 17:14:15 +0000545# OS specific
546# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100547# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000548
Peter Maydelle49d0212012-12-07 15:39:13 +0000549# Preferred compiler:
550# ${CC} (if set)
551# ${cross_prefix}gcc (if cross-prefix specified)
552# system compiler
553if test -z "${CC}${cross_prefix}"; then
554 cc="$host_cc"
555else
556 cc="${CC-${cross_prefix}gcc}"
557fi
558
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400559if test -z "${CXX}${cross_prefix}"; then
560 cxx="c++"
561else
562 cxx="${CXX-${cross_prefix}g++}"
563fi
564
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500565ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700566as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700567ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000568cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500569objcopy="${OBJCOPY-${cross_prefix}objcopy}"
570ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800571ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200572nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500573strip="${STRIP-${cross_prefix}strip}"
574windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300575pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
576query_pkg_config() {
577 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
578}
579pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000580sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000581
Peter Maydell45d285a2013-10-21 21:03:06 +0100582# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
583ARFLAGS="${ARFLAGS-rv}"
584
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200585# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100586# We use -fwrapv to tell the compiler that we require a C dialect where
587# left shift of signed integers is well defined and has the expected
588# 2s-complement style results. (Both clang and gcc agree that it
589# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100590QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400591QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100592QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200593QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200594QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100595if test "$debug_info" = "yes"; then
596 CFLAGS="-g $CFLAGS"
597 LDFLAGS="-g $LDFLAGS"
598fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200599
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300600# running configure in the source tree?
601# we know that's the case if configure is there.
602if test -f "./configure"; then
603 pwd_is_source_path="y"
604else
605 pwd_is_source_path="n"
606fi
607
aliguoriac0df512008-12-29 17:14:15 +0000608check_define() {
609cat > $TMPC <<EOF
610#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000611#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000612#endif
613int main(void) { return 0; }
614EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200615 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000616}
617
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200618check_include() {
619cat > $TMPC <<EOF
620#include <$1>
621int main(void) { return 0; }
622EOF
623 compile_object
624}
625
John Snow93b25862015-03-25 18:57:37 -0400626write_c_skeleton() {
627 cat > $TMPC <<EOF
628int main(void) { return 0; }
629EOF
630}
631
Peter Maydellbbea4052012-08-14 15:35:34 +0100632if check_define __linux__ ; then
633 targetos="Linux"
634elif check_define _WIN32 ; then
635 targetos='MINGW32'
636elif check_define __OpenBSD__ ; then
637 targetos='OpenBSD'
638elif check_define __sun__ ; then
639 targetos='SunOS'
640elif check_define __HAIKU__ ; then
641 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100642elif check_define __FreeBSD__ ; then
643 targetos='FreeBSD'
644elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
645 targetos='GNU/kFreeBSD'
646elif check_define __DragonFly__ ; then
647 targetos='DragonFly'
648elif check_define __NetBSD__; then
649 targetos='NetBSD'
650elif check_define __APPLE__; then
651 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100652else
Peter Maydell951fedf2017-07-13 16:15:32 +0100653 # This is a fatal error, but don't report it yet, because we
654 # might be going to just print the --help text, or it might
655 # be the result of a missing compiler.
656 targetos='bogus'
657 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100658fi
659
660# Some host OSes need non-standard checks for which CPU to use.
661# Note that these checks are broken for cross-compilation: if you're
662# cross-compiling to one of these OSes then you'll need to specify
663# the correct CPU with the --cpu option.
664case $targetos in
665Darwin)
666 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
667 # run 64-bit userspace code.
668 # If the user didn't specify a CPU explicitly and the kernel says this is
669 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
670 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
671 cpu="x86_64"
672 fi
673 ;;
674SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200675 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100676 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
677 cpu="x86_64"
678 fi
679esac
680
Juan Quintela2ff6b912009-08-03 14:45:55 +0200681if test ! -z "$cpu" ; then
682 # command line argument
683 :
684elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000685 cpu="i386"
686elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700687 if check_define __ILP32__ ; then
688 cpu="x32"
689 else
690 cpu="x86_64"
691 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000692elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000693 if check_define __arch64__ ; then
694 cpu="sparc64"
695 else
696 cpu="sparc"
697 fi
malcfdf7ed92009-01-14 18:39:52 +0000698elif check_define _ARCH_PPC ; then
699 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700700 if check_define _LITTLE_ENDIAN ; then
701 cpu="ppc64le"
702 else
703 cpu="ppc64"
704 fi
malcfdf7ed92009-01-14 18:39:52 +0000705 else
706 cpu="ppc"
707 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200708elif check_define __mips__ ; then
709 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200710elif check_define __s390__ ; then
711 if check_define __s390x__ ; then
712 cpu="s390x"
713 else
714 cpu="s390"
715 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000716elif check_define __riscv ; then
717 if check_define _LP64 ; then
718 cpu="riscv64"
719 else
720 cpu="riscv32"
721 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100722elif check_define __arm__ ; then
723 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100724elif check_define __aarch64__ ; then
725 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000726else
Stefan Weil89138852016-05-16 15:10:20 +0200727 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000728fi
729
Peter Maydell359bc952011-12-24 13:07:25 +0000730ARCH=
731# Normalise host CPU name and set ARCH.
732# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000733case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200734 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000735 supported_cpu="yes"
736 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700737 ppc64le)
738 ARCH="ppc64"
739 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700740 ;;
bellard7d132992003-03-06 23:23:54 +0000741 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000742 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000743 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000744 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000745 x86_64|amd64)
746 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000747 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000748 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100749 armv*b|armv*l|arm)
750 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000751 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000752 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100753 aarch64)
754 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000755 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100756 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200757 mips*)
758 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000759 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200760 ;;
blueswir131422552007-04-16 18:27:06 +0000761 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000762 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100763 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000764 ;;
bellard7d132992003-03-06 23:23:54 +0000765 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000766 # This will result in either an error or falling back to TCI later
767 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000768 ;;
769esac
Peter Maydell359bc952011-12-24 13:07:25 +0000770if test -z "$ARCH"; then
771 ARCH="$cpu"
772fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200773
bellard7d132992003-03-06 23:23:54 +0000774# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200775
Stacey Sonadfc3e92014-06-08 09:57:22 -0700776# host *BSD for user mode
777HOST_VARIANT_DIR=""
778
bellard7d132992003-03-06 23:23:54 +0000779case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000780MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200781 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100782 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100783 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200784 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200785 if check_include dsound.h; then
786 audio_drv_list="dsound"
787 else
788 audio_drv_list=""
789 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000790 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000791;;
ths5c40d2b2007-06-23 16:03:36 +0000792GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100793 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100794 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200795 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000796;;
bellard7d3505c2004-05-12 19:32:15 +0000797FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200798 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100799 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100800 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200801 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100802 # needed for kinfo_getvmmap(3) in libutil.h
803 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500804 # needed for kinfo_getproc
805 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100806 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700807 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000808 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000809;;
blueswir1c5e97232009-03-07 20:06:23 +0000810DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200811 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100812 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100813 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200814 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700815 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000816;;
bellard7d3505c2004-05-12 19:32:15 +0000817NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200818 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100819 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100820 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100821 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200822 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200823 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700824 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200825 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000826;;
827OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200828 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100829 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100830 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200831 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700832 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500833 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000834;;
bellard83fb7ad2004-07-05 21:25:26 +0000835Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200836 bsd="yes"
837 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100838 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500839 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800840 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200841 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200842 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200843 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200844 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200845 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100846 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200847 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200848 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200849 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100850 # Disable attempts to use ObjectiveC features in os/object.h since they
851 # won't work when we're compiling with gcc as a C compiler.
852 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700853 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000854 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000855;;
bellardec530c82006-04-25 22:36:06 +0000856SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200857 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100858 make="${MAKE-gmake}"
859 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400860 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200861 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100862 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200863 fi
864 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000865# needed for CMSG_ macros in sys/socket.h
866 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
867# needed for TIOCWIN* defines in termios.h
868 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200869 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200870 solarisnetlibs="-lsocket -lnsl -lresolv"
871 LIBS="$solarisnetlibs $LIBS"
872 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000873;;
Andreas Färber179cf402010-09-20 00:50:43 +0200874Haiku)
875 haiku="yes"
876 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
877 LIBS="-lposix_error_mapper -lnetwork $LIBS"
878;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000879Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100880 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200881 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200882 linux="yes"
883 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200884 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600885 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000886 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200887 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000888;;
bellard7d132992003-03-06 23:23:54 +0000889esac
890
bellard7d3505c2004-05-12 19:32:15 +0000891if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000892 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200893 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000894 fi
bellard7d3505c2004-05-12 19:32:15 +0000895fi
896
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100897: ${make=${MAKE-make}}
898: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000899# We prefer python 3.x. A bare 'python' is traditionally
900# python 2.x, but some distros have it as python 3.x, so
901# we check that before python2
902python=
903for binary in "${PYTHON-python3}" python python2
904do
905 if has "$binary"
906 then
907 python="$binary"
908 break
909 fi
910done
Brade2d88302011-09-02 16:53:28 -0400911: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100912
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100913# Default objcc to clang if available, otherwise use CC
914if has clang; then
915 objcc=clang
916else
917 objcc="$cc"
918fi
919
Juan Quintela3457a3f2009-08-03 14:46:07 +0200920if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200921 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800922 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100923 # MinGW needs -mthreads for TLS and macro _MT.
924 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100925 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400926 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100927 if compile_prog "" "-liberty" ; then
928 LIBS="-liberty $LIBS"
929 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200930 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200931 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300932 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300933 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200934 bindir="\${prefix}"
935 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200936 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200937 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300938 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200939fi
940
Anthony Liguori487fefd2009-06-11 13:28:25 -0500941werror=""
bellard85aa5182007-11-11 20:17:03 +0000942
bellard7d132992003-03-06 23:23:54 +0000943for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200944 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000945 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000946 --help|-h) show_help=yes
947 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400948 --version|-V) exec cat $source_path/VERSION
949 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000950 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000951 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000952 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000953 ;;
aliguoriac0df512008-12-29 17:14:15 +0000954 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000955 ;;
aliguoriac0df512008-12-29 17:14:15 +0000956 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000957 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000958 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000959 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400960 --cxx=*)
961 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200962 --iasl=*) iasl="$optarg"
963 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100964 --objcc=*) objcc="$optarg"
965 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000966 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000967 ;;
pbrook6a882642006-04-17 13:57:12 +0000968 --install=*) install="$optarg"
969 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000970 --python=*) python="$optarg"
971 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000972 --gcov=*) gcov_tool="$optarg"
973 ;;
Brade2d88302011-09-02 16:53:28 -0400974 --smbd=*) smbd="$optarg"
975 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200976 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000977 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100978 --extra-cxxflags=*)
979 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200980 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000981 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100982 --enable-debug-info)
983 ;;
984 --disable-debug-info)
985 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100986 --cross-cc-*)
987 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800988 --enable-modules)
989 modules="yes"
990 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000991 --disable-modules)
992 modules="no"
993 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200994 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000995 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000996 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +0000997 if test "$target_list_exclude"; then
998 error_exit "Can't mix --target-list with --target-list-exclude"
999 fi
1000 ;;
1001 --target-list-exclude=*) target_list_exclude="$optarg"
1002 if test "$target_list"; then
1003 error_exit "Can't mix --target-list-exclude with --target-list"
1004 fi
bellardde83cd02003-06-15 20:25:43 +00001005 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001006 --enable-trace-backends=*) trace_backends="$optarg"
1007 ;;
1008 # XXX: backwards compatibility
1009 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001010 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001011 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001012 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001013 --with-default-devices) default_devices="yes"
1014 ;;
1015 --without-default-devices) default_devices="no"
1016 ;;
bellard7d132992003-03-06 23:23:54 +00001017 --enable-gprof) gprof="yes"
1018 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001019 --enable-gcov) gcov="yes"
1020 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001021 --static)
1022 static="yes"
1023 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001024 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001025 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001026 --mandir=*) mandir="$optarg"
1027 ;;
1028 --bindir=*) bindir="$optarg"
1029 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001030 --libdir=*) libdir="$optarg"
1031 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001032 --libexecdir=*) libexecdir="$optarg"
1033 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001034 --includedir=*) includedir="$optarg"
1035 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001036 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001037 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001038 --with-confsuffix=*) confsuffix="$optarg"
1039 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001040 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001041 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001042 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001043 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001044 --localstatedir=*) local_statedir="$optarg"
1045 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001046 --firmwarepath=*) firmwarepath="$optarg"
1047 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001048 --host=*|--build=*|\
1049 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001050 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001051 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1052 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1053 # These switches are silently ignored, for compatibility with
1054 # autoconf-generated configure scripts. This allows QEMU's
1055 # configure to be used by RPM and similar macros that set
1056 # lots of directory switches by default.
1057 ;;
bellard97a847b2003-08-10 21:36:04 +00001058 --disable-sdl) sdl="no"
1059 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001060 --enable-sdl) sdl="yes"
1061 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001062 --disable-sdl-image) sdl_image="no"
1063 ;;
1064 --enable-sdl-image) sdl_image="yes"
1065 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001066 --disable-qom-cast-debug) qom_cast_debug="no"
1067 ;;
1068 --enable-qom-cast-debug) qom_cast_debug="yes"
1069 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301070 --disable-virtfs) virtfs="no"
1071 ;;
1072 --enable-virtfs) virtfs="yes"
1073 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001074 --disable-mpath) mpath="no"
1075 ;;
1076 --enable-mpath) mpath="yes"
1077 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001078 --disable-vnc) vnc="no"
1079 ;;
1080 --enable-vnc) vnc="yes"
1081 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001082 --oss-lib=*) oss_lib="$optarg"
1083 ;;
malc0c58ac12008-06-25 21:04:05 +00001084 --audio-drv-list=*) audio_drv_list="$optarg"
1085 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001086 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001087 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001088 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001089 ;;
aurel32f8393942009-04-13 18:45:38 +00001090 --enable-debug-tcg) debug_tcg="yes"
1091 ;;
1092 --disable-debug-tcg) debug_tcg="no"
1093 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001094 --enable-debug)
1095 # Enable debugging options that aren't excessively noisy
1096 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001097 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001098 debug="yes"
1099 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001100 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001101 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001102 --enable-sanitizers) sanitizers="yes"
1103 ;;
1104 --disable-sanitizers) sanitizers="no"
1105 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001106 --enable-sparse) sparse="yes"
1107 ;;
1108 --disable-sparse) sparse="no"
1109 ;;
aliguori1625af82009-04-05 17:41:02 +00001110 --disable-strip) strip_opt="no"
1111 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001112 --disable-vnc-sasl) vnc_sasl="no"
1113 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001114 --enable-vnc-sasl) vnc_sasl="yes"
1115 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001116 --disable-vnc-jpeg) vnc_jpeg="no"
1117 ;;
1118 --enable-vnc-jpeg) vnc_jpeg="yes"
1119 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001120 --disable-vnc-png) vnc_png="no"
1121 ;;
1122 --enable-vnc-png) vnc_png="yes"
1123 ;;
bellard443f1372004-06-04 11:13:20 +00001124 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001125 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001126 --enable-slirp=git) slirp="git"
1127 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001128 --enable-slirp=system) slirp="system"
1129 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001130 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001131 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001132 --enable-vde) vde="yes"
1133 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001134 --disable-netmap) netmap="no"
1135 ;;
1136 --enable-netmap) netmap="yes"
1137 ;;
aliguorie37630c2009-04-22 15:19:10 +00001138 --disable-xen) xen="no"
1139 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001140 --enable-xen) xen="yes"
1141 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001142 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1143 ;;
1144 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1145 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001146 --disable-brlapi) brlapi="no"
1147 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001148 --enable-brlapi) brlapi="yes"
1149 ;;
balrogfb599c92008-09-28 23:49:55 +00001150 --disable-bluez) bluez="no"
1151 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001152 --enable-bluez) bluez="yes"
1153 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001154 --disable-kvm) kvm="no"
1155 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001156 --enable-kvm) kvm="yes"
1157 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001158 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001159 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001160 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001161 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001162 --disable-hvf) hvf="no"
1163 ;;
1164 --enable-hvf) hvf="yes"
1165 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001166 --disable-whpx) whpx="no"
1167 ;;
1168 --enable-whpx) whpx="yes"
1169 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001170 --disable-tcg-interpreter) tcg_interpreter="no"
1171 ;;
1172 --enable-tcg-interpreter) tcg_interpreter="yes"
1173 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001174 --disable-cap-ng) cap_ng="no"
1175 ;;
1176 --enable-cap-ng) cap_ng="yes"
1177 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001178 --disable-tcg) tcg="no"
1179 ;;
1180 --enable-tcg) tcg="yes"
1181 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001182 --disable-malloc-trim) malloc_trim="no"
1183 ;;
1184 --enable-malloc-trim) malloc_trim="yes"
1185 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001186 --disable-spice) spice="no"
1187 ;;
1188 --enable-spice) spice="yes"
1189 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001190 --disable-libiscsi) libiscsi="no"
1191 ;;
1192 --enable-libiscsi) libiscsi="yes"
1193 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001194 --disable-libnfs) libnfs="no"
1195 ;;
1196 --enable-libnfs) libnfs="yes"
1197 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001198 --enable-profiler) profiler="yes"
1199 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001200 --disable-cocoa) cocoa="no"
1201 ;;
malcc2de5c92008-06-28 19:13:06 +00001202 --enable-cocoa)
1203 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001204 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001205 ;;
pbrookcad25d62006-03-19 16:31:11 +00001206 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001207 ;;
pbrookcad25d62006-03-19 16:31:11 +00001208 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001209 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001210 --disable-user)
1211 linux_user="no" ;
1212 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001213 ;;
1214 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001215 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001216 ;;
ths831b7822007-01-18 20:06:33 +00001217 --enable-linux-user) linux_user="yes"
1218 ;;
blueswir184778502008-10-26 20:33:16 +00001219 --disable-bsd-user) bsd_user="no"
1220 ;;
1221 --enable-bsd-user) bsd_user="yes"
1222 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001223 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001224 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001225 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001226 ;;
bellard85aa5182007-11-11 20:17:03 +00001227 --enable-werror) werror="yes"
1228 ;;
1229 --disable-werror) werror="no"
1230 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001231 --enable-stack-protector) stack_protector="yes"
1232 ;;
1233 --disable-stack-protector) stack_protector="no"
1234 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001235 --disable-curses) curses="no"
1236 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001237 --enable-curses) curses="yes"
1238 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001239 --disable-iconv) iconv="no"
1240 ;;
1241 --enable-iconv) iconv="yes"
1242 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001243 --disable-curl) curl="no"
1244 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001245 --enable-curl) curl="yes"
1246 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001247 --disable-fdt) fdt="no"
1248 ;;
1249 --enable-fdt) fdt="yes"
1250 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001251 --disable-linux-aio) linux_aio="no"
1252 ;;
1253 --enable-linux-aio) linux_aio="yes"
1254 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001255 --disable-attr) attr="no"
1256 ;;
1257 --enable-attr) attr="yes"
1258 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001259 --disable-membarrier) membarrier="no"
1260 ;;
1261 --enable-membarrier) membarrier="yes"
1262 ;;
ths77755342008-11-27 15:45:16 +00001263 --disable-blobs) blobs="no"
1264 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001265 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001266 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001267 --with-coroutine=*) coroutine="$optarg"
1268 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001269 --disable-coroutine-pool) coroutine_pool="no"
1270 ;;
1271 --enable-coroutine-pool) coroutine_pool="yes"
1272 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001273 --enable-debug-stack-usage) debug_stack_usage="yes"
1274 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001275 --enable-crypto-afalg) crypto_afalg="yes"
1276 ;;
1277 --disable-crypto-afalg) crypto_afalg="no"
1278 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001279 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001280 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001281 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001282 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001283 --disable-vhost-net) vhost_net="no"
1284 ;;
1285 --enable-vhost-net) vhost_net="yes"
1286 ;;
Gonglei042cea22018-03-01 21:46:28 +08001287 --disable-vhost-crypto) vhost_crypto="no"
1288 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001289 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001290 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001291 --disable-vhost-scsi) vhost_scsi="no"
1292 ;;
1293 --enable-vhost-scsi) vhost_scsi="yes"
1294 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001295 --disable-vhost-vsock) vhost_vsock="no"
1296 ;;
1297 --enable-vhost-vsock) vhost_vsock="yes"
1298 ;;
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01001299 --disable-vhost-user-fs) vhost_user_fs="no"
1300 ;;
1301 --enable-vhost-user-fs) vhost_user_fs="yes"
1302 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001303 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001304 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001305 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001306 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001307 --disable-rbd) rbd="no"
1308 ;;
1309 --enable-rbd) rbd="yes"
1310 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001311 --disable-xfsctl) xfs="no"
1312 ;;
1313 --enable-xfsctl) xfs="yes"
1314 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001315 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001316 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001317 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001318 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001319 --disable-libusb) libusb="no"
1320 ;;
1321 --enable-libusb) libusb="yes"
1322 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001323 --disable-usb-redir) usb_redir="no"
1324 ;;
1325 --enable-usb-redir) usb_redir="yes"
1326 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001327 --disable-zlib-test) zlib="no"
1328 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001329 --disable-lzo) lzo="no"
1330 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001331 --enable-lzo) lzo="yes"
1332 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001333 --disable-snappy) snappy="no"
1334 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001335 --enable-snappy) snappy="yes"
1336 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001337 --disable-bzip2) bzip2="no"
1338 ;;
1339 --enable-bzip2) bzip2="yes"
1340 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001341 --enable-lzfse) lzfse="yes"
1342 ;;
1343 --disable-lzfse) lzfse="no"
1344 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001345 --enable-guest-agent) guest_agent="yes"
1346 ;;
1347 --disable-guest-agent) guest_agent="no"
1348 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001349 --enable-guest-agent-msi) guest_agent_msi="yes"
1350 ;;
1351 --disable-guest-agent-msi) guest_agent_msi="no"
1352 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001353 --with-vss-sdk) vss_win32_sdk=""
1354 ;;
1355 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1356 ;;
1357 --without-vss-sdk) vss_win32_sdk="no"
1358 ;;
1359 --with-win-sdk) win_sdk=""
1360 ;;
1361 --with-win-sdk=*) win_sdk="$optarg"
1362 ;;
1363 --without-win-sdk) win_sdk="no"
1364 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001365 --enable-tools) want_tools="yes"
1366 ;;
1367 --disable-tools) want_tools="no"
1368 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001369 --enable-seccomp) seccomp="yes"
1370 ;;
1371 --disable-seccomp) seccomp="no"
1372 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301373 --disable-glusterfs) glusterfs="no"
1374 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001375 --disable-avx2) avx2_opt="no"
1376 ;;
1377 --enable-avx2) avx2_opt="yes"
1378 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301379 --enable-glusterfs) glusterfs="yes"
1380 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001381 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1382 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001383 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001384 --enable-vhdx|--disable-vhdx)
1385 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1386 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001387 --enable-uuid|--disable-uuid)
1388 echo "$0: $opt is obsolete, UUID support is always built" >&2
1389 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001390 --disable-gtk) gtk="no"
1391 ;;
1392 --enable-gtk) gtk="yes"
1393 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001394 --tls-priority=*) tls_priority="$optarg"
1395 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001396 --disable-gnutls) gnutls="no"
1397 ;;
1398 --enable-gnutls) gnutls="yes"
1399 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001400 --disable-nettle) nettle="no"
1401 ;;
1402 --enable-nettle) nettle="yes"
1403 ;;
1404 --disable-gcrypt) gcrypt="no"
1405 ;;
1406 --enable-gcrypt) gcrypt="yes"
1407 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001408 --disable-auth-pam) auth_pam="no"
1409 ;;
1410 --enable-auth-pam) auth_pam="yes"
1411 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001412 --enable-rdma) rdma="yes"
1413 ;;
1414 --disable-rdma) rdma="no"
1415 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001416 --enable-pvrdma) pvrdma="yes"
1417 ;;
1418 --disable-pvrdma) pvrdma="no"
1419 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001420 --disable-vte) vte="no"
1421 ;;
1422 --enable-vte) vte="yes"
1423 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001424 --disable-virglrenderer) virglrenderer="no"
1425 ;;
1426 --enable-virglrenderer) virglrenderer="yes"
1427 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001428 --disable-tpm) tpm="no"
1429 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001430 --enable-tpm) tpm="yes"
1431 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001432 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001433 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001434 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001435 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001436 --disable-live-block-migration) live_block_migration="no"
1437 ;;
1438 --enable-live-block-migration) live_block_migration="yes"
1439 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001440 --disable-numa) numa="no"
1441 ;;
1442 --enable-numa) numa="yes"
1443 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001444 --disable-libxml2) libxml2="no"
1445 ;;
1446 --enable-libxml2) libxml2="yes"
1447 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001448 --disable-tcmalloc) tcmalloc="no"
1449 ;;
1450 --enable-tcmalloc) tcmalloc="yes"
1451 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001452 --disable-jemalloc) jemalloc="no"
1453 ;;
1454 --enable-jemalloc) jemalloc="yes"
1455 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001456 --disable-replication) replication="no"
1457 ;;
1458 --enable-replication) replication="yes"
1459 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001460 --disable-vxhs) vxhs="no"
1461 ;;
1462 --enable-vxhs) vxhs="yes"
1463 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001464 --disable-bochs) bochs="no"
1465 ;;
1466 --enable-bochs) bochs="yes"
1467 ;;
1468 --disable-cloop) cloop="no"
1469 ;;
1470 --enable-cloop) cloop="yes"
1471 ;;
1472 --disable-dmg) dmg="no"
1473 ;;
1474 --enable-dmg) dmg="yes"
1475 ;;
1476 --disable-qcow1) qcow1="no"
1477 ;;
1478 --enable-qcow1) qcow1="yes"
1479 ;;
1480 --disable-vdi) vdi="no"
1481 ;;
1482 --enable-vdi) vdi="yes"
1483 ;;
1484 --disable-vvfat) vvfat="no"
1485 ;;
1486 --enable-vvfat) vvfat="yes"
1487 ;;
1488 --disable-qed) qed="no"
1489 ;;
1490 --enable-qed) qed="yes"
1491 ;;
1492 --disable-parallels) parallels="no"
1493 ;;
1494 --enable-parallels) parallels="yes"
1495 ;;
1496 --disable-sheepdog) sheepdog="no"
1497 ;;
1498 --enable-sheepdog) sheepdog="yes"
1499 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001500 --disable-vhost-user) vhost_user="no"
1501 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001502 --enable-vhost-user) vhost_user="yes"
1503 ;;
1504 --disable-vhost-kernel) vhost_kernel="no"
1505 ;;
1506 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001507 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001508 --disable-capstone) capstone="no"
1509 ;;
1510 --enable-capstone) capstone="yes"
1511 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001512 --enable-capstone=git) capstone="git"
1513 ;;
1514 --enable-capstone=system) capstone="system"
1515 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001516 --with-git=*) git="$optarg"
1517 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001518 --enable-git-update) git_update=yes
1519 ;;
1520 --disable-git-update) git_update=no
1521 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001522 --enable-debug-mutex) debug_mutex=yes
1523 ;;
1524 --disable-debug-mutex) debug_mutex=no
1525 ;;
Junyan He17824402018-07-18 15:47:59 +08001526 --enable-libpmem) libpmem=yes
1527 ;;
1528 --disable-libpmem) libpmem=no
1529 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001530 --enable-xkbcommon) xkbcommon=yes
1531 ;;
1532 --disable-xkbcommon) xkbcommon=no
1533 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001534 *)
1535 echo "ERROR: unknown option $opt"
1536 echo "Try '$0 --help' for more information"
1537 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001538 ;;
bellard7d132992003-03-06 23:23:54 +00001539 esac
1540done
1541
bellard40293e52008-01-31 11:32:10 +00001542case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001543 ppc)
1544 CPU_CFLAGS="-m32"
1545 LDFLAGS="-m32 $LDFLAGS"
1546 ;;
1547 ppc64)
1548 CPU_CFLAGS="-m64"
1549 LDFLAGS="-m64 $LDFLAGS"
1550 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001551 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001552 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1553 LDFLAGS="-m32 -mv8plus $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001554 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001555 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001556 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001557 LDFLAGS="-m64 $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001558 ;;
ths76d83bd2007-11-18 21:22:10 +00001559 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001560 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001561 LDFLAGS="-m31 $LDFLAGS"
1562 ;;
1563 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001564 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001565 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001566 ;;
bellard40293e52008-01-31 11:32:10 +00001567 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001568 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001569 LDFLAGS="-m32 $LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001570 ;;
1571 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001572 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1573 # If we truly care, we should simply detect this case at
1574 # runtime and generate the fallback to serial emulation.
1575 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001576 LDFLAGS="-m64 $LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001577 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001578 x32)
1579 CPU_CFLAGS="-mx32"
1580 LDFLAGS="-mx32 $LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001581 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001582 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001583esac
1584
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001585eval "cross_cc_${cpu}=\$host_cc"
1586cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001587QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001588
Peter Maydellaffc88c2016-06-13 11:32:24 +01001589# For user-mode emulation the host arch has to be one we explicitly
1590# support, even if we're using TCI.
1591if [ "$ARCH" = "unknown" ]; then
1592 bsd_user="no"
1593 linux_user="no"
1594fi
1595
Peter Maydell60e0df22011-05-03 14:50:13 +01001596default_target_list=""
1597
Peter Maydell6e92f822013-05-20 16:16:15 +01001598mak_wilds=""
1599
1600if [ "$softmmu" = "yes" ]; then
1601 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001602fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001603if [ "$linux_user" = "yes" ]; then
1604 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001605fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001606if [ "$bsd_user" = "yes" ]; then
1607 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001608fi
1609
Alex Bennée447e1332019-03-19 11:59:12 +00001610if test -z "$target_list_exclude"; then
1611 for config in $mak_wilds; do
1612 default_target_list="${default_target_list} $(basename "$config" .mak)"
1613 done
1614else
1615 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1616 for config in $mak_wilds; do
1617 target="$(basename "$config" .mak)"
1618 exclude="no"
1619 for excl in $exclude_list; do
1620 if test "$excl" = "$target"; then
1621 exclude="yes"
1622 break;
1623 fi
1624 done
1625 if test "$exclude" = "no"; then
1626 default_target_list="${default_target_list} $target"
1627 fi
1628 done
1629fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001630
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001631# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001632trace_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 +01001633
pbrookaf5db582006-04-08 14:26:41 +00001634if test x"$show_help" = x"yes" ; then
1635cat << EOF
1636
1637Usage: configure [options]
1638Options: [defaults in brackets after descriptions]
1639
Stefan Weil08fb77e2013-12-18 22:09:39 +01001640Standard options:
1641 --help print this message
1642 --prefix=PREFIX install in PREFIX [$prefix]
1643 --interp-prefix=PREFIX where to find shared libraries, etc.
1644 use %M for cpu name [$interp_prefix]
1645 --target-list=LIST set target list (default: build everything)
1646$(echo Available targets: $default_target_list | \
1647 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001648 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001649
1650Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001651 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1652 --cc=CC use C compiler CC [$cc]
1653 --iasl=IASL use ACPI compiler IASL [$iasl]
1654 --host-cc=CC use C compiler CC [$host_cc] for code run at
1655 build time
1656 --cxx=CXX use C++ compiler CXX [$cxx]
1657 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1658 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001659 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001660 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001661 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001662 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001663 --make=MAKE use specified make [$make]
1664 --install=INSTALL use specified install [$install]
1665 --python=PYTHON use specified python [$python]
1666 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001667 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001668 --static enable static build [$static]
1669 --mandir=PATH install man pages in PATH
1670 --datadir=PATH install firmware in PATH$confsuffix
1671 --docdir=PATH install documentation in PATH$confsuffix
1672 --bindir=PATH install binaries in PATH
1673 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001674 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001675 --sysconfdir=PATH install config in PATH$confsuffix
1676 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001677 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001678 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001679 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001680 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001681 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001682 --disable-strip disable stripping binaries
1683 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001684 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001685 --audio-drv-list=LIST set audio drivers list:
1686 Available drivers: $audio_possible_drivers
1687 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1688 --block-drv-rw-whitelist=L
1689 set block driver read-write whitelist
1690 (affects only QEMU, not qemu-img)
1691 --block-drv-ro-whitelist=L
1692 set block driver read-only whitelist
1693 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001694 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001695 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001696 --with-trace-file=NAME Full PATH,NAME of file to store traces
1697 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001698 --disable-slirp disable SLIRP userspace network connectivity
1699 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001700 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001701 --oss-lib path to OSS library
1702 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001703 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001704 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001705 --enable-gcov enable test coverage analysis with gcov
1706 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001707 --disable-blobs disable installing provided firmware blobs
1708 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1709 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001710 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001711 --enable-gprof QEMU profiling with gprof
1712 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001713 --enable-debug-stack-usage
1714 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001715
1716Optional features, enabled with --enable-FEATURE and
1717disabled with --disable-FEATURE, default is enabled if available:
1718
1719 system all system emulation targets
1720 user supported user emulation targets
1721 linux-user all linux usermode emulation targets
1722 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001723 docs build documentation
1724 guest-agent build the QEMU Guest Agent
1725 guest-agent-msi build guest agent Windows MSI installation package
1726 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001727 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001728 debug-tcg TCG debugging (default is disabled)
1729 debug-info debugging information
1730 sparse sparse checker
1731
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001732 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001733 nettle nettle cryptography support
1734 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001735 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001736 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001737 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001738 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001739 vte vte support for the gtk UI
1740 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001741 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001742 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001743 vnc-sasl SASL encryption for VNC server
1744 vnc-jpeg JPEG lossy compression for VNC server
1745 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001746 cocoa Cocoa UI (Mac OS X only)
1747 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001748 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001749 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001750 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001751 brlapi BrlAPI (Braile)
1752 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001753 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001754 fdt fdt device tree
1755 bluez bluez stack connectivity
1756 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001757 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001758 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001759 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001760 rdma Enable RDMA-based migration
1761 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001762 vde support for vde network
1763 netmap support for netmap network
1764 linux-aio Linux AIO support
1765 cap-ng libcap-ng support
1766 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001767 vhost-net vhost-net kernel acceleration support
1768 vhost-vsock virtio sockets device support
1769 vhost-scsi vhost-scsi kernel target support
1770 vhost-crypto vhost-user-crypto backend support
1771 vhost-kernel vhost kernel backend support
1772 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001773 spice spice
1774 rbd rados block device (rbd)
1775 libiscsi iscsi support
1776 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001777 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001778 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001779 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001780 usb-redir usb network redirection support
1781 lzo support of lzo compression library
1782 snappy support of snappy compression library
1783 bzip2 support of bzip2 compression library
1784 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001785 lzfse support of lzfse compression library
1786 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001787 seccomp seccomp support
1788 coroutine-pool coroutine freelist (better performance)
1789 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001790 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001791 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001792 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001793 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001794 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001795 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001796 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001797 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001798 opengl opengl support
1799 virglrenderer virgl rendering support
1800 xfsctl xfsctl support
1801 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001802 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001803 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001804 bochs bochs image format support
1805 cloop cloop image format support
1806 dmg dmg image format support
1807 qcow1 qcow v1 image format support
1808 vdi vdi image format support
1809 vvfat vvfat image format support
1810 qed qed image format support
1811 parallels parallels image format support
1812 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001813 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001814 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001815 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001816 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001817 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001818
1819NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001820EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001821exit 0
pbrookaf5db582006-04-08 14:26:41 +00001822fi
1823
Thomas Huth9c790242019-03-11 11:20:34 +01001824# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001825rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001826
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001827if test -z "$python"
1828then
1829 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001830fi
1831
1832# Note that if the Python conditional here evaluates True we will exit
1833# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001834if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1835 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001836 "Use --python=/path/to/python to specify a supported Python."
1837fi
1838
Cleber Rosa755ee702018-11-09 10:07:07 -05001839# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001840python_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 -05001841
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001842# Suppress writing compiled files
1843python="$python -B"
1844
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001845# Check that the C compiler works. Doing this here before testing
1846# the host CPU ensures that we had a valid CC to autodetect the
1847# $cpu var (and we should bail right here if that's not the case).
1848# It also allows the help message to be printed without a CC.
1849write_c_skeleton;
1850if compile_object ; then
1851 : C compiler works ok
1852else
1853 error_exit "\"$cc\" either does not exist or does not work"
1854fi
1855if ! compile_prog ; then
1856 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1857fi
1858
Peter Maydell359bc952011-12-24 13:07:25 +00001859# Now we have handled --enable-tcg-interpreter and know we're not just
1860# printing the help message, bail out if the host CPU isn't supported.
1861if test "$ARCH" = "unknown"; then
1862 if test "$tcg_interpreter" = "yes" ; then
1863 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001864 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001865 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001866 fi
1867fi
1868
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001869# Consult white-list to determine whether to enable werror
1870# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001871if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001872 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001873 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001874 werror="yes"
1875 else
1876 werror="no"
1877 fi
1878fi
1879
Peter Maydellfb59dab2017-03-28 14:01:52 +01001880if test "$bogus_os" = "yes"; then
1881 # Now that we know that we're not printing the help and that
1882 # the compiler works (so the results of the check_defines we used
1883 # to identify the OS are reliable), if we didn't recognize the
1884 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001885 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001886fi
1887
Thomas Huthefc6c072018-12-03 10:12:32 +01001888# Check whether the compiler matches our minimum requirements:
1889cat > $TMPC << EOF
1890#if defined(__clang_major__) && defined(__clang_minor__)
1891# ifdef __apple_build_version__
1892# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1893# error You need at least XCode Clang v5.1 to compile QEMU
1894# endif
1895# else
1896# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1897# error You need at least Clang v3.4 to compile QEMU
1898# endif
1899# endif
1900#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1901# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1902# error You need at least GCC v4.8 to compile QEMU
1903# endif
1904#else
1905# error You either need GCC or Clang to compiler QEMU
1906#endif
1907int main (void) { return 0; }
1908EOF
1909if ! compile_prog "" "" ; then
1910 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1911fi
1912
Paolo Bonzini8d050952010-12-23 11:43:52 +01001913gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1914gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001915gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001916gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001917gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001918gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001919# Note that we do not add -Werror to gcc_flags here, because that would
1920# enable it for all configure tests. If a configure test failed due
1921# to -Werror this would just silently disable some features,
1922# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001923
1924cc_has_warning_flag() {
1925 write_c_skeleton;
1926
Peter Maydella1d29d62012-10-27 22:19:07 +01001927 # Use the positive sense of the flag when testing for -Wno-wombat
1928 # support (gcc will happily accept the -Wno- form of unknown
1929 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001930 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1931 compile_prog "-Werror $optflag" ""
1932}
1933
1934for flag in $gcc_flags; do
1935 if cc_has_warning_flag $flag ; then
1936 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001937 fi
1938done
1939
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001940if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001941 cat > $TMPC << EOF
1942int main(int argc, char *argv[])
1943{
1944 char arr[64], *p = arr, *c = argv[0];
1945 while (*c) {
1946 *p++ = *c++;
1947 }
1948 return 0;
1949}
1950EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001951 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001952 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001953 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001954 # We need to check both a compile and a link, since some compiler
1955 # setups fail only on a .c->.o compile and some only at link time
1956 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1957 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001958 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001959 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001960 break
1961 fi
1962 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001963 if test "$stack_protector" = yes; then
1964 if test $sp_on = 0; then
1965 error_exit "Stack protector not supported"
1966 fi
1967 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001968fi
1969
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001970# Disable -Wmissing-braces on older compilers that warn even for
1971# the "universal" C zero initializer {0}.
1972cat > $TMPC << EOF
1973struct {
1974 int a[2];
1975} x = {0};
1976EOF
1977if compile_object "-Werror" "" ; then
1978 :
1979else
1980 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1981fi
1982
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001983# Our module code doesn't support Windows
1984if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
1985 error_exit "Modules are not available for Windows"
1986fi
1987
Thomas Huthd376e9d2018-12-03 11:41:38 +01001988# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001989if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001990 if test "$modules" = "yes" ; then
1991 error_exit "static and modules are mutually incompatible"
1992 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001993 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001994 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001995 else
1996 pie="no"
1997 fi
1998fi
1999
Emilio G. Cota768b7852015-04-29 13:09:02 +02002000# Unconditional check for compiler __thread support
2001 cat > $TMPC << EOF
2002static __thread int tls_var;
2003int main(void) { return tls_var; }
2004EOF
2005
2006if ! compile_prog "-Werror" "" ; then
2007 error_exit "Your compiler does not support the __thread specifier for " \
2008 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2009fi
2010
Avi Kivity40d64442011-11-15 20:12:17 +02002011if test "$pie" = ""; then
2012 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002013 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002014 ;;
2015 *)
2016 pie="no"
2017 ;;
2018 esac
2019fi
2020
2021if test "$pie" != "no" ; then
2022 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002023
2024#ifdef __linux__
2025# define THREAD __thread
2026#else
2027# define THREAD
2028#endif
2029
2030static THREAD int tls_var;
2031
2032int main(void) { return tls_var; }
2033
Avi Kivity40d64442011-11-15 20:12:17 +02002034EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002035 # check we support --no-pie first...
2036 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2037 CFLAGS_NOPIE="-fno-pie"
2038 LDFLAGS_NOPIE="-nopie"
2039 fi
2040
Avi Kivity40d64442011-11-15 20:12:17 +02002041 if compile_prog "-fPIE -DPIE" "-pie"; then
2042 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2043 LDFLAGS="-pie $LDFLAGS"
2044 pie="yes"
2045 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2046 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2047 fi
2048 else
2049 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002050 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002051 else
2052 echo "Disabling PIE due to missing toolchain support"
2053 pie="no"
2054 fi
2055 fi
2056fi
2057
Paolo Bonzini09dada42013-04-17 16:26:47 +02002058##########################################
2059# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2060# use i686 as default anyway, but for those that don't, an explicit
2061# specification is necessary
2062
2063if test "$cpu" = "i386"; then
2064 cat > $TMPC << EOF
2065static int sfaa(int *ptr)
2066{
2067 return __sync_fetch_and_and(ptr, 0);
2068}
2069
2070int main(void)
2071{
2072 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002073 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002074 sfaa(&val);
2075 return val;
2076}
2077EOF
2078 if ! compile_prog "" "" ; then
2079 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2080 fi
2081fi
2082
2083#########################################
bellardec530c82006-04-25 22:36:06 +00002084# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002085
bellardec530c82006-04-25 22:36:06 +00002086if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002087 if has $install; then
2088 :
2089 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002090 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2091 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2092 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002093 fi
Stefan Weil89138852016-05-16 15:10:20 +02002094 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002095 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2096 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2097 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002098 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002099 if has ar; then
2100 :
2101 else
bellardec530c82006-04-25 22:36:06 +00002102 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002103 error_exit "No path includes ar" \
2104 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002105 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002106 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002107 fi
ths5fafdf22007-09-16 21:08:06 +00002108fi
bellardec530c82006-04-25 22:36:06 +00002109
Stefan Weilafb63eb2012-09-26 22:04:38 +02002110if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002111 for target in $default_target_list; do
2112 supported_target $target 2>/dev/null && \
2113 target_list="$target_list $target"
2114 done
2115 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002116else
Stefan Weil89138852016-05-16 15:10:20 +02002117 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002118 for target in $target_list; do
2119 # Check that we recognised the target name; this allows a more
2120 # friendly error message than if we let it fall through.
2121 case " $default_target_list " in
2122 *" $target "*)
2123 ;;
2124 *)
2125 error_exit "Unknown target name '$target'"
2126 ;;
2127 esac
2128 supported_target $target || exit 1
2129 done
bellard5327cf42005-01-10 23:18:50 +00002130fi
Peter Maydell25b48332013-05-20 16:16:16 +01002131
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002132# see if system emulation was really requested
2133case " $target_list " in
2134 *"-softmmu "*) softmmu=yes
2135 ;;
2136 *) softmmu=no
2137 ;;
2138esac
bellard5327cf42005-01-10 23:18:50 +00002139
Juan Quintela249247c2009-08-12 18:20:25 +02002140feature_not_found() {
2141 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002142 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002143
Peter Maydell76ad07a2013-04-08 12:11:26 +01002144 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002145 "configure was not able to find it." \
2146 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002147}
2148
bellard7d132992003-03-06 23:23:54 +00002149# ---
2150# big/little endian test
2151cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002152short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2153short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2154extern int foo(short *, short *);
2155int main(int argc, char *argv[]) {
2156 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002157}
2158EOF
2159
Mike Frysinger61cc9192013-06-30 23:30:18 -04002160if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002161 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002162 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002163 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002164 bigendian="no"
2165 else
2166 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002167 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002168else
2169 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002170fi
2171
Juan Quintelab0a47e72009-08-12 18:29:49 +02002172##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002173# cocoa implies not SDL or GTK
2174# (the cocoa UI code currently assumes it is always the active UI
2175# and doesn't interact well with other UI frontend code)
2176if test "$cocoa" = "yes"; then
2177 if test "$sdl" = "yes"; then
2178 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2179 fi
2180 if test "$gtk" = "yes"; then
2181 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2182 fi
2183 gtk=no
2184 sdl=no
2185fi
2186
Eric Blake6b39b062016-10-11 10:46:23 -05002187# Some versions of Mac OS X incorrectly define SIZE_MAX
2188cat > $TMPC << EOF
2189#include <stdint.h>
2190#include <stdio.h>
2191int main(int argc, char *argv[]) {
2192 return printf("%zu", SIZE_MAX);
2193}
2194EOF
2195have_broken_size_max=no
2196if ! compile_object -Werror ; then
2197 have_broken_size_max=yes
2198fi
2199
Peter Maydella30878e2015-08-14 16:10:52 +01002200##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002201# L2TPV3 probe
2202
2203cat > $TMPC <<EOF
2204#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002205#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002206int main(void) { return sizeof(struct mmsghdr); }
2207EOF
2208if compile_prog "" "" ; then
2209 l2tpv3=yes
2210else
2211 l2tpv3=no
2212fi
2213
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002214#########################################
2215# vhost interdependencies and host support
2216
2217# vhost backends
2218test "$vhost_user" = "" && vhost_user=yes
2219if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2220 error_exit "vhost-user isn't available on win32"
2221fi
2222test "$vhost_kernel" = "" && vhost_kernel=$linux
2223if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2224 error_exit "vhost-kernel is only available on Linux"
2225fi
2226
2227# vhost-kernel devices
2228test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2229if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2230 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2231fi
2232test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2233if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2234 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2235fi
2236
2237# vhost-user backends
2238test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2239if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2240 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2241fi
2242test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2243if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2244 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2245fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01002246test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2247if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2248 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2249fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002250
2251# OR the vhost-kernel and vhost-user values for simplicity
2252if test "$vhost_net" = ""; then
2253 test "$vhost_net_user" = "yes" && vhost_net=yes
2254 test "$vhost_kernel" = "yes" && vhost_net=yes
2255fi
2256
Gonglei015a33b2014-07-01 20:58:08 +08002257##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002258# MinGW / Mingw-w64 localtime_r/gmtime_r check
2259
2260if test "$mingw32" = "yes"; then
2261 # Some versions of MinGW / Mingw-w64 lack localtime_r
2262 # and gmtime_r entirely.
2263 #
2264 # Some versions of Mingw-w64 define a macro for
2265 # localtime_r/gmtime_r.
2266 #
2267 # Some versions of Mingw-w64 will define functions
2268 # for localtime_r/gmtime_r, but only if you have
2269 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2270 # though, unistd.h and pthread.h both define
2271 # that for you.
2272 #
2273 # So this #undef localtime_r and #include <unistd.h>
2274 # are not in fact redundant.
2275cat > $TMPC << EOF
2276#include <unistd.h>
2277#include <time.h>
2278#undef localtime_r
2279int main(void) { localtime_r(NULL, NULL); return 0; }
2280EOF
2281 if compile_prog "" "" ; then
2282 localtime_r="yes"
2283 else
2284 localtime_r="no"
2285 fi
2286fi
2287
2288##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002289# pkg-config probe
2290
2291if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002292 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002293fi
2294
2295##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002296# NPTL probe
2297
Peter Maydell24cb36a2013-07-16 18:45:00 +01002298if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002299 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002300#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002301#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002302int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002303#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2304#error bork
2305#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002306 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002307}
2308EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002309 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002310 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002311 fi
pbrookbd0c5662008-05-29 14:34:11 +00002312fi
2313
balrogac629222008-10-11 09:56:04 +00002314##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002315# lzo check
2316
2317if test "$lzo" != "no" ; then
2318 cat > $TMPC << EOF
2319#include <lzo/lzo1x.h>
2320int main(void) { lzo_version(); return 0; }
2321EOF
2322 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002323 libs_softmmu="$libs_softmmu -llzo2"
2324 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002325 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002326 if test "$lzo" = "yes"; then
2327 feature_not_found "liblzo2" "Install liblzo2 devel"
2328 fi
2329 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002330 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002331fi
2332
2333##########################################
2334# snappy check
2335
2336if test "$snappy" != "no" ; then
2337 cat > $TMPC << EOF
2338#include <snappy-c.h>
2339int main(void) { snappy_max_compressed_length(4096); return 0; }
2340EOF
2341 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002342 libs_softmmu="$libs_softmmu -lsnappy"
2343 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002344 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002345 if test "$snappy" = "yes"; then
2346 feature_not_found "libsnappy" "Install libsnappy devel"
2347 fi
2348 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002349 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002350fi
2351
2352##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002353# bzip2 check
2354
2355if test "$bzip2" != "no" ; then
2356 cat > $TMPC << EOF
2357#include <bzlib.h>
2358int main(void) { BZ2_bzlibVersion(); return 0; }
2359EOF
2360 if compile_prog "" "-lbz2" ; then
2361 bzip2="yes"
2362 else
2363 if test "$bzip2" = "yes"; then
2364 feature_not_found "libbzip2" "Install libbzip2 devel"
2365 fi
2366 bzip2="no"
2367 fi
2368fi
2369
2370##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002371# lzfse check
2372
2373if test "$lzfse" != "no" ; then
2374 cat > $TMPC << EOF
2375#include <lzfse.h>
2376int main(void) { lzfse_decode_scratch_size(); return 0; }
2377EOF
2378 if compile_prog "" "-llzfse" ; then
2379 lzfse="yes"
2380 else
2381 if test "$lzfse" = "yes"; then
2382 feature_not_found "lzfse" "Install lzfse devel"
2383 fi
2384 lzfse="no"
2385 fi
2386fi
2387
2388##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002389# libseccomp check
2390
2391if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002392 libseccomp_minver="2.3.0"
2393 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002394 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2395 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002396 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002397 else
Andrew Jones693e5912015-09-30 11:59:18 -04002398 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002399 feature_not_found "libseccomp" \
2400 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002401 fi
2402 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002403 fi
2404fi
2405##########################################
aliguorie37630c2009-04-22 15:19:10 +00002406# xen probe
2407
Juan Quintelafc321b42009-08-12 18:29:55 +02002408if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002409 # Check whether Xen library path is specified via --extra-ldflags to avoid
2410 # overriding this setting with pkg-config output. If not, try pkg-config
2411 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002412
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002413 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2414 $pkg_config --exists xencontrol ; then
2415 xen_ctrl_version="$(printf '%d%02d%02d' \
2416 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2417 xen=yes
2418 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2419 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002420 if $pkg_config --exists xentoolcore; then
2421 xen_pc="$xen_pc xentoolcore"
2422 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002423 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2424 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002425 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002426
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002427 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002428 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002429
2430 # First we test whether Xen headers and libraries are available.
2431 # If no, we are done and there is no Xen support.
2432 # If yes, more tests are run to detect the Xen version.
2433
2434 # Xen (any)
2435 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002436#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002437int main(void) {
2438 return 0;
2439}
2440EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002441 if ! compile_prog "" "$xen_libs" ; then
2442 # Xen not found
2443 if test "$xen" = "yes" ; then
2444 feature_not_found "xen" "Install xen devel"
2445 fi
2446 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002447
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002448 # Xen unstable
2449 elif
2450 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002451#undef XC_WANT_COMPAT_DEVICEMODEL_API
2452#define __XEN_TOOLS__
2453#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002454#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002455int main(void) {
2456 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002457 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002458
2459 xd = xendevicemodel_open(0, 0);
2460 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2461
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002462 xfmem = xenforeignmemory_open(0, 0);
2463 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2464
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002465 return 0;
2466}
2467EOF
2468 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2469 then
2470 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2471 xen_ctrl_version=41100
2472 xen=yes
2473 elif
2474 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002475#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2476#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002477#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002478int main(void) {
2479 xenforeignmemory_handle *xfmem;
2480
2481 xfmem = xenforeignmemory_open(0, 0);
2482 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002483 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002484
2485 return 0;
2486}
2487EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002488 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002489 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002490 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002491 xen_ctrl_version=41000
2492 xen=yes
2493 elif
2494 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002495#undef XC_WANT_COMPAT_DEVICEMODEL_API
2496#define __XEN_TOOLS__
2497#include <xendevicemodel.h>
2498int main(void) {
2499 xendevicemodel_handle *xd;
2500
2501 xd = xendevicemodel_open(0, 0);
2502 xendevicemodel_close(xd);
2503
2504 return 0;
2505}
2506EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002507 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2508 then
2509 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2510 xen_ctrl_version=40900
2511 xen=yes
2512 elif
2513 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002514/*
2515 * If we have stable libs the we don't want the libxc compat
2516 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002517 *
2518 * Also, check if xengnttab_grant_copy_segment_t is defined and
2519 * grant copy operation is implemented.
2520 */
2521#undef XC_WANT_COMPAT_EVTCHN_API
2522#undef XC_WANT_COMPAT_GNTTAB_API
2523#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2524#include <xenctrl.h>
2525#include <xenstore.h>
2526#include <xenevtchn.h>
2527#include <xengnttab.h>
2528#include <xenforeignmemory.h>
2529#include <stdint.h>
2530#include <xen/hvm/hvm_info_table.h>
2531#if !defined(HVM_MAX_VCPUS)
2532# error HVM_MAX_VCPUS not defined
2533#endif
2534int main(void) {
2535 xc_interface *xc = NULL;
2536 xenforeignmemory_handle *xfmem;
2537 xenevtchn_handle *xe;
2538 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002539 xengnttab_grant_copy_segment_t* seg = NULL;
2540
2541 xs_daemon_open();
2542
2543 xc = xc_interface_open(0, 0, 0);
2544 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2545 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2546 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2547 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002548
2549 xfmem = xenforeignmemory_open(0, 0);
2550 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2551
2552 xe = xenevtchn_open(0, 0);
2553 xenevtchn_fd(xe);
2554
2555 xg = xengnttab_open(0, 0);
2556 xengnttab_grant_copy(xg, 0, seg);
2557
2558 return 0;
2559}
2560EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002561 compile_prog "" "$xen_libs $xen_stable_libs"
2562 then
2563 xen_ctrl_version=40800
2564 xen=yes
2565 elif
2566 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002567/*
2568 * If we have stable libs the we don't want the libxc compat
2569 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002570 */
2571#undef XC_WANT_COMPAT_EVTCHN_API
2572#undef XC_WANT_COMPAT_GNTTAB_API
2573#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2574#include <xenctrl.h>
2575#include <xenstore.h>
2576#include <xenevtchn.h>
2577#include <xengnttab.h>
2578#include <xenforeignmemory.h>
2579#include <stdint.h>
2580#include <xen/hvm/hvm_info_table.h>
2581#if !defined(HVM_MAX_VCPUS)
2582# error HVM_MAX_VCPUS not defined
2583#endif
2584int main(void) {
2585 xc_interface *xc = NULL;
2586 xenforeignmemory_handle *xfmem;
2587 xenevtchn_handle *xe;
2588 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002589
2590 xs_daemon_open();
2591
2592 xc = xc_interface_open(0, 0, 0);
2593 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2594 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2595 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2596 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002597
2598 xfmem = xenforeignmemory_open(0, 0);
2599 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2600
2601 xe = xenevtchn_open(0, 0);
2602 xenevtchn_fd(xe);
2603
2604 xg = xengnttab_open(0, 0);
2605 xengnttab_map_grant_ref(xg, 0, 0, 0);
2606
2607 return 0;
2608}
2609EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002610 compile_prog "" "$xen_libs $xen_stable_libs"
2611 then
2612 xen_ctrl_version=40701
2613 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002614
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002615 # Xen 4.6
2616 elif
2617 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002618#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002619#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002620#include <stdint.h>
2621#include <xen/hvm/hvm_info_table.h>
2622#if !defined(HVM_MAX_VCPUS)
2623# error HVM_MAX_VCPUS not defined
2624#endif
2625int main(void) {
2626 xc_interface *xc;
2627 xs_daemon_open();
2628 xc = xc_interface_open(0, 0, 0);
2629 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2630 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002631 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002632 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002633 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002634 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002635 return 0;
2636}
2637EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002638 compile_prog "" "$xen_libs"
2639 then
2640 xen_ctrl_version=40600
2641 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002642
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002643 # Xen 4.5
2644 elif
2645 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002646#include <xenctrl.h>
2647#include <xenstore.h>
2648#include <stdint.h>
2649#include <xen/hvm/hvm_info_table.h>
2650#if !defined(HVM_MAX_VCPUS)
2651# error HVM_MAX_VCPUS not defined
2652#endif
2653int main(void) {
2654 xc_interface *xc;
2655 xs_daemon_open();
2656 xc = xc_interface_open(0, 0, 0);
2657 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2658 xc_gnttab_open(NULL, 0);
2659 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2660 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002661 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2662 return 0;
2663}
2664EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002665 compile_prog "" "$xen_libs"
2666 then
2667 xen_ctrl_version=40500
2668 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002669
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002670 elif
2671 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002672#include <xenctrl.h>
2673#include <xenstore.h>
2674#include <stdint.h>
2675#include <xen/hvm/hvm_info_table.h>
2676#if !defined(HVM_MAX_VCPUS)
2677# error HVM_MAX_VCPUS not defined
2678#endif
2679int main(void) {
2680 xc_interface *xc;
2681 xs_daemon_open();
2682 xc = xc_interface_open(0, 0, 0);
2683 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2684 xc_gnttab_open(NULL, 0);
2685 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2686 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002687 return 0;
2688}
2689EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002690 compile_prog "" "$xen_libs"
2691 then
2692 xen_ctrl_version=40200
2693 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002694
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002695 else
2696 if test "$xen" = "yes" ; then
2697 feature_not_found "xen (unsupported version)" \
2698 "Install a supported xen (xen 4.2 or newer)"
2699 fi
2700 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002701 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002702
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002703 if test "$xen" = yes; then
2704 if test $xen_ctrl_version -ge 40701 ; then
2705 libs_softmmu="$xen_stable_libs $libs_softmmu"
2706 fi
2707 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002708 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002709 fi
aliguorie37630c2009-04-22 15:19:10 +00002710fi
2711
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002712if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002713 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002714 xen_pci_passthrough=yes
2715 else
2716 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002717 error_exit "User requested feature Xen PCI Passthrough" \
2718 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002719 fi
2720 xen_pci_passthrough=no
2721 fi
2722fi
2723
aliguorie37630c2009-04-22 15:19:10 +00002724##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002725# Windows Hypervisor Platform accelerator (WHPX) check
2726if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002727 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002728 whpx="yes"
2729 else
2730 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002731 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002732 fi
2733 whpx="no"
2734 fi
2735fi
2736
2737##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002738# Sparse probe
2739if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002740 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002741 sparse=yes
2742 else
2743 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002744 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002745 fi
2746 sparse=no
2747 fi
2748fi
2749
2750##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002751# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002752if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002753 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002754 x11_cflags=$($pkg_config --cflags x11)
2755 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002756fi
2757
2758##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002759# GTK probe
2760
2761if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002762 gtkpackage="gtk+-3.0"
2763 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002764 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002765 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002766 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2767 gtk_libs=$($pkg_config --libs $gtkpackage)
2768 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002769 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002770 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002771 gtk_cflags="$gtk_cflags $x11_cflags"
2772 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002773 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002774 gtk="yes"
2775 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002776 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002777 else
2778 gtk="no"
2779 fi
2780fi
2781
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002782
2783##########################################
2784# GNUTLS probe
2785
2786if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002787 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002788 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002789 gnutls_cflags=$($pkg_config --cflags gnutls)
2790 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002791 # Packaging for the static libraries is not always correct.
2792 # At least ubuntu 18.04 ships only shared libraries.
2793 write_c_skeleton
2794 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002795 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002796 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2797 pass="yes"
2798 fi
2799 fi
2800 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002801 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002802 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002803 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002804 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002805fi
2806
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002807
2808# If user didn't give a --disable/enable-gcrypt flag,
2809# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002810# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002811if test -z "$gcrypt"
2812then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002813 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002814 then
2815 gcrypt="no"
2816 fi
2817fi
2818
2819# If user didn't give a --disable/enable-nettle flag,
2820# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002821# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002822if test -z "$nettle"
2823then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002824 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002825 then
2826 nettle="no"
2827 fi
2828fi
2829
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002830has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002831 if ! has "libgcrypt-config"
2832 then
2833 return 1
2834 fi
2835
2836 if test -n "$cross_prefix"
2837 then
Stefan Weil89138852016-05-16 15:10:20 +02002838 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002839 if test "$host-" != $cross_prefix
2840 then
2841 return 1
2842 fi
2843 fi
2844
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002845 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2846 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2847
2848 if test $maj != 1 || test $min -lt 5
2849 then
2850 return 1
2851 fi
2852
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002853 return 0
2854}
2855
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002856
2857if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002858 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002859 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002860 nettle_cflags=$($pkg_config --cflags nettle)
2861 nettle_libs=$($pkg_config --libs nettle)
2862 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002863 # Link test to make sure the given libraries work (e.g for static).
2864 write_c_skeleton
2865 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002866 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002867 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2868 if test -z "$gcrypt"; then
2869 gcrypt="no"
2870 fi
2871 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002872 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002873 fi
2874 if test "$pass" = "no" && test "$nettle" = "yes"; then
2875 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002876 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002877 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002878 fi
2879fi
2880
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002881if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002882 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002883 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002884 gcrypt_cflags=$(libgcrypt-config --cflags)
2885 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002886 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002887 # as it "spreads unnecessary dependencies" which in
2888 # turn breaks static builds...
2889 if test "$static" = "yes"
2890 then
2891 gcrypt_libs="$gcrypt_libs -lgpg-error"
2892 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002893
Richard Hendersona73e82e2019-05-09 18:24:35 -07002894 # Link test to make sure the given libraries work (e.g for static).
2895 write_c_skeleton
2896 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002897 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002898 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2899 pass="yes"
2900 fi
2901 fi
2902 if test "$pass" = "yes"; then
2903 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002904 cat > $TMPC << EOF
2905#include <gcrypt.h>
2906int main(void) {
2907 gcry_mac_hd_t handle;
2908 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2909 GCRY_MAC_FLAG_SECURE, NULL);
2910 return 0;
2911}
2912EOF
2913 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2914 gcrypt_hmac=yes
2915 fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01002916 cat > $TMPC << EOF
2917#include <gcrypt.h>
2918int main(void) {
2919 gcry_cipher_hd_t handle;
2920 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2921 return 0;
2922}
2923EOF
2924 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2925 gcrypt_xts=yes
2926 qemu_private_xts=no
2927 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002928 elif test "$gcrypt" = "yes"; then
2929 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002930 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002931 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002932 fi
2933fi
2934
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002935
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002936if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2937then
2938 error_exit "Only one of gcrypt & nettle can be enabled"
2939fi
2940
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002941##########################################
2942# libtasn1 - only for the TLS creds/session test suite
2943
2944tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002945tasn1_cflags=""
2946tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002947if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002948 tasn1_cflags=$($pkg_config --cflags libtasn1)
2949 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002950else
2951 tasn1=no
2952fi
2953
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002954
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002955##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002956# PAM probe
2957
2958if test "$auth_pam" != "no"; then
2959 cat > $TMPC <<EOF
2960#include <security/pam_appl.h>
2961#include <stdio.h>
2962int main(void) {
2963 const char *service_name = "qemu";
2964 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01002965 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002966 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01002967 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002968 return 0;
2969}
2970EOF
2971 if compile_prog "" "-lpam" ; then
2972 auth_pam=yes
2973 else
2974 if test "$auth_pam" = "yes"; then
2975 feature_not_found "PAM" "Install PAM development package"
2976 else
2977 auth_pam=no
2978 fi
2979 fi
2980fi
2981
2982##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002983# getifaddrs (for tests/test-io-channel-socket )
2984
2985have_ifaddrs_h=yes
2986if ! check_include "ifaddrs.h" ; then
2987 have_ifaddrs_h=no
2988fi
2989
2990##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002991# VTE probe
2992
2993if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002994 vteminversion="0.32.0"
2995 if $pkg_config --exists "vte-2.91"; then
2996 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002997 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002998 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002999 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003000 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003001 vte_cflags=$($pkg_config --cflags $vtepackage)
3002 vte_libs=$($pkg_config --libs $vtepackage)
3003 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003004 vte="yes"
3005 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003006 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003007 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003008 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003009 fi
3010fi
3011
3012##########################################
bellard11d9f692004-04-02 20:55:59 +00003013# SDL probe
3014
Carlo Marcelo Arenas BelĂłnaee8a612019-07-10 15:55:28 -07003015# Look for sdl configuration program (pkg-config or sdl2-config). Try
3016# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003017
Peter Xuc6093a02018-04-10 13:40:34 +08003018sdl_probe ()
3019{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003020 if $pkg_config sdl2 --exists; then
3021 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003022 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas BelĂłnaee8a612019-07-10 15:55:28 -07003023 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003024 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003025 sdlversion=$($sdlconfig --version)
3026 else
3027 if test "$sdl" = "yes" ; then
3028 feature_not_found "sdl" "Install SDL2-devel"
3029 fi
3030 sdl=no
3031 # no need to do the rest
3032 return
3033 fi
Carlo Marcelo Arenas BelĂłnaee8a612019-07-10 15:55:28 -07003034 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003035 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3036 fi
3037
Juan Quintelaac119f92009-07-27 16:13:15 +02003038 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003039#include <SDL.h>
3040#undef main /* We don't want SDL to override our main() */
3041int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3042EOF
Stefan Weil89138852016-05-16 15:10:20 +02003043 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003044 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003045 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003046 if $pkg_config sdl2 --exists; then
3047 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003048 else
3049 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3050 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003051 else
Stefan Weil89138852016-05-16 15:10:20 +02003052 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003053 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003054 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003055 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003056
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003057 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003058 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003059 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003060 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3061 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003062 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003063 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003064 :
3065 else
3066 sdl=no
3067 fi
3068 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003069 else # sdl not found
3070 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003071 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003072 fi
3073 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003074 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003075}
3076
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003077sdl_image_probe ()
3078{
3079 if test "$sdl_image" != "no" ; then
3080 if $pkg_config SDL2_image --exists; then
3081 if test "$static" = "yes"; then
3082 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3083 else
3084 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3085 fi
3086 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3087 sdl_image=yes
3088
3089 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3090 sdl_libs="$sdl_libs $sdl_image_libs"
3091 else
3092 if test "$sdl_image" = "yes" ; then
3093 feature_not_found "sdl_image" "Install SDL Image devel"
3094 else
3095 sdl_image=no
3096 fi
3097 fi
3098 fi
3099}
3100
Peter Xuc6093a02018-04-10 13:40:34 +08003101if test "$sdl" != "no" ; then
3102 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003103fi
bellard11d9f692004-04-02 20:55:59 +00003104
aliguori5368a422009-03-03 17:37:21 +00003105if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003106 sdl_image_probe
3107else
3108 if test "$sdl_image" = "yes"; then
3109 echo "warning: SDL Image requested, but SDL is not available, disabling"
3110 fi
3111 sdl_image=no
3112fi
3113
3114if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003115 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003116#include <SDL.h>
3117#if defined(SDL_VIDEO_DRIVER_X11)
3118#include <X11/XKBlib.h>
3119#else
3120#error No x11 support
3121#endif
3122int main(void) { return 0; }
3123EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003124 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003125 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003126 sdl_cflags="$sdl_cflags $x11_cflags"
3127 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003128 fi
aliguori5368a422009-03-03 17:37:21 +00003129fi
3130
ths8f28f3f2007-01-05 21:25:54 +00003131##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003132# RDMA needs OpenFabrics libraries
3133if test "$rdma" != "no" ; then
3134 cat > $TMPC <<EOF
3135#include <rdma/rdma_cma.h>
3136int main(void) { return 0; }
3137EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003138 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003139 if compile_prog "" "$rdma_libs" ; then
3140 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003141 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003142 else
3143 if test "$rdma" = "yes" ; then
3144 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003145 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003146 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003147 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003148 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3149 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3150 fi
3151 rdma="no"
3152 fi
3153fi
3154
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003155##########################################
3156# PVRDMA detection
3157
3158cat > $TMPC <<EOF &&
3159#include <sys/mman.h>
3160
3161int
3162main(void)
3163{
3164 char buf = 0;
3165 void *addr = &buf;
3166 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3167
3168 return 0;
3169}
3170EOF
3171
3172if test "$rdma" = "yes" ; then
3173 case "$pvrdma" in
3174 "")
3175 if compile_prog "" ""; then
3176 pvrdma="yes"
3177 else
3178 pvrdma="no"
3179 fi
3180 ;;
3181 "yes")
3182 if ! compile_prog "" ""; then
3183 error_exit "PVRDMA is not supported since mremap is not implemented"
3184 fi
3185 pvrdma="yes"
3186 ;;
3187 "no")
3188 pvrdma="no"
3189 ;;
3190 esac
3191else
3192 if test "$pvrdma" = "yes" ; then
3193 error_exit "PVRDMA requires rdma suppport"
3194 fi
3195 pvrdma="no"
3196fi
ths8d5d2d42007-08-25 01:37:51 +00003197
3198##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003199# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003200if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003201 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003202#include <sasl/sasl.h>
3203#include <stdio.h>
3204int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3205EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003206 # Assuming Cyrus-SASL installed in /usr prefix
3207 vnc_sasl_cflags=""
3208 vnc_sasl_libs="-lsasl2"
3209 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3210 vnc_sasl=yes
3211 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003212 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003213 else
3214 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003215 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003216 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003217 vnc_sasl=no
3218 fi
aliguori2f9606b2009-03-06 20:27:28 +00003219fi
3220
3221##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003222# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003223if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003224cat > $TMPC <<EOF
3225#include <stdio.h>
3226#include <jpeglib.h>
3227int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3228EOF
3229 vnc_jpeg_cflags=""
3230 vnc_jpeg_libs="-ljpeg"
3231 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3232 vnc_jpeg=yes
3233 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003234 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003235 else
3236 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003237 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003238 fi
3239 vnc_jpeg=no
3240 fi
3241fi
3242
3243##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003244# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003245if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003246cat > $TMPC <<EOF
3247//#include <stdio.h>
3248#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003249#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003250int main(void) {
3251 png_structp png_ptr;
3252 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003253 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003254}
3255EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003256 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003257 vnc_png_cflags=$($pkg_config libpng --cflags)
3258 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003259 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003260 vnc_png_cflags=""
3261 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003262 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003263 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3264 vnc_png=yes
3265 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003266 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003267 else
3268 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003269 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003270 fi
3271 vnc_png=no
3272 fi
3273fi
3274
3275##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003276# xkbcommon probe
3277if test "$xkbcommon" != "no" ; then
3278 if $pkg_config xkbcommon --exists; then
3279 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3280 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3281 xkbcommon=yes
3282 else
3283 if test "$xkbcommon" = "yes" ; then
3284 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3285 fi
3286 xkbcommon=no
3287 fi
3288fi
3289
aliguori76655d62009-03-06 20:27:37 +00003290
3291##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003292# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003293if test "$xfs" != "no" ; then
3294 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003295#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003296#include <xfs/xfs.h>
3297int main(void)
3298{
3299 xfsctl(NULL, 0, 0, NULL);
3300 return 0;
3301}
3302EOF
3303 if compile_prog "" "" ; then
3304 xfs="yes"
3305 else
3306 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003307 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003308 fi
3309 xfs=no
3310 fi
3311fi
3312
3313##########################################
ths8a16d272008-07-19 09:56:24 +00003314# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003315if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003316 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003317 cat > $TMPC << EOF
3318#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003319int main(void)
3320{
3321 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003322 char s[] = "";
3323 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003324 return 0;
3325}
ths8a16d272008-07-19 09:56:24 +00003326EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003327 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003328 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003329 else
3330 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003331 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003332 fi
3333 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003334 fi
ths8a16d272008-07-19 09:56:24 +00003335fi
3336
3337##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003338# netmap support probe
3339# Apart from looking for netmap headers, we make sure that the host API version
3340# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3341# a minor/major version number. Minor new features will be marked with values up
3342# to 15, and if something happens that requires a change to the backend we will
3343# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003344if test "$netmap" != "no" ; then
3345 cat > $TMPC << EOF
3346#include <inttypes.h>
3347#include <net/if.h>
3348#include <net/netmap.h>
3349#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003350#if (NETMAP_API < 11) || (NETMAP_API > 15)
3351#error
3352#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003353int main(void) { return 0; }
3354EOF
3355 if compile_prog "" "" ; then
3356 netmap=yes
3357 else
3358 if test "$netmap" = "yes" ; then
3359 feature_not_found "netmap"
3360 fi
3361 netmap=no
3362 fi
3363fi
3364
3365##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003366# libcap-ng library probe
3367if test "$cap_ng" != "no" ; then
3368 cap_libs="-lcap-ng"
3369 cat > $TMPC << EOF
3370#include <cap-ng.h>
3371int main(void)
3372{
3373 capng_capability_to_name(CAPNG_EFFECTIVE);
3374 return 0;
3375}
3376EOF
3377 if compile_prog "" "$cap_libs" ; then
3378 cap_ng=yes
3379 libs_tools="$cap_libs $libs_tools"
3380 else
3381 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003382 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003383 fi
3384 cap_ng=no
3385 fi
3386fi
3387
3388##########################################
malcc2de5c92008-06-28 19:13:06 +00003389# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003390
Stefan Weil89138852016-05-16 15:10:20 +02003391audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003392for drv in $audio_drv_list; do
3393 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003394 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003395 if $pkg_config alsa --exists; then
3396 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003397 if test "$drv" = "try-alsa"; then
3398 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3399 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003400 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003401 if test "$drv" = "try-alsa"; then
3402 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3403 else
3404 error_exit "$drv check failed" \
3405 "Make sure to have the $drv libs and headers installed."
3406 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003407 fi
malcc2de5c92008-06-28 19:13:06 +00003408 ;;
3409
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003410 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003411 if $pkg_config libpulse --exists; then
3412 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003413 if test "$drv" = "try-pa"; then
3414 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3415 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003416 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003417 if test "$drv" = "try-pa"; then
3418 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3419 else
3420 error_exit "$drv check failed" \
3421 "Make sure to have the $drv libs and headers installed."
3422 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003423 fi
malcb8e59f12008-07-02 21:03:08 +00003424 ;;
3425
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003426 sdl)
3427 if test "$sdl" = "no"; then
3428 error_exit "sdl not found or disabled, can not use sdl audio driver"
3429 fi
3430 ;;
3431
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003432 try-sdl)
3433 if test "$sdl" = "no"; then
3434 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3435 else
3436 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3437 fi
3438 ;;
3439
Juan Quintela997e6902009-08-03 14:46:29 +02003440 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003441 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003442 ;;
3443
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003444 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003445 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003446 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003447 ;;
3448
3449 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003450 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003451 ;;
3452
malce4c63a62008-07-19 16:15:16 +00003453 *)
malc1c9b2a52008-07-19 16:57:30 +00003454 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003455 error_exit "Unknown driver '$drv' selected" \
3456 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003457 }
3458 ;;
malcc2de5c92008-06-28 19:13:06 +00003459 esac
3460done
ths8f28f3f2007-01-05 21:25:54 +00003461
balrog4d3b6f62008-02-10 16:33:14 +00003462##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003463# BrlAPI probe
3464
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003465if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003466 brlapi_libs="-lbrlapi"
3467 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003468#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003469#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003470int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3471EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003472 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003473 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003474 else
3475 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003476 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003477 fi
3478 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003479 fi
3480fi
aurel322e4d9fb2008-04-08 06:01:02 +00003481
3482##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003483# iconv probe
3484if test "$iconv" != "no" ; then
3485 cat > $TMPC << EOF
3486#include <iconv.h>
3487int main(void) {
3488 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3489 return conv != (iconv_t) -1;
3490}
3491EOF
3492 iconv_prefix_list="/usr/local:/usr"
3493 iconv_lib_list=":-liconv"
3494 IFS=:
3495 for iconv_prefix in $iconv_prefix_list; do
3496 IFS=:
3497 iconv_cflags="-I$iconv_prefix/include"
3498 iconv_ldflags="-L$iconv_prefix/lib"
3499 for iconv_link in $iconv_lib_list; do
3500 unset IFS
3501 iconv_lib="$iconv_ldflags $iconv_link"
3502 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3503 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3504 iconv_found=yes
3505 break
3506 fi
3507 done
3508 if test "$iconv_found" = yes ; then
3509 break
3510 fi
3511 done
3512 if test "$iconv_found" = "yes" ; then
3513 iconv=yes
3514 else
3515 if test "$iconv" = "yes" ; then
3516 feature_not_found "iconv" "Install iconv devel"
3517 fi
3518 iconv=no
3519 fi
3520fi
3521
3522##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003523# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003524if test "$iconv" = "no" ; then
3525 # curses will need iconv
3526 curses=no
3527fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003528if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003529 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003530 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3531 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003532 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003533 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003534 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003535 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003536 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003537 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003538#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003539#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003540#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003541#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003542int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003543 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003544 wchar_t wch = L'w';
3545 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003546 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003547 addwstr(L"wide chars\n");
3548 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003549 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003550 codeset = nl_langinfo(CODESET);
3551 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003552}
balrog4d3b6f62008-02-10 16:33:14 +00003553EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003554 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003555 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003556 # Make sure we get the wide character prototypes
3557 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003558 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003559 for curses_lib in $curses_lib_list; do
3560 unset IFS
3561 if compile_prog "$curses_inc" "$curses_lib" ; then
3562 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003563 break
3564 fi
3565 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003566 if test "$curses_found" = yes ; then
3567 break
3568 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003569 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003570 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003571 if test "$curses_found" = "yes" ; then
3572 curses=yes
3573 else
3574 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003575 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003576 fi
3577 curses=no
3578 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003579fi
balrog4d3b6f62008-02-10 16:33:14 +00003580
blueswir1414f0da2008-08-15 18:20:52 +00003581##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003582# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003583if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003584 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003585 curlconfig="$pkg_config libcurl"
3586 else
3587 curlconfig=curl-config
3588 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003589 cat > $TMPC << EOF
3590#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003591int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003592EOF
Stefan Weil89138852016-05-16 15:10:20 +02003593 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3594 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003595 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003596 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003597 else
3598 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003599 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003600 fi
3601 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003602 fi
3603fi # test "$curl"
3604
3605##########################################
balrogfb599c92008-09-28 23:49:55 +00003606# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003607if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003608 cat > $TMPC << EOF
3609#include <bluetooth/bluetooth.h>
3610int main(void) { return bt_error(0); }
3611EOF
Stefan Weil89138852016-05-16 15:10:20 +02003612 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3613 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003614 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003615 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003616 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003617 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003618 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003619 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003620 fi
balroge820e3f2008-09-30 02:27:44 +00003621 bluez="no"
3622 fi
balrogfb599c92008-09-28 23:49:55 +00003623fi
3624
3625##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003626# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003627
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003628glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003629glib_modules=gthread-2.0
3630if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003631 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003632fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003633
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003634# This workaround is required due to a bug in pkg-config file for glib as it
3635# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3636
Eric Blakee633a5c2019-02-04 20:39:37 -06003637if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003638 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3639fi
3640
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003641for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003642 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003643 glib_cflags=$($pkg_config --cflags $i)
3644 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003645 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003646 LIBS="$glib_libs $LIBS"
3647 libs_qga="$glib_libs $libs_qga"
3648 else
3649 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3650 fi
3651done
3652
Marc-André Lureauf876b762019-02-21 12:07:00 +01003653if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3654 gio=yes
3655 gio_cflags=$($pkg_config --cflags gio-2.0)
3656 gio_libs=$($pkg_config --libs gio-2.0)
3657else
3658 gio=no
3659fi
3660
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003661# Sanity check that the current size_t matches the
3662# size that glib thinks it should be. This catches
3663# problems on multi-arch where people try to build
3664# 32-bit QEMU while pointing at 64-bit glib headers
3665cat > $TMPC <<EOF
3666#include <glib.h>
3667#include <unistd.h>
3668
3669#define QEMU_BUILD_BUG_ON(x) \
3670 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3671
3672int main(void) {
3673 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3674 return 0;
3675}
3676EOF
3677
Stefan Weil5919e032016-04-28 23:33:41 +02003678if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003679 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3680 "You probably need to set PKG_CONFIG_LIBDIR"\
3681 "to point to the right pkg-config files for your"\
3682 "build target"
3683fi
3684
John Snowbbbf2e02015-03-25 18:57:38 -04003685# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3686cat > $TMPC << EOF
3687#include <glib.h>
3688int main(void) { return 0; }
3689EOF
3690if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3691 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3692 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3693 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3694 fi
3695fi
3696
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003697#########################################
3698# zlib check
3699
3700if test "$zlib" != "no" ; then
3701 if $pkg_config --exists zlib; then
3702 zlib_cflags=$($pkg_config --cflags zlib)
3703 zlib_libs=$($pkg_config --libs zlib)
3704 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3705 LIBS="$zlib_libs $LIBS"
3706 else
3707 cat > $TMPC << EOF
3708#include <zlib.h>
3709int main(void) { zlibVersion(); return 0; }
3710EOF
3711 if compile_prog "" "-lz" ; then
3712 LIBS="$LIBS -lz"
3713 else
3714 error_exit "zlib check failed" \
3715 "Make sure to have the zlib libs and headers installed."
3716 fi
3717 fi
3718fi
3719
Fam Zhenge26110c2014-02-10 14:48:57 +08003720##########################################
3721# SHA command probe for modules
3722if test "$modules" = yes; then
3723 shacmd_probe="sha1sum sha1 shasum"
3724 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003725 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003726 shacmd="$c"
3727 break
3728 fi
3729 done
3730 if test "$shacmd" = ""; then
3731 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3732 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003733fi
3734
3735##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003736# pixman support probe
3737
Eric Blakee633a5c2019-02-04 20:39:37 -06003738if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003739 pixman_cflags=
3740 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003741elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003742 pixman_cflags=$($pkg_config --cflags pixman-1)
3743 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003744else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003745 error_exit "pixman >= 0.21.8 not present." \
3746 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003747fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003748
3749##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003750# libmpathpersist probe
3751
3752if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003753 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003754 cat > $TMPC <<EOF
3755#include <libudev.h>
3756#include <mpath_persist.h>
3757unsigned mpath_mx_alloc_len = 1024;
3758int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003759static struct config *multipath_conf;
3760extern struct udev *udev;
3761extern struct config *get_multipath_config(void);
3762extern void put_multipath_config(struct config *conf);
3763struct udev *udev;
3764struct config *get_multipath_config(void) { return multipath_conf; }
3765void put_multipath_config(struct config *conf) { }
3766
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003767int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003768 udev = udev_new();
3769 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003770 return 0;
3771}
3772EOF
3773 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3774 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003775 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003776 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003777 # probe for the old API
3778 cat > $TMPC <<EOF
3779#include <libudev.h>
3780#include <mpath_persist.h>
3781unsigned mpath_mx_alloc_len = 1024;
3782int logsink;
3783int main(void) {
3784 struct udev *udev = udev_new();
3785 mpath_lib_init(udev);
3786 return 0;
3787}
3788EOF
3789 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3790 mpathpersist=yes
3791 mpathpersist_new_api=no
3792 else
3793 mpathpersist=no
3794 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003795 fi
3796else
3797 mpathpersist=no
3798fi
3799
3800##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303801# libcap probe
3802
3803if test "$cap" != "no" ; then
3804 cat > $TMPC <<EOF
3805#include <stdio.h>
3806#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003807int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303808EOF
3809 if compile_prog "" "-lcap" ; then
3810 cap=yes
3811 else
3812 cap=no
3813 fi
3814fi
3815
3816##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003817# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003818PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003819
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003820pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003821cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003822#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003823static void *f(void *p) { return NULL; }
3824int main(void) {
3825 pthread_t thread;
3826 pthread_create(&thread, 0, f, 0);
3827 return 0;
3828}
blueswir1414f0da2008-08-15 18:20:52 +00003829EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003830if compile_prog "" "" ; then
3831 pthread=yes
3832else
3833 for pthread_lib in $PTHREADLIBS_LIST; do
3834 if compile_prog "" "$pthread_lib" ; then
3835 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003836 found=no
3837 for lib_entry in $LIBS; do
3838 if test "$lib_entry" = "$pthread_lib"; then
3839 found=yes
3840 break
3841 fi
3842 done
3843 if test "$found" = "no"; then
3844 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003845 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003846 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003847 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003848 break
3849 fi
3850 done
3851fi
blueswir1414f0da2008-08-15 18:20:52 +00003852
Eric Blakee633a5c2019-02-04 20:39:37 -06003853if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003854 error_exit "pthread check failed" \
3855 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003856fi
3857
Roman Bolshakov479a5742018-12-17 23:26:01 +03003858# check for pthread_setname_np with thread id
3859pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003860cat > $TMPC << EOF
3861#include <pthread.h>
3862
3863static void *f(void *p) { return NULL; }
3864int main(void)
3865{
3866 pthread_t thread;
3867 pthread_create(&thread, 0, f, 0);
3868 pthread_setname_np(thread, "QEMU");
3869 return 0;
3870}
3871EOF
3872if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003873 pthread_setname_np_w_tid=yes
3874fi
3875
3876# check for pthread_setname_np without thread id
3877pthread_setname_np_wo_tid=no
3878cat > $TMPC << EOF
3879#include <pthread.h>
3880
3881static void *f(void *p) { pthread_setname_np("QEMU"); }
3882int main(void)
3883{
3884 pthread_t thread;
3885 pthread_create(&thread, 0, f, 0);
3886 return 0;
3887}
3888EOF
3889if compile_prog "" "$pthread_lib" ; then
3890 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003891fi
3892
aliguoribf9298b2008-12-05 20:05:26 +00003893##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003894# rbd probe
3895if test "$rbd" != "no" ; then
3896 cat > $TMPC <<EOF
3897#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003898#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003899int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003900 rados_t cluster;
3901 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003902 return 0;
3903}
3904EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003905 rbd_libs="-lrbd -lrados"
3906 if compile_prog "" "$rbd_libs" ; then
3907 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003908 else
3909 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003910 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003911 fi
3912 rbd=no
3913 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003914fi
3915
3916##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003917# libssh probe
3918if test "$libssh" != "no" ; then
3919 if $pkg_config --exists libssh; then
3920 libssh_cflags=$($pkg_config libssh --cflags)
3921 libssh_libs=$($pkg_config libssh --libs)
3922 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003923 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02003924 if test "$libssh" = "yes" ; then
3925 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003926 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02003927 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003928 fi
3929fi
3930
3931##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003932# Check for libssh 0.8
3933# This is done like this instead of using the LIBSSH_VERSION_* and
3934# SSH_VERSION_* macros because some distributions in the past shipped
3935# snapshots of the future 0.8 from Git, and those snapshots did not
3936# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003937
Pino Toscanob10d49d2019-06-20 22:08:40 +02003938if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003939 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003940#include <libssh/libssh.h>
3941int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003942EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003943 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3944 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003945 fi
3946fi
3947
3948##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003949# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003950
3951if test "$linux_aio" != "no" ; then
3952 cat > $TMPC <<EOF
3953#include <libaio.h>
3954#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003955#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003956int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3957EOF
3958 if compile_prog "" "-laio" ; then
3959 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003960 else
3961 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003962 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003963 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003964 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003965 fi
3966fi
3967
3968##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003969# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003970
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003971if test "$tpm" = ""; then
3972 if test "$mingw32" = "yes"; then
3973 tpm=no
3974 else
3975 tpm=yes
3976 fi
3977elif test "$tpm" = "yes"; then
3978 if test "$mingw32" = "yes" ; then
3979 error_exit "TPM emulation only available on POSIX systems"
3980 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003981fi
3982
3983##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003984# attr probe
3985
3986if test "$attr" != "no" ; then
3987 cat > $TMPC <<EOF
3988#include <stdio.h>
3989#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003990#ifdef CONFIG_LIBATTR
3991#include <attr/xattr.h>
3992#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003993#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003994#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003995int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3996EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003997 if compile_prog "" "" ; then
3998 attr=yes
3999 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004000 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004001 attr=yes
4002 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004003 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004004 else
4005 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004006 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004007 fi
4008 attr=no
4009 fi
4010fi
4011
4012##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004013# iovec probe
4014cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004015#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004016#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004017#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004018int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004019EOF
4020iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004021if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004022 iovec=yes
4023fi
4024
aurel32f652e6a2008-12-16 10:43:48 +00004025##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004026# preadv probe
4027cat > $TMPC <<EOF
4028#include <sys/types.h>
4029#include <sys/uio.h>
4030#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004031int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004032EOF
4033preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004034if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004035 preadv=yes
4036fi
4037
4038##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004039# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004040# fdt support is mandatory for at least some target architectures,
4041# so insist on it if we're building those system emulators.
4042fdt_required=no
4043for target in $target_list; do
4044 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004045 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004046 fdt_required=yes
4047 ;;
4048 esac
4049done
4050
4051if test "$fdt_required" = "yes"; then
4052 if test "$fdt" = "no"; then
4053 error_exit "fdt disabled but some requested targets require it." \
4054 "You can turn off fdt only if you also disable all the system emulation" \
4055 "targets which need it (by specifying a cut down --target-list)."
4056 fi
4057 fdt=yes
4058fi
4059
Juan Quintela2df87df2009-08-12 18:29:54 +02004060if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004061 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004062 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004063 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004064 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004065#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004066#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004067int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004068EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004069 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004070 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004071 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004072 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004073 # have GIT checkout, so activate dtc submodule
4074 if test -e "${source_path}/.git" ; then
4075 git_submodules="${git_submodules} dtc"
4076 fi
4077 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004078 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004079 mkdir -p dtc
4080 if [ "$pwd_is_source_path" != "y" ] ; then
4081 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4082 symlink "$source_path/dtc/scripts" "dtc/scripts"
4083 fi
4084 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004085 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4086 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004087 elif test "$fdt" = "yes" ; then
4088 # Not a git build & no libfdt found, prompt for system install
4089 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4090 "Please install the DTC (libfdt) devel package"
4091 else
4092 # don't have and don't want
4093 fdt_libs=
4094 fdt=no
4095 fi
aurel32f652e6a2008-12-16 10:43:48 +00004096 fi
4097fi
4098
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004099libs_softmmu="$libs_softmmu $fdt_libs"
4100
Michael Walle20ff0752011-03-07 23:32:39 +01004101##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004102# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004103
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004104gbm="no"
4105if $pkg_config gbm; then
4106 gbm_cflags="$($pkg_config --cflags gbm)"
4107 gbm_libs="$($pkg_config --libs gbm)"
4108 gbm="yes"
4109fi
4110
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004111if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004112 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004113 if $pkg_config $opengl_pkgs; then
4114 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4115 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004116 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004117 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4118 gtk_gl="yes"
4119 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004120 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004121 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004122 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004123 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004124 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004125 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004126 opengl_libs=""
4127 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004128 fi
4129fi
4130
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004131if test "$opengl" = "yes"; then
4132 cat > $TMPC << EOF
4133#include <epoxy/egl.h>
4134#ifndef EGL_MESA_image_dma_buf_export
4135# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4136#endif
4137int main(void) { return 0; }
4138EOF
4139 if compile_prog "" "" ; then
4140 opengl_dmabuf=yes
4141 fi
4142fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004143
Eric Blakee633a5c2019-02-04 20:39:37 -06004144if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004145 for target in $target_list; do
4146 case $target in
4147 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4148 need_x11=yes
4149 ;;
4150 esac
4151 done
4152fi
4153
Klim Kireeved279a02018-01-12 12:01:19 +03004154##########################################
4155# libxml2 probe
4156if test "$libxml2" != "no" ; then
4157 if $pkg_config --exists libxml-2.0; then
4158 libxml2="yes"
4159 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4160 libxml2_libs=$($pkg_config --libs libxml-2.0)
4161 else
4162 if test "$libxml2" = "yes"; then
4163 feature_not_found "libxml2" "Install libxml2 devel"
4164 fi
4165 libxml2="no"
4166 fi
4167fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004168
Bharata B Raoeb100392012-09-24 14:42:45 +05304169##########################################
4170# glusterfs probe
4171if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004172 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304173 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004174 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4175 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004176 if $pkg_config --atleast-version=4 glusterfs-api; then
4177 glusterfs_xlator_opt="yes"
4178 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004179 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304180 glusterfs_discard="yes"
4181 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304182 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304183 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304184 glusterfs_zerofill="yes"
4185 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004186 cat > $TMPC << EOF
4187#include <glusterfs/api/glfs.h>
4188
4189int
4190main(void)
4191{
4192 /* new glfs_ftruncate() passes two additional args */
4193 return glfs_ftruncate(NULL, 0, NULL, NULL);
4194}
4195EOF
4196 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4197 glusterfs_ftruncate_has_stat="yes"
4198 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004199 cat > $TMPC << EOF
4200#include <glusterfs/api/glfs.h>
4201
4202/* new glfs_io_cbk() passes two additional glfs_stat structs */
4203static void
4204glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4205{}
4206
4207int
4208main(void)
4209{
4210 glfs_io_cbk iocb = &glusterfs_iocb;
4211 iocb(NULL, 0 , NULL, NULL, NULL);
4212 return 0;
4213}
4214EOF
4215 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4216 glusterfs_iocb_has_stat="yes"
4217 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304218 else
4219 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004220 feature_not_found "GlusterFS backend support" \
4221 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304222 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304223 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304224 fi
4225fi
4226
aurel3239386ac2009-04-15 19:48:17 +00004227# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004228# emulator. This is done because older glibc versions don't
4229# have syscall stubs for these implemented. In that case we
4230# don't provide them even if kernel supports them.
4231#
4232inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004233cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004234#include <sys/inotify.h>
4235
4236int
4237main(void)
4238{
4239 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004240 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004241}
4242EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004243if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004244 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004245fi
4246
Riku Voipioc05c7a72010-03-26 15:25:11 +00004247inotify1=no
4248cat > $TMPC << EOF
4249#include <sys/inotify.h>
4250
4251int
4252main(void)
4253{
4254 /* try to start inotify */
4255 return inotify_init1(0);
4256}
4257EOF
4258if compile_prog "" "" ; then
4259 inotify1=yes
4260fi
4261
Riku Voipio099d6b02009-05-05 12:10:04 +03004262# check if pipe2 is there
4263pipe2=no
4264cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004265#include <unistd.h>
4266#include <fcntl.h>
4267
4268int main(void)
4269{
4270 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004271 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004272}
4273EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004274if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004275 pipe2=yes
4276fi
4277
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004278# check if accept4 is there
4279accept4=no
4280cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004281#include <sys/socket.h>
4282#include <stddef.h>
4283
4284int main(void)
4285{
4286 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4287 return 0;
4288}
4289EOF
4290if compile_prog "" "" ; then
4291 accept4=yes
4292fi
4293
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304294# check if tee/splice is there. vmsplice was added same time.
4295splice=no
4296cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304297#include <unistd.h>
4298#include <fcntl.h>
4299#include <limits.h>
4300
4301int main(void)
4302{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004303 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304304 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4305 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4306 return 0;
4307}
4308EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004309if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304310 splice=yes
4311fi
4312
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004313##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004314# libnuma probe
4315
4316if test "$numa" != "no" ; then
4317 cat > $TMPC << EOF
4318#include <numa.h>
4319int main(void) { return numa_available(); }
4320EOF
4321
4322 if compile_prog "" "-lnuma" ; then
4323 numa=yes
4324 libs_softmmu="-lnuma $libs_softmmu"
4325 else
4326 if test "$numa" = "yes" ; then
4327 feature_not_found "numa" "install numactl devel"
4328 fi
4329 numa=no
4330 fi
4331fi
4332
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004333if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4334 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4335 exit 1
4336fi
4337
Yang Zhong5a22ab72017-12-20 21:16:46 +08004338# Even if malloc_trim() is available, these non-libc memory allocators
4339# do not support it.
4340if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4341 if test "$malloc_trim" = "yes" ; then
4342 echo "Disabling malloc_trim with non-libc memory allocator"
4343 fi
4344 malloc_trim="no"
4345fi
4346
4347#######################################
4348# malloc_trim
4349
4350if test "$malloc_trim" != "no" ; then
4351 cat > $TMPC << EOF
4352#include <malloc.h>
4353int main(void) { malloc_trim(0); return 0; }
4354EOF
4355 if compile_prog "" "" ; then
4356 malloc_trim="yes"
4357 else
4358 malloc_trim="no"
4359 fi
4360fi
4361
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004362##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004363# tcmalloc probe
4364
4365if test "$tcmalloc" = "yes" ; then
4366 cat > $TMPC << EOF
4367#include <stdlib.h>
4368int main(void) { malloc(1); return 0; }
4369EOF
4370
4371 if compile_prog "" "-ltcmalloc" ; then
4372 LIBS="-ltcmalloc $LIBS"
4373 else
4374 feature_not_found "tcmalloc" "install gperftools devel"
4375 fi
4376fi
4377
4378##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004379# jemalloc probe
4380
4381if test "$jemalloc" = "yes" ; then
4382 cat > $TMPC << EOF
4383#include <stdlib.h>
4384int main(void) { malloc(1); return 0; }
4385EOF
4386
4387 if compile_prog "" "-ljemalloc" ; then
4388 LIBS="-ljemalloc $LIBS"
4389 else
4390 feature_not_found "jemalloc" "install jemalloc devel"
4391 fi
4392fi
4393
4394##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004395# signalfd probe
4396signalfd="no"
4397cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004398#include <unistd.h>
4399#include <sys/syscall.h>
4400#include <signal.h>
4401int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4402EOF
4403
4404if compile_prog "" "" ; then
4405 signalfd=yes
4406fi
4407
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004408# check if optreset global is declared by <getopt.h>
4409optreset="no"
4410cat > $TMPC << EOF
4411#include <getopt.h>
4412int main(void) { return optreset; }
4413EOF
4414
4415if compile_prog "" "" ; then
4416 optreset=yes
4417fi
4418
Riku Voipioc2882b92009-08-12 15:08:24 +03004419# check if eventfd is supported
4420eventfd=no
4421cat > $TMPC << EOF
4422#include <sys/eventfd.h>
4423
4424int main(void)
4425{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004426 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004427}
4428EOF
4429if compile_prog "" "" ; then
4430 eventfd=yes
4431fi
4432
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004433# check if memfd is supported
4434memfd=no
4435cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004436#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004437
4438int main(void)
4439{
4440 return memfd_create("foo", MFD_ALLOW_SEALING);
4441}
4442EOF
4443if compile_prog "" "" ; then
4444 memfd=yes
4445fi
4446
Cortland Tölva955727d2018-10-08 09:35:19 -07004447# check for usbfs
4448have_usbfs=no
4449if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004450 cat > $TMPC << EOF
4451#include <linux/usbdevice_fs.h>
4452
4453#ifndef USBDEVFS_GET_CAPABILITIES
4454#error "USBDEVFS_GET_CAPABILITIES undefined"
4455#endif
4456
4457#ifndef USBDEVFS_DISCONNECT_CLAIM
4458#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4459#endif
4460
4461int main(void)
4462{
4463 return 0;
4464}
4465EOF
4466 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004467 have_usbfs=yes
4468 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004469fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004470
Ulrich Hechtd0927932009-09-17 20:22:14 +03004471# check for fallocate
4472fallocate=no
4473cat > $TMPC << EOF
4474#include <fcntl.h>
4475
4476int main(void)
4477{
4478 fallocate(0, 0, 0, 0);
4479 return 0;
4480}
4481EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004482if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004483 fallocate=yes
4484fi
4485
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004486# check for fallocate hole punching
4487fallocate_punch_hole=no
4488cat > $TMPC << EOF
4489#include <fcntl.h>
4490#include <linux/falloc.h>
4491
4492int main(void)
4493{
4494 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4495 return 0;
4496}
4497EOF
4498if compile_prog "" "" ; then
4499 fallocate_punch_hole=yes
4500fi
4501
Denis V. Lunevb953f072015-01-30 11:42:14 +03004502# check that fallocate supports range zeroing inside the file
4503fallocate_zero_range=no
4504cat > $TMPC << EOF
4505#include <fcntl.h>
4506#include <linux/falloc.h>
4507
4508int main(void)
4509{
4510 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4511 return 0;
4512}
4513EOF
4514if compile_prog "" "" ; then
4515 fallocate_zero_range=yes
4516fi
4517
Kevin Wolfed911432014-09-29 17:12:59 +02004518# check for posix_fallocate
4519posix_fallocate=no
4520cat > $TMPC << EOF
4521#include <fcntl.h>
4522
4523int main(void)
4524{
4525 posix_fallocate(0, 0, 0);
4526 return 0;
4527}
4528EOF
4529if compile_prog "" "" ; then
4530 posix_fallocate=yes
4531fi
4532
Peter Maydellc727f472011-01-06 11:05:10 +00004533# check for sync_file_range
4534sync_file_range=no
4535cat > $TMPC << EOF
4536#include <fcntl.h>
4537
4538int main(void)
4539{
4540 sync_file_range(0, 0, 0, 0);
4541 return 0;
4542}
4543EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004544if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004545 sync_file_range=yes
4546fi
4547
Peter Maydelldace20d2011-01-10 13:11:24 +00004548# check for linux/fiemap.h and FS_IOC_FIEMAP
4549fiemap=no
4550cat > $TMPC << EOF
4551#include <sys/ioctl.h>
4552#include <linux/fs.h>
4553#include <linux/fiemap.h>
4554
4555int main(void)
4556{
4557 ioctl(0, FS_IOC_FIEMAP, 0);
4558 return 0;
4559}
4560EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004561if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004562 fiemap=yes
4563fi
4564
Ulrich Hechtd0927932009-09-17 20:22:14 +03004565# check for dup3
4566dup3=no
4567cat > $TMPC << EOF
4568#include <unistd.h>
4569
4570int main(void)
4571{
4572 dup3(0, 0, 0);
4573 return 0;
4574}
4575EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004576if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004577 dup3=yes
4578fi
4579
Alex Bligh4e0c6522013-08-21 16:02:43 +01004580# check for ppoll support
4581ppoll=no
4582cat > $TMPC << EOF
4583#include <poll.h>
4584
4585int main(void)
4586{
4587 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4588 ppoll(&pfd, 1, 0, 0);
4589 return 0;
4590}
4591EOF
4592if compile_prog "" "" ; then
4593 ppoll=yes
4594fi
4595
Alex Blighcd758dd2013-08-21 16:02:44 +01004596# check for prctl(PR_SET_TIMERSLACK , ... ) support
4597prctl_pr_set_timerslack=no
4598cat > $TMPC << EOF
4599#include <sys/prctl.h>
4600
4601int main(void)
4602{
4603 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4604 return 0;
4605}
4606EOF
4607if compile_prog "" "" ; then
4608 prctl_pr_set_timerslack=yes
4609fi
4610
Peter Maydell3b6edd12011-02-15 18:35:05 +00004611# check for epoll support
4612epoll=no
4613cat > $TMPC << EOF
4614#include <sys/epoll.h>
4615
4616int main(void)
4617{
4618 epoll_create(0);
4619 return 0;
4620}
4621EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004622if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004623 epoll=yes
4624fi
4625
Peter Maydell227f0212016-06-06 19:58:11 +01004626# epoll_create1 is a later addition
4627# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004628epoll_create1=no
4629cat > $TMPC << EOF
4630#include <sys/epoll.h>
4631
4632int main(void)
4633{
Peter Maydell19e83f62011-04-26 16:56:40 +01004634 /* Note that we use epoll_create1 as a value, not as
4635 * a function being called. This is necessary so that on
4636 * old SPARC glibc versions where the function was present in
4637 * the library but not declared in the header file we will
4638 * fail the configure check. (Otherwise we will get a compiler
4639 * warning but not an error, and will proceed to fail the
4640 * qemu compile where we compile with -Werror.)
4641 */
Blue Swirlc075a722012-08-09 20:21:25 +00004642 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004643}
4644EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004645if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004646 epoll_create1=yes
4647fi
4648
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004649# check for sendfile support
4650sendfile=no
4651cat > $TMPC << EOF
4652#include <sys/sendfile.h>
4653
4654int main(void)
4655{
4656 return sendfile(0, 0, 0, 0);
4657}
4658EOF
4659if compile_prog "" "" ; then
4660 sendfile=yes
4661fi
4662
Riku Voipio51834342014-06-22 11:25:42 +01004663# check for timerfd support (glibc 2.8 and newer)
4664timerfd=no
4665cat > $TMPC << EOF
4666#include <sys/timerfd.h>
4667
4668int main(void)
4669{
4670 return(timerfd_create(CLOCK_REALTIME, 0));
4671}
4672EOF
4673if compile_prog "" "" ; then
4674 timerfd=yes
4675fi
4676
Riku Voipio9af5c902014-08-12 15:58:57 +03004677# check for setns and unshare support
4678setns=no
4679cat > $TMPC << EOF
4680#include <sched.h>
4681
4682int main(void)
4683{
4684 int ret;
4685 ret = setns(0, 0);
4686 ret = unshare(0);
4687 return ret;
4688}
4689EOF
4690if compile_prog "" "" ; then
4691 setns=yes
4692fi
4693
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004694# clock_adjtime probe
4695clock_adjtime=no
4696cat > $TMPC <<EOF
4697#include <time.h>
4698
4699int main(void)
4700{
4701 return clock_adjtime(0, 0);
4702}
4703EOF
4704clock_adjtime=no
4705if compile_prog "" "" ; then
4706 clock_adjtime=yes
4707fi
4708
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004709# syncfs probe
4710syncfs=no
4711cat > $TMPC <<EOF
4712#include <unistd.h>
4713
4714int main(void)
4715{
4716 return syncfs(0);
4717}
4718EOF
4719syncfs=no
4720if compile_prog "" "" ; then
4721 syncfs=yes
4722fi
4723
Peter Maydell5f71eac2019-03-07 14:26:46 +00004724# Check we have a new enough version of sphinx-build
4725has_sphinx_build() {
4726 # This is a bit awkward but works: create a trivial document and
4727 # try to run it with our configuration file (which enforces a
4728 # version requirement). This will fail if either
4729 # sphinx-build doesn't exist at all or if it is too old.
4730 mkdir -p "$TMPDIR1/sphinx"
4731 touch "$TMPDIR1/sphinx/index.rst"
4732 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4733}
4734
pbrookcc8ae6d2006-04-23 17:57:59 +00004735# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004736if test "$docs" != "no" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004737 if has makeinfo && has pod2man && has_sphinx_build; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004738 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004739 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004740 if test "$docs" = "yes" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004741 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004742 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004743 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004744 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004745fi
4746
Stefan Weilf514f412009-10-11 12:44:07 +02004747# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004748byteswap_h=no
4749cat > $TMPC << EOF
4750#include <byteswap.h>
4751int main(void) { return bswap_32(0); }
4752EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004753if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004754 byteswap_h=yes
4755fi
4756
Stefan Weil75f13592013-01-05 12:17:38 +01004757# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004758bswap_h=no
4759cat > $TMPC << EOF
4760#include <sys/endian.h>
4761#include <sys/types.h>
4762#include <machine/bswap.h>
4763int main(void) { return bswap32(0); }
4764EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004765if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004766 bswap_h=yes
4767fi
4768
aliguorida93a1f2008-12-12 20:02:52 +00004769##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004770# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004771if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004772 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004773 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004774 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4775 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004776 else
4777 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004778 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004779 fi
4780 libiscsi="no"
4781 fi
4782fi
4783
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004784##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004785# Do we need libm
4786cat > $TMPC << EOF
4787#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004788int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004789EOF
4790if compile_prog "" "" ; then
4791 :
4792elif compile_prog "" "-lm" ; then
4793 LIBS="-lm $LIBS"
4794 libs_qga="-lm $libs_qga"
4795else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004796 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004797fi
4798
4799##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004800# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004801# uClibc provides 2 versions of clock_gettime(), one with realtime
4802# support and one without. This means that the clock_gettime() don't
4803# need -lrt. We still need it for timer_create() so we check for this
4804# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004805cat > $TMPC <<EOF
4806#include <signal.h>
4807#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004808int main(void) {
4809 timer_create(CLOCK_REALTIME, NULL, NULL);
4810 return clock_gettime(CLOCK_REALTIME, NULL);
4811}
aliguorida93a1f2008-12-12 20:02:52 +00004812EOF
4813
Juan Quintela52166aa2009-08-03 14:46:03 +02004814if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004815 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004816# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004817elif compile_prog "" "$pthread_lib -lrt" ; then
4818 LIBS="$LIBS -lrt"
4819 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004820fi
4821
Thomas Huthd99e97e2019-01-17 18:14:08 +01004822# Check whether we need to link libutil for openpty()
4823cat > $TMPC << EOF
4824extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4825int main(void) { return openpty(0, 0, 0, 0, 0); }
4826EOF
4827
4828if ! compile_prog "" "" ; then
4829 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004830 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004831 libs_tools="-lutil $libs_tools"
4832 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004833fi
4834
Blue Swirlde5071c2009-09-12 09:58:46 +00004835##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004836# spice probe
4837if test "$spice" != "no" ; then
4838 cat > $TMPC << EOF
4839#include <spice.h>
4840int main(void) { spice_server_new(); return 0; }
4841EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004842 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4843 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004844 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004845 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004846 compile_prog "$spice_cflags" "$spice_libs" ; then
4847 spice="yes"
4848 libs_softmmu="$libs_softmmu $spice_libs"
4849 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004850 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4851 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004852 else
4853 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004854 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004855 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004856 fi
4857 spice="no"
4858 fi
4859fi
4860
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004861# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004862if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004863 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004864 libcacard_cflags=$($pkg_config --cflags libcacard)
4865 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004866 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004867 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004868 if test "$smartcard" = "yes"; then
4869 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004870 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004871 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004872 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004873fi
4874
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004875# check for libusb
4876if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004877 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004878 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004879 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4880 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004881 else
4882 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004883 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004884 fi
4885 libusb="no"
4886 fi
4887fi
4888
Hans de Goede69354a82011-07-19 11:04:10 +02004889# check for usbredirparser for usb network redirection support
4890if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004891 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004892 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004893 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4894 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004895 else
4896 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004897 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004898 fi
4899 usb_redir="no"
4900 fi
4901fi
4902
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004903##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004904# check if we have VSS SDK headers for win
4905
Eric Blakee633a5c2019-02-04 20:39:37 -06004906if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4907 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004908 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004909 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004910 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4911 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004912 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004913 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4914 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004915 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004916 esac
4917 cat > $TMPC << EOF
4918#define __MIDL_user_allocate_free_DEFINED__
4919#include <inc/win2003/vss.h>
4920int main(void) { return VSS_CTX_BACKUP; }
4921EOF
4922 if compile_prog "$vss_win32_include" "" ; then
4923 guest_agent_with_vss="yes"
4924 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004925 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004926 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004927 else
4928 if test "$vss_win32_sdk" != "" ; then
4929 echo "ERROR: Please download and install Microsoft VSS SDK:"
4930 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4931 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4932 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4933 echo "ERROR: The headers are extracted in the directory \`inc'."
4934 feature_not_found "VSS support"
4935 fi
4936 guest_agent_with_vss="no"
4937 fi
4938fi
4939
4940##########################################
4941# lookup Windows platform SDK (if not specified)
4942# The SDK is needed only to build .tlb (type library) file of guest agent
4943# VSS provider from the source. It is usually unnecessary because the
4944# pre-compiled .tlb file is included.
4945
Eric Blakee633a5c2019-02-04 20:39:37 -06004946if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4947 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004948 if test -z "$win_sdk"; then
4949 programfiles="$PROGRAMFILES"
4950 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4951 if test -n "$programfiles"; then
4952 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4953 else
4954 feature_not_found "Windows SDK"
4955 fi
4956 elif test "$win_sdk" = "no"; then
4957 win_sdk=""
4958 fi
4959fi
4960
4961##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004962# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06004963if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05004964 cat > $TMPC << EOF
4965#include <windows.h>
4966#include <ntddscsi.h>
4967int main(void) {
4968#if !defined(IOCTL_SCSI_GET_ADDRESS)
4969#error Missing required ioctl definitions
4970#endif
4971 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4972 return addr.Lun;
4973}
4974EOF
4975 if compile_prog "" "" ; then
4976 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08004977 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004978 fi
4979fi
4980
4981##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004982# virgl renderer probe
4983
4984if test "$virglrenderer" != "no" ; then
4985 cat > $TMPC << EOF
4986#include <virglrenderer.h>
4987int main(void) { virgl_renderer_poll(); return 0; }
4988EOF
4989 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4990 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004991 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004992 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4993 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4994 virglrenderer="yes"
4995 else
4996 if test "$virglrenderer" = "yes" ; then
4997 feature_not_found "virglrenderer"
4998 fi
4999 virglrenderer="no"
5000 fi
5001fi
5002
5003##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005004# capstone
5005
Richard Hendersone219c492017-09-28 09:01:23 -07005006case "$capstone" in
5007 "" | yes)
5008 if $pkg_config capstone; then
5009 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005010 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005011 capstone=git
5012 elif test -e "${source_path}/capstone/Makefile" ; then
5013 capstone=internal
5014 elif test -z "$capstone" ; then
5015 capstone=no
5016 else
5017 feature_not_found "capstone" "Install capstone devel or git submodule"
5018 fi
5019 ;;
5020
5021 system)
5022 if ! $pkg_config capstone; then
5023 feature_not_found "capstone" "Install capstone devel"
5024 fi
5025 ;;
5026esac
5027
5028case "$capstone" in
5029 git | internal)
5030 if test "$capstone" = git; then
5031 git_submodules="${git_submodules} capstone"
5032 fi
5033 mkdir -p capstone
5034 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5035 if test "$mingw32" = "yes"; then
5036 LIBCAPSTONE=capstone.lib
5037 else
5038 LIBCAPSTONE=libcapstone.a
5039 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005040 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005041 ;;
5042
5043 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005044 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005045 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005046 ;;
5047
5048 no)
5049 ;;
5050 *)
5051 error_exit "Unknown state for capstone: $capstone"
5052 ;;
5053esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005054
5055##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005056# check if we have fdatasync
5057
5058fdatasync=no
5059cat > $TMPC << EOF
5060#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005061int main(void) {
5062#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5063return fdatasync(0);
5064#else
Stefan Weile172fe12012-04-06 21:33:20 +02005065#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005066#endif
5067}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005068EOF
5069if compile_prog "" "" ; then
5070 fdatasync=yes
5071fi
5072
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005073##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005074# check if we have madvise
5075
5076madvise=no
5077cat > $TMPC << EOF
5078#include <sys/types.h>
5079#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005080#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005081int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5082EOF
5083if compile_prog "" "" ; then
5084 madvise=yes
5085fi
5086
5087##########################################
5088# check if we have posix_madvise
5089
5090posix_madvise=no
5091cat > $TMPC << EOF
5092#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005093#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005094int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5095EOF
5096if compile_prog "" "" ; then
5097 posix_madvise=yes
5098fi
5099
5100##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005101# check if we have posix_memalign()
5102
5103posix_memalign=no
5104cat > $TMPC << EOF
5105#include <stdlib.h>
5106int main(void) {
5107 void *p;
5108 return posix_memalign(&p, 8, 8);
5109}
5110EOF
5111if compile_prog "" "" ; then
5112 posix_memalign=yes
5113fi
5114
5115##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005116# check if we have posix_syslog
5117
5118posix_syslog=no
5119cat > $TMPC << EOF
5120#include <syslog.h>
5121int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5122EOF
5123if compile_prog "" "" ; then
5124 posix_syslog=yes
5125fi
5126
5127##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005128# check if we have sem_timedwait
5129
5130sem_timedwait=no
5131cat > $TMPC << EOF
5132#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005133int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005134EOF
5135if compile_prog "" "" ; then
5136 sem_timedwait=yes
5137fi
5138
5139##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005140# check if we have strchrnul
5141
5142strchrnul=no
5143cat > $TMPC << EOF
5144#include <string.h>
5145int main(void);
5146// Use a haystack that the compiler shouldn't be able to constant fold
5147char *haystack = (char*)&main;
5148int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5149EOF
5150if compile_prog "" "" ; then
5151 strchrnul=yes
5152fi
5153
5154##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005155# check if trace backend exists
5156
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005157$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005158if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005159 error_exit "invalid trace backends" \
5160 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005161fi
5162
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005163##########################################
5164# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005165if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005166 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005167#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005168int main(void) { return 0; }
5169EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005170 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005171 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005172 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005173 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005174 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005175 fi
5176 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005177 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005178 else
5179 urcu_bp_libs="-lurcu-bp"
5180 fi
5181
5182 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5183 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005184 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005185 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005186 fi
5187fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005188
5189##########################################
5190# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005191if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005192 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005193 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005194 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005195 trace_backend_stap="no"
5196 if has 'stap' ; then
5197 trace_backend_stap="yes"
5198 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005199fi
5200
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005201##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005202# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305203
Peter Maydell7c2acc72013-04-08 12:11:27 +01005204# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005205# is sigcontext. On Windows the only valid backend is the Windows
5206# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005207
5208ucontext_works=no
5209if test "$darwin" != "yes"; then
5210 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305211#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005212#ifdef __stub_makecontext
5213#error Ignoring glibc stub makecontext which will always fail
5214#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005215int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305216EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005217 if compile_prog "" "" ; then
5218 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305219 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005220fi
5221
5222if test "$coroutine" = ""; then
5223 if test "$mingw32" = "yes"; then
5224 coroutine=win32
5225 elif test "$ucontext_works" = "yes"; then
5226 coroutine=ucontext
5227 else
5228 coroutine=sigaltstack
5229 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005230else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005231 case $coroutine in
5232 windows)
5233 if test "$mingw32" != "yes"; then
5234 error_exit "'windows' coroutine backend only valid for Windows"
5235 fi
5236 # Unfortunately the user visible backend name doesn't match the
5237 # coroutine-*.c filename for this case, so we have to adjust it here.
5238 coroutine=win32
5239 ;;
5240 ucontext)
5241 if test "$ucontext_works" != "yes"; then
5242 feature_not_found "ucontext"
5243 fi
5244 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005245 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005246 if test "$mingw32" = "yes"; then
5247 error_exit "only the 'windows' coroutine backend is valid for Windows"
5248 fi
5249 ;;
5250 *)
5251 error_exit "unknown coroutine backend $coroutine"
5252 ;;
5253 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305254fi
5255
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005256if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005257 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005258fi
5259
Peter Lieven7d992e42016-09-27 11:58:45 +02005260if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005261 if test "$coroutine_pool" = "yes"; then
5262 echo "WARN: disabling coroutine pool for stack usage debugging"
5263 coroutine_pool=no
5264 fi
5265fi
5266
5267
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305268##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305269# check if we have open_by_handle_at
5270
Stefan Weil4e1797f2012-06-18 22:11:06 +02005271open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305272cat > $TMPC << EOF
5273#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005274#if !defined(AT_EMPTY_PATH)
5275# error missing definition
5276#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005277int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005278#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305279EOF
5280if compile_prog "" "" ; then
5281 open_by_handle_at=yes
5282fi
5283
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305284########################################
5285# check if we have linux/magic.h
5286
5287linux_magic_h=no
5288cat > $TMPC << EOF
5289#include <linux/magic.h>
5290int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005291 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305292}
5293EOF
5294if compile_prog "" "" ; then
5295 linux_magic_h=yes
5296fi
5297
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005298########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005299# check whether we can disable warning option with a pragma (this is needed
5300# to silence warnings in the headers of some versions of external libraries).
5301# This test has to be compiled with -Werror as otherwise an unknown pragma is
5302# only a warning.
5303#
5304# If we can't selectively disable warning in the code, disable -Werror so that
5305# the build doesn't fail anyway.
5306
Peter Maydell06d71fa2012-07-30 16:13:07 +01005307pragma_disable_unused_but_set=no
5308cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005309#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005310#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005311#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005312
Peter Maydell06d71fa2012-07-30 16:13:07 +01005313int main(void) {
5314 return 0;
5315}
5316EOF
5317if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005318 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005319else
5320 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005321fi
5322
5323########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005324# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005325
5326valgrind_h=no
5327cat > $TMPC << EOF
5328#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005329int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005330 return 0;
5331}
5332EOF
5333if compile_prog "" "" ; then
5334 valgrind_h=yes
5335fi
5336
5337########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005338# check if environ is declared
5339
5340has_environ=no
5341cat > $TMPC << EOF
5342#include <unistd.h>
5343int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005344 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005345 return 0;
5346}
5347EOF
5348if compile_prog "" "" ; then
5349 has_environ=yes
5350fi
5351
Richard Henderson76a347e2012-12-28 14:17:02 -08005352########################################
5353# check if cpuid.h is usable.
5354
Richard Henderson76a347e2012-12-28 14:17:02 -08005355cat > $TMPC << EOF
5356#include <cpuid.h>
5357int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005358 unsigned a, b, c, d;
5359 int max = __get_cpuid_max(0, 0);
5360
5361 if (max >= 1) {
5362 __cpuid(1, a, b, c, d);
5363 }
5364
5365 if (max >= 7) {
5366 __cpuid_count(7, 0, a, b, c, d);
5367 }
5368
5369 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005370}
5371EOF
5372if compile_prog "" "" ; then
5373 cpuid_h=yes
5374fi
5375
Richard Henderson5dd89902017-07-18 18:40:18 -10005376##########################################
5377# avx2 optimization requirement check
5378#
5379# There is no point enabling this if cpuid.h is not usable,
5380# since we won't be able to select the new routines.
5381
Eric Blakee633a5c2019-02-04 20:39:37 -06005382if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005383 cat > $TMPC << EOF
5384#pragma GCC push_options
5385#pragma GCC target("avx2")
5386#include <cpuid.h>
5387#include <immintrin.h>
5388static int bar(void *a) {
5389 __m256i x = *(__m256i *)a;
5390 return _mm256_testz_si256(x, x);
5391}
5392int main(int argc, char *argv[]) { return bar(argv[0]); }
5393EOF
5394 if compile_object "" ; then
5395 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005396 else
5397 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005398 fi
5399fi
5400
Richard Hendersonf5401662013-02-16 12:46:59 -08005401########################################
5402# check if __[u]int128_t is usable.
5403
5404int128=no
5405cat > $TMPC << EOF
5406__int128_t a;
5407__uint128_t b;
5408int main (void) {
5409 a = a + b;
5410 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005411 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005412 return 0;
5413}
5414EOF
5415if compile_prog "" "" ; then
5416 int128=yes
5417fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005418
Richard Henderson7ebee432016-06-29 21:10:59 -07005419#########################################
5420# See if 128-bit atomic operations are supported.
5421
5422atomic128=no
5423if test "$int128" = "yes"; then
5424 cat > $TMPC << EOF
5425int main(void)
5426{
5427 unsigned __int128 x = 0, y = 0;
5428 y = __atomic_load_16(&x, 0);
5429 __atomic_store_16(&x, y, 0);
5430 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5431 return 0;
5432}
5433EOF
5434 if compile_prog "" "" ; then
5435 atomic128=yes
5436 fi
5437fi
5438
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005439cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005440if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005441 cat > $TMPC << EOF
5442int main(void)
5443{
5444 unsigned __int128 x = 0, y = 0;
5445 __sync_val_compare_and_swap_16(&x, y, x);
5446 return 0;
5447}
5448EOF
5449 if compile_prog "" "" ; then
5450 cmpxchg128=yes
5451 fi
5452fi
5453
Richard Hendersondf79b992016-09-02 12:23:57 -07005454#########################################
5455# See if 64-bit atomic operations are supported.
5456# Note that without __atomic builtins, we can only
5457# assume atomic loads/stores max at pointer size.
5458
5459cat > $TMPC << EOF
5460#include <stdint.h>
5461int main(void)
5462{
5463 uint64_t x = 0, y = 0;
5464#ifdef __ATOMIC_RELAXED
5465 y = __atomic_load_8(&x, 0);
5466 __atomic_store_8(&x, y, 0);
5467 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5468 __atomic_exchange_8(&x, y, 0);
5469 __atomic_fetch_add_8(&x, y, 0);
5470#else
5471 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5472 __sync_lock_test_and_set(&x, y);
5473 __sync_val_compare_and_swap(&x, y, 0);
5474 __sync_fetch_and_add(&x, y);
5475#endif
5476 return 0;
5477}
5478EOF
5479if compile_prog "" "" ; then
5480 atomic64=yes
5481fi
5482
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005483########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005484# See if 16-byte vector operations are supported.
5485# Even without a vector unit the compiler may expand these.
5486# There is a bug in old GCC for PPC that crashes here.
5487# Unfortunately it's the system compiler for Centos 7.
5488
5489cat > $TMPC << EOF
5490typedef unsigned char U1 __attribute__((vector_size(16)));
5491typedef unsigned short U2 __attribute__((vector_size(16)));
5492typedef unsigned int U4 __attribute__((vector_size(16)));
5493typedef unsigned long long U8 __attribute__((vector_size(16)));
5494typedef signed char S1 __attribute__((vector_size(16)));
5495typedef signed short S2 __attribute__((vector_size(16)));
5496typedef signed int S4 __attribute__((vector_size(16)));
5497typedef signed long long S8 __attribute__((vector_size(16)));
5498static U1 a1, b1;
5499static U2 a2, b2;
5500static U4 a4, b4;
5501static U8 a8, b8;
5502static S1 c1;
5503static S2 c2;
5504static S4 c4;
5505static S8 c8;
5506static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005507void helper(void *d, void *a, int shift, int i);
5508void helper(void *d, void *a, int shift, int i)
5509{
5510 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5511 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5512 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5513 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5514}
Richard Hendersondb432672017-09-15 14:11:45 -07005515int main(void)
5516{
5517 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5518 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5519 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5520 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5521 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5522 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5523 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5524 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5525 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5526 return 0;
5527}
5528EOF
5529
5530vector16=no
5531if compile_prog "" "" ; then
5532 vector16=yes
5533fi
5534
5535########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005536# check if getauxval is available.
5537
5538getauxval=no
5539cat > $TMPC << EOF
5540#include <sys/auxv.h>
5541int main(void) {
5542 return getauxval(AT_HWCAP) == 0;
5543}
5544EOF
5545if compile_prog "" "" ; then
5546 getauxval=yes
5547fi
5548
John Snowfd0e6052015-03-25 18:57:39 -04005549########################################
5550# check if ccache is interfering with
5551# semantic analysis of macros
5552
John Snow5e4dfd32015-10-28 13:56:40 -04005553unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005554ccache_cpp2=no
5555cat > $TMPC << EOF
5556static const int Z = 1;
5557#define fn() ({ Z; })
5558#define TAUT(X) ((X) == Z)
5559#define PAREN(X, Y) (X == Y)
5560#define ID(X) (X)
5561int main(int argc, char *argv[])
5562{
5563 int x = 0, y = 0;
5564 x = ID(x);
5565 x = fn();
5566 fn();
5567 if (PAREN(x, y)) return 0;
5568 if (TAUT(Z)) return 0;
5569 return 0;
5570}
5571EOF
5572
5573if ! compile_object "-Werror"; then
5574 ccache_cpp2=yes
5575fi
5576
John Snowb553a042015-11-03 15:43:42 -05005577#################################################
5578# clang does not support glibc + FORTIFY_SOURCE.
5579
5580if test "$fortify_source" != "no"; then
5581 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5582 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005583 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005584 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005585 fortify_source="no";
5586 else
5587 fortify_source="yes"
5588 fi
5589fi
5590
Fam Zheng1efad062018-06-01 17:26:43 +08005591###############################################
5592# Check if copy_file_range is provided by glibc
5593have_copy_file_range=no
5594cat > $TMPC << EOF
5595#include <unistd.h>
5596int main(void) {
5597 copy_file_range(0, NULL, 0, NULL, 0, 0);
5598 return 0;
5599}
5600EOF
5601if compile_prog "" "" ; then
5602 have_copy_file_range=yes
5603fi
5604
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305605##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005606# check if struct fsxattr is available via linux/fs.h
5607
5608have_fsxattr=no
5609cat > $TMPC << EOF
5610#include <linux/fs.h>
5611struct fsxattr foo;
5612int main(void) {
5613 return 0;
5614}
5615EOF
5616if compile_prog "" "" ; then
5617 have_fsxattr=yes
5618fi
5619
Peter Maydellb66e10e2016-06-08 18:34:32 +01005620##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005621# check for usable membarrier system call
5622if test "$membarrier" = "yes"; then
5623 have_membarrier=no
5624 if test "$mingw32" = "yes" ; then
5625 have_membarrier=yes
5626 elif test "$linux" = "yes" ; then
5627 cat > $TMPC << EOF
5628 #include <linux/membarrier.h>
5629 #include <sys/syscall.h>
5630 #include <unistd.h>
5631 #include <stdlib.h>
5632 int main(void) {
5633 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5634 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5635 exit(0);
5636 }
5637EOF
5638 if compile_prog "" "" ; then
5639 have_membarrier=yes
5640 fi
5641 fi
5642 if test "$have_membarrier" = "no"; then
5643 feature_not_found "membarrier" "membarrier system call not available"
5644 fi
5645else
5646 # Do not enable it by default even for Mingw32, because it doesn't
5647 # work on Wine.
5648 membarrier=no
5649fi
5650
5651##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005652# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005653have_rtnetlink=no
5654cat > $TMPC << EOF
5655#include <linux/rtnetlink.h>
5656int main(void) {
5657 return IFLA_PROTO_DOWN;
5658}
5659EOF
5660if compile_prog "" "" ; then
5661 have_rtnetlink=yes
5662fi
5663
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005664##########################################
5665# check for usable AF_VSOCK environment
5666have_af_vsock=no
5667cat > $TMPC << EOF
5668#include <errno.h>
5669#include <sys/types.h>
5670#include <sys/socket.h>
5671#if !defined(AF_VSOCK)
5672# error missing AF_VSOCK flag
5673#endif
5674#include <linux/vm_sockets.h>
5675int main(void) {
5676 int sock, ret;
5677 struct sockaddr_vm svm;
5678 socklen_t len = sizeof(svm);
5679 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5680 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5681 if ((ret == -1) && (errno == ENOTCONN)) {
5682 return 0;
5683 }
5684 return -1;
5685}
5686EOF
5687if compile_prog "" "" ; then
5688 have_af_vsock=yes
5689fi
5690
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005691##########################################
5692# check for usable AF_ALG environment
5693hava_afalg=no
5694cat > $TMPC << EOF
5695#include <errno.h>
5696#include <sys/types.h>
5697#include <sys/socket.h>
5698#include <linux/if_alg.h>
5699int main(void) {
5700 int sock;
5701 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5702 return sock;
5703}
5704EOF
5705if compile_prog "" "" ; then
5706 have_afalg=yes
5707fi
5708if test "$crypto_afalg" = "yes"
5709then
5710 if test "$have_afalg" != "yes"
5711 then
5712 error_exit "AF_ALG requested but could not be detected"
5713 fi
5714fi
5715
5716
James Clarke6969ec62016-06-06 12:02:50 +01005717#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005718# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005719if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005720 cat > $TMPC << EOF
5721#include <Hypervisor/hv.h>
5722int main() { return 0;}
5723EOF
5724 if ! compile_object ""; then
5725 hvf='no'
5726 else
5727 hvf='yes'
5728 LDFLAGS="-framework Hypervisor $LDFLAGS"
5729 fi
5730fi
5731
5732#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005733# Sparc implicitly links with --relax, which is
5734# incompatible with -r, so --no-relax should be
5735# given. It does no harm to give it on other
5736# platforms too.
5737
5738# Note: the prototype is needed since QEMU_CFLAGS
5739# contains -Wmissing-prototypes
5740cat > $TMPC << EOF
5741extern int foo(void);
5742int foo(void) { return 0; }
5743EOF
5744if ! compile_object ""; then
5745 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5746fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005747for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5748 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5749 LD_REL_FLAGS=$i
5750 break
5751 fi
5752done
5753if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5754 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005755fi
5756
Jan Vesely277abf12016-04-29 13:15:23 -04005757##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005758# check for sysmacros.h
5759
5760have_sysmacros=no
5761cat > $TMPC << EOF
5762#include <sys/sysmacros.h>
5763int main(void) {
5764 return makedev(0, 0);
5765}
5766EOF
5767if compile_prog "" "" ; then
5768 have_sysmacros=yes
5769fi
5770
5771##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005772# Veritas HyperScale block driver VxHS
5773# Check if libvxhs is installed
5774
5775if test "$vxhs" != "no" ; then
5776 cat > $TMPC <<EOF
5777#include <stdint.h>
5778#include <qnio/qnio_api.h>
5779
5780void *vxhs_callback;
5781
5782int main(void) {
5783 iio_init(QNIO_VERSION, vxhs_callback);
5784 return 0;
5785}
5786EOF
5787 vxhs_libs="-lvxhs -lssl"
5788 if compile_prog "" "$vxhs_libs" ; then
5789 vxhs=yes
5790 else
5791 if test "$vxhs" = "yes" ; then
5792 feature_not_found "vxhs block device" "Install libvxhs See github"
5793 fi
5794 vxhs=no
5795 fi
5796fi
5797
5798##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005799# check for _Static_assert()
5800
5801have_static_assert=no
5802cat > $TMPC << EOF
5803_Static_assert(1, "success");
5804int main(void) {
5805 return 0;
5806}
5807EOF
5808if compile_prog "" "" ; then
5809 have_static_assert=yes
5810fi
5811
5812##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005813# check for utmpx.h, it is missing e.g. on OpenBSD
5814
5815have_utmpx=no
5816cat > $TMPC << EOF
5817#include <utmpx.h>
5818struct utmpx user_info;
5819int main(void) {
5820 return 0;
5821}
5822EOF
5823if compile_prog "" "" ; then
5824 have_utmpx=yes
5825fi
5826
5827##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07005828# check for getrandom()
5829
5830have_getrandom=no
5831cat > $TMPC << EOF
5832#include <sys/random.h>
5833int main(void) {
5834 return getrandom(0, 0, GRND_NONBLOCK);
5835}
5836EOF
5837if compile_prog "" "" ; then
5838 have_getrandom=yes
5839fi
5840
5841##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005842# checks for sanitizers
5843
Marc-André Lureau247724c2018-01-16 16:11:51 +01005844have_asan=no
5845have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005846have_asan_iface_h=no
5847have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005848
5849if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005850 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005851 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5852 have_asan=yes
5853 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005854
5855 # we could use a simple skeleton for flags checks, but this also
5856 # detect the static linking issue of ubsan, see also:
5857 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5858 cat > $TMPC << EOF
5859#include <stdlib.h>
5860int main(void) {
5861 void *tmp = malloc(10);
5862 return *(int *)(tmp + 2);
5863}
5864EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005865 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5866 have_ubsan=yes
5867 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005868
5869 if check_include "sanitizer/asan_interface.h" ; then
5870 have_asan_iface_h=yes
5871 fi
5872
5873 cat > $TMPC << EOF
5874#include <sanitizer/asan_interface.h>
5875int main(void) {
5876 __sanitizer_start_switch_fiber(0, 0, 0);
5877 return 0;
5878}
5879EOF
5880 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5881 have_asan_iface_fiber=yes
5882 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005883fi
5884
5885##########################################
Junyan He17824402018-07-18 15:47:59 +08005886# check for libpmem
5887
5888if test "$libpmem" != "no"; then
5889 if $pkg_config --exists "libpmem"; then
5890 libpmem="yes"
5891 libpmem_libs=$($pkg_config --libs libpmem)
5892 libpmem_cflags=$($pkg_config --cflags libpmem)
5893 libs_softmmu="$libs_softmmu $libpmem_libs"
5894 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5895 else
5896 if test "$libpmem" = "yes" ; then
5897 feature_not_found "libpmem" "Install nvml or pmdk"
5898 fi
5899 libpmem="no"
5900 fi
5901fi
5902
5903##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005904# check for slirp
5905
5906case "$slirp" in
5907 "" | yes)
5908 if $pkg_config slirp; then
5909 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02005910 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5911 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005912 elif test -e "${source_path}/slirp/Makefile" ; then
5913 slirp=internal
5914 elif test -z "$slirp" ; then
5915 slirp=no
5916 else
5917 feature_not_found "slirp" "Install slirp devel or git submodule"
5918 fi
5919 ;;
5920
5921 system)
5922 if ! $pkg_config slirp; then
5923 feature_not_found "slirp" "Install slirp devel"
5924 fi
5925 ;;
5926esac
5927
5928case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02005929 git | internal)
5930 if test "$slirp" = git; then
5931 git_submodules="${git_submodules} slirp"
5932 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005933 mkdir -p slirp
5934 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5935 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5936 ;;
5937
5938 system)
5939 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5940 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5941 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5942 ;;
5943
5944 no)
5945 ;;
5946 *)
5947 error_exit "Unknown state for slirp: $slirp"
5948 ;;
5949esac
5950
5951
5952##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005953# End of CC checks
5954# After here, no more $cc or $ld runs
5955
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005956write_c_skeleton
5957
Blue Swirl1d728c32012-05-01 18:45:39 +00005958if test "$gcov" = "yes" ; then
5959 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5960 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005961elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005962 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005963elif test "$debug" = "no"; then
5964 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005965fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005966
Marc-André Lureau247724c2018-01-16 16:11:51 +01005967if test "$have_asan" = "yes"; then
5968 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005969 if test "$have_asan_iface_h" = "no" ; then
5970 echo "ASAN build enabled, but ASAN header missing." \
5971 "Without code annotation, the report may be inferior."
5972 elif test "$have_asan_iface_fiber" = "no" ; then
5973 echo "ASAN build enabled, but ASAN header is too old." \
5974 "Without code annotation, the report may be inferior."
5975 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005976fi
5977if test "$have_ubsan" = "yes"; then
5978 CFLAGS="-fsanitize=undefined $CFLAGS"
5979fi
5980
Peter Lieven6542aa92014-02-03 10:26:13 +01005981##########################################
5982# Do we have libnfs
5983if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005984 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005985 libnfs="yes"
5986 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005987 else
5988 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005989 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005990 fi
5991 libnfs="no"
5992 fi
5993fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005994
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005995##########################################
5996# Do we have libudev
5997if test "$libudev" != "no" ; then
5998 if $pkg_config libudev && test "$static" != "yes"; then
5999 libudev="yes"
6000 libudev_libs=$($pkg_config --libs libudev)
6001 else
6002 libudev="no"
6003 fi
6004fi
6005
Peter Maydell6ca026c2012-07-18 15:10:18 +01006006# Now we've finished running tests it's OK to add -Werror to the compiler flags
6007if test "$werror" = "yes"; then
6008 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6009fi
6010
Juan Quintelae86ecd42009-08-03 14:45:59 +02006011if test "$solaris" = "no" ; then
6012 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02006013 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006014 fi
6015fi
6016
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006017# test if pod2man has --utf8 option
6018if pod2man --help | grep -q utf8; then
6019 POD2MAN="pod2man --utf8"
6020else
6021 POD2MAN="pod2man"
6022fi
6023
Blue Swirl952afb72010-09-19 08:36:34 +00006024# Use ASLR, no-SEH and DEP if available
6025if test "$mingw32" = "yes" ; then
6026 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006027 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00006028 LDFLAGS="-Wl,$flag $LDFLAGS"
6029 fi
6030 done
6031fi
6032
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006033# Disable OpenBSD W^X if available
6034if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6035 cat > $TMPC <<EOF
6036 int main(void) { return 0; }
6037EOF
6038 wx_ldflags="-Wl,-z,wxneeded"
6039 if compile_prog "" "$wx_ldflags"; then
6040 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6041 fi
6042fi
6043
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006044qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006045qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006046qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006047qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006048qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006049qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006050
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006051# We can only support ivshmem if we have eventfd
6052if [ "$eventfd" = "yes" ]; then
6053 ivshmem=yes
6054fi
6055
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006056tools=""
6057if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006058 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006059 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6060 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006061 fi
6062 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006063 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006064 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006065 if [ "$curl" = "yes" ]; then
6066 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006067 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006068fi
6069if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006070 if test "$linux" = yes; then
6071 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006072 virtfs=yes
6073 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6074 else
6075 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006076 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306077 fi
Andreas Färber17500372012-05-01 01:12:03 +02006078 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006079 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006080 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6081 mpath=yes
6082 else
6083 if test "$mpath" = yes; then
6084 error_exit "Multipath requires libmpathpersist devel"
6085 fi
6086 mpath=no
6087 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006088 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6089 else
6090 if test "$virtfs" = yes; then
6091 error_exit "VirtFS is supported only on Linux"
6092 fi
6093 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006094 if test "$mpath" = yes; then
6095 error_exit "Multipath is supported only on Linux"
6096 fi
6097 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306098 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006099 if test "$xkbcommon" = "yes"; then
6100 tools="qemu-keymap\$(EXESUF) $tools"
6101 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006102fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006103
6104# Probe for guest agent support/options
6105
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006106if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006107 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6108 guest_agent=no
6109 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006110 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006111 guest_agent=yes
6112 elif [ "$guest_agent" != yes ]; then
6113 guest_agent=no
6114 else
6115 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006116 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006117fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006118
Michael Roth9d6bc272015-08-26 10:49:13 -05006119# Guest agent Window MSI package
6120
6121if test "$guest_agent" != yes; then
6122 if test "$guest_agent_msi" = yes; then
6123 error_exit "MSI guest agent package requires guest agent enabled"
6124 fi
6125 guest_agent_msi=no
6126elif test "$mingw32" != "yes"; then
6127 if test "$guest_agent_msi" = "yes"; then
6128 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6129 fi
6130 guest_agent_msi=no
6131elif ! has wixl; then
6132 if test "$guest_agent_msi" = "yes"; then
6133 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6134 fi
6135 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006136else
6137 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6138 # disabled explicitly
6139 if test "$guest_agent_msi" != "no"; then
6140 guest_agent_msi=yes
6141 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006142fi
6143
Michael Roth1a349042015-08-26 11:14:31 -05006144if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006145 if test "$guest_agent_with_vss" = "yes"; then
6146 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6147 fi
6148
6149 if test "$QEMU_GA_MANUFACTURER" = ""; then
6150 QEMU_GA_MANUFACTURER=QEMU
6151 fi
6152
6153 if test "$QEMU_GA_DISTRO" = ""; then
6154 QEMU_GA_DISTRO=Linux
6155 fi
6156
6157 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006158 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006159 fi
6160
Stefan Weil89138852016-05-16 15:10:20 +02006161 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006162
6163 case "$cpu" in
6164 x86_64)
6165 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6166 ;;
6167 i386)
6168 QEMU_GA_MSI_ARCH="-D Arch=32"
6169 ;;
6170 *)
6171 error_exit "CPU $cpu not supported for building installation package"
6172 ;;
6173 esac
6174fi
6175
Paolo Bonzinica35f782010-05-26 16:08:29 +02006176# Mac OS X ships with a broken assembler
6177roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006178if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6179 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6180 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006181 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006182 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6183 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6184 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006185 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6186 ld_i386_emulation="$emu"
6187 roms="optionrom"
6188 break
6189 fi
6190 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006191fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006192
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006193# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006194if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006195 write_c_skeleton
6196 if compile_prog "-march=z900" ""; then
6197 roms="$roms s390-ccw"
6198 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006199fi
6200
Richard Henderson964c6fa2013-06-21 19:10:16 -07006201# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006202if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006203 textseg_addr=
6204 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006205 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6206 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006207 textseg_addr=0x60000000
6208 ;;
6209 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006210 # A 256M aligned address, high in the address space, with enough
6211 # room for the code_gen_buffer above it before the stack.
6212 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006213 ;;
6214 esac
6215 if [ -n "$textseg_addr" ]; then
6216 cat > $TMPC <<EOF
6217 int main(void) { return 0; }
6218EOF
6219 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6220 if ! compile_prog "" "$textseg_ldflags"; then
6221 # In case ld does not support -Ttext-segment, edit the default linker
6222 # script via sed to set the .text start addr. This is needed on FreeBSD
6223 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006224 if ! $ld --verbose >/dev/null 2>&1; then
6225 error_exit \
6226 "We need to link the QEMU user mode binaries at a" \
6227 "specific text address. Unfortunately your linker" \
6228 "doesn't support either the -Ttext-segment option or" \
6229 "printing the default linker script with --verbose." \
6230 "If you don't want the user mode binaries, pass the" \
6231 "--disable-user option to configure."
6232 fi
6233
Richard Henderson964c6fa2013-06-21 19:10:16 -07006234 $ld --verbose | sed \
6235 -e '1,/==================================================/d' \
6236 -e '/==================================================/,$d' \
6237 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6238 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6239 textseg_ldflags="-Wl,-T../config-host.ld"
6240 fi
6241 fi
6242fi
6243
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006244# Check that the C++ compiler exists and works with the C compiler.
6245# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6246if has $cxx; then
6247 cat > $TMPC <<EOF
6248int c_function(void);
6249int main(void) { return c_function(); }
6250EOF
6251
6252 compile_object
6253
6254 cat > $TMPCXX <<EOF
6255extern "C" {
6256 int c_function(void);
6257}
6258int c_function(void) { return 42; }
6259EOF
6260
6261 update_cxxflags
6262
6263 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6264 # C++ compiler $cxx works ok with C compiler $cc
6265 :
6266 else
6267 echo "C++ compiler $cxx does not work with C compiler $cc"
6268 echo "Disabling C++ specific optional code"
6269 cxx=
6270 fi
6271else
6272 echo "No C++ compiler available; disabling C++ specific optional code"
6273 cxx=
6274fi
6275
Cole Robinson02d34f62016-05-06 14:03:09 -04006276echo_version() {
6277 if test "$1" = "yes" ; then
6278 echo "($2)"
6279 fi
6280}
6281
Jan Kiszka50e12062014-10-02 10:03:55 +02006282# prepend pixman and ftd flags after all config tests are done
6283QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006284QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006285libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006286
bellard43ce4df2003-06-09 19:53:12 +00006287echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006288echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006289echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006290echo "binary directory $(eval echo $bindir)"
6291echo "library directory $(eval echo $libdir)"
6292echo "module directory $(eval echo $qemu_moddir)"
6293echo "libexec directory $(eval echo $libexecdir)"
6294echo "include directory $(eval echo $includedir)"
6295echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006296if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006297echo "local state directory $(eval echo $local_statedir)"
6298echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006299echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006300else
6301echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006302echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006303fi
bellard5a671352003-10-01 00:13:48 +00006304echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006305echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006306echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006307echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006308echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006309echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006310echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006311echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006312echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006313echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006314echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006315echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006316echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006317echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006318echo "python $python ($python_version)"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006319echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6320if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006321 echo "smbd $smbd"
6322fi
Fam Zheng17969262014-02-10 14:48:56 +08006323echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006324echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006325echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006326echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006327echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006328echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006329echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006330echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006331echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006332if test "$darwin" = "yes" ; then
6333 echo "Cocoa support $cocoa"
6334fi
Stefan Weil89138852016-05-16 15:10:20 +02006335echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006336echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006337echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006338echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006339echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006340echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006341echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006342echo "libgcrypt $gcrypt"
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006343if test "$gcrypt" = "yes"
6344then
6345 echo " hmac $gcrypt_hmac"
6346 echo " XTS $gcrypt_xts"
6347fi
Stefan Weil89138852016-05-16 15:10:20 +02006348echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006349echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006350echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006351echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006352echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006353echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006354echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006355echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006356echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006357echo "Block whitelist (rw) $block_drv_rw_whitelist"
6358echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306359echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006360echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006361echo "VNC support $vnc"
6362if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006363 echo "VNC SASL support $vnc_sasl"
6364 echo "VNC JPEG support $vnc_jpeg"
6365 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006366fi
aliguorie37630c2009-04-22 15:19:10 +00006367echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006368if test "$xen" = "yes" ; then
6369 echo "xen ctrl version $xen_ctrl_version"
6370fi
aurel322e4d9fb2008-04-08 06:01:02 +00006371echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006372echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006373echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006374echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006375echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006376echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006377echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006378echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006379echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006380echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006381echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006382echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006383echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006384echo "TCG support $tcg"
6385if test "$tcg" = "yes" ; then
6386 echo "TCG debug enabled $debug_tcg"
6387 echo "TCG interpreter $tcg_interpreter"
6388fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006389echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006390echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006391echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006392echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006393echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006394echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006395echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006396echo "madvise $madvise"
6397echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006398echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006399echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006400echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006401echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006402echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006403echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006404echo "vhost-user support $vhost_user"
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006405echo "vhost-user-fs support $vhost_user_fs"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006406echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006407if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006408echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006409fi
Stefan Weil89138852016-05-16 15:10:20 +02006410echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006411echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006412echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006413echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006414echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006415echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006416echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006417echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006418echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006419echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006420echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006421echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006422echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006423echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006424echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006425echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006426echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006427echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006428echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006429echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306430echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006431echo "gcov $gcov_tool"
6432echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006433echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006434echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006435echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006436echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006437echo "lzo support $lzo"
6438echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006439echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006440echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006441echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006442echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006443echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006444echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006445echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006446echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006447echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006448echo "bochs support $bochs"
6449echo "cloop support $cloop"
6450echo "dmg support $dmg"
6451echo "qcow v1 support $qcow1"
6452echo "vdi support $vdi"
6453echo "vvfat support $vvfat"
6454echo "qed support $qed"
6455echo "parallels support $parallels"
6456echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006457echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006458echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006459echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006460echo "default devices $default_devices"
bellard67b915a2004-03-31 23:37:16 +00006461
Peter Maydell898be3e2017-03-21 14:31:57 +00006462if test "$supported_cpu" = "no"; then
6463 echo
6464 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6465 echo
6466 echo "CPU host architecture $cpu support is not currently maintained."
6467 echo "The QEMU project intends to remove support for this host CPU in"
6468 echo "a future release if nobody volunteers to maintain it and to"
6469 echo "provide a build host for our continuous integration setup."
6470 echo "configure has succeeded and you can continue to build, but"
6471 echo "if you care about QEMU on this platform you should contact"
6472 echo "us upstream at qemu-devel@nongnu.org."
6473fi
6474
6475if test "$supported_os" = "no"; then
6476 echo
6477 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6478 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006479 echo "Host OS $targetos support is not currently maintained."
6480 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006481 echo "a future release if nobody volunteers to maintain it and to"
6482 echo "provide a build host for our continuous integration setup."
6483 echo "configure has succeeded and you can continue to build, but"
6484 echo "if you care about QEMU on this platform you should contact"
6485 echo "us upstream at qemu-devel@nongnu.org."
6486fi
6487
Eduardo Habkoste5abf592019-05-03 16:37:21 -03006488# Note that if the Python conditional here evaluates True we will exit
6489# with status 1 which is a shell 'false' value.
6490if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6491 echo
6492 echo "warning: Python 2 support is deprecated" >&2
6493 echo "warning: Python 3 will be required for building future versions of QEMU" >&2
Cleber Rosa406ab2f2019-08-26 11:58:32 -04006494 python2="y"
Eduardo Habkoste5abf592019-05-03 16:37:21 -03006495fi
6496
Juan Quintela98ec69a2009-07-16 18:34:18 +02006497config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006498
Stefan Weildbd99ae2013-01-01 18:33:44 +01006499echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6500
Juan Quintela98ec69a2009-07-16 18:34:18 +02006501echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006502echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006503
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006504echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006505echo "prefix=$prefix" >> $config_host_mak
6506echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006507echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006508echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006509echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006510echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006511echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006512echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006513echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006514echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006515echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006516echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006517if test "$mingw32" = "no" ; then
6518 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6519fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006520echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006521echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006522echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006523echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006524echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006525echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006526echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006527echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006528echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006529
Juan Quintela98ec69a2009-07-16 18:34:18 +02006530echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006531
Paolo Bonzinif3494742019-01-23 14:56:17 +08006532if test "$default_devices" = "yes" ; then
6533 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6534else
6535 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6536fi
aurel32f8393942009-04-13 18:45:38 +00006537if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006538 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006539fi
aliguori1625af82009-04-05 17:41:02 +00006540if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006541 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006542fi
bellard7d132992003-03-06 23:23:54 +00006543if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006544 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006545fi
bellard67b915a2004-03-31 23:37:16 +00006546if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006547 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006548 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006549 version_major=${rc_version%%.*}
6550 rc_version=${rc_version#*.}
6551 version_minor=${rc_version%%.*}
6552 rc_version=${rc_version#*.}
6553 version_subminor=${rc_version%%.*}
6554 version_micro=0
6555 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6556 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006557 if test "$guest_agent_with_vss" = "yes" ; then
6558 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006559 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006560 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6561 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006562 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006563 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006564 fi
Michael Roth1a349042015-08-26 11:14:31 -05006565 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006566 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006567 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6568 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6569 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6570 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6571 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6572 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6573 fi
pbrook210fa552007-02-27 21:04:49 +00006574else
Juan Quintela35f4df22009-07-27 16:13:07 +02006575 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006576fi
blueswir1128ab2f2008-08-15 18:33:42 +00006577
Mark McLoughlindffcb712009-10-22 17:49:11 +01006578if test "$linux" = "yes" ; then
6579 echo "CONFIG_LINUX=y" >> $config_host_mak
6580fi
6581
bellard83fb7ad2004-07-05 21:25:26 +00006582if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006583 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006584fi
malcb29fe3e2008-11-18 01:42:22 +00006585
bellardec530c82006-04-25 22:36:06 +00006586if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006587 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006588fi
Andreas Färber179cf402010-09-20 00:50:43 +02006589if test "$haiku" = "yes" ; then
6590 echo "CONFIG_HAIKU=y" >> $config_host_mak
6591fi
bellard97a847b2003-08-10 21:36:04 +00006592if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006593 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006594fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006595if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006596 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006597fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006598if test "$want_tools" = "yes" ; then
6599 echo "CONFIG_TOOLS=y" >> $config_host_mak
6600fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006601if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006602 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006603 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006604 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6605 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6606fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006607if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006608 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006609fi
ths8a16d272008-07-19 09:56:24 +00006610if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006611 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006612 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006613fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006614if test "$netmap" = "yes" ; then
6615 echo "CONFIG_NETMAP=y" >> $config_host_mak
6616fi
Gonglei015a33b2014-07-01 20:58:08 +08006617if test "$l2tpv3" = "yes" ; then
6618 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6619fi
Corey Bryant47e98652012-01-26 09:42:26 -05006620if test "$cap_ng" = "yes" ; then
6621 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6622fi
Juan Quintela2358a492009-07-27 16:13:25 +02006623echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006624for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006625 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006626 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006627 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006628 echo "$def=m" >> $config_host_mak ;;
6629 *)
6630 echo "$def=y" >> $config_host_mak ;;
6631 esac
malc0c58ac12008-06-25 21:04:05 +00006632done
Fam Zhengb1149912017-09-07 16:29:13 +08006633echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6634echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6635echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6636echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6637echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006638if test "$audio_win_int" = "yes" ; then
6639 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6640fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006641echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6642echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006643if test "$vnc" = "yes" ; then
6644 echo "CONFIG_VNC=y" >> $config_host_mak
6645fi
aliguori2f9606b2009-03-06 20:27:28 +00006646if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006647 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006648fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006649if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006650 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006651fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006652if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006653 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006654fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006655if test "$xkbcommon" = "yes" ; then
6656 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6657 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6658fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006659if test "$xfs" = "yes" ; then
6660 echo "CONFIG_XFS=y" >> $config_host_mak
6661fi
Stefan Weil89138852016-05-16 15:10:20 +02006662qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006663echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006664echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006665echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006666echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006667if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006668 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006669fi
Fam Zheng17969262014-02-10 14:48:56 +08006670if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006671 # $shacmd can generate a hash started with digit, which the compiler doesn't
6672 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006673 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006674 echo "CONFIG_MODULES=y" >> $config_host_mak
6675fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006676if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006677 echo "CONFIG_X11=y" >> $config_host_mak
6678 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6679 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6680fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006681if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006682 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006683 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006684 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006685 if test "$sdl_image" = "yes" ; then
6686 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6687 fi
bellard49ecc3f2007-11-07 19:25:15 +00006688fi
6689if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006690 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006691fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006692if test "$iconv" = "yes" ; then
6693 echo "CONFIG_ICONV=y" >> $config_host_mak
6694 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6695 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6696fi
balrog4d3b6f62008-02-10 16:33:14 +00006697if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006698 echo "CONFIG_CURSES=m" >> $config_host_mak
6699 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6700 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006701fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006702if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006703 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006704fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006705if test "$accept4" = "yes" ; then
6706 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6707fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306708if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006709 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306710fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006711if test "$eventfd" = "yes" ; then
6712 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6713fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006714if test "$memfd" = "yes" ; then
6715 echo "CONFIG_MEMFD=y" >> $config_host_mak
6716fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006717if test "$have_usbfs" = "yes" ; then
6718 echo "CONFIG_USBFS=y" >> $config_host_mak
6719fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006720if test "$fallocate" = "yes" ; then
6721 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6722fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006723if test "$fallocate_punch_hole" = "yes" ; then
6724 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6725fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006726if test "$fallocate_zero_range" = "yes" ; then
6727 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6728fi
Kevin Wolfed911432014-09-29 17:12:59 +02006729if test "$posix_fallocate" = "yes" ; then
6730 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6731fi
Peter Maydellc727f472011-01-06 11:05:10 +00006732if test "$sync_file_range" = "yes" ; then
6733 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6734fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006735if test "$fiemap" = "yes" ; then
6736 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6737fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006738if test "$dup3" = "yes" ; then
6739 echo "CONFIG_DUP3=y" >> $config_host_mak
6740fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006741if test "$ppoll" = "yes" ; then
6742 echo "CONFIG_PPOLL=y" >> $config_host_mak
6743fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006744if test "$prctl_pr_set_timerslack" = "yes" ; then
6745 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6746fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006747if test "$epoll" = "yes" ; then
6748 echo "CONFIG_EPOLL=y" >> $config_host_mak
6749fi
6750if test "$epoll_create1" = "yes" ; then
6751 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6752fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006753if test "$sendfile" = "yes" ; then
6754 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6755fi
Riku Voipio51834342014-06-22 11:25:42 +01006756if test "$timerfd" = "yes" ; then
6757 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6758fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006759if test "$setns" = "yes" ; then
6760 echo "CONFIG_SETNS=y" >> $config_host_mak
6761fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006762if test "$clock_adjtime" = "yes" ; then
6763 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6764fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006765if test "$syncfs" = "yes" ; then
6766 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6767fi
aurel323b3f24a2009-04-15 16:12:13 +00006768if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006769 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006770fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006771if test "$inotify1" = "yes" ; then
6772 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6773fi
Peter Maydell401bc052017-09-05 13:19:32 +01006774if test "$sem_timedwait" = "yes" ; then
6775 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6776fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006777if test "$strchrnul" = "yes" ; then
6778 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6779fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006780if test "$byteswap_h" = "yes" ; then
6781 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6782fi
6783if test "$bswap_h" = "yes" ; then
6784 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6785fi
Alexander Graf769ce762009-05-11 17:41:42 +02006786if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006787 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006788 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006789 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006790fi
aurel322e4d9fb2008-04-08 06:01:02 +00006791if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006792 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006793 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006794fi
balrogfb599c92008-09-28 23:49:55 +00006795if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006796 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006797 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006798fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006799if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006800 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006801 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006802 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006803 if test "$gtk_gl" = "yes" ; then
6804 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6805 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006806fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01006807if test "$gio" = "yes" ; then
6808 echo "CONFIG_GIO=y" >> $config_host_mak
6809 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6810 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6811fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006812echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006813if test "$gnutls" = "yes" ; then
6814 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6815fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006816if test "$gcrypt" = "yes" ; then
6817 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006818 if test "$gcrypt_hmac" = "yes" ; then
6819 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6820 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006821fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006822if test "$nettle" = "yes" ; then
6823 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006824 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006825fi
Daniel P. Berrangée0576942019-10-14 17:28:27 +01006826if test "$qemu_private_xts" = "yes" ; then
6827 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6828fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006829if test "$tasn1" = "yes" ; then
6830 echo "CONFIG_TASN1=y" >> $config_host_mak
6831fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006832if test "$auth_pam" = "yes" ; then
6833 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6834fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006835if test "$have_ifaddrs_h" = "yes" ; then
6836 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6837fi
Eric Blake6b39b062016-10-11 10:46:23 -05006838if test "$have_broken_size_max" = "yes" ; then
6839 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6840fi
Jan Vesely277abf12016-04-29 13:15:23 -04006841
6842# Work around a system header bug with some kernel/XFS header
6843# versions where they both try to define 'struct fsxattr':
6844# xfs headers will not try to redefine structs from linux headers
6845# if this macro is set.
6846if test "$have_fsxattr" = "yes" ; then
6847 echo "HAVE_FSXATTR=y" >> $config_host_mak
6848fi
Fam Zheng1efad062018-06-01 17:26:43 +08006849if test "$have_copy_file_range" = "yes" ; then
6850 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6851fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006852if test "$vte" = "yes" ; then
6853 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006854 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006855 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006856fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006857if test "$virglrenderer" = "yes" ; then
6858 echo "CONFIG_VIRGL=y" >> $config_host_mak
6859 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6860 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6861fi
aliguorie37630c2009-04-22 15:19:10 +00006862if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006863 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006864 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006865fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006866if test "$linux_aio" = "yes" ; then
6867 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6868fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006869if test "$attr" = "yes" ; then
6870 echo "CONFIG_ATTR=y" >> $config_host_mak
6871fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006872if test "$libattr" = "yes" ; then
6873 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6874fi
Meador Inge983eef52012-02-24 14:00:42 +05306875if test "$virtfs" = "yes" ; then
6876 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006877fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006878if test "$mpath" = "yes" ; then
6879 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006880 if test "$mpathpersist_new_api" = "yes"; then
6881 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6882 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006883fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006884if test "$vhost_scsi" = "yes" ; then
6885 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6886fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01006887if test "$vhost_net" = "yes" ; then
6888 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6889fi
6890if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01006891 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006892fi
Gonglei042cea22018-03-01 21:46:28 +08006893if test "$vhost_crypto" = "yes" ; then
6894 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6895fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006896if test "$vhost_vsock" = "yes" ; then
6897 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6898fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01006899if test "$vhost_kernel" = "yes" ; then
6900 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6901fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006902if test "$vhost_user" = "yes" ; then
6903 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6904fi
Dr. David Alan Gilbert98fc1ad2019-09-30 11:51:34 +01006905if test "$vhost_user_fs" = "yes" ; then
6906 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6907fi
ths77755342008-11-27 15:45:16 +00006908if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006909 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006910fi
aliguoribf9298b2008-12-05 20:05:26 +00006911if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006912 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006913fi
aliguoriceb42de2009-04-07 18:43:28 +00006914if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006915 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006916fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006917if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006918 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006919fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006920if test "$membarrier" = "yes" ; then
6921 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6922fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006923if test "$signalfd" = "yes" ; then
6924 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6925fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00006926if test "$optreset" = "yes" ; then
6927 echo "HAVE_OPTRESET=y" >> $config_host_mak
6928fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006929if test "$tcg" = "yes"; then
6930 echo "CONFIG_TCG=y" >> $config_host_mak
6931 if test "$tcg_interpreter" = "yes" ; then
6932 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6933 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006934fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006935if test "$fdatasync" = "yes" ; then
6936 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6937fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006938if test "$madvise" = "yes" ; then
6939 echo "CONFIG_MADVISE=y" >> $config_host_mak
6940fi
6941if test "$posix_madvise" = "yes" ; then
6942 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6943fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006944if test "$posix_memalign" = "yes" ; then
6945 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6946fi
bellard97a847b2003-08-10 21:36:04 +00006947
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006948if test "$spice" = "yes" ; then
6949 echo "CONFIG_SPICE=y" >> $config_host_mak
6950fi
6951
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006952if test "$smartcard" = "yes" ; then
6953 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006954 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6955 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006956fi
6957
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006958if test "$libusb" = "yes" ; then
6959 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006960 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6961 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006962fi
6963
Hans de Goede69354a82011-07-19 11:04:10 +02006964if test "$usb_redir" = "yes" ; then
6965 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006966 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6967 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006968fi
6969
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006970if test "$opengl" = "yes" ; then
6971 echo "CONFIG_OPENGL=y" >> $config_host_mak
6972 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006973 if test "$opengl_dmabuf" = "yes" ; then
6974 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6975 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006976fi
6977
Marc-André Lureaud52c4542019-05-24 15:09:42 +02006978if test "$gbm" = "yes" ; then
6979 echo "CONFIG_GBM=y" >> $config_host_mak
6980 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6981 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6982fi
6983
6984
Yang Zhong5a22ab72017-12-20 21:16:46 +08006985if test "$malloc_trim" = "yes" ; then
6986 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6987fi
6988
Liang Li99f2dbd2016-03-08 13:53:16 +08006989if test "$avx2_opt" = "yes" ; then
6990 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6991fi
6992
qiaonuohan607dacd2014-02-18 14:11:30 +08006993if test "$lzo" = "yes" ; then
6994 echo "CONFIG_LZO=y" >> $config_host_mak
6995fi
6996
6997if test "$snappy" = "yes" ; then
6998 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6999fi
7000
Peter Wu6b383c02015-01-06 18:48:14 +01007001if test "$bzip2" = "yes" ; then
7002 echo "CONFIG_BZIP2=y" >> $config_host_mak
7003 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7004fi
7005
Julio Faracco83bc1f92018-11-05 13:08:04 -02007006if test "$lzfse" = "yes" ; then
7007 echo "CONFIG_LZFSE=y" >> $config_host_mak
7008 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7009fi
7010
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007011if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007012 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007013 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7014 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007015fi
7016
Peter Lieven6542aa92014-02-03 10:26:13 +01007017if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007018 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7019 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007020fi
7021
Eduardo Otubof7945732012-08-14 18:44:05 -03007022if test "$seccomp" = "yes"; then
7023 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007024 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7025 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007026fi
7027
bellard83fb7ad2004-07-05 21:25:26 +00007028# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007029if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007030 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007031fi
7032
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007033if test "$localtime_r" = "yes" ; then
7034 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7035fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007036if test "$qom_cast_debug" = "yes" ; then
7037 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7038fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007039if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007040 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007041 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7042 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007043fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007044
Peter Maydell7c2acc72013-04-08 12:11:27 +01007045echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007046if test "$coroutine_pool" = "yes" ; then
7047 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7048else
7049 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7050fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307051
Peter Lieven7d992e42016-09-27 11:58:45 +02007052if test "$debug_stack_usage" = "yes" ; then
7053 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7054fi
7055
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007056if test "$crypto_afalg" = "yes" ; then
7057 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7058fi
7059
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307060if test "$open_by_handle_at" = "yes" ; then
7061 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7062fi
7063
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307064if test "$linux_magic_h" = "yes" ; then
7065 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7066fi
7067
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007068if test "$pragma_diagnostic_available" = "yes" ; then
7069 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007070fi
7071
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007072if test "$valgrind_h" = "yes" ; then
7073 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7074fi
7075
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007076if test "$have_asan_iface_fiber" = "yes" ; then
7077 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7078fi
7079
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007080if test "$has_environ" = "yes" ; then
7081 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7082fi
7083
Richard Henderson76a347e2012-12-28 14:17:02 -08007084if test "$cpuid_h" = "yes" ; then
7085 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7086fi
7087
Richard Hendersonf5401662013-02-16 12:46:59 -08007088if test "$int128" = "yes" ; then
7089 echo "CONFIG_INT128=y" >> $config_host_mak
7090fi
7091
Richard Henderson7ebee432016-06-29 21:10:59 -07007092if test "$atomic128" = "yes" ; then
7093 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7094fi
7095
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007096if test "$cmpxchg128" = "yes" ; then
7097 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7098fi
7099
Richard Hendersondf79b992016-09-02 12:23:57 -07007100if test "$atomic64" = "yes" ; then
7101 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7102fi
7103
Richard Hendersondb432672017-09-15 14:11:45 -07007104if test "$vector16" = "yes" ; then
7105 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7106fi
7107
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007108if test "$getauxval" = "yes" ; then
7109 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7110fi
7111
Bharata B Raoeb100392012-09-24 14:42:45 +05307112if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007113 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007114 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7115 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307116fi
7117
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007118if test "$glusterfs_xlator_opt" = "yes" ; then
7119 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7120fi
7121
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307122if test "$glusterfs_discard" = "yes" ; then
7123 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7124fi
7125
Niels de Vosdf3a4292017-05-28 12:01:14 +05307126if test "$glusterfs_fallocate" = "yes" ; then
7127 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7128fi
7129
Bharata B Rao7c815372013-12-21 14:51:25 +05307130if test "$glusterfs_zerofill" = "yes" ; then
7131 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7132fi
7133
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007134if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7135 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7136fi
7137
Niels de Vos0e3b8912019-03-05 16:46:34 +01007138if test "$glusterfs_iocb_has_stat" = "yes" ; then
7139 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7140fi
7141
Pino Toscanob10d49d2019-06-20 22:08:40 +02007142if test "$libssh" = "yes" ; then
7143 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7144 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7145 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007146fi
7147
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007148if test "$live_block_migration" = "yes" ; then
7149 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7150fi
7151
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007152if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007153 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007154fi
7155
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007156echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7157if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007158 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307159fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007160if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007161 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7162 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007163 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007164fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007165if have_backend "log"; then
7166 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02007167fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007168if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007169 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7170fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007171if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007172 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7173 if test "$trace_backend_stap" = "yes" ; then
7174 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7175 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007176fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007177if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007178 if test "$linux" = "yes" ; then
7179 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007180 else
Stewart Smith21684af2014-01-24 12:39:10 +11007181 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007182 fi
7183fi
Paul Durrant0a852412016-08-04 14:44:14 +01007184if have_backend "syslog"; then
7185 if test "$posix_syslog" = "yes" ; then
7186 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7187 else
7188 feature_not_found "syslog(trace backend)" "syslog not available"
7189 fi
7190fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007191echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7192
Michael R. Hines2da776d2013-07-22 10:01:54 -04007193if test "$rdma" = "yes" ; then
7194 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007195 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007196fi
7197
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007198if test "$pvrdma" = "yes" ; then
7199 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7200fi
7201
Laurent Vivier575b22b2016-06-02 22:14:15 +02007202if test "$have_rtnetlink" = "yes" ; then
7203 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7204fi
7205
Klim Kireeved279a02018-01-12 12:01:19 +03007206if test "$libxml2" = "yes" ; then
7207 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7208 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7209 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7210fi
7211
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007212if test "$replication" = "yes" ; then
7213 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7214fi
7215
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007216if test "$have_af_vsock" = "yes" ; then
7217 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7218fi
7219
Christopher Covington4d043512016-12-28 15:04:33 -05007220if test "$have_sysmacros" = "yes" ; then
7221 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7222fi
7223
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007224if test "$have_static_assert" = "yes" ; then
7225 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7226fi
7227
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007228if test "$have_utmpx" = "yes" ; then
7229 echo "HAVE_UTMPX=y" >> $config_host_mak
7230fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007231if test "$have_getrandom" = "yes" ; then
7232 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7233fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007234if test "$ivshmem" = "yes" ; then
7235 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7236fi
Richard Hendersone219c492017-09-28 09:01:23 -07007237if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007238 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7239fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007240if test "$debug_mutex" = "yes" ; then
7241 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7242fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007243
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007244# Hold two types of flag:
7245# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7246# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007247# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007248# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007249if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007250 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007251 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7252elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7253 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7254 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007255fi
7256
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007257if test "$vxhs" = "yes" ; then
7258 echo "CONFIG_VXHS=y" >> $config_host_mak
7259 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7260fi
7261
Junyan He17824402018-07-18 15:47:59 +08007262if test "$libpmem" = "yes" ; then
7263 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7264fi
7265
Jeff Cody2f740132018-11-07 07:36:44 +01007266if test "$bochs" = "yes" ; then
7267 echo "CONFIG_BOCHS=y" >> $config_host_mak
7268fi
7269if test "$cloop" = "yes" ; then
7270 echo "CONFIG_CLOOP=y" >> $config_host_mak
7271fi
7272if test "$dmg" = "yes" ; then
7273 echo "CONFIG_DMG=y" >> $config_host_mak
7274fi
7275if test "$qcow1" = "yes" ; then
7276 echo "CONFIG_QCOW1=y" >> $config_host_mak
7277fi
7278if test "$vdi" = "yes" ; then
7279 echo "CONFIG_VDI=y" >> $config_host_mak
7280fi
7281if test "$vvfat" = "yes" ; then
7282 echo "CONFIG_VVFAT=y" >> $config_host_mak
7283fi
7284if test "$qed" = "yes" ; then
7285 echo "CONFIG_QED=y" >> $config_host_mak
7286fi
7287if test "$parallels" = "yes" ; then
7288 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7289fi
7290if test "$sheepdog" = "yes" ; then
7291 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7292fi
7293
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007294if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007295 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007296elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007297 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007298elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007299 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007300elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007301 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007302elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007303 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007304elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007305 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007306else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007307 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007308fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007309QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007310
Juan Quintela98ec69a2009-07-16 18:34:18 +02007311echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007312echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007313echo "MAKE=$make" >> $config_host_mak
7314echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007315echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7316echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007317echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7318echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007319echo "PYTHON=$python" >> $config_host_mak
Cleber Rosa406ab2f2019-08-26 11:58:32 -04007320echo "PYTHON2=$python2" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007321echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007322if $iasl -h > /dev/null 2>&1; then
7323 echo "IASL=$iasl" >> $config_host_mak
7324fi
Juan Quintela804edf22009-07-27 16:12:49 +02007325echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007326echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007327echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007328echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007329echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007330echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007331echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007332echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007333echo "OBJCOPY=$objcopy" >> $config_host_mak
7334echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007335echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007336echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007337echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007338echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007339echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007340echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007341echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007342echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007343echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007344if test "$sparse" = "yes" ; then
7345 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007346 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007347 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007348 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7349 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7350fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007351echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007352echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007353echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007354echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007355echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007356echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007357echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007358echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007359echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007360echo "DSOSUF=$DSOSUF" >> $config_host_mak
7361echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007362echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007363echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7364echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007365echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007366if test "$gcov" = "yes" ; then
7367 echo "CONFIG_GCOV=y" >> $config_host_mak
7368 echo "GCOV=$gcov_tool" >> $config_host_mak
7369fi
Juan Quintela804edf22009-07-27 16:12:49 +02007370
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007371if test "$libudev" != "no"; then
7372 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7373 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7374fi
7375
Peter Maydell6efd7512011-11-30 11:59:04 +00007376# use included Linux headers
7377if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007378 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007379 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007380 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007381 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007382 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007383 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007384 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007385 ;;
7386 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007387 linux_arch=s390
7388 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007389 aarch64)
7390 linux_arch=arm64
7391 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007392 mips64)
7393 linux_arch=mips
7394 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007395 *)
7396 # For most CPUs the kernel architecture name and QEMU CPU name match.
7397 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007398 ;;
7399 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007400 # For non-KVM architectures we will not have asm headers
7401 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7402 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7403 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007404fi
7405
bellard1d14ffa2005-10-30 18:58:22 +00007406for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007407target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007408config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007409target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007410target_aligned_only="no"
7411case "$target_name" in
7412 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7413 target_aligned_only="yes"
7414 ;;
7415esac
bellard97a847b2003-08-10 21:36:04 +00007416target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007417case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007418 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 +00007419 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007420 ;;
7421esac
bellard97a847b2003-08-10 21:36:04 +00007422target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007423target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007424target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007425target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007426case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007427 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007428 target_softmmu="yes"
7429 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007430 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007431 target_user_only="yes"
7432 target_linux_user="yes"
7433 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007434 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007435 target_user_only="yes"
7436 target_bsd_user="yes"
7437 ;;
pbrook9e407a82007-05-26 16:38:53 +00007438 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007439 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007440 exit 1
7441 ;;
7442esac
ths831b7822007-01-18 20:06:33 +00007443
bellard97a847b2003-08-10 21:36:04 +00007444mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007445echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007446
pbrooke5fe0c52006-06-11 13:32:59 +00007447bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007448mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007449interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007450gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007451
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007452TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007453TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007454TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007455
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007456case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007457 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007458 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307459 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007460 ;;
7461 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007462 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007463 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307464 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007465 ;;
7466 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007467 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00007468 ;;
7469 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007470 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007471 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007472 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007473 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007474 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007475 aarch64|aarch64_be)
7476 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007477 TARGET_BASE_ARCH=arm
7478 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007479 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007480 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 +01007481 ;;
aurel322408a522008-04-20 20:19:44 +00007482 cris)
aurel322408a522008-04-20 20:19:44 +00007483 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007484 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007485 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08007486 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007487 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007488 ;;
aurel322408a522008-04-20 20:19:44 +00007489 m68k)
aurel322408a522008-04-20 20:19:44 +00007490 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007491 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00007492 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007493 microblaze|microblazeel)
7494 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007495 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007496 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007497 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007498 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007499 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007500 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007501 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007502 ;;
7503 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007504 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007505 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007506 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007507 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007508 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007509 ;;
7510 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007511 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007512 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007513 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007514 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007515 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007516 moxie)
7517 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007518 nios2)
7519 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007520 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007521 TARGET_ARCH=openrisc
7522 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007523 ;;
aurel322408a522008-04-20 20:19:44 +00007524 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007525 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007526 ;;
aurel322408a522008-04-20 20:19:44 +00007527 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007528 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007529 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307530 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007531 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007532 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007533 ppc64le)
7534 TARGET_ARCH=ppc64
7535 TARGET_BASE_ARCH=ppc
7536 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307537 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007538 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 -05007539 ;;
aurel322408a522008-04-20 20:19:44 +00007540 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007541 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007542 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007543 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007544 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007545 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007546 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007547 riscv32)
7548 TARGET_BASE_ARCH=riscv
7549 TARGET_ABI_DIR=riscv
7550 mttcg=yes
Jim Wilson1a987a12019-03-15 03:26:55 -07007551 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
Michael Clark25fa1942018-03-03 01:32:59 +13007552 ;;
7553 riscv64)
7554 TARGET_BASE_ARCH=riscv
7555 TARGET_ABI_DIR=riscv
7556 mttcg=yes
Jim Wilsonc6709702019-03-15 03:26:56 -07007557 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
Michael Clark25fa1942018-03-03 01:32:59 +13007558 ;;
aurel322408a522008-04-20 20:19:44 +00007559 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007560 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007561 bflt="yes"
7562 ;;
7563 sparc)
aurel322408a522008-04-20 20:19:44 +00007564 ;;
7565 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007566 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007567 ;;
7568 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007569 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007570 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007571 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02007572 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007573 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007574 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007575 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007576 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 +01007577 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007578 tilegx)
7579 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007580 tricore)
7581 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007582 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007583 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007584 xtensa|xtensaeb)
7585 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007586 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007587 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007588 ;;
aurel322408a522008-04-20 20:19:44 +00007589 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007590 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007591 ;;
7592esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007593# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7594if [ "$TARGET_BASE_ARCH" = "" ]; then
7595 TARGET_BASE_ARCH=$TARGET_ARCH
7596fi
7597
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007598symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7599
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007600upper() {
7601 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7602}
7603
Stefan Weil89138852016-05-16 15:10:20 +02007604target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007605echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007606echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007607echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007608if [ "$TARGET_ABI_DIR" = "" ]; then
7609 TARGET_ABI_DIR=$TARGET_ARCH
7610fi
Juan Quintela25be2102009-10-07 02:41:00 +02007611echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007612if [ "$HOST_VARIANT_DIR" != "" ]; then
7613 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7614fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007615
7616if supported_xen_target $target; then
7617 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007618 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007619 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007620 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007621 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007622else
7623 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007624fi
7625if supported_kvm_target $target; then
7626 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007627 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7628else
7629 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007630fi
7631if supported_hax_target $target; then
7632 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007633fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007634if supported_hvf_target $target; then
7635 echo "CONFIG_HVF=y" >> $config_target_mak
7636fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007637if supported_whpx_target $target; then
7638 echo "CONFIG_WHPX=y" >> $config_target_mak
7639fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007640if test "$target_aligned_only" = "yes" ; then
7641 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7642fi
bellardde83cd02003-06-15 20:25:43 +00007643if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007644 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007645fi
7646if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007647 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007648 if test "$mttcg" = "yes" ; then
7649 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7650 fi
bellardde83cd02003-06-15 20:25:43 +00007651fi
bellard997344f2003-10-27 21:10:39 +00007652if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007653 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007654 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007655fi
ths831b7822007-01-18 20:06:33 +00007656if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007657 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007658fi
pbrook56aebc82008-10-11 17:55:29 +00007659list=""
7660if test ! -z "$gdb_xml_files" ; then
7661 for x in $gdb_xml_files; do
7662 list="$list $source_path/gdb-xml/$x"
7663 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007664 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007665fi
bellardde83cd02003-06-15 20:25:43 +00007666
Eric Blakee633a5c2019-02-04 20:39:37 -06007667if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007668 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007669fi
blueswir184778502008-10-26 20:33:16 +00007670if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007671 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007672fi
bellard5b0753e2005-03-01 21:37:28 +00007673
Alex Bennée716a5072018-04-10 12:19:40 +01007674
Juan Quintela4afddb52009-08-03 14:46:45 +02007675# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007676
Juan Quintela4afddb52009-08-03 14:46:45 +02007677cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007678ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007679
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007680disas_config() {
7681 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7682 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7683}
7684
Juan Quintela64656022009-08-03 14:46:53 +02007685for i in $ARCH $TARGET_BASE_ARCH ; do
7686 case "$i" in
7687 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007688 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007689 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007690 aarch64)
7691 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007692 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007693 fi
7694 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007695 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007696 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007697 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007698 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007699 fi
Juan Quintela64656022009-08-03 14:46:53 +02007700 ;;
7701 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007702 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007703 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007704 hppa)
7705 disas_config "HPPA"
7706 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007707 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007708 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007709 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007710 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007711 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007712 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007713 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007714 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007715 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007716 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007717 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007718 ;;
7719 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007720 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007721 if test -n "${cxx}"; then
7722 disas_config "NANOMIPS"
7723 fi
Juan Quintela64656022009-08-03 14:46:53 +02007724 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007725 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007726 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007727 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007728 nios2)
7729 disas_config "NIOS2"
7730 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007731 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007732 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007733 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007734 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007735 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007736 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007737 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007738 disas_config "RISCV"
7739 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007740 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007741 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007742 ;;
7743 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007744 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007745 ;;
7746 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007747 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007748 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007749 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007750 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007751 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007752 esac
7753done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007754if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007755 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007756fi
Juan Quintela64656022009-08-03 14:46:53 +02007757
Juan Quintela6ee71262009-08-03 14:46:47 +02007758case "$ARCH" in
7759alpha)
7760 # Ensure there's only a single GP
7761 cflags="-msmall-data $cflags"
7762;;
7763esac
7764
Juan Quintelad02c1db2009-08-03 14:46:50 +02007765if test "$gprof" = "yes" ; then
Philippe Mathieu-Daudé0acf7de2019-01-03 16:09:50 +01007766 echo "TARGET_GPROF=y" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007767 if test "$target_linux_user" = "yes" ; then
7768 cflags="-p $cflags"
7769 ldflags="-p $ldflags"
7770 fi
7771 if test "$target_softmmu" = "yes" ; then
7772 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007773 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007774 fi
7775fi
7776
Eric Blakee633a5c2019-02-04 20:39:37 -06007777if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007778 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007779fi
Juan Quintelafa282482009-07-22 22:37:39 +02007780
Christian Borntraegere9a35912017-08-23 12:16:23 +02007781# Newer kernels on s390 check for an S390_PGSTE program header and
7782# enable the pgste page table extensions in that case. This makes
7783# the vm.allocate_pgste sysctl unnecessary. We enable this program
7784# header if
7785# - we build on s390x
7786# - we build the system emulation for s390x (qemu-system-s390x)
7787# - KVM is enabled
7788# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06007789if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7790 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02007791 if ld_has --s390-pgste ; then
7792 ldflags="-Wl,--s390-pgste $ldflags"
7793 fi
7794fi
7795
Juan Quintela25be2102009-10-07 02:41:00 +02007796echo "LDFLAGS+=$ldflags" >> $config_target_mak
7797echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007798
bellard97a847b2003-08-10 21:36:04 +00007799done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007800
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007801echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7802echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7803
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007804if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02007805 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007806fi
Richard Hendersone219c492017-09-28 09:01:23 -07007807if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02007808 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07007809fi
7810if test -n "$LIBCAPSTONE"; then
7811 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7812fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007813
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007814if test "$numa" = "yes"; then
7815 echo "CONFIG_NUMA=y" >> $config_host_mak
7816fi
7817
John Snowfd0e6052015-03-25 18:57:39 -04007818if test "$ccache_cpp2" = "yes"; then
7819 echo "export CCACHE_CPP2=y" >> $config_host_mak
7820fi
7821
Peter Maydelle29e5c62018-11-02 11:52:38 +00007822# If we're using a separate build tree, set it up now.
7823# DIRS are directories which we simply mkdir in the build tree;
7824# LINKS are things to symlink back into the source tree
7825# (these can be both files and directories).
7826# Caution: do not add files or directories here using wildcards. This
7827# will result in problems later if a new file matching the wildcard is
7828# added to the source tree -- nothing will cause configure to be rerun
7829# so the build tree will be missing the link back to the new file, and
7830# tests might fail. Prefer to keep the relevant files in their own
7831# directory and symlink the directory instead.
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02007832DIRS="tests tests/tcg tests/tcg/lm32 tests/libqos tests/qapi-schema tests/qemu-iotests tests/vm"
Emanuele Giuseppe Espositofc281c82018-06-13 17:07:21 +02007833DIRS="$DIRS tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007834DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10007835DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007836DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02007837LINKS="Makefile"
7838LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
7839LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007840LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007841LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7842LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7843LINKS="$LINKS pc-bios/qemu-icon.bmp"
7844LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007845LINKS="$LINKS tests/acceptance tests/data"
7846LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05007847LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07007848for bios_file in \
7849 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007850 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07007851 $source_path/pc-bios/*.rom \
7852 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007853 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007854 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007855 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01007856 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07007857 $source_path/pc-bios/palcode-*
7858do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007859 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007860done
7861mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007862for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007863 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007864 symlink "$source_path/$f" "$f"
7865 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007866done
Paul Brook1ad21342009-05-19 16:17:58 +01007867
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02007868(for i in $cross_cc_vars; do
7869 export $i
7870done
7871export target_list source_path
7872$source_path/tests/tcg/configure.sh)
7873
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007874# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007875for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007876 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007877 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007878 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007879 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007880 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007881 echo "CC=$cc" >> $config_mak
7882 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007883 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007884 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007885 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007886 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007887 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007888done
7889
Max Reitz76c75602014-05-24 23:24:56 +02007890# set up qemu-iotests in this build directory
7891iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007892
7893echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7894echo >> "$iotests_common_env"
7895echo "export PYTHON='$python'" >> "$iotests_common_env"
7896
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007897# Save the configure command line for later reuse.
7898cat <<EOD >config.status
7899#!/bin/sh
7900# Generated by configure.
7901# Run this file to recreate the current configuration.
7902# Compiler output produced by configure, useful for debugging
7903# configure, is in config.log if it exists.
7904EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007905
7906preserve_env() {
7907 envname=$1
7908
7909 eval envval=\$$envname
7910
7911 if test -n "$envval"
7912 then
7913 echo "$envname='$envval'" >> config.status
7914 echo "export $envname" >> config.status
7915 else
7916 echo "unset $envname" >> config.status
7917 fi
7918}
7919
7920# Preserve various env variables that influence what
7921# features/build target configure will detect
7922preserve_env AR
7923preserve_env AS
7924preserve_env CC
7925preserve_env CPP
7926preserve_env CXX
7927preserve_env INSTALL
7928preserve_env LD
7929preserve_env LD_LIBRARY_PATH
7930preserve_env LIBTOOL
7931preserve_env MAKE
7932preserve_env NM
7933preserve_env OBJCOPY
7934preserve_env PATH
7935preserve_env PKG_CONFIG
7936preserve_env PKG_CONFIG_LIBDIR
7937preserve_env PKG_CONFIG_PATH
7938preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007939preserve_env SDL2_CONFIG
7940preserve_env SMBD
7941preserve_env STRIP
7942preserve_env WINDRES
7943
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007944printf "exec" >>config.status
7945printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007946echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007947chmod +x config.status
7948
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007949rm -r "$TMPDIR1"