blob: 99c64be6b7417f0066e2c8084d4f389ef727241a [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=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200300audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400301audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500302libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100303debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100304stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000305
Daniel P. Berrange92712822017-09-29 11:11:58 +0100306if test -e "$source_path/.git"
307then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100308 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100309 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500310 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
311 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100312else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100313 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100314 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100315
316 if ! test -f "$source_path/ui/keycodemapdb/README"
317 then
318 echo
319 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
320 echo
321 echo "This is not a GIT checkout but module content appears to"
322 echo "be missing. Do not use 'git archive' or GitHub download links"
323 echo "to acquire QEMU source archives. Non-GIT builds are only"
324 echo "supported with source archives linked from:"
325 echo
326 echo " https://www.qemu.org/download/"
327 echo
328 echo "Developers working with GIT can use scripts/archive-source.sh"
329 echo "if they need to create valid source archives."
330 echo
331 exit 1
332 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100333fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100334git="git"
aliguoriac0df512008-12-29 17:14:15 +0000335
Stefan Weilafb63eb2012-09-26 22:04:38 +0200336# Don't accept a target_list environment variable.
337unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000338unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100339
340# Default value for a variable defining feature "foo".
341# * foo="no" feature will only be used if --enable-foo arg is given
342# * foo="" feature will be searched for, and if found, will be used
343# unless --disable-foo is given
344# * foo="yes" this value will only be set by --enable-foo flag.
345# feature will searched for,
346# if not found, configure exits with error
347#
348# Always add --enable-foo and --disable-foo command line args.
349# Distributions want to ensure that several features are compiled in, and it
350# is impossible without a --enable-foo that exits if a feature is not found.
351
352bluez=""
353brlapi=""
354curl=""
355curses=""
356docs=""
357fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100358netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100359sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000360sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530361virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200362mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100363vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366vnc_sasl=""
367vnc_jpeg=""
368vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200369xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100370xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000371xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000372xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100373linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500374cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100375attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200376libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100377xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200378tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100379membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100380vhost_net=""
381vhost_crypto=""
382vhost_scsi=""
383vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200384vhost_user=""
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. Berrange8953caf2016-07-27 14:13:56 +0100477auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100478vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200479virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800480tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200481libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100482live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800483numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800484tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200485jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800486replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700487vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100488bochs="yes"
489cloop="yes"
490dmg="yes"
491qcow1="yes"
492vdi="yes"
493vvfat="yes"
494qed="yes"
495parallels="yes"
496sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300497libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100498docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200499debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800500libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800501default_devices="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100502
Alex Bennéed75402b2018-04-04 20:27:05 +0100503# cross compilers defaults, can be overridden with --cross-cc-ARCH
504cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100505cross_cc_aarch64_be="$cross_cc_aarch64"
506cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100507cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100508cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100509cross_cc_i386="i386-pc-linux-gnu-gcc"
510cross_cc_cflags_i386=""
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700511cross_cc_ppc="powerpc-linux-gnu-gcc"
512cross_cc_cflags_ppc="-m32"
513cross_cc_ppc64="powerpc-linux-gnu-gcc"
514cross_cc_cflags_ppc64="-m64"
515cross_cc_ppc64le="powerpc64le-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100516
517enabled_cross_compilers=""
518
Peter Maydell898be3e2017-03-21 14:31:57 +0000519supported_cpu="no"
520supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100521bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800522malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000523
aliguoriac0df512008-12-29 17:14:15 +0000524# parse CC options first
525for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200526 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000527 case "$opt" in
528 --cross-prefix=*) cross_prefix="$optarg"
529 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100530 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000531 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400532 --cxx=*) CXX="$optarg"
533 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200534 --cpu=*) cpu="$optarg"
535 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100536 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200537 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100538 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100539 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100540 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100541 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200542 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100543 --enable-debug-info) debug_info="yes"
544 ;;
545 --disable-debug-info) debug_info="no"
546 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100547 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
548 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100549 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
550 eval "cross_cc_cflags_${cc_arch}=\$optarg"
551 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100552 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
553 eval "cross_cc_${cc_arch}=\$optarg"
554 ;;
aliguoriac0df512008-12-29 17:14:15 +0000555 esac
556done
aliguoriac0df512008-12-29 17:14:15 +0000557# OS specific
558# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100559# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000560
Peter Maydelle49d0212012-12-07 15:39:13 +0000561# Preferred compiler:
562# ${CC} (if set)
563# ${cross_prefix}gcc (if cross-prefix specified)
564# system compiler
565if test -z "${CC}${cross_prefix}"; then
566 cc="$host_cc"
567else
568 cc="${CC-${cross_prefix}gcc}"
569fi
570
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400571if test -z "${CXX}${cross_prefix}"; then
572 cxx="c++"
573else
574 cxx="${CXX-${cross_prefix}g++}"
575fi
576
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500577ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700578as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700579ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000580cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500581objcopy="${OBJCOPY-${cross_prefix}objcopy}"
582ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800583ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200584nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500585strip="${STRIP-${cross_prefix}strip}"
586windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300587pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
588query_pkg_config() {
589 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
590}
591pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000592sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000593
Peter Maydell45d285a2013-10-21 21:03:06 +0100594# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
595ARFLAGS="${ARFLAGS-rv}"
596
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200597# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100598# We use -fwrapv to tell the compiler that we require a C dialect where
599# left shift of signed integers is well defined and has the expected
600# 2s-complement style results. (Both clang and gcc agree that it
601# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100602QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400603QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100604QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200605QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200606QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100607if test "$debug_info" = "yes"; then
608 CFLAGS="-g $CFLAGS"
609 LDFLAGS="-g $LDFLAGS"
610fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200611
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300612# running configure in the source tree?
613# we know that's the case if configure is there.
614if test -f "./configure"; then
615 pwd_is_source_path="y"
616else
617 pwd_is_source_path="n"
618fi
619
aliguoriac0df512008-12-29 17:14:15 +0000620check_define() {
621cat > $TMPC <<EOF
622#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000623#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000624#endif
625int main(void) { return 0; }
626EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200627 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000628}
629
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200630check_include() {
631cat > $TMPC <<EOF
632#include <$1>
633int main(void) { return 0; }
634EOF
635 compile_object
636}
637
John Snow93b25862015-03-25 18:57:37 -0400638write_c_skeleton() {
639 cat > $TMPC <<EOF
640int main(void) { return 0; }
641EOF
642}
643
Peter Maydellbbea4052012-08-14 15:35:34 +0100644if check_define __linux__ ; then
645 targetos="Linux"
646elif check_define _WIN32 ; then
647 targetos='MINGW32'
648elif check_define __OpenBSD__ ; then
649 targetos='OpenBSD'
650elif check_define __sun__ ; then
651 targetos='SunOS'
652elif check_define __HAIKU__ ; then
653 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100654elif check_define __FreeBSD__ ; then
655 targetos='FreeBSD'
656elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
657 targetos='GNU/kFreeBSD'
658elif check_define __DragonFly__ ; then
659 targetos='DragonFly'
660elif check_define __NetBSD__; then
661 targetos='NetBSD'
662elif check_define __APPLE__; then
663 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100664else
Peter Maydell951fedf2017-07-13 16:15:32 +0100665 # This is a fatal error, but don't report it yet, because we
666 # might be going to just print the --help text, or it might
667 # be the result of a missing compiler.
668 targetos='bogus'
669 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100670fi
671
672# Some host OSes need non-standard checks for which CPU to use.
673# Note that these checks are broken for cross-compilation: if you're
674# cross-compiling to one of these OSes then you'll need to specify
675# the correct CPU with the --cpu option.
676case $targetos in
677Darwin)
678 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
679 # run 64-bit userspace code.
680 # If the user didn't specify a CPU explicitly and the kernel says this is
681 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
682 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
683 cpu="x86_64"
684 fi
685 ;;
686SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200687 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100688 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
689 cpu="x86_64"
690 fi
691esac
692
Juan Quintela2ff6b912009-08-03 14:45:55 +0200693if test ! -z "$cpu" ; then
694 # command line argument
695 :
696elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000697 cpu="i386"
698elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700699 if check_define __ILP32__ ; then
700 cpu="x32"
701 else
702 cpu="x86_64"
703 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000704elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000705 if check_define __arch64__ ; then
706 cpu="sparc64"
707 else
708 cpu="sparc"
709 fi
malcfdf7ed92009-01-14 18:39:52 +0000710elif check_define _ARCH_PPC ; then
711 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700712 if check_define _LITTLE_ENDIAN ; then
713 cpu="ppc64le"
714 else
715 cpu="ppc64"
716 fi
malcfdf7ed92009-01-14 18:39:52 +0000717 else
718 cpu="ppc"
719 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200720elif check_define __mips__ ; then
721 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200722elif check_define __s390__ ; then
723 if check_define __s390x__ ; then
724 cpu="s390x"
725 else
726 cpu="s390"
727 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000728elif check_define __riscv ; then
729 if check_define _LP64 ; then
730 cpu="riscv64"
731 else
732 cpu="riscv32"
733 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100734elif check_define __arm__ ; then
735 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100736elif check_define __aarch64__ ; then
737 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000738else
Stefan Weil89138852016-05-16 15:10:20 +0200739 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000740fi
741
Peter Maydell359bc952011-12-24 13:07:25 +0000742ARCH=
743# Normalise host CPU name and set ARCH.
744# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000745case "$cpu" in
Alistair Francisc4f80542018-12-19 19:20:19 +0000746 ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000747 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100748 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000749 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700750 ppc64le)
751 ARCH="ppc64"
752 supported_cpu="yes"
753 cross_cc_ppc64le=$host_cc
754 ;;
bellard7d132992003-03-06 23:23:54 +0000755 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000756 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000757 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100758 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000759 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000760 x86_64|amd64)
761 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000762 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100763 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000764 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100765 armv*b|armv*l|arm)
766 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000767 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100768 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000769 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100770 aarch64)
771 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000772 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100773 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100774 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200775 mips*)
776 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000777 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100778 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200779 ;;
blueswir131422552007-04-16 18:27:06 +0000780 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000781 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100782 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100783 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000784 ;;
bellard7d132992003-03-06 23:23:54 +0000785 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000786 # This will result in either an error or falling back to TCI later
787 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000788 ;;
789esac
Peter Maydell359bc952011-12-24 13:07:25 +0000790if test -z "$ARCH"; then
791 ARCH="$cpu"
792fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200793
bellard7d132992003-03-06 23:23:54 +0000794# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200795
Stacey Sonadfc3e92014-06-08 09:57:22 -0700796# host *BSD for user mode
797HOST_VARIANT_DIR=""
798
bellard7d132992003-03-06 23:23:54 +0000799case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000800MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200801 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100802 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100803 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200804 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200805 if check_include dsound.h; then
806 audio_drv_list="dsound"
807 else
808 audio_drv_list=""
809 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000810 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000811;;
ths5c40d2b2007-06-23 16:03:36 +0000812GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100813 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100814 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200815 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000816;;
bellard7d3505c2004-05-12 19:32:15 +0000817FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200818 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100819 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100820 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200821 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100822 # needed for kinfo_getvmmap(3) in libutil.h
823 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500824 # needed for kinfo_getproc
825 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100826 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700827 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000828 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000829;;
blueswir1c5e97232009-03-07 20:06:23 +0000830DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200831 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100832 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100833 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200834 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700835 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000836;;
bellard7d3505c2004-05-12 19:32:15 +0000837NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200838 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100839 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100840 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100841 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200842 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200843 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700844 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200845 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000846;;
847OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200848 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100849 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100850 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200851 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700852 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500853 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000854;;
bellard83fb7ad2004-07-05 21:25:26 +0000855Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200856 bsd="yes"
857 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100858 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500859 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800860 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200861 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200862 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200863 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200864 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200865 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100866 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200867 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200868 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200869 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100870 # Disable attempts to use ObjectiveC features in os/object.h since they
871 # won't work when we're compiling with gcc as a C compiler.
872 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700873 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000874 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000875;;
bellardec530c82006-04-25 22:36:06 +0000876SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200877 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100878 make="${MAKE-gmake}"
879 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400880 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200881 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100882 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200883 fi
884 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000885# needed for CMSG_ macros in sys/socket.h
886 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
887# needed for TIOCWIN* defines in termios.h
888 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200889 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200890 solarisnetlibs="-lsocket -lnsl -lresolv"
891 LIBS="$solarisnetlibs $LIBS"
892 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000893;;
Andreas Färber179cf402010-09-20 00:50:43 +0200894Haiku)
895 haiku="yes"
896 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
897 LIBS="-lposix_error_mapper -lnetwork $LIBS"
898;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000899Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100900 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200901 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200902 linux="yes"
903 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200904 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600905 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000906 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200907 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000908;;
bellard7d132992003-03-06 23:23:54 +0000909esac
910
bellard7d3505c2004-05-12 19:32:15 +0000911if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000912 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200913 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000914 fi
bellard7d3505c2004-05-12 19:32:15 +0000915fi
916
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100917: ${make=${MAKE-make}}
918: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000919# We prefer python 3.x. A bare 'python' is traditionally
920# python 2.x, but some distros have it as python 3.x, so
921# we check that before python2
922python=
923for binary in "${PYTHON-python3}" python python2
924do
925 if has "$binary"
926 then
927 python="$binary"
928 break
929 fi
930done
Brade2d88302011-09-02 16:53:28 -0400931: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100932
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100933# Default objcc to clang if available, otherwise use CC
934if has clang; then
935 objcc=clang
936else
937 objcc="$cc"
938fi
939
Juan Quintela3457a3f2009-08-03 14:46:07 +0200940if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200941 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800942 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100943 # MinGW needs -mthreads for TLS and macro _MT.
944 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100945 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400946 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100947 if compile_prog "" "-liberty" ; then
948 LIBS="-liberty $LIBS"
949 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200950 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200951 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300952 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300953 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200954 bindir="\${prefix}"
955 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200956 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200957 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300958 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200959fi
960
Anthony Liguori487fefd2009-06-11 13:28:25 -0500961werror=""
bellard85aa5182007-11-11 20:17:03 +0000962
bellard7d132992003-03-06 23:23:54 +0000963for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200964 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000965 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000966 --help|-h) show_help=yes
967 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400968 --version|-V) exec cat $source_path/VERSION
969 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000970 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000971 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000972 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000973 ;;
aliguoriac0df512008-12-29 17:14:15 +0000974 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000975 ;;
aliguoriac0df512008-12-29 17:14:15 +0000976 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000977 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000978 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000979 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400980 --cxx=*)
981 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200982 --iasl=*) iasl="$optarg"
983 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100984 --objcc=*) objcc="$optarg"
985 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000986 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000987 ;;
pbrook6a882642006-04-17 13:57:12 +0000988 --install=*) install="$optarg"
989 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000990 --python=*) python="$optarg"
991 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000992 --gcov=*) gcov_tool="$optarg"
993 ;;
Brade2d88302011-09-02 16:53:28 -0400994 --smbd=*) smbd="$optarg"
995 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200996 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000997 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100998 --extra-cxxflags=*)
999 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +02001000 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +00001001 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +01001002 --enable-debug-info)
1003 ;;
1004 --disable-debug-info)
1005 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +01001006 --cross-cc-*)
1007 ;;
Fam Zheng17969262014-02-10 14:48:56 +08001008 --enable-modules)
1009 modules="yes"
1010 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +00001011 --disable-modules)
1012 modules="no"
1013 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +02001014 --cpu=*)
bellard7d132992003-03-06 23:23:54 +00001015 ;;
pbrookb1a550a2006-04-16 13:28:56 +00001016 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +00001017 if test "$target_list_exclude"; then
1018 error_exit "Can't mix --target-list with --target-list-exclude"
1019 fi
1020 ;;
1021 --target-list-exclude=*) target_list_exclude="$optarg"
1022 if test "$target_list"; then
1023 error_exit "Can't mix --target-list-exclude with --target-list"
1024 fi
bellardde83cd02003-06-15 20:25:43 +00001025 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001026 --enable-trace-backends=*) trace_backends="$optarg"
1027 ;;
1028 # XXX: backwards compatibility
1029 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001030 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001031 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001032 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001033 --with-default-devices) default_devices="yes"
1034 ;;
1035 --without-default-devices) default_devices="no"
1036 ;;
bellard7d132992003-03-06 23:23:54 +00001037 --enable-gprof) gprof="yes"
1038 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001039 --enable-gcov) gcov="yes"
1040 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001041 --static)
1042 static="yes"
1043 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001044 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001045 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001046 --mandir=*) mandir="$optarg"
1047 ;;
1048 --bindir=*) bindir="$optarg"
1049 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001050 --libdir=*) libdir="$optarg"
1051 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001052 --libexecdir=*) libexecdir="$optarg"
1053 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001054 --includedir=*) includedir="$optarg"
1055 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001056 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001057 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001058 --with-confsuffix=*) confsuffix="$optarg"
1059 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001060 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001061 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001062 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001063 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001064 --localstatedir=*) local_statedir="$optarg"
1065 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001066 --firmwarepath=*) firmwarepath="$optarg"
1067 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001068 --host=*|--build=*|\
1069 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001070 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001071 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1072 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1073 # These switches are silently ignored, for compatibility with
1074 # autoconf-generated configure scripts. This allows QEMU's
1075 # configure to be used by RPM and similar macros that set
1076 # lots of directory switches by default.
1077 ;;
bellard97a847b2003-08-10 21:36:04 +00001078 --disable-sdl) sdl="no"
1079 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001080 --enable-sdl) sdl="yes"
1081 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001082 --disable-sdl-image) sdl_image="no"
1083 ;;
1084 --enable-sdl-image) sdl_image="yes"
1085 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001086 --disable-qom-cast-debug) qom_cast_debug="no"
1087 ;;
1088 --enable-qom-cast-debug) qom_cast_debug="yes"
1089 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301090 --disable-virtfs) virtfs="no"
1091 ;;
1092 --enable-virtfs) virtfs="yes"
1093 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001094 --disable-mpath) mpath="no"
1095 ;;
1096 --enable-mpath) mpath="yes"
1097 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001098 --disable-vnc) vnc="no"
1099 ;;
1100 --enable-vnc) vnc="yes"
1101 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001102 --oss-lib=*) oss_lib="$optarg"
1103 ;;
malc0c58ac12008-06-25 21:04:05 +00001104 --audio-drv-list=*) audio_drv_list="$optarg"
1105 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001106 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001107 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001108 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001109 ;;
aurel32f8393942009-04-13 18:45:38 +00001110 --enable-debug-tcg) debug_tcg="yes"
1111 ;;
1112 --disable-debug-tcg) debug_tcg="no"
1113 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001114 --enable-debug)
1115 # Enable debugging options that aren't excessively noisy
1116 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001117 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001118 debug="yes"
1119 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001120 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001121 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001122 --enable-sanitizers) sanitizers="yes"
1123 ;;
1124 --disable-sanitizers) sanitizers="no"
1125 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001126 --enable-sparse) sparse="yes"
1127 ;;
1128 --disable-sparse) sparse="no"
1129 ;;
aliguori1625af82009-04-05 17:41:02 +00001130 --disable-strip) strip_opt="no"
1131 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001132 --disable-vnc-sasl) vnc_sasl="no"
1133 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001134 --enable-vnc-sasl) vnc_sasl="yes"
1135 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001136 --disable-vnc-jpeg) vnc_jpeg="no"
1137 ;;
1138 --enable-vnc-jpeg) vnc_jpeg="yes"
1139 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001140 --disable-vnc-png) vnc_png="no"
1141 ;;
1142 --enable-vnc-png) vnc_png="yes"
1143 ;;
bellard443f1372004-06-04 11:13:20 +00001144 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001145 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001146 --enable-slirp=git) slirp="git"
1147 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001148 --enable-slirp=system) slirp="system"
1149 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001150 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001151 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001152 --enable-vde) vde="yes"
1153 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001154 --disable-netmap) netmap="no"
1155 ;;
1156 --enable-netmap) netmap="yes"
1157 ;;
aliguorie37630c2009-04-22 15:19:10 +00001158 --disable-xen) xen="no"
1159 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001160 --enable-xen) xen="yes"
1161 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001162 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1163 ;;
1164 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1165 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001166 --disable-brlapi) brlapi="no"
1167 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001168 --enable-brlapi) brlapi="yes"
1169 ;;
balrogfb599c92008-09-28 23:49:55 +00001170 --disable-bluez) bluez="no"
1171 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001172 --enable-bluez) bluez="yes"
1173 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001174 --disable-kvm) kvm="no"
1175 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001176 --enable-kvm) kvm="yes"
1177 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001178 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001179 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001180 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001181 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001182 --disable-hvf) hvf="no"
1183 ;;
1184 --enable-hvf) hvf="yes"
1185 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001186 --disable-whpx) whpx="no"
1187 ;;
1188 --enable-whpx) whpx="yes"
1189 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001190 --disable-tcg-interpreter) tcg_interpreter="no"
1191 ;;
1192 --enable-tcg-interpreter) tcg_interpreter="yes"
1193 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001194 --disable-cap-ng) cap_ng="no"
1195 ;;
1196 --enable-cap-ng) cap_ng="yes"
1197 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001198 --disable-tcg) tcg="no"
1199 ;;
1200 --enable-tcg) tcg="yes"
1201 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001202 --disable-malloc-trim) malloc_trim="no"
1203 ;;
1204 --enable-malloc-trim) malloc_trim="yes"
1205 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001206 --disable-spice) spice="no"
1207 ;;
1208 --enable-spice) spice="yes"
1209 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001210 --disable-libiscsi) libiscsi="no"
1211 ;;
1212 --enable-libiscsi) libiscsi="yes"
1213 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001214 --disable-libnfs) libnfs="no"
1215 ;;
1216 --enable-libnfs) libnfs="yes"
1217 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001218 --enable-profiler) profiler="yes"
1219 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001220 --disable-cocoa) cocoa="no"
1221 ;;
malcc2de5c92008-06-28 19:13:06 +00001222 --enable-cocoa)
1223 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001224 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001225 ;;
pbrookcad25d62006-03-19 16:31:11 +00001226 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001227 ;;
pbrookcad25d62006-03-19 16:31:11 +00001228 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001229 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001230 --disable-user)
1231 linux_user="no" ;
1232 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001233 ;;
1234 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001235 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001236 ;;
ths831b7822007-01-18 20:06:33 +00001237 --enable-linux-user) linux_user="yes"
1238 ;;
blueswir184778502008-10-26 20:33:16 +00001239 --disable-bsd-user) bsd_user="no"
1240 ;;
1241 --enable-bsd-user) bsd_user="yes"
1242 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001243 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001244 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001245 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001246 ;;
bellard85aa5182007-11-11 20:17:03 +00001247 --enable-werror) werror="yes"
1248 ;;
1249 --disable-werror) werror="no"
1250 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001251 --enable-stack-protector) stack_protector="yes"
1252 ;;
1253 --disable-stack-protector) stack_protector="no"
1254 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001255 --disable-curses) curses="no"
1256 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001257 --enable-curses) curses="yes"
1258 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001259 --disable-iconv) iconv="no"
1260 ;;
1261 --enable-iconv) iconv="yes"
1262 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001263 --disable-curl) curl="no"
1264 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001265 --enable-curl) curl="yes"
1266 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001267 --disable-fdt) fdt="no"
1268 ;;
1269 --enable-fdt) fdt="yes"
1270 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001271 --disable-linux-aio) linux_aio="no"
1272 ;;
1273 --enable-linux-aio) linux_aio="yes"
1274 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001275 --disable-attr) attr="no"
1276 ;;
1277 --enable-attr) attr="yes"
1278 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001279 --disable-membarrier) membarrier="no"
1280 ;;
1281 --enable-membarrier) membarrier="yes"
1282 ;;
ths77755342008-11-27 15:45:16 +00001283 --disable-blobs) blobs="no"
1284 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001285 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001286 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001287 --with-coroutine=*) coroutine="$optarg"
1288 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001289 --disable-coroutine-pool) coroutine_pool="no"
1290 ;;
1291 --enable-coroutine-pool) coroutine_pool="yes"
1292 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001293 --enable-debug-stack-usage) debug_stack_usage="yes"
1294 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001295 --enable-crypto-afalg) crypto_afalg="yes"
1296 ;;
1297 --disable-crypto-afalg) crypto_afalg="no"
1298 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001299 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001300 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001301 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001302 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001303 --disable-vhost-net) vhost_net="no"
1304 ;;
1305 --enable-vhost-net) vhost_net="yes"
1306 ;;
Gonglei042cea22018-03-01 21:46:28 +08001307 --disable-vhost-crypto) vhost_crypto="no"
1308 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001309 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001310 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001311 --disable-vhost-scsi) vhost_scsi="no"
1312 ;;
1313 --enable-vhost-scsi) vhost_scsi="yes"
1314 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001315 --disable-vhost-vsock) vhost_vsock="no"
1316 ;;
1317 --enable-vhost-vsock) vhost_vsock="yes"
1318 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001319 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001320 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001321 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001322 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001323 --disable-rbd) rbd="no"
1324 ;;
1325 --enable-rbd) rbd="yes"
1326 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001327 --disable-xfsctl) xfs="no"
1328 ;;
1329 --enable-xfsctl) xfs="yes"
1330 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001331 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001332 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001333 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001334 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001335 --disable-libusb) libusb="no"
1336 ;;
1337 --enable-libusb) libusb="yes"
1338 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001339 --disable-usb-redir) usb_redir="no"
1340 ;;
1341 --enable-usb-redir) usb_redir="yes"
1342 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001343 --disable-zlib-test) zlib="no"
1344 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001345 --disable-lzo) lzo="no"
1346 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001347 --enable-lzo) lzo="yes"
1348 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001349 --disable-snappy) snappy="no"
1350 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001351 --enable-snappy) snappy="yes"
1352 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001353 --disable-bzip2) bzip2="no"
1354 ;;
1355 --enable-bzip2) bzip2="yes"
1356 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001357 --enable-lzfse) lzfse="yes"
1358 ;;
1359 --disable-lzfse) lzfse="no"
1360 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001361 --enable-guest-agent) guest_agent="yes"
1362 ;;
1363 --disable-guest-agent) guest_agent="no"
1364 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001365 --enable-guest-agent-msi) guest_agent_msi="yes"
1366 ;;
1367 --disable-guest-agent-msi) guest_agent_msi="no"
1368 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001369 --with-vss-sdk) vss_win32_sdk=""
1370 ;;
1371 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1372 ;;
1373 --without-vss-sdk) vss_win32_sdk="no"
1374 ;;
1375 --with-win-sdk) win_sdk=""
1376 ;;
1377 --with-win-sdk=*) win_sdk="$optarg"
1378 ;;
1379 --without-win-sdk) win_sdk="no"
1380 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001381 --enable-tools) want_tools="yes"
1382 ;;
1383 --disable-tools) want_tools="no"
1384 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001385 --enable-seccomp) seccomp="yes"
1386 ;;
1387 --disable-seccomp) seccomp="no"
1388 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301389 --disable-glusterfs) glusterfs="no"
1390 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001391 --disable-avx2) avx2_opt="no"
1392 ;;
1393 --enable-avx2) avx2_opt="yes"
1394 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301395 --enable-glusterfs) glusterfs="yes"
1396 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001397 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1398 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001399 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001400 --enable-vhdx|--disable-vhdx)
1401 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1402 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001403 --enable-uuid|--disable-uuid)
1404 echo "$0: $opt is obsolete, UUID support is always built" >&2
1405 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001406 --disable-gtk) gtk="no"
1407 ;;
1408 --enable-gtk) gtk="yes"
1409 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001410 --tls-priority=*) tls_priority="$optarg"
1411 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001412 --disable-gnutls) gnutls="no"
1413 ;;
1414 --enable-gnutls) gnutls="yes"
1415 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001416 --disable-nettle) nettle="no"
1417 ;;
1418 --enable-nettle) nettle="yes"
1419 ;;
1420 --disable-gcrypt) gcrypt="no"
1421 ;;
1422 --enable-gcrypt) gcrypt="yes"
1423 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001424 --disable-auth-pam) auth_pam="no"
1425 ;;
1426 --enable-auth-pam) auth_pam="yes"
1427 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001428 --enable-rdma) rdma="yes"
1429 ;;
1430 --disable-rdma) rdma="no"
1431 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001432 --enable-pvrdma) pvrdma="yes"
1433 ;;
1434 --disable-pvrdma) pvrdma="no"
1435 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001436 --disable-vte) vte="no"
1437 ;;
1438 --enable-vte) vte="yes"
1439 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001440 --disable-virglrenderer) virglrenderer="no"
1441 ;;
1442 --enable-virglrenderer) virglrenderer="yes"
1443 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001444 --disable-tpm) tpm="no"
1445 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001446 --enable-tpm) tpm="yes"
1447 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001448 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001449 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001450 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001451 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001452 --disable-live-block-migration) live_block_migration="no"
1453 ;;
1454 --enable-live-block-migration) live_block_migration="yes"
1455 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001456 --disable-numa) numa="no"
1457 ;;
1458 --enable-numa) numa="yes"
1459 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001460 --disable-libxml2) libxml2="no"
1461 ;;
1462 --enable-libxml2) libxml2="yes"
1463 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001464 --disable-tcmalloc) tcmalloc="no"
1465 ;;
1466 --enable-tcmalloc) tcmalloc="yes"
1467 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001468 --disable-jemalloc) jemalloc="no"
1469 ;;
1470 --enable-jemalloc) jemalloc="yes"
1471 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001472 --disable-replication) replication="no"
1473 ;;
1474 --enable-replication) replication="yes"
1475 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001476 --disable-vxhs) vxhs="no"
1477 ;;
1478 --enable-vxhs) vxhs="yes"
1479 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001480 --disable-bochs) bochs="no"
1481 ;;
1482 --enable-bochs) bochs="yes"
1483 ;;
1484 --disable-cloop) cloop="no"
1485 ;;
1486 --enable-cloop) cloop="yes"
1487 ;;
1488 --disable-dmg) dmg="no"
1489 ;;
1490 --enable-dmg) dmg="yes"
1491 ;;
1492 --disable-qcow1) qcow1="no"
1493 ;;
1494 --enable-qcow1) qcow1="yes"
1495 ;;
1496 --disable-vdi) vdi="no"
1497 ;;
1498 --enable-vdi) vdi="yes"
1499 ;;
1500 --disable-vvfat) vvfat="no"
1501 ;;
1502 --enable-vvfat) vvfat="yes"
1503 ;;
1504 --disable-qed) qed="no"
1505 ;;
1506 --enable-qed) qed="yes"
1507 ;;
1508 --disable-parallels) parallels="no"
1509 ;;
1510 --enable-parallels) parallels="yes"
1511 ;;
1512 --disable-sheepdog) sheepdog="no"
1513 ;;
1514 --enable-sheepdog) sheepdog="yes"
1515 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001516 --disable-vhost-user) vhost_user="no"
1517 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001518 --enable-vhost-user) vhost_user="yes"
1519 ;;
1520 --disable-vhost-kernel) vhost_kernel="no"
1521 ;;
1522 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001523 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001524 --disable-capstone) capstone="no"
1525 ;;
1526 --enable-capstone) capstone="yes"
1527 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001528 --enable-capstone=git) capstone="git"
1529 ;;
1530 --enable-capstone=system) capstone="system"
1531 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001532 --with-git=*) git="$optarg"
1533 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001534 --enable-git-update) git_update=yes
1535 ;;
1536 --disable-git-update) git_update=no
1537 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001538 --enable-debug-mutex) debug_mutex=yes
1539 ;;
1540 --disable-debug-mutex) debug_mutex=no
1541 ;;
Junyan He17824402018-07-18 15:47:59 +08001542 --enable-libpmem) libpmem=yes
1543 ;;
1544 --disable-libpmem) libpmem=no
1545 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001546 *)
1547 echo "ERROR: unknown option $opt"
1548 echo "Try '$0 --help' for more information"
1549 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001550 ;;
bellard7d132992003-03-06 23:23:54 +00001551 esac
1552done
1553
bellard40293e52008-01-31 11:32:10 +00001554case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001555 ppc)
1556 CPU_CFLAGS="-m32"
1557 LDFLAGS="-m32 $LDFLAGS"
Richard Hendersonf8378ac2019-05-01 15:38:18 -07001558 cross_cc_ppc=$cc
1559 cross_cc_cflags_ppc="$CPU_CFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001560 ;;
1561 ppc64)
1562 CPU_CFLAGS="-m64"
1563 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001564 cross_cc_ppc64=$cc
Richard Henderson3ff10752019-05-01 15:38:19 -07001565 cross_cc_cflags_ppc64="$CPU_CFLAGS"
Richard Hendersone3608d62013-08-28 15:48:21 -07001566 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001567 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001568 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1569 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001570 cross_cc_sparc=$cc
Richard Henderson3ff10752019-05-01 15:38:19 -07001571 cross_cc_cflags_sparc="$CPU_CFLAGS"
blueswir131422552007-04-16 18:27:06 +00001572 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001573 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001574 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001575 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001576 cross_cc_sparc64=$cc
Richard Henderson3ff10752019-05-01 15:38:19 -07001577 cross_cc_cflags_sparc64="$CPU_CFLAGS"
blueswir131422552007-04-16 18:27:06 +00001578 ;;
ths76d83bd2007-11-18 21:22:10 +00001579 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001580 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001581 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001582 cross_cc_s390=$cc
Richard Henderson3ff10752019-05-01 15:38:19 -07001583 cross_cc_cflags_s390="$CPU_CFLAGS"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001584 ;;
1585 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001586 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001587 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001588 cross_cc_s390x=$cc
Richard Henderson3ff10752019-05-01 15:38:19 -07001589 cross_cc_cflags_s390x="$CPU_CFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001590 ;;
bellard40293e52008-01-31 11:32:10 +00001591 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001592 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001593 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001594 cross_cc_i386=$cc
Richard Henderson3ff10752019-05-01 15:38:19 -07001595 cross_cc_cflags_i386="$CPU_CFLAGS"
bellard40293e52008-01-31 11:32:10 +00001596 ;;
1597 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001598 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1599 # If we truly care, we should simply detect this case at
1600 # runtime and generate the fallback to serial emulation.
1601 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001602 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001603 cross_cc_x86_64=$cc
Richard Henderson3ff10752019-05-01 15:38:19 -07001604 cross_cc_cflags_x86_64="$CPU_CFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001605 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001606 x32)
1607 CPU_CFLAGS="-mx32"
1608 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001609 cross_cc_i386=$cc
Richard Henderson3ff10752019-05-01 15:38:19 -07001610 cross_cc_cflags_i386="$CPU_CFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001611 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001612 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001613esac
1614
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001615QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001616
Peter Maydellaffc88c2016-06-13 11:32:24 +01001617# For user-mode emulation the host arch has to be one we explicitly
1618# support, even if we're using TCI.
1619if [ "$ARCH" = "unknown" ]; then
1620 bsd_user="no"
1621 linux_user="no"
1622fi
1623
Peter Maydell60e0df22011-05-03 14:50:13 +01001624default_target_list=""
1625
Peter Maydell6e92f822013-05-20 16:16:15 +01001626mak_wilds=""
1627
1628if [ "$softmmu" = "yes" ]; then
1629 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001630fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001631if [ "$linux_user" = "yes" ]; then
1632 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001633fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001634if [ "$bsd_user" = "yes" ]; then
1635 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001636fi
1637
Alex Bennée447e1332019-03-19 11:59:12 +00001638if test -z "$target_list_exclude"; then
1639 for config in $mak_wilds; do
1640 default_target_list="${default_target_list} $(basename "$config" .mak)"
1641 done
1642else
1643 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1644 for config in $mak_wilds; do
1645 target="$(basename "$config" .mak)"
1646 exclude="no"
1647 for excl in $exclude_list; do
1648 if test "$excl" = "$target"; then
1649 exclude="yes"
1650 break;
1651 fi
1652 done
1653 if test "$exclude" = "no"; then
1654 default_target_list="${default_target_list} $target"
1655 fi
1656 done
1657fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001658
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001659# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001660trace_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 +01001661
pbrookaf5db582006-04-08 14:26:41 +00001662if test x"$show_help" = x"yes" ; then
1663cat << EOF
1664
1665Usage: configure [options]
1666Options: [defaults in brackets after descriptions]
1667
Stefan Weil08fb77e2013-12-18 22:09:39 +01001668Standard options:
1669 --help print this message
1670 --prefix=PREFIX install in PREFIX [$prefix]
1671 --interp-prefix=PREFIX where to find shared libraries, etc.
1672 use %M for cpu name [$interp_prefix]
1673 --target-list=LIST set target list (default: build everything)
1674$(echo Available targets: $default_target_list | \
1675 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001676 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001677
1678Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001679 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1680 --cc=CC use C compiler CC [$cc]
1681 --iasl=IASL use ACPI compiler IASL [$iasl]
1682 --host-cc=CC use C compiler CC [$host_cc] for code run at
1683 build time
1684 --cxx=CXX use C++ compiler CXX [$cxx]
1685 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1686 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001687 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001688 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001689 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001690 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001691 --make=MAKE use specified make [$make]
1692 --install=INSTALL use specified install [$install]
1693 --python=PYTHON use specified python [$python]
1694 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001695 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001696 --static enable static build [$static]
1697 --mandir=PATH install man pages in PATH
1698 --datadir=PATH install firmware in PATH$confsuffix
1699 --docdir=PATH install documentation in PATH$confsuffix
1700 --bindir=PATH install binaries in PATH
1701 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001702 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001703 --sysconfdir=PATH install config in PATH$confsuffix
1704 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001705 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001706 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001707 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001708 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001709 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001710 --disable-strip disable stripping binaries
1711 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001712 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001713 --audio-drv-list=LIST set audio drivers list:
1714 Available drivers: $audio_possible_drivers
1715 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1716 --block-drv-rw-whitelist=L
1717 set block driver read-write whitelist
1718 (affects only QEMU, not qemu-img)
1719 --block-drv-ro-whitelist=L
1720 set block driver read-only whitelist
1721 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001722 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001723 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001724 --with-trace-file=NAME Full PATH,NAME of file to store traces
1725 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001726 --disable-slirp disable SLIRP userspace network connectivity
1727 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001728 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001729 --oss-lib path to OSS library
1730 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001731 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001732 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001733 --enable-gcov enable test coverage analysis with gcov
1734 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001735 --disable-blobs disable installing provided firmware blobs
1736 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1737 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001738 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001739 --enable-gprof QEMU profiling with gprof
1740 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001741 --enable-debug-stack-usage
1742 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001743
1744Optional features, enabled with --enable-FEATURE and
1745disabled with --disable-FEATURE, default is enabled if available:
1746
1747 system all system emulation targets
1748 user supported user emulation targets
1749 linux-user all linux usermode emulation targets
1750 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001751 docs build documentation
1752 guest-agent build the QEMU Guest Agent
1753 guest-agent-msi build guest agent Windows MSI installation package
1754 pie Position Independent Executables
1755 modules modules support
1756 debug-tcg TCG debugging (default is disabled)
1757 debug-info debugging information
1758 sparse sparse checker
1759
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001760 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001761 nettle nettle cryptography support
1762 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001763 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001764 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001765 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001766 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001767 vte vte support for the gtk UI
1768 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001769 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001770 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001771 vnc-sasl SASL encryption for VNC server
1772 vnc-jpeg JPEG lossy compression for VNC server
1773 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001774 cocoa Cocoa UI (Mac OS X only)
1775 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001776 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001777 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001778 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001779 brlapi BrlAPI (Braile)
1780 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001781 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001782 fdt fdt device tree
1783 bluez bluez stack connectivity
1784 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001785 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001786 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001787 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001788 rdma Enable RDMA-based migration
1789 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001790 vde support for vde network
1791 netmap support for netmap network
1792 linux-aio Linux AIO support
1793 cap-ng libcap-ng support
1794 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001795 vhost-net vhost-net kernel acceleration support
1796 vhost-vsock virtio sockets device support
1797 vhost-scsi vhost-scsi kernel target support
1798 vhost-crypto vhost-user-crypto backend support
1799 vhost-kernel vhost kernel backend support
1800 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001801 spice spice
1802 rbd rados block device (rbd)
1803 libiscsi iscsi support
1804 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001805 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001806 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001807 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001808 usb-redir usb network redirection support
1809 lzo support of lzo compression library
1810 snappy support of snappy compression library
1811 bzip2 support of bzip2 compression library
1812 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001813 lzfse support of lzfse compression library
1814 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001815 seccomp seccomp support
1816 coroutine-pool coroutine freelist (better performance)
1817 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001818 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001819 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001820 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001821 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001822 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001823 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001824 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001825 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001826 opengl opengl support
1827 virglrenderer virgl rendering support
1828 xfsctl xfsctl support
1829 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001830 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001831 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001832 bochs bochs image format support
1833 cloop cloop image format support
1834 dmg dmg image format support
1835 qcow1 qcow v1 image format support
1836 vdi vdi image format support
1837 vvfat vvfat image format support
1838 qed qed image format support
1839 parallels parallels image format support
1840 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001841 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001842 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001843 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001844 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001845
1846NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001847EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001848exit 0
pbrookaf5db582006-04-08 14:26:41 +00001849fi
1850
Thomas Huth9c790242019-03-11 11:20:34 +01001851# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001852rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001853
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001854if test -z "$python"
1855then
1856 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001857fi
1858
1859# Note that if the Python conditional here evaluates True we will exit
1860# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001861if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1862 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001863 "Use --python=/path/to/python to specify a supported Python."
1864fi
1865
Cleber Rosa755ee702018-11-09 10:07:07 -05001866# Preserve python version since some functionality is dependent on it
1867python_version=$($python -V 2>&1 | sed -e 's/Python\ //')
1868
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001869# Suppress writing compiled files
1870python="$python -B"
1871
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001872# Check that the C compiler works. Doing this here before testing
1873# the host CPU ensures that we had a valid CC to autodetect the
1874# $cpu var (and we should bail right here if that's not the case).
1875# It also allows the help message to be printed without a CC.
1876write_c_skeleton;
1877if compile_object ; then
1878 : C compiler works ok
1879else
1880 error_exit "\"$cc\" either does not exist or does not work"
1881fi
1882if ! compile_prog ; then
1883 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1884fi
1885
Peter Maydell359bc952011-12-24 13:07:25 +00001886# Now we have handled --enable-tcg-interpreter and know we're not just
1887# printing the help message, bail out if the host CPU isn't supported.
1888if test "$ARCH" = "unknown"; then
1889 if test "$tcg_interpreter" = "yes" ; then
1890 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001891 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001892 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001893 fi
1894fi
1895
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001896# Consult white-list to determine whether to enable werror
1897# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001898if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001899 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001900 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001901 werror="yes"
1902 else
1903 werror="no"
1904 fi
1905fi
1906
Peter Maydellfb59dab2017-03-28 14:01:52 +01001907if test "$bogus_os" = "yes"; then
1908 # Now that we know that we're not printing the help and that
1909 # the compiler works (so the results of the check_defines we used
1910 # to identify the OS are reliable), if we didn't recognize the
1911 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001912 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001913fi
1914
Thomas Huthefc6c072018-12-03 10:12:32 +01001915# Check whether the compiler matches our minimum requirements:
1916cat > $TMPC << EOF
1917#if defined(__clang_major__) && defined(__clang_minor__)
1918# ifdef __apple_build_version__
1919# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1920# error You need at least XCode Clang v5.1 to compile QEMU
1921# endif
1922# else
1923# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1924# error You need at least Clang v3.4 to compile QEMU
1925# endif
1926# endif
1927#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1928# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1929# error You need at least GCC v4.8 to compile QEMU
1930# endif
1931#else
1932# error You either need GCC or Clang to compiler QEMU
1933#endif
1934int main (void) { return 0; }
1935EOF
1936if ! compile_prog "" "" ; then
1937 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1938fi
1939
Paolo Bonzini8d050952010-12-23 11:43:52 +01001940gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1941gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001942gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001943gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001944gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001945gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001946# Note that we do not add -Werror to gcc_flags here, because that would
1947# enable it for all configure tests. If a configure test failed due
1948# to -Werror this would just silently disable some features,
1949# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001950
1951cc_has_warning_flag() {
1952 write_c_skeleton;
1953
Peter Maydella1d29d62012-10-27 22:19:07 +01001954 # Use the positive sense of the flag when testing for -Wno-wombat
1955 # support (gcc will happily accept the -Wno- form of unknown
1956 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001957 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1958 compile_prog "-Werror $optflag" ""
1959}
1960
1961for flag in $gcc_flags; do
1962 if cc_has_warning_flag $flag ; then
1963 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001964 fi
1965done
1966
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001967if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001968 cat > $TMPC << EOF
1969int main(int argc, char *argv[])
1970{
1971 char arr[64], *p = arr, *c = argv[0];
1972 while (*c) {
1973 *p++ = *c++;
1974 }
1975 return 0;
1976}
1977EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001978 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001979 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001980 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001981 # We need to check both a compile and a link, since some compiler
1982 # setups fail only on a .c->.o compile and some only at link time
1983 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1984 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001985 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001986 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001987 break
1988 fi
1989 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001990 if test "$stack_protector" = yes; then
1991 if test $sp_on = 0; then
1992 error_exit "Stack protector not supported"
1993 fi
1994 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001995fi
1996
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001997# Disable -Wmissing-braces on older compilers that warn even for
1998# the "universal" C zero initializer {0}.
1999cat > $TMPC << EOF
2000struct {
2001 int a[2];
2002} x = {0};
2003EOF
2004if compile_object "-Werror" "" ; then
2005 :
2006else
2007 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2008fi
2009
Thomas Huthd376e9d2018-12-03 11:41:38 +01002010# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02002011if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01002012 if test "$modules" = "yes" ; then
2013 error_exit "static and modules are mutually incompatible"
2014 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002015 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002016 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02002017 else
2018 pie="no"
2019 fi
2020fi
2021
Emilio G. Cota768b7852015-04-29 13:09:02 +02002022# Unconditional check for compiler __thread support
2023 cat > $TMPC << EOF
2024static __thread int tls_var;
2025int main(void) { return tls_var; }
2026EOF
2027
2028if ! compile_prog "-Werror" "" ; then
2029 error_exit "Your compiler does not support the __thread specifier for " \
2030 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2031fi
2032
Avi Kivity40d64442011-11-15 20:12:17 +02002033if test "$pie" = ""; then
2034 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002035 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002036 ;;
2037 *)
2038 pie="no"
2039 ;;
2040 esac
2041fi
2042
2043if test "$pie" != "no" ; then
2044 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002045
2046#ifdef __linux__
2047# define THREAD __thread
2048#else
2049# define THREAD
2050#endif
2051
2052static THREAD int tls_var;
2053
2054int main(void) { return tls_var; }
2055
Avi Kivity40d64442011-11-15 20:12:17 +02002056EOF
2057 if compile_prog "-fPIE -DPIE" "-pie"; then
2058 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2059 LDFLAGS="-pie $LDFLAGS"
2060 pie="yes"
2061 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2062 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2063 fi
2064 else
2065 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002066 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002067 else
2068 echo "Disabling PIE due to missing toolchain support"
2069 pie="no"
2070 fi
2071 fi
Brad46eef332013-12-10 19:49:08 -05002072
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04002073 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002074 CFLAGS_NOPIE="-fno-pie"
2075 LDFLAGS_NOPIE="-nopie"
2076 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002077fi
2078
Paolo Bonzini09dada42013-04-17 16:26:47 +02002079##########################################
2080# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2081# use i686 as default anyway, but for those that don't, an explicit
2082# specification is necessary
2083
2084if test "$cpu" = "i386"; then
2085 cat > $TMPC << EOF
2086static int sfaa(int *ptr)
2087{
2088 return __sync_fetch_and_and(ptr, 0);
2089}
2090
2091int main(void)
2092{
2093 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002094 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002095 sfaa(&val);
2096 return val;
2097}
2098EOF
2099 if ! compile_prog "" "" ; then
2100 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2101 fi
2102fi
2103
2104#########################################
bellardec530c82006-04-25 22:36:06 +00002105# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002106
bellardec530c82006-04-25 22:36:06 +00002107if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002108 if has $install; then
2109 :
2110 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002111 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2112 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2113 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002114 fi
Stefan Weil89138852016-05-16 15:10:20 +02002115 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002116 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2117 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2118 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002119 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002120 if has ar; then
2121 :
2122 else
bellardec530c82006-04-25 22:36:06 +00002123 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002124 error_exit "No path includes ar" \
2125 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002126 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002127 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002128 fi
ths5fafdf22007-09-16 21:08:06 +00002129fi
bellardec530c82006-04-25 22:36:06 +00002130
Stefan Weilafb63eb2012-09-26 22:04:38 +02002131if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002132 for target in $default_target_list; do
2133 supported_target $target 2>/dev/null && \
2134 target_list="$target_list $target"
2135 done
2136 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002137else
Stefan Weil89138852016-05-16 15:10:20 +02002138 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002139 for target in $target_list; do
2140 # Check that we recognised the target name; this allows a more
2141 # friendly error message than if we let it fall through.
2142 case " $default_target_list " in
2143 *" $target "*)
2144 ;;
2145 *)
2146 error_exit "Unknown target name '$target'"
2147 ;;
2148 esac
2149 supported_target $target || exit 1
2150 done
bellard5327cf42005-01-10 23:18:50 +00002151fi
Peter Maydell25b48332013-05-20 16:16:16 +01002152
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002153# see if system emulation was really requested
2154case " $target_list " in
2155 *"-softmmu "*) softmmu=yes
2156 ;;
2157 *) softmmu=no
2158 ;;
2159esac
bellard5327cf42005-01-10 23:18:50 +00002160
Juan Quintela249247c2009-08-12 18:20:25 +02002161feature_not_found() {
2162 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002163 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002164
Peter Maydell76ad07a2013-04-08 12:11:26 +01002165 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002166 "configure was not able to find it." \
2167 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002168}
2169
bellard7d132992003-03-06 23:23:54 +00002170# ---
2171# big/little endian test
2172cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002173short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2174short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2175extern int foo(short *, short *);
2176int main(int argc, char *argv[]) {
2177 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002178}
2179EOF
2180
Mike Frysinger61cc9192013-06-30 23:30:18 -04002181if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002182 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002183 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002184 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002185 bigendian="no"
2186 else
2187 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002188 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002189else
2190 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002191fi
2192
Juan Quintelab0a47e72009-08-12 18:29:49 +02002193##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002194# cocoa implies not SDL or GTK
2195# (the cocoa UI code currently assumes it is always the active UI
2196# and doesn't interact well with other UI frontend code)
2197if test "$cocoa" = "yes"; then
2198 if test "$sdl" = "yes"; then
2199 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2200 fi
2201 if test "$gtk" = "yes"; then
2202 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2203 fi
2204 gtk=no
2205 sdl=no
2206fi
2207
Eric Blake6b39b062016-10-11 10:46:23 -05002208# Some versions of Mac OS X incorrectly define SIZE_MAX
2209cat > $TMPC << EOF
2210#include <stdint.h>
2211#include <stdio.h>
2212int main(int argc, char *argv[]) {
2213 return printf("%zu", SIZE_MAX);
2214}
2215EOF
2216have_broken_size_max=no
2217if ! compile_object -Werror ; then
2218 have_broken_size_max=yes
2219fi
2220
Peter Maydella30878e2015-08-14 16:10:52 +01002221##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002222# L2TPV3 probe
2223
2224cat > $TMPC <<EOF
2225#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002226#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002227int main(void) { return sizeof(struct mmsghdr); }
2228EOF
2229if compile_prog "" "" ; then
2230 l2tpv3=yes
2231else
2232 l2tpv3=no
2233fi
2234
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002235#########################################
2236# vhost interdependencies and host support
2237
2238# vhost backends
2239test "$vhost_user" = "" && vhost_user=yes
2240if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2241 error_exit "vhost-user isn't available on win32"
2242fi
2243test "$vhost_kernel" = "" && vhost_kernel=$linux
2244if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2245 error_exit "vhost-kernel is only available on Linux"
2246fi
2247
2248# vhost-kernel devices
2249test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2250if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2251 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2252fi
2253test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2254if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2255 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2256fi
2257
2258# vhost-user backends
2259test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2260if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2261 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2262fi
2263test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2264if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2265 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2266fi
2267
2268# OR the vhost-kernel and vhost-user values for simplicity
2269if test "$vhost_net" = ""; then
2270 test "$vhost_net_user" = "yes" && vhost_net=yes
2271 test "$vhost_kernel" = "yes" && vhost_net=yes
2272fi
2273
Gonglei015a33b2014-07-01 20:58:08 +08002274##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002275# MinGW / Mingw-w64 localtime_r/gmtime_r check
2276
2277if test "$mingw32" = "yes"; then
2278 # Some versions of MinGW / Mingw-w64 lack localtime_r
2279 # and gmtime_r entirely.
2280 #
2281 # Some versions of Mingw-w64 define a macro for
2282 # localtime_r/gmtime_r.
2283 #
2284 # Some versions of Mingw-w64 will define functions
2285 # for localtime_r/gmtime_r, but only if you have
2286 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2287 # though, unistd.h and pthread.h both define
2288 # that for you.
2289 #
2290 # So this #undef localtime_r and #include <unistd.h>
2291 # are not in fact redundant.
2292cat > $TMPC << EOF
2293#include <unistd.h>
2294#include <time.h>
2295#undef localtime_r
2296int main(void) { localtime_r(NULL, NULL); return 0; }
2297EOF
2298 if compile_prog "" "" ; then
2299 localtime_r="yes"
2300 else
2301 localtime_r="no"
2302 fi
2303fi
2304
2305##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002306# pkg-config probe
2307
2308if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002309 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002310fi
2311
2312##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002313# NPTL probe
2314
Peter Maydell24cb36a2013-07-16 18:45:00 +01002315if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002316 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002317#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002318#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002319int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002320#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2321#error bork
2322#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002323 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002324}
2325EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002326 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002327 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002328 fi
pbrookbd0c5662008-05-29 14:34:11 +00002329fi
2330
balrogac629222008-10-11 09:56:04 +00002331##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002332# lzo check
2333
2334if test "$lzo" != "no" ; then
2335 cat > $TMPC << EOF
2336#include <lzo/lzo1x.h>
2337int main(void) { lzo_version(); return 0; }
2338EOF
2339 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002340 libs_softmmu="$libs_softmmu -llzo2"
2341 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002342 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002343 if test "$lzo" = "yes"; then
2344 feature_not_found "liblzo2" "Install liblzo2 devel"
2345 fi
2346 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002347 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002348fi
2349
2350##########################################
2351# snappy check
2352
2353if test "$snappy" != "no" ; then
2354 cat > $TMPC << EOF
2355#include <snappy-c.h>
2356int main(void) { snappy_max_compressed_length(4096); return 0; }
2357EOF
2358 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002359 libs_softmmu="$libs_softmmu -lsnappy"
2360 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002361 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002362 if test "$snappy" = "yes"; then
2363 feature_not_found "libsnappy" "Install libsnappy devel"
2364 fi
2365 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002366 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002367fi
2368
2369##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002370# bzip2 check
2371
2372if test "$bzip2" != "no" ; then
2373 cat > $TMPC << EOF
2374#include <bzlib.h>
2375int main(void) { BZ2_bzlibVersion(); return 0; }
2376EOF
2377 if compile_prog "" "-lbz2" ; then
2378 bzip2="yes"
2379 else
2380 if test "$bzip2" = "yes"; then
2381 feature_not_found "libbzip2" "Install libbzip2 devel"
2382 fi
2383 bzip2="no"
2384 fi
2385fi
2386
2387##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002388# lzfse check
2389
2390if test "$lzfse" != "no" ; then
2391 cat > $TMPC << EOF
2392#include <lzfse.h>
2393int main(void) { lzfse_decode_scratch_size(); return 0; }
2394EOF
2395 if compile_prog "" "-llzfse" ; then
2396 lzfse="yes"
2397 else
2398 if test "$lzfse" = "yes"; then
2399 feature_not_found "lzfse" "Install lzfse devel"
2400 fi
2401 lzfse="no"
2402 fi
2403fi
2404
2405##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002406# libseccomp check
2407
2408if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002409 libseccomp_minver="2.3.0"
2410 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002411 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2412 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002413 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002414 else
Andrew Jones693e5912015-09-30 11:59:18 -04002415 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002416 feature_not_found "libseccomp" \
2417 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002418 fi
2419 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002420 fi
2421fi
2422##########################################
aliguorie37630c2009-04-22 15:19:10 +00002423# xen probe
2424
Juan Quintelafc321b42009-08-12 18:29:55 +02002425if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002426 # Check whether Xen library path is specified via --extra-ldflags to avoid
2427 # overriding this setting with pkg-config output. If not, try pkg-config
2428 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002429
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002430 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2431 $pkg_config --exists xencontrol ; then
2432 xen_ctrl_version="$(printf '%d%02d%02d' \
2433 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2434 xen=yes
2435 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2436 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002437 if $pkg_config --exists xentoolcore; then
2438 xen_pc="$xen_pc xentoolcore"
2439 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002440 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2441 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002442 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002443
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002444 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002445 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002446
2447 # First we test whether Xen headers and libraries are available.
2448 # If no, we are done and there is no Xen support.
2449 # If yes, more tests are run to detect the Xen version.
2450
2451 # Xen (any)
2452 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002453#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002454int main(void) {
2455 return 0;
2456}
2457EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002458 if ! compile_prog "" "$xen_libs" ; then
2459 # Xen not found
2460 if test "$xen" = "yes" ; then
2461 feature_not_found "xen" "Install xen devel"
2462 fi
2463 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002464
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002465 # Xen unstable
2466 elif
2467 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002468#undef XC_WANT_COMPAT_DEVICEMODEL_API
2469#define __XEN_TOOLS__
2470#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002471#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002472int main(void) {
2473 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002474 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002475
2476 xd = xendevicemodel_open(0, 0);
2477 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2478
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002479 xfmem = xenforeignmemory_open(0, 0);
2480 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2481
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002482 return 0;
2483}
2484EOF
2485 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2486 then
2487 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2488 xen_ctrl_version=41100
2489 xen=yes
2490 elif
2491 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002492#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2493#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002494#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002495int main(void) {
2496 xenforeignmemory_handle *xfmem;
2497
2498 xfmem = xenforeignmemory_open(0, 0);
2499 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002500 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002501
2502 return 0;
2503}
2504EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002505 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002506 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002507 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002508 xen_ctrl_version=41000
2509 xen=yes
2510 elif
2511 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002512#undef XC_WANT_COMPAT_DEVICEMODEL_API
2513#define __XEN_TOOLS__
2514#include <xendevicemodel.h>
2515int main(void) {
2516 xendevicemodel_handle *xd;
2517
2518 xd = xendevicemodel_open(0, 0);
2519 xendevicemodel_close(xd);
2520
2521 return 0;
2522}
2523EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002524 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2525 then
2526 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2527 xen_ctrl_version=40900
2528 xen=yes
2529 elif
2530 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002531/*
2532 * If we have stable libs the we don't want the libxc compat
2533 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002534 *
2535 * Also, check if xengnttab_grant_copy_segment_t is defined and
2536 * grant copy operation is implemented.
2537 */
2538#undef XC_WANT_COMPAT_EVTCHN_API
2539#undef XC_WANT_COMPAT_GNTTAB_API
2540#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2541#include <xenctrl.h>
2542#include <xenstore.h>
2543#include <xenevtchn.h>
2544#include <xengnttab.h>
2545#include <xenforeignmemory.h>
2546#include <stdint.h>
2547#include <xen/hvm/hvm_info_table.h>
2548#if !defined(HVM_MAX_VCPUS)
2549# error HVM_MAX_VCPUS not defined
2550#endif
2551int main(void) {
2552 xc_interface *xc = NULL;
2553 xenforeignmemory_handle *xfmem;
2554 xenevtchn_handle *xe;
2555 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002556 xengnttab_grant_copy_segment_t* seg = NULL;
2557
2558 xs_daemon_open();
2559
2560 xc = xc_interface_open(0, 0, 0);
2561 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2562 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2563 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2564 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002565
2566 xfmem = xenforeignmemory_open(0, 0);
2567 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2568
2569 xe = xenevtchn_open(0, 0);
2570 xenevtchn_fd(xe);
2571
2572 xg = xengnttab_open(0, 0);
2573 xengnttab_grant_copy(xg, 0, seg);
2574
2575 return 0;
2576}
2577EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002578 compile_prog "" "$xen_libs $xen_stable_libs"
2579 then
2580 xen_ctrl_version=40800
2581 xen=yes
2582 elif
2583 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002584/*
2585 * If we have stable libs the we don't want the libxc compat
2586 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002587 */
2588#undef XC_WANT_COMPAT_EVTCHN_API
2589#undef XC_WANT_COMPAT_GNTTAB_API
2590#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2591#include <xenctrl.h>
2592#include <xenstore.h>
2593#include <xenevtchn.h>
2594#include <xengnttab.h>
2595#include <xenforeignmemory.h>
2596#include <stdint.h>
2597#include <xen/hvm/hvm_info_table.h>
2598#if !defined(HVM_MAX_VCPUS)
2599# error HVM_MAX_VCPUS not defined
2600#endif
2601int main(void) {
2602 xc_interface *xc = NULL;
2603 xenforeignmemory_handle *xfmem;
2604 xenevtchn_handle *xe;
2605 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002606
2607 xs_daemon_open();
2608
2609 xc = xc_interface_open(0, 0, 0);
2610 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2611 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2612 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2613 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002614
2615 xfmem = xenforeignmemory_open(0, 0);
2616 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2617
2618 xe = xenevtchn_open(0, 0);
2619 xenevtchn_fd(xe);
2620
2621 xg = xengnttab_open(0, 0);
2622 xengnttab_map_grant_ref(xg, 0, 0, 0);
2623
2624 return 0;
2625}
2626EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002627 compile_prog "" "$xen_libs $xen_stable_libs"
2628 then
2629 xen_ctrl_version=40701
2630 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002631
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002632 # Xen 4.6
2633 elif
2634 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002635#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002636#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002637#include <stdint.h>
2638#include <xen/hvm/hvm_info_table.h>
2639#if !defined(HVM_MAX_VCPUS)
2640# error HVM_MAX_VCPUS not defined
2641#endif
2642int main(void) {
2643 xc_interface *xc;
2644 xs_daemon_open();
2645 xc = xc_interface_open(0, 0, 0);
2646 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2647 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002648 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002649 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002650 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002651 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002652 return 0;
2653}
2654EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002655 compile_prog "" "$xen_libs"
2656 then
2657 xen_ctrl_version=40600
2658 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002659
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002660 # Xen 4.5
2661 elif
2662 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002663#include <xenctrl.h>
2664#include <xenstore.h>
2665#include <stdint.h>
2666#include <xen/hvm/hvm_info_table.h>
2667#if !defined(HVM_MAX_VCPUS)
2668# error HVM_MAX_VCPUS not defined
2669#endif
2670int main(void) {
2671 xc_interface *xc;
2672 xs_daemon_open();
2673 xc = xc_interface_open(0, 0, 0);
2674 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2675 xc_gnttab_open(NULL, 0);
2676 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2677 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002678 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2679 return 0;
2680}
2681EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002682 compile_prog "" "$xen_libs"
2683 then
2684 xen_ctrl_version=40500
2685 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002686
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002687 elif
2688 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002689#include <xenctrl.h>
2690#include <xenstore.h>
2691#include <stdint.h>
2692#include <xen/hvm/hvm_info_table.h>
2693#if !defined(HVM_MAX_VCPUS)
2694# error HVM_MAX_VCPUS not defined
2695#endif
2696int main(void) {
2697 xc_interface *xc;
2698 xs_daemon_open();
2699 xc = xc_interface_open(0, 0, 0);
2700 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2701 xc_gnttab_open(NULL, 0);
2702 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2703 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002704 return 0;
2705}
2706EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002707 compile_prog "" "$xen_libs"
2708 then
2709 xen_ctrl_version=40200
2710 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002711
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002712 else
2713 if test "$xen" = "yes" ; then
2714 feature_not_found "xen (unsupported version)" \
2715 "Install a supported xen (xen 4.2 or newer)"
2716 fi
2717 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002718 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002719
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002720 if test "$xen" = yes; then
2721 if test $xen_ctrl_version -ge 40701 ; then
2722 libs_softmmu="$xen_stable_libs $libs_softmmu"
2723 fi
2724 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002725 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002726 fi
aliguorie37630c2009-04-22 15:19:10 +00002727fi
2728
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002729if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002730 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002731 xen_pci_passthrough=yes
2732 else
2733 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002734 error_exit "User requested feature Xen PCI Passthrough" \
2735 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002736 fi
2737 xen_pci_passthrough=no
2738 fi
2739fi
2740
aliguorie37630c2009-04-22 15:19:10 +00002741##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002742# Windows Hypervisor Platform accelerator (WHPX) check
2743if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002744 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002745 whpx="yes"
2746 else
2747 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002748 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002749 fi
2750 whpx="no"
2751 fi
2752fi
2753
2754##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002755# Sparse probe
2756if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002757 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002758 sparse=yes
2759 else
2760 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002761 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002762 fi
2763 sparse=no
2764 fi
2765fi
2766
2767##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002768# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002769if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002770 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002771 x11_cflags=$($pkg_config --cflags x11)
2772 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002773fi
2774
2775##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002776# GTK probe
2777
2778if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002779 gtkpackage="gtk+-3.0"
2780 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002781 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002782 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002783 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2784 gtk_libs=$($pkg_config --libs $gtkpackage)
2785 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002786 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002787 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002788 gtk_cflags="$gtk_cflags $x11_cflags"
2789 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002790 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002791 gtk="yes"
2792 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002793 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002794 else
2795 gtk="no"
2796 fi
2797fi
2798
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002799
2800##########################################
2801# GNUTLS probe
2802
2803if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002804 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002805 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002806 gnutls_cflags=$($pkg_config --cflags gnutls)
2807 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002808 # Packaging for the static libraries is not always correct.
2809 # At least ubuntu 18.04 ships only shared libraries.
2810 write_c_skeleton
2811 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002812 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002813 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2814 pass="yes"
2815 fi
2816 fi
2817 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002818 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002819 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002820 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002821 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002822fi
2823
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002824
2825# If user didn't give a --disable/enable-gcrypt flag,
2826# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002827# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002828if test -z "$gcrypt"
2829then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002830 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002831 then
2832 gcrypt="no"
2833 fi
2834fi
2835
2836# If user didn't give a --disable/enable-nettle flag,
2837# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002838# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002839if test -z "$nettle"
2840then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002841 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002842 then
2843 nettle="no"
2844 fi
2845fi
2846
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002847has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002848 if ! has "libgcrypt-config"
2849 then
2850 return 1
2851 fi
2852
2853 if test -n "$cross_prefix"
2854 then
Stefan Weil89138852016-05-16 15:10:20 +02002855 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002856 if test "$host-" != $cross_prefix
2857 then
2858 return 1
2859 fi
2860 fi
2861
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002862 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2863 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2864
2865 if test $maj != 1 || test $min -lt 5
2866 then
2867 return 1
2868 fi
2869
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002870 return 0
2871}
2872
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002873
2874if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002875 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002876 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002877 nettle_cflags=$($pkg_config --cflags nettle)
2878 nettle_libs=$($pkg_config --libs nettle)
2879 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002880 # Link test to make sure the given libraries work (e.g for static).
2881 write_c_skeleton
2882 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002883 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002884 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2885 if test -z "$gcrypt"; then
2886 gcrypt="no"
2887 fi
2888 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002889 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002890 fi
2891 if test "$pass" = "no" && test "$nettle" = "yes"; then
2892 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002893 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002894 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002895 fi
2896fi
2897
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002898if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002899 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002900 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002901 gcrypt_cflags=$(libgcrypt-config --cflags)
2902 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002903 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002904 # as it "spreads unnecessary dependencies" which in
2905 # turn breaks static builds...
2906 if test "$static" = "yes"
2907 then
2908 gcrypt_libs="$gcrypt_libs -lgpg-error"
2909 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002910
Richard Hendersona73e82e2019-05-09 18:24:35 -07002911 # Link test to make sure the given libraries work (e.g for static).
2912 write_c_skeleton
2913 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002914 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002915 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2916 pass="yes"
2917 fi
2918 fi
2919 if test "$pass" = "yes"; then
2920 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002921 cat > $TMPC << EOF
2922#include <gcrypt.h>
2923int main(void) {
2924 gcry_mac_hd_t handle;
2925 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2926 GCRY_MAC_FLAG_SECURE, NULL);
2927 return 0;
2928}
2929EOF
2930 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2931 gcrypt_hmac=yes
2932 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002933 elif test "$gcrypt" = "yes"; then
2934 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002935 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002936 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002937 fi
2938fi
2939
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002940
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002941if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2942then
2943 error_exit "Only one of gcrypt & nettle can be enabled"
2944fi
2945
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002946##########################################
2947# libtasn1 - only for the TLS creds/session test suite
2948
2949tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002950tasn1_cflags=""
2951tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002952if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002953 tasn1_cflags=$($pkg_config --cflags libtasn1)
2954 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002955else
2956 tasn1=no
2957fi
2958
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002959
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002960##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002961# PAM probe
2962
2963if test "$auth_pam" != "no"; then
2964 cat > $TMPC <<EOF
2965#include <security/pam_appl.h>
2966#include <stdio.h>
2967int main(void) {
2968 const char *service_name = "qemu";
2969 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01002970 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002971 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01002972 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002973 return 0;
2974}
2975EOF
2976 if compile_prog "" "-lpam" ; then
2977 auth_pam=yes
2978 else
2979 if test "$auth_pam" = "yes"; then
2980 feature_not_found "PAM" "Install PAM development package"
2981 else
2982 auth_pam=no
2983 fi
2984 fi
2985fi
2986
2987##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002988# getifaddrs (for tests/test-io-channel-socket )
2989
2990have_ifaddrs_h=yes
2991if ! check_include "ifaddrs.h" ; then
2992 have_ifaddrs_h=no
2993fi
2994
2995##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002996# VTE probe
2997
2998if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002999 vteminversion="0.32.0"
3000 if $pkg_config --exists "vte-2.91"; then
3001 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003002 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003003 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00003004 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04003005 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02003006 vte_cflags=$($pkg_config --cflags $vtepackage)
3007 vte_libs=$($pkg_config --libs $vtepackage)
3008 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003009 vte="yes"
3010 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01003011 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01003012 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01003013 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06003014 fi
3015fi
3016
3017##########################################
bellard11d9f692004-04-02 20:55:59 +00003018# SDL probe
3019
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01003020# Look for sdl configuration program (pkg-config or sdl-config). Try
3021# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10003022
Peter Xuc6093a02018-04-10 13:40:34 +08003023sdl_probe ()
3024{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003025 if $pkg_config sdl2 --exists; then
3026 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08003027 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3028 elif has ${sdl_config}; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003029 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003030 sdlversion=$($sdlconfig --version)
3031 else
3032 if test "$sdl" = "yes" ; then
3033 feature_not_found "sdl" "Install SDL2-devel"
3034 fi
3035 sdl=no
3036 # no need to do the rest
3037 return
3038 fi
3039 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
3040 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3041 fi
3042
Juan Quintelaac119f92009-07-27 16:13:15 +02003043 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003044#include <SDL.h>
3045#undef main /* We don't want SDL to override our main() */
3046int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3047EOF
Stefan Weil89138852016-05-16 15:10:20 +02003048 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003049 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003050 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003051 if $pkg_config sdl2 --exists; then
3052 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003053 else
3054 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3055 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003056 else
Stefan Weil89138852016-05-16 15:10:20 +02003057 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003058 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003059 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003060 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003061
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003062 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003063 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003064 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003065 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3066 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003067 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003068 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003069 :
3070 else
3071 sdl=no
3072 fi
3073 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003074 else # sdl not found
3075 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003076 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003077 fi
3078 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003079 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003080}
3081
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003082sdl_image_probe ()
3083{
3084 if test "$sdl_image" != "no" ; then
3085 if $pkg_config SDL2_image --exists; then
3086 if test "$static" = "yes"; then
3087 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3088 else
3089 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3090 fi
3091 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3092 sdl_image=yes
3093
3094 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3095 sdl_libs="$sdl_libs $sdl_image_libs"
3096 else
3097 if test "$sdl_image" = "yes" ; then
3098 feature_not_found "sdl_image" "Install SDL Image devel"
3099 else
3100 sdl_image=no
3101 fi
3102 fi
3103 fi
3104}
3105
Peter Xuc6093a02018-04-10 13:40:34 +08003106if test "$sdl" != "no" ; then
3107 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003108fi
bellard11d9f692004-04-02 20:55:59 +00003109
aliguori5368a422009-03-03 17:37:21 +00003110if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003111 sdl_image_probe
3112else
3113 if test "$sdl_image" = "yes"; then
3114 echo "warning: SDL Image requested, but SDL is not available, disabling"
3115 fi
3116 sdl_image=no
3117fi
3118
3119if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003120 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003121#include <SDL.h>
3122#if defined(SDL_VIDEO_DRIVER_X11)
3123#include <X11/XKBlib.h>
3124#else
3125#error No x11 support
3126#endif
3127int main(void) { return 0; }
3128EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003129 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003130 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003131 sdl_cflags="$sdl_cflags $x11_cflags"
3132 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003133 fi
aliguori5368a422009-03-03 17:37:21 +00003134fi
3135
ths8f28f3f2007-01-05 21:25:54 +00003136##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003137# RDMA needs OpenFabrics libraries
3138if test "$rdma" != "no" ; then
3139 cat > $TMPC <<EOF
3140#include <rdma/rdma_cma.h>
3141int main(void) { return 0; }
3142EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003143 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003144 if compile_prog "" "$rdma_libs" ; then
3145 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003146 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003147 else
3148 if test "$rdma" = "yes" ; then
3149 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003150 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003151 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003152 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003153 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3154 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3155 fi
3156 rdma="no"
3157 fi
3158fi
3159
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003160##########################################
3161# PVRDMA detection
3162
3163cat > $TMPC <<EOF &&
3164#include <sys/mman.h>
3165
3166int
3167main(void)
3168{
3169 char buf = 0;
3170 void *addr = &buf;
3171 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3172
3173 return 0;
3174}
3175EOF
3176
3177if test "$rdma" = "yes" ; then
3178 case "$pvrdma" in
3179 "")
3180 if compile_prog "" ""; then
3181 pvrdma="yes"
3182 else
3183 pvrdma="no"
3184 fi
3185 ;;
3186 "yes")
3187 if ! compile_prog "" ""; then
3188 error_exit "PVRDMA is not supported since mremap is not implemented"
3189 fi
3190 pvrdma="yes"
3191 ;;
3192 "no")
3193 pvrdma="no"
3194 ;;
3195 esac
3196else
3197 if test "$pvrdma" = "yes" ; then
3198 error_exit "PVRDMA requires rdma suppport"
3199 fi
3200 pvrdma="no"
3201fi
ths8d5d2d42007-08-25 01:37:51 +00003202
3203##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003204# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003205if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003206 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003207#include <sasl/sasl.h>
3208#include <stdio.h>
3209int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3210EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003211 # Assuming Cyrus-SASL installed in /usr prefix
3212 vnc_sasl_cflags=""
3213 vnc_sasl_libs="-lsasl2"
3214 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3215 vnc_sasl=yes
3216 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003217 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003218 else
3219 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003220 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003221 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003222 vnc_sasl=no
3223 fi
aliguori2f9606b2009-03-06 20:27:28 +00003224fi
3225
3226##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003227# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003228if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003229cat > $TMPC <<EOF
3230#include <stdio.h>
3231#include <jpeglib.h>
3232int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3233EOF
3234 vnc_jpeg_cflags=""
3235 vnc_jpeg_libs="-ljpeg"
3236 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3237 vnc_jpeg=yes
3238 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003239 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003240 else
3241 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003242 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003243 fi
3244 vnc_jpeg=no
3245 fi
3246fi
3247
3248##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003249# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003250if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003251cat > $TMPC <<EOF
3252//#include <stdio.h>
3253#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003254#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003255int main(void) {
3256 png_structp png_ptr;
3257 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003258 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003259}
3260EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003261 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003262 vnc_png_cflags=$($pkg_config libpng --cflags)
3263 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003264 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003265 vnc_png_cflags=""
3266 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003267 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003268 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3269 vnc_png=yes
3270 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003271 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003272 else
3273 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003274 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003275 fi
3276 vnc_png=no
3277 fi
3278fi
3279
3280##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003281# xkbcommon probe
3282if test "$xkbcommon" != "no" ; then
3283 if $pkg_config xkbcommon --exists; then
3284 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3285 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3286 xkbcommon=yes
3287 else
3288 if test "$xkbcommon" = "yes" ; then
3289 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3290 fi
3291 xkbcommon=no
3292 fi
3293fi
3294
aliguori76655d62009-03-06 20:27:37 +00003295
3296##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003297# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003298if test "$xfs" != "no" ; then
3299 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003300#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003301#include <xfs/xfs.h>
3302int main(void)
3303{
3304 xfsctl(NULL, 0, 0, NULL);
3305 return 0;
3306}
3307EOF
3308 if compile_prog "" "" ; then
3309 xfs="yes"
3310 else
3311 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003312 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003313 fi
3314 xfs=no
3315 fi
3316fi
3317
3318##########################################
ths8a16d272008-07-19 09:56:24 +00003319# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003320if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003321 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003322 cat > $TMPC << EOF
3323#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003324int main(void)
3325{
3326 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003327 char s[] = "";
3328 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003329 return 0;
3330}
ths8a16d272008-07-19 09:56:24 +00003331EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003332 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003333 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003334 else
3335 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003336 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003337 fi
3338 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003339 fi
ths8a16d272008-07-19 09:56:24 +00003340fi
3341
3342##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003343# netmap support probe
3344# Apart from looking for netmap headers, we make sure that the host API version
3345# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3346# a minor/major version number. Minor new features will be marked with values up
3347# to 15, and if something happens that requires a change to the backend we will
3348# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003349if test "$netmap" != "no" ; then
3350 cat > $TMPC << EOF
3351#include <inttypes.h>
3352#include <net/if.h>
3353#include <net/netmap.h>
3354#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003355#if (NETMAP_API < 11) || (NETMAP_API > 15)
3356#error
3357#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003358int main(void) { return 0; }
3359EOF
3360 if compile_prog "" "" ; then
3361 netmap=yes
3362 else
3363 if test "$netmap" = "yes" ; then
3364 feature_not_found "netmap"
3365 fi
3366 netmap=no
3367 fi
3368fi
3369
3370##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003371# libcap-ng library probe
3372if test "$cap_ng" != "no" ; then
3373 cap_libs="-lcap-ng"
3374 cat > $TMPC << EOF
3375#include <cap-ng.h>
3376int main(void)
3377{
3378 capng_capability_to_name(CAPNG_EFFECTIVE);
3379 return 0;
3380}
3381EOF
3382 if compile_prog "" "$cap_libs" ; then
3383 cap_ng=yes
3384 libs_tools="$cap_libs $libs_tools"
3385 else
3386 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003387 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003388 fi
3389 cap_ng=no
3390 fi
3391fi
3392
3393##########################################
malcc2de5c92008-06-28 19:13:06 +00003394# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003395
Stefan Weil89138852016-05-16 15:10:20 +02003396audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003397for drv in $audio_drv_list; do
3398 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003399 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003400 if $pkg_config alsa --exists; then
3401 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003402 if test "$drv" = "try-alsa"; then
3403 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3404 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003405 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003406 if test "$drv" = "try-alsa"; then
3407 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3408 else
3409 error_exit "$drv check failed" \
3410 "Make sure to have the $drv libs and headers installed."
3411 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003412 fi
malcc2de5c92008-06-28 19:13:06 +00003413 ;;
3414
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003415 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003416 if $pkg_config libpulse --exists; then
3417 pulse_libs=$($pkg_config libpulse --libs)
3418 audio_pt_int="yes"
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003419 if test "$drv" = "try-pa"; then
3420 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3421 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003422 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003423 if test "$drv" = "try-pa"; then
3424 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3425 else
3426 error_exit "$drv check failed" \
3427 "Make sure to have the $drv libs and headers installed."
3428 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003429 fi
malcb8e59f12008-07-02 21:03:08 +00003430 ;;
3431
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003432 sdl)
3433 if test "$sdl" = "no"; then
3434 error_exit "sdl not found or disabled, can not use sdl audio driver"
3435 fi
3436 ;;
3437
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003438 try-sdl)
3439 if test "$sdl" = "no"; then
3440 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3441 else
3442 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3443 fi
3444 ;;
3445
Juan Quintela997e6902009-08-03 14:46:29 +02003446 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003447 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003448 ;;
3449
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003450 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003451 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003452 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003453 ;;
3454
3455 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003456 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003457 ;;
3458
malce4c63a62008-07-19 16:15:16 +00003459 *)
malc1c9b2a52008-07-19 16:57:30 +00003460 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003461 error_exit "Unknown driver '$drv' selected" \
3462 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003463 }
3464 ;;
malcc2de5c92008-06-28 19:13:06 +00003465 esac
3466done
ths8f28f3f2007-01-05 21:25:54 +00003467
balrog4d3b6f62008-02-10 16:33:14 +00003468##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003469# BrlAPI probe
3470
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003471if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003472 brlapi_libs="-lbrlapi"
3473 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003474#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003475#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003476int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3477EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003478 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003479 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003480 else
3481 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003482 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003483 fi
3484 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003485 fi
3486fi
aurel322e4d9fb2008-04-08 06:01:02 +00003487
3488##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003489# iconv probe
3490if test "$iconv" != "no" ; then
3491 cat > $TMPC << EOF
3492#include <iconv.h>
3493int main(void) {
3494 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3495 return conv != (iconv_t) -1;
3496}
3497EOF
3498 iconv_prefix_list="/usr/local:/usr"
3499 iconv_lib_list=":-liconv"
3500 IFS=:
3501 for iconv_prefix in $iconv_prefix_list; do
3502 IFS=:
3503 iconv_cflags="-I$iconv_prefix/include"
3504 iconv_ldflags="-L$iconv_prefix/lib"
3505 for iconv_link in $iconv_lib_list; do
3506 unset IFS
3507 iconv_lib="$iconv_ldflags $iconv_link"
3508 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3509 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3510 iconv_found=yes
3511 break
3512 fi
3513 done
3514 if test "$iconv_found" = yes ; then
3515 break
3516 fi
3517 done
3518 if test "$iconv_found" = "yes" ; then
3519 iconv=yes
3520 else
3521 if test "$iconv" = "yes" ; then
3522 feature_not_found "iconv" "Install iconv devel"
3523 fi
3524 iconv=no
3525 fi
3526fi
3527
3528##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003529# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003530if test "$iconv" = "no" ; then
3531 # curses will need iconv
3532 curses=no
3533fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003534if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003535 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003536 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3537 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003538 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003539 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003540 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003541 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003542 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003543 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003544#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003545#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003546#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003547#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003548int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003549 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003550 wchar_t wch = L'w';
3551 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003552 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003553 addwstr(L"wide chars\n");
3554 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003555 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003556 codeset = nl_langinfo(CODESET);
3557 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003558}
balrog4d3b6f62008-02-10 16:33:14 +00003559EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003560 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003561 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003562 # Make sure we get the wide character prototypes
3563 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003564 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003565 for curses_lib in $curses_lib_list; do
3566 unset IFS
3567 if compile_prog "$curses_inc" "$curses_lib" ; then
3568 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003569 break
3570 fi
3571 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003572 if test "$curses_found" = yes ; then
3573 break
3574 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003575 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003576 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003577 if test "$curses_found" = "yes" ; then
3578 curses=yes
3579 else
3580 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003581 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003582 fi
3583 curses=no
3584 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003585fi
balrog4d3b6f62008-02-10 16:33:14 +00003586
blueswir1414f0da2008-08-15 18:20:52 +00003587##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003588# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003589if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003590 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003591 curlconfig="$pkg_config libcurl"
3592 else
3593 curlconfig=curl-config
3594 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003595 cat > $TMPC << EOF
3596#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003597int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003598EOF
Stefan Weil89138852016-05-16 15:10:20 +02003599 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3600 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003601 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003602 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003603 else
3604 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003605 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003606 fi
3607 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003608 fi
3609fi # test "$curl"
3610
3611##########################################
balrogfb599c92008-09-28 23:49:55 +00003612# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003613if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003614 cat > $TMPC << EOF
3615#include <bluetooth/bluetooth.h>
3616int main(void) { return bt_error(0); }
3617EOF
Stefan Weil89138852016-05-16 15:10:20 +02003618 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3619 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003620 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003621 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003622 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003623 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003624 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003625 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003626 fi
balroge820e3f2008-09-30 02:27:44 +00003627 bluez="no"
3628 fi
balrogfb599c92008-09-28 23:49:55 +00003629fi
3630
3631##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003632# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003633
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003634glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003635glib_modules=gthread-2.0
3636if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003637 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003638fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003639
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003640# This workaround is required due to a bug in pkg-config file for glib as it
3641# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3642
Eric Blakee633a5c2019-02-04 20:39:37 -06003643if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003644 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3645fi
3646
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003647for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003648 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003649 glib_cflags=$($pkg_config --cflags $i)
3650 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003651 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003652 LIBS="$glib_libs $LIBS"
3653 libs_qga="$glib_libs $libs_qga"
3654 else
3655 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3656 fi
3657done
3658
Marc-André Lureauf876b762019-02-21 12:07:00 +01003659if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3660 gio=yes
3661 gio_cflags=$($pkg_config --cflags gio-2.0)
3662 gio_libs=$($pkg_config --libs gio-2.0)
3663else
3664 gio=no
3665fi
3666
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003667# Sanity check that the current size_t matches the
3668# size that glib thinks it should be. This catches
3669# problems on multi-arch where people try to build
3670# 32-bit QEMU while pointing at 64-bit glib headers
3671cat > $TMPC <<EOF
3672#include <glib.h>
3673#include <unistd.h>
3674
3675#define QEMU_BUILD_BUG_ON(x) \
3676 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3677
3678int main(void) {
3679 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3680 return 0;
3681}
3682EOF
3683
Stefan Weil5919e032016-04-28 23:33:41 +02003684if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003685 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3686 "You probably need to set PKG_CONFIG_LIBDIR"\
3687 "to point to the right pkg-config files for your"\
3688 "build target"
3689fi
3690
John Snowbbbf2e02015-03-25 18:57:38 -04003691# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3692cat > $TMPC << EOF
3693#include <glib.h>
3694int main(void) { return 0; }
3695EOF
3696if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3697 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3698 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3699 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3700 fi
3701fi
3702
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003703#########################################
3704# zlib check
3705
3706if test "$zlib" != "no" ; then
3707 if $pkg_config --exists zlib; then
3708 zlib_cflags=$($pkg_config --cflags zlib)
3709 zlib_libs=$($pkg_config --libs zlib)
3710 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3711 LIBS="$zlib_libs $LIBS"
3712 else
3713 cat > $TMPC << EOF
3714#include <zlib.h>
3715int main(void) { zlibVersion(); return 0; }
3716EOF
3717 if compile_prog "" "-lz" ; then
3718 LIBS="$LIBS -lz"
3719 else
3720 error_exit "zlib check failed" \
3721 "Make sure to have the zlib libs and headers installed."
3722 fi
3723 fi
3724fi
3725
Fam Zhenge26110c2014-02-10 14:48:57 +08003726##########################################
3727# SHA command probe for modules
3728if test "$modules" = yes; then
3729 shacmd_probe="sha1sum sha1 shasum"
3730 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003731 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003732 shacmd="$c"
3733 break
3734 fi
3735 done
3736 if test "$shacmd" = ""; then
3737 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3738 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003739fi
3740
3741##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003742# pixman support probe
3743
Eric Blakee633a5c2019-02-04 20:39:37 -06003744if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003745 pixman_cflags=
3746 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003747elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003748 pixman_cflags=$($pkg_config --cflags pixman-1)
3749 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003750else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003751 error_exit "pixman >= 0.21.8 not present." \
3752 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003753fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003754
3755##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003756# libmpathpersist probe
3757
3758if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003759 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003760 cat > $TMPC <<EOF
3761#include <libudev.h>
3762#include <mpath_persist.h>
3763unsigned mpath_mx_alloc_len = 1024;
3764int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003765static struct config *multipath_conf;
3766extern struct udev *udev;
3767extern struct config *get_multipath_config(void);
3768extern void put_multipath_config(struct config *conf);
3769struct udev *udev;
3770struct config *get_multipath_config(void) { return multipath_conf; }
3771void put_multipath_config(struct config *conf) { }
3772
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003773int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003774 udev = udev_new();
3775 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003776 return 0;
3777}
3778EOF
3779 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3780 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003781 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003782 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003783 # probe for the old API
3784 cat > $TMPC <<EOF
3785#include <libudev.h>
3786#include <mpath_persist.h>
3787unsigned mpath_mx_alloc_len = 1024;
3788int logsink;
3789int main(void) {
3790 struct udev *udev = udev_new();
3791 mpath_lib_init(udev);
3792 return 0;
3793}
3794EOF
3795 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3796 mpathpersist=yes
3797 mpathpersist_new_api=no
3798 else
3799 mpathpersist=no
3800 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003801 fi
3802else
3803 mpathpersist=no
3804fi
3805
3806##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303807# libcap probe
3808
3809if test "$cap" != "no" ; then
3810 cat > $TMPC <<EOF
3811#include <stdio.h>
3812#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003813int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303814EOF
3815 if compile_prog "" "-lcap" ; then
3816 cap=yes
3817 else
3818 cap=no
3819 fi
3820fi
3821
3822##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003823# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003824PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003825
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003826pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003827cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003828#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003829static void *f(void *p) { return NULL; }
3830int main(void) {
3831 pthread_t thread;
3832 pthread_create(&thread, 0, f, 0);
3833 return 0;
3834}
blueswir1414f0da2008-08-15 18:20:52 +00003835EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003836if compile_prog "" "" ; then
3837 pthread=yes
3838else
3839 for pthread_lib in $PTHREADLIBS_LIST; do
3840 if compile_prog "" "$pthread_lib" ; then
3841 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003842 found=no
3843 for lib_entry in $LIBS; do
3844 if test "$lib_entry" = "$pthread_lib"; then
3845 found=yes
3846 break
3847 fi
3848 done
3849 if test "$found" = "no"; then
3850 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003851 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003852 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003853 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003854 break
3855 fi
3856 done
3857fi
blueswir1414f0da2008-08-15 18:20:52 +00003858
Eric Blakee633a5c2019-02-04 20:39:37 -06003859if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003860 error_exit "pthread check failed" \
3861 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003862fi
3863
Roman Bolshakov479a5742018-12-17 23:26:01 +03003864# check for pthread_setname_np with thread id
3865pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003866cat > $TMPC << EOF
3867#include <pthread.h>
3868
3869static void *f(void *p) { return NULL; }
3870int main(void)
3871{
3872 pthread_t thread;
3873 pthread_create(&thread, 0, f, 0);
3874 pthread_setname_np(thread, "QEMU");
3875 return 0;
3876}
3877EOF
3878if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003879 pthread_setname_np_w_tid=yes
3880fi
3881
3882# check for pthread_setname_np without thread id
3883pthread_setname_np_wo_tid=no
3884cat > $TMPC << EOF
3885#include <pthread.h>
3886
3887static void *f(void *p) { pthread_setname_np("QEMU"); }
3888int main(void)
3889{
3890 pthread_t thread;
3891 pthread_create(&thread, 0, f, 0);
3892 return 0;
3893}
3894EOF
3895if compile_prog "" "$pthread_lib" ; then
3896 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003897fi
3898
aliguoribf9298b2008-12-05 20:05:26 +00003899##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003900# rbd probe
3901if test "$rbd" != "no" ; then
3902 cat > $TMPC <<EOF
3903#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003904#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003905int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003906 rados_t cluster;
3907 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003908 return 0;
3909}
3910EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003911 rbd_libs="-lrbd -lrados"
3912 if compile_prog "" "$rbd_libs" ; then
3913 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003914 else
3915 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003916 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003917 fi
3918 rbd=no
3919 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003920fi
3921
3922##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003923# libssh probe
3924if test "$libssh" != "no" ; then
3925 if $pkg_config --exists libssh; then
3926 libssh_cflags=$($pkg_config libssh --cflags)
3927 libssh_libs=$($pkg_config libssh --libs)
3928 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003929 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02003930 if test "$libssh" = "yes" ; then
3931 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003932 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02003933 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003934 fi
3935fi
3936
3937##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003938# Check for libssh 0.8
3939# This is done like this instead of using the LIBSSH_VERSION_* and
3940# SSH_VERSION_* macros because some distributions in the past shipped
3941# snapshots of the future 0.8 from Git, and those snapshots did not
3942# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003943
Pino Toscanob10d49d2019-06-20 22:08:40 +02003944if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003945 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003946#include <libssh/libssh.h>
3947int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003948EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003949 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3950 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003951 fi
3952fi
3953
3954##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003955# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003956
3957if test "$linux_aio" != "no" ; then
3958 cat > $TMPC <<EOF
3959#include <libaio.h>
3960#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003961#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003962int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3963EOF
3964 if compile_prog "" "-laio" ; then
3965 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003966 else
3967 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003968 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003969 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003970 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003971 fi
3972fi
3973
3974##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003975# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003976
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003977if test "$tpm" = ""; then
3978 if test "$mingw32" = "yes"; then
3979 tpm=no
3980 else
3981 tpm=yes
3982 fi
3983elif test "$tpm" = "yes"; then
3984 if test "$mingw32" = "yes" ; then
3985 error_exit "TPM emulation only available on POSIX systems"
3986 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003987fi
3988
3989##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003990# attr probe
3991
3992if test "$attr" != "no" ; then
3993 cat > $TMPC <<EOF
3994#include <stdio.h>
3995#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003996#ifdef CONFIG_LIBATTR
3997#include <attr/xattr.h>
3998#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003999#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004000#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004001int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4002EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004003 if compile_prog "" "" ; then
4004 attr=yes
4005 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04004006 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004007 attr=yes
4008 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02004009 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004010 else
4011 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004012 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07004013 fi
4014 attr=no
4015 fi
4016fi
4017
4018##########################################
aliguoribf9298b2008-12-05 20:05:26 +00004019# iovec probe
4020cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00004021#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00004022#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00004023#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01004024int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00004025EOF
4026iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004027if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00004028 iovec=yes
4029fi
4030
aurel32f652e6a2008-12-16 10:43:48 +00004031##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004032# preadv probe
4033cat > $TMPC <<EOF
4034#include <sys/types.h>
4035#include <sys/uio.h>
4036#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004037int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004038EOF
4039preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004040if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004041 preadv=yes
4042fi
4043
4044##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004045# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004046# fdt support is mandatory for at least some target architectures,
4047# so insist on it if we're building those system emulators.
4048fdt_required=no
4049for target in $target_list; do
4050 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004051 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004052 fdt_required=yes
4053 ;;
4054 esac
4055done
4056
4057if test "$fdt_required" = "yes"; then
4058 if test "$fdt" = "no"; then
4059 error_exit "fdt disabled but some requested targets require it." \
4060 "You can turn off fdt only if you also disable all the system emulation" \
4061 "targets which need it (by specifying a cut down --target-list)."
4062 fi
4063 fdt=yes
4064fi
4065
Juan Quintela2df87df2009-08-12 18:29:54 +02004066if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004067 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004068 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004069 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004070 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004071#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004072#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004073int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004074EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004075 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004076 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004077 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004078 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004079 # have GIT checkout, so activate dtc submodule
4080 if test -e "${source_path}/.git" ; then
4081 git_submodules="${git_submodules} dtc"
4082 fi
4083 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004084 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004085 mkdir -p dtc
4086 if [ "$pwd_is_source_path" != "y" ] ; then
4087 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4088 symlink "$source_path/dtc/scripts" "dtc/scripts"
4089 fi
4090 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004091 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4092 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004093 elif test "$fdt" = "yes" ; then
4094 # Not a git build & no libfdt found, prompt for system install
4095 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4096 "Please install the DTC (libfdt) devel package"
4097 else
4098 # don't have and don't want
4099 fdt_libs=
4100 fdt=no
4101 fi
aurel32f652e6a2008-12-16 10:43:48 +00004102 fi
4103fi
4104
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004105libs_softmmu="$libs_softmmu $fdt_libs"
4106
Michael Walle20ff0752011-03-07 23:32:39 +01004107##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004108# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004109
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004110gbm="no"
4111if $pkg_config gbm; then
4112 gbm_cflags="$($pkg_config --cflags gbm)"
4113 gbm_libs="$($pkg_config --libs gbm)"
4114 gbm="yes"
4115fi
4116
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004117if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004118 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004119 if $pkg_config $opengl_pkgs; then
4120 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4121 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004122 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004123 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4124 gtk_gl="yes"
4125 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004126 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004127 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004128 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004129 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004130 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004131 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004132 opengl_libs=""
4133 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004134 fi
4135fi
4136
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004137if test "$opengl" = "yes"; then
4138 cat > $TMPC << EOF
4139#include <epoxy/egl.h>
4140#ifndef EGL_MESA_image_dma_buf_export
4141# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4142#endif
4143int main(void) { return 0; }
4144EOF
4145 if compile_prog "" "" ; then
4146 opengl_dmabuf=yes
4147 fi
4148fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004149
Eric Blakee633a5c2019-02-04 20:39:37 -06004150if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004151 for target in $target_list; do
4152 case $target in
4153 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4154 need_x11=yes
4155 ;;
4156 esac
4157 done
4158fi
4159
Klim Kireeved279a02018-01-12 12:01:19 +03004160##########################################
4161# libxml2 probe
4162if test "$libxml2" != "no" ; then
4163 if $pkg_config --exists libxml-2.0; then
4164 libxml2="yes"
4165 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4166 libxml2_libs=$($pkg_config --libs libxml-2.0)
4167 else
4168 if test "$libxml2" = "yes"; then
4169 feature_not_found "libxml2" "Install libxml2 devel"
4170 fi
4171 libxml2="no"
4172 fi
4173fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004174
Bharata B Raoeb100392012-09-24 14:42:45 +05304175##########################################
4176# glusterfs probe
4177if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004178 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304179 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004180 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4181 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004182 if $pkg_config --atleast-version=4 glusterfs-api; then
4183 glusterfs_xlator_opt="yes"
4184 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004185 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304186 glusterfs_discard="yes"
4187 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304188 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304189 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304190 glusterfs_zerofill="yes"
4191 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004192 cat > $TMPC << EOF
4193#include <glusterfs/api/glfs.h>
4194
4195int
4196main(void)
4197{
4198 /* new glfs_ftruncate() passes two additional args */
4199 return glfs_ftruncate(NULL, 0, NULL, NULL);
4200}
4201EOF
4202 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4203 glusterfs_ftruncate_has_stat="yes"
4204 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004205 cat > $TMPC << EOF
4206#include <glusterfs/api/glfs.h>
4207
4208/* new glfs_io_cbk() passes two additional glfs_stat structs */
4209static void
4210glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4211{}
4212
4213int
4214main(void)
4215{
4216 glfs_io_cbk iocb = &glusterfs_iocb;
4217 iocb(NULL, 0 , NULL, NULL, NULL);
4218 return 0;
4219}
4220EOF
4221 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4222 glusterfs_iocb_has_stat="yes"
4223 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304224 else
4225 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004226 feature_not_found "GlusterFS backend support" \
4227 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304228 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304229 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304230 fi
4231fi
4232
aurel3239386ac2009-04-15 19:48:17 +00004233# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004234# emulator. This is done because older glibc versions don't
4235# have syscall stubs for these implemented. In that case we
4236# don't provide them even if kernel supports them.
4237#
4238inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004239cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004240#include <sys/inotify.h>
4241
4242int
4243main(void)
4244{
4245 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004246 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004247}
4248EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004249if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004250 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004251fi
4252
Riku Voipioc05c7a72010-03-26 15:25:11 +00004253inotify1=no
4254cat > $TMPC << EOF
4255#include <sys/inotify.h>
4256
4257int
4258main(void)
4259{
4260 /* try to start inotify */
4261 return inotify_init1(0);
4262}
4263EOF
4264if compile_prog "" "" ; then
4265 inotify1=yes
4266fi
4267
Riku Voipio099d6b02009-05-05 12:10:04 +03004268# check if pipe2 is there
4269pipe2=no
4270cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004271#include <unistd.h>
4272#include <fcntl.h>
4273
4274int main(void)
4275{
4276 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004277 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004278}
4279EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004280if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004281 pipe2=yes
4282fi
4283
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004284# check if accept4 is there
4285accept4=no
4286cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004287#include <sys/socket.h>
4288#include <stddef.h>
4289
4290int main(void)
4291{
4292 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4293 return 0;
4294}
4295EOF
4296if compile_prog "" "" ; then
4297 accept4=yes
4298fi
4299
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304300# check if tee/splice is there. vmsplice was added same time.
4301splice=no
4302cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304303#include <unistd.h>
4304#include <fcntl.h>
4305#include <limits.h>
4306
4307int main(void)
4308{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004309 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304310 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4311 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4312 return 0;
4313}
4314EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004315if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304316 splice=yes
4317fi
4318
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004319##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004320# libnuma probe
4321
4322if test "$numa" != "no" ; then
4323 cat > $TMPC << EOF
4324#include <numa.h>
4325int main(void) { return numa_available(); }
4326EOF
4327
4328 if compile_prog "" "-lnuma" ; then
4329 numa=yes
4330 libs_softmmu="-lnuma $libs_softmmu"
4331 else
4332 if test "$numa" = "yes" ; then
4333 feature_not_found "numa" "install numactl devel"
4334 fi
4335 numa=no
4336 fi
4337fi
4338
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004339if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4340 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4341 exit 1
4342fi
4343
Yang Zhong5a22ab72017-12-20 21:16:46 +08004344# Even if malloc_trim() is available, these non-libc memory allocators
4345# do not support it.
4346if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4347 if test "$malloc_trim" = "yes" ; then
4348 echo "Disabling malloc_trim with non-libc memory allocator"
4349 fi
4350 malloc_trim="no"
4351fi
4352
4353#######################################
4354# malloc_trim
4355
4356if test "$malloc_trim" != "no" ; then
4357 cat > $TMPC << EOF
4358#include <malloc.h>
4359int main(void) { malloc_trim(0); return 0; }
4360EOF
4361 if compile_prog "" "" ; then
4362 malloc_trim="yes"
4363 else
4364 malloc_trim="no"
4365 fi
4366fi
4367
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004368##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004369# tcmalloc probe
4370
4371if test "$tcmalloc" = "yes" ; then
4372 cat > $TMPC << EOF
4373#include <stdlib.h>
4374int main(void) { malloc(1); return 0; }
4375EOF
4376
4377 if compile_prog "" "-ltcmalloc" ; then
4378 LIBS="-ltcmalloc $LIBS"
4379 else
4380 feature_not_found "tcmalloc" "install gperftools devel"
4381 fi
4382fi
4383
4384##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004385# jemalloc probe
4386
4387if test "$jemalloc" = "yes" ; then
4388 cat > $TMPC << EOF
4389#include <stdlib.h>
4390int main(void) { malloc(1); return 0; }
4391EOF
4392
4393 if compile_prog "" "-ljemalloc" ; then
4394 LIBS="-ljemalloc $LIBS"
4395 else
4396 feature_not_found "jemalloc" "install jemalloc devel"
4397 fi
4398fi
4399
4400##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004401# signalfd probe
4402signalfd="no"
4403cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004404#include <unistd.h>
4405#include <sys/syscall.h>
4406#include <signal.h>
4407int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4408EOF
4409
4410if compile_prog "" "" ; then
4411 signalfd=yes
4412fi
4413
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004414# check if optreset global is declared by <getopt.h>
4415optreset="no"
4416cat > $TMPC << EOF
4417#include <getopt.h>
4418int main(void) { return optreset; }
4419EOF
4420
4421if compile_prog "" "" ; then
4422 optreset=yes
4423fi
4424
Riku Voipioc2882b92009-08-12 15:08:24 +03004425# check if eventfd is supported
4426eventfd=no
4427cat > $TMPC << EOF
4428#include <sys/eventfd.h>
4429
4430int main(void)
4431{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004432 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004433}
4434EOF
4435if compile_prog "" "" ; then
4436 eventfd=yes
4437fi
4438
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004439# check if memfd is supported
4440memfd=no
4441cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004442#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004443
4444int main(void)
4445{
4446 return memfd_create("foo", MFD_ALLOW_SEALING);
4447}
4448EOF
4449if compile_prog "" "" ; then
4450 memfd=yes
4451fi
4452
Cortland Tölva955727d2018-10-08 09:35:19 -07004453# check for usbfs
4454have_usbfs=no
4455if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004456 cat > $TMPC << EOF
4457#include <linux/usbdevice_fs.h>
4458
4459#ifndef USBDEVFS_GET_CAPABILITIES
4460#error "USBDEVFS_GET_CAPABILITIES undefined"
4461#endif
4462
4463#ifndef USBDEVFS_DISCONNECT_CLAIM
4464#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4465#endif
4466
4467int main(void)
4468{
4469 return 0;
4470}
4471EOF
4472 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004473 have_usbfs=yes
4474 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004475fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004476
Ulrich Hechtd0927932009-09-17 20:22:14 +03004477# check for fallocate
4478fallocate=no
4479cat > $TMPC << EOF
4480#include <fcntl.h>
4481
4482int main(void)
4483{
4484 fallocate(0, 0, 0, 0);
4485 return 0;
4486}
4487EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004488if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004489 fallocate=yes
4490fi
4491
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004492# check for fallocate hole punching
4493fallocate_punch_hole=no
4494cat > $TMPC << EOF
4495#include <fcntl.h>
4496#include <linux/falloc.h>
4497
4498int main(void)
4499{
4500 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4501 return 0;
4502}
4503EOF
4504if compile_prog "" "" ; then
4505 fallocate_punch_hole=yes
4506fi
4507
Denis V. Lunevb953f072015-01-30 11:42:14 +03004508# check that fallocate supports range zeroing inside the file
4509fallocate_zero_range=no
4510cat > $TMPC << EOF
4511#include <fcntl.h>
4512#include <linux/falloc.h>
4513
4514int main(void)
4515{
4516 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4517 return 0;
4518}
4519EOF
4520if compile_prog "" "" ; then
4521 fallocate_zero_range=yes
4522fi
4523
Kevin Wolfed911432014-09-29 17:12:59 +02004524# check for posix_fallocate
4525posix_fallocate=no
4526cat > $TMPC << EOF
4527#include <fcntl.h>
4528
4529int main(void)
4530{
4531 posix_fallocate(0, 0, 0);
4532 return 0;
4533}
4534EOF
4535if compile_prog "" "" ; then
4536 posix_fallocate=yes
4537fi
4538
Peter Maydellc727f472011-01-06 11:05:10 +00004539# check for sync_file_range
4540sync_file_range=no
4541cat > $TMPC << EOF
4542#include <fcntl.h>
4543
4544int main(void)
4545{
4546 sync_file_range(0, 0, 0, 0);
4547 return 0;
4548}
4549EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004550if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004551 sync_file_range=yes
4552fi
4553
Peter Maydelldace20d2011-01-10 13:11:24 +00004554# check for linux/fiemap.h and FS_IOC_FIEMAP
4555fiemap=no
4556cat > $TMPC << EOF
4557#include <sys/ioctl.h>
4558#include <linux/fs.h>
4559#include <linux/fiemap.h>
4560
4561int main(void)
4562{
4563 ioctl(0, FS_IOC_FIEMAP, 0);
4564 return 0;
4565}
4566EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004567if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004568 fiemap=yes
4569fi
4570
Ulrich Hechtd0927932009-09-17 20:22:14 +03004571# check for dup3
4572dup3=no
4573cat > $TMPC << EOF
4574#include <unistd.h>
4575
4576int main(void)
4577{
4578 dup3(0, 0, 0);
4579 return 0;
4580}
4581EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004582if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004583 dup3=yes
4584fi
4585
Alex Bligh4e0c6522013-08-21 16:02:43 +01004586# check for ppoll support
4587ppoll=no
4588cat > $TMPC << EOF
4589#include <poll.h>
4590
4591int main(void)
4592{
4593 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4594 ppoll(&pfd, 1, 0, 0);
4595 return 0;
4596}
4597EOF
4598if compile_prog "" "" ; then
4599 ppoll=yes
4600fi
4601
Alex Blighcd758dd2013-08-21 16:02:44 +01004602# check for prctl(PR_SET_TIMERSLACK , ... ) support
4603prctl_pr_set_timerslack=no
4604cat > $TMPC << EOF
4605#include <sys/prctl.h>
4606
4607int main(void)
4608{
4609 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4610 return 0;
4611}
4612EOF
4613if compile_prog "" "" ; then
4614 prctl_pr_set_timerslack=yes
4615fi
4616
Peter Maydell3b6edd12011-02-15 18:35:05 +00004617# check for epoll support
4618epoll=no
4619cat > $TMPC << EOF
4620#include <sys/epoll.h>
4621
4622int main(void)
4623{
4624 epoll_create(0);
4625 return 0;
4626}
4627EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004628if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004629 epoll=yes
4630fi
4631
Peter Maydell227f0212016-06-06 19:58:11 +01004632# epoll_create1 is a later addition
4633# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004634epoll_create1=no
4635cat > $TMPC << EOF
4636#include <sys/epoll.h>
4637
4638int main(void)
4639{
Peter Maydell19e83f62011-04-26 16:56:40 +01004640 /* Note that we use epoll_create1 as a value, not as
4641 * a function being called. This is necessary so that on
4642 * old SPARC glibc versions where the function was present in
4643 * the library but not declared in the header file we will
4644 * fail the configure check. (Otherwise we will get a compiler
4645 * warning but not an error, and will proceed to fail the
4646 * qemu compile where we compile with -Werror.)
4647 */
Blue Swirlc075a722012-08-09 20:21:25 +00004648 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004649}
4650EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004651if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004652 epoll_create1=yes
4653fi
4654
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004655# check for sendfile support
4656sendfile=no
4657cat > $TMPC << EOF
4658#include <sys/sendfile.h>
4659
4660int main(void)
4661{
4662 return sendfile(0, 0, 0, 0);
4663}
4664EOF
4665if compile_prog "" "" ; then
4666 sendfile=yes
4667fi
4668
Riku Voipio51834342014-06-22 11:25:42 +01004669# check for timerfd support (glibc 2.8 and newer)
4670timerfd=no
4671cat > $TMPC << EOF
4672#include <sys/timerfd.h>
4673
4674int main(void)
4675{
4676 return(timerfd_create(CLOCK_REALTIME, 0));
4677}
4678EOF
4679if compile_prog "" "" ; then
4680 timerfd=yes
4681fi
4682
Riku Voipio9af5c902014-08-12 15:58:57 +03004683# check for setns and unshare support
4684setns=no
4685cat > $TMPC << EOF
4686#include <sched.h>
4687
4688int main(void)
4689{
4690 int ret;
4691 ret = setns(0, 0);
4692 ret = unshare(0);
4693 return ret;
4694}
4695EOF
4696if compile_prog "" "" ; then
4697 setns=yes
4698fi
4699
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004700# clock_adjtime probe
4701clock_adjtime=no
4702cat > $TMPC <<EOF
4703#include <time.h>
4704
4705int main(void)
4706{
4707 return clock_adjtime(0, 0);
4708}
4709EOF
4710clock_adjtime=no
4711if compile_prog "" "" ; then
4712 clock_adjtime=yes
4713fi
4714
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004715# syncfs probe
4716syncfs=no
4717cat > $TMPC <<EOF
4718#include <unistd.h>
4719
4720int main(void)
4721{
4722 return syncfs(0);
4723}
4724EOF
4725syncfs=no
4726if compile_prog "" "" ; then
4727 syncfs=yes
4728fi
4729
Peter Maydell5f71eac2019-03-07 14:26:46 +00004730# Check we have a new enough version of sphinx-build
4731has_sphinx_build() {
4732 # This is a bit awkward but works: create a trivial document and
4733 # try to run it with our configuration file (which enforces a
4734 # version requirement). This will fail if either
4735 # sphinx-build doesn't exist at all or if it is too old.
4736 mkdir -p "$TMPDIR1/sphinx"
4737 touch "$TMPDIR1/sphinx/index.rst"
4738 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4739}
4740
pbrookcc8ae6d2006-04-23 17:57:59 +00004741# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004742if test "$docs" != "no" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004743 if has makeinfo && has pod2man && has_sphinx_build; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004744 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004745 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004746 if test "$docs" = "yes" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004747 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004748 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004749 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004750 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004751fi
4752
Stefan Weilf514f412009-10-11 12:44:07 +02004753# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004754byteswap_h=no
4755cat > $TMPC << EOF
4756#include <byteswap.h>
4757int main(void) { return bswap_32(0); }
4758EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004759if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004760 byteswap_h=yes
4761fi
4762
Stefan Weil75f13592013-01-05 12:17:38 +01004763# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004764bswap_h=no
4765cat > $TMPC << EOF
4766#include <sys/endian.h>
4767#include <sys/types.h>
4768#include <machine/bswap.h>
4769int main(void) { return bswap32(0); }
4770EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004771if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004772 bswap_h=yes
4773fi
4774
aliguorida93a1f2008-12-12 20:02:52 +00004775##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004776# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004777if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004778 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004779 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004780 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4781 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004782 else
4783 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004784 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004785 fi
4786 libiscsi="no"
4787 fi
4788fi
4789
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004790##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004791# Do we need libm
4792cat > $TMPC << EOF
4793#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004794int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004795EOF
4796if compile_prog "" "" ; then
4797 :
4798elif compile_prog "" "-lm" ; then
4799 LIBS="-lm $LIBS"
4800 libs_qga="-lm $libs_qga"
4801else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004802 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004803fi
4804
4805##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004806# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004807# uClibc provides 2 versions of clock_gettime(), one with realtime
4808# support and one without. This means that the clock_gettime() don't
4809# need -lrt. We still need it for timer_create() so we check for this
4810# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004811cat > $TMPC <<EOF
4812#include <signal.h>
4813#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004814int main(void) {
4815 timer_create(CLOCK_REALTIME, NULL, NULL);
4816 return clock_gettime(CLOCK_REALTIME, NULL);
4817}
aliguorida93a1f2008-12-12 20:02:52 +00004818EOF
4819
Juan Quintela52166aa2009-08-03 14:46:03 +02004820if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004821 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004822# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004823elif compile_prog "" "$pthread_lib -lrt" ; then
4824 LIBS="$LIBS -lrt"
4825 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004826fi
4827
Thomas Huthd99e97e2019-01-17 18:14:08 +01004828# Check whether we need to link libutil for openpty()
4829cat > $TMPC << EOF
4830extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4831int main(void) { return openpty(0, 0, 0, 0, 0); }
4832EOF
4833
4834if ! compile_prog "" "" ; then
4835 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004836 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004837 libs_tools="-lutil $libs_tools"
4838 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004839fi
4840
Blue Swirlde5071c2009-09-12 09:58:46 +00004841##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004842# spice probe
4843if test "$spice" != "no" ; then
4844 cat > $TMPC << EOF
4845#include <spice.h>
4846int main(void) { spice_server_new(); return 0; }
4847EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004848 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4849 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004850 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004851 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004852 compile_prog "$spice_cflags" "$spice_libs" ; then
4853 spice="yes"
4854 libs_softmmu="$libs_softmmu $spice_libs"
4855 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004856 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4857 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004858 else
4859 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004860 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004861 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004862 fi
4863 spice="no"
4864 fi
4865fi
4866
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004867# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004868if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004869 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004870 libcacard_cflags=$($pkg_config --cflags libcacard)
4871 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004872 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004873 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004874 if test "$smartcard" = "yes"; then
4875 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004876 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004877 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004878 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004879fi
4880
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004881# check for libusb
4882if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004883 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004884 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004885 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4886 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004887 else
4888 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004889 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004890 fi
4891 libusb="no"
4892 fi
4893fi
4894
Hans de Goede69354a82011-07-19 11:04:10 +02004895# check for usbredirparser for usb network redirection support
4896if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004897 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004898 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004899 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4900 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004901 else
4902 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004903 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004904 fi
4905 usb_redir="no"
4906 fi
4907fi
4908
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004909##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004910# check if we have VSS SDK headers for win
4911
Eric Blakee633a5c2019-02-04 20:39:37 -06004912if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4913 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004914 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004915 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004916 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4917 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004918 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004919 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4920 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004921 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004922 esac
4923 cat > $TMPC << EOF
4924#define __MIDL_user_allocate_free_DEFINED__
4925#include <inc/win2003/vss.h>
4926int main(void) { return VSS_CTX_BACKUP; }
4927EOF
4928 if compile_prog "$vss_win32_include" "" ; then
4929 guest_agent_with_vss="yes"
4930 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004931 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004932 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004933 else
4934 if test "$vss_win32_sdk" != "" ; then
4935 echo "ERROR: Please download and install Microsoft VSS SDK:"
4936 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4937 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4938 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4939 echo "ERROR: The headers are extracted in the directory \`inc'."
4940 feature_not_found "VSS support"
4941 fi
4942 guest_agent_with_vss="no"
4943 fi
4944fi
4945
4946##########################################
4947# lookup Windows platform SDK (if not specified)
4948# The SDK is needed only to build .tlb (type library) file of guest agent
4949# VSS provider from the source. It is usually unnecessary because the
4950# pre-compiled .tlb file is included.
4951
Eric Blakee633a5c2019-02-04 20:39:37 -06004952if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4953 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004954 if test -z "$win_sdk"; then
4955 programfiles="$PROGRAMFILES"
4956 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4957 if test -n "$programfiles"; then
4958 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4959 else
4960 feature_not_found "Windows SDK"
4961 fi
4962 elif test "$win_sdk" = "no"; then
4963 win_sdk=""
4964 fi
4965fi
4966
4967##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004968# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06004969if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05004970 cat > $TMPC << EOF
4971#include <windows.h>
4972#include <ntddscsi.h>
4973int main(void) {
4974#if !defined(IOCTL_SCSI_GET_ADDRESS)
4975#error Missing required ioctl definitions
4976#endif
4977 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4978 return addr.Lun;
4979}
4980EOF
4981 if compile_prog "" "" ; then
4982 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08004983 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004984 fi
4985fi
4986
4987##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004988# virgl renderer probe
4989
4990if test "$virglrenderer" != "no" ; then
4991 cat > $TMPC << EOF
4992#include <virglrenderer.h>
4993int main(void) { virgl_renderer_poll(); return 0; }
4994EOF
4995 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4996 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004997 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004998 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4999 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5000 virglrenderer="yes"
5001 else
5002 if test "$virglrenderer" = "yes" ; then
5003 feature_not_found "virglrenderer"
5004 fi
5005 virglrenderer="no"
5006 fi
5007fi
5008
5009##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07005010# capstone
5011
Richard Hendersone219c492017-09-28 09:01:23 -07005012case "$capstone" in
5013 "" | yes)
5014 if $pkg_config capstone; then
5015 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06005016 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07005017 capstone=git
5018 elif test -e "${source_path}/capstone/Makefile" ; then
5019 capstone=internal
5020 elif test -z "$capstone" ; then
5021 capstone=no
5022 else
5023 feature_not_found "capstone" "Install capstone devel or git submodule"
5024 fi
5025 ;;
5026
5027 system)
5028 if ! $pkg_config capstone; then
5029 feature_not_found "capstone" "Install capstone devel"
5030 fi
5031 ;;
5032esac
5033
5034case "$capstone" in
5035 git | internal)
5036 if test "$capstone" = git; then
5037 git_submodules="${git_submodules} capstone"
5038 fi
5039 mkdir -p capstone
5040 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5041 if test "$mingw32" = "yes"; then
5042 LIBCAPSTONE=capstone.lib
5043 else
5044 LIBCAPSTONE=libcapstone.a
5045 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005046 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005047 ;;
5048
5049 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005050 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005051 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005052 ;;
5053
5054 no)
5055 ;;
5056 *)
5057 error_exit "Unknown state for capstone: $capstone"
5058 ;;
5059esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005060
5061##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005062# check if we have fdatasync
5063
5064fdatasync=no
5065cat > $TMPC << EOF
5066#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005067int main(void) {
5068#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5069return fdatasync(0);
5070#else
Stefan Weile172fe12012-04-06 21:33:20 +02005071#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005072#endif
5073}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005074EOF
5075if compile_prog "" "" ; then
5076 fdatasync=yes
5077fi
5078
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005079##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005080# check if we have madvise
5081
5082madvise=no
5083cat > $TMPC << EOF
5084#include <sys/types.h>
5085#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005086#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005087int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5088EOF
5089if compile_prog "" "" ; then
5090 madvise=yes
5091fi
5092
5093##########################################
5094# check if we have posix_madvise
5095
5096posix_madvise=no
5097cat > $TMPC << EOF
5098#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005099#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005100int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5101EOF
5102if compile_prog "" "" ; then
5103 posix_madvise=yes
5104fi
5105
5106##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005107# check if we have posix_memalign()
5108
5109posix_memalign=no
5110cat > $TMPC << EOF
5111#include <stdlib.h>
5112int main(void) {
5113 void *p;
5114 return posix_memalign(&p, 8, 8);
5115}
5116EOF
5117if compile_prog "" "" ; then
5118 posix_memalign=yes
5119fi
5120
5121##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005122# check if we have posix_syslog
5123
5124posix_syslog=no
5125cat > $TMPC << EOF
5126#include <syslog.h>
5127int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5128EOF
5129if compile_prog "" "" ; then
5130 posix_syslog=yes
5131fi
5132
5133##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005134# check if we have sem_timedwait
5135
5136sem_timedwait=no
5137cat > $TMPC << EOF
5138#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005139int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005140EOF
5141if compile_prog "" "" ; then
5142 sem_timedwait=yes
5143fi
5144
5145##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005146# check if we have strchrnul
5147
5148strchrnul=no
5149cat > $TMPC << EOF
5150#include <string.h>
5151int main(void);
5152// Use a haystack that the compiler shouldn't be able to constant fold
5153char *haystack = (char*)&main;
5154int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5155EOF
5156if compile_prog "" "" ; then
5157 strchrnul=yes
5158fi
5159
5160##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005161# check if trace backend exists
5162
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005163$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005164if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005165 error_exit "invalid trace backends" \
5166 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005167fi
5168
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005169##########################################
5170# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005171if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005172 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005173#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005174int main(void) { return 0; }
5175EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005176 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005177 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005178 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005179 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005180 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005181 fi
5182 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005183 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005184 else
5185 urcu_bp_libs="-lurcu-bp"
5186 fi
5187
5188 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5189 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005190 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005191 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005192 fi
5193fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005194
5195##########################################
5196# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005197if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005198 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005199 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005200 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005201 trace_backend_stap="no"
5202 if has 'stap' ; then
5203 trace_backend_stap="yes"
5204 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005205fi
5206
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005207##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005208# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305209
Peter Maydell7c2acc72013-04-08 12:11:27 +01005210# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005211# is sigcontext. On Windows the only valid backend is the Windows
5212# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005213
5214ucontext_works=no
5215if test "$darwin" != "yes"; then
5216 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305217#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005218#ifdef __stub_makecontext
5219#error Ignoring glibc stub makecontext which will always fail
5220#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005221int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305222EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005223 if compile_prog "" "" ; then
5224 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305225 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005226fi
5227
5228if test "$coroutine" = ""; then
5229 if test "$mingw32" = "yes"; then
5230 coroutine=win32
5231 elif test "$ucontext_works" = "yes"; then
5232 coroutine=ucontext
5233 else
5234 coroutine=sigaltstack
5235 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005236else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005237 case $coroutine in
5238 windows)
5239 if test "$mingw32" != "yes"; then
5240 error_exit "'windows' coroutine backend only valid for Windows"
5241 fi
5242 # Unfortunately the user visible backend name doesn't match the
5243 # coroutine-*.c filename for this case, so we have to adjust it here.
5244 coroutine=win32
5245 ;;
5246 ucontext)
5247 if test "$ucontext_works" != "yes"; then
5248 feature_not_found "ucontext"
5249 fi
5250 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005251 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005252 if test "$mingw32" = "yes"; then
5253 error_exit "only the 'windows' coroutine backend is valid for Windows"
5254 fi
5255 ;;
5256 *)
5257 error_exit "unknown coroutine backend $coroutine"
5258 ;;
5259 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305260fi
5261
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005262if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005263 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005264fi
5265
Peter Lieven7d992e42016-09-27 11:58:45 +02005266if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005267 if test "$coroutine_pool" = "yes"; then
5268 echo "WARN: disabling coroutine pool for stack usage debugging"
5269 coroutine_pool=no
5270 fi
5271fi
5272
5273
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305274##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305275# check if we have open_by_handle_at
5276
Stefan Weil4e1797f2012-06-18 22:11:06 +02005277open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305278cat > $TMPC << EOF
5279#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005280#if !defined(AT_EMPTY_PATH)
5281# error missing definition
5282#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005283int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005284#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305285EOF
5286if compile_prog "" "" ; then
5287 open_by_handle_at=yes
5288fi
5289
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305290########################################
5291# check if we have linux/magic.h
5292
5293linux_magic_h=no
5294cat > $TMPC << EOF
5295#include <linux/magic.h>
5296int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005297 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305298}
5299EOF
5300if compile_prog "" "" ; then
5301 linux_magic_h=yes
5302fi
5303
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005304########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005305# check whether we can disable warning option with a pragma (this is needed
5306# to silence warnings in the headers of some versions of external libraries).
5307# This test has to be compiled with -Werror as otherwise an unknown pragma is
5308# only a warning.
5309#
5310# If we can't selectively disable warning in the code, disable -Werror so that
5311# the build doesn't fail anyway.
5312
Peter Maydell06d71fa2012-07-30 16:13:07 +01005313pragma_disable_unused_but_set=no
5314cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005315#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005316#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005317#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005318
Peter Maydell06d71fa2012-07-30 16:13:07 +01005319int main(void) {
5320 return 0;
5321}
5322EOF
5323if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005324 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005325else
5326 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005327fi
5328
5329########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005330# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005331
5332valgrind_h=no
5333cat > $TMPC << EOF
5334#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005335int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005336 return 0;
5337}
5338EOF
5339if compile_prog "" "" ; then
5340 valgrind_h=yes
5341fi
5342
5343########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005344# check if environ is declared
5345
5346has_environ=no
5347cat > $TMPC << EOF
5348#include <unistd.h>
5349int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005350 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005351 return 0;
5352}
5353EOF
5354if compile_prog "" "" ; then
5355 has_environ=yes
5356fi
5357
Richard Henderson76a347e2012-12-28 14:17:02 -08005358########################################
5359# check if cpuid.h is usable.
5360
Richard Henderson76a347e2012-12-28 14:17:02 -08005361cat > $TMPC << EOF
5362#include <cpuid.h>
5363int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005364 unsigned a, b, c, d;
5365 int max = __get_cpuid_max(0, 0);
5366
5367 if (max >= 1) {
5368 __cpuid(1, a, b, c, d);
5369 }
5370
5371 if (max >= 7) {
5372 __cpuid_count(7, 0, a, b, c, d);
5373 }
5374
5375 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005376}
5377EOF
5378if compile_prog "" "" ; then
5379 cpuid_h=yes
5380fi
5381
Richard Henderson5dd89902017-07-18 18:40:18 -10005382##########################################
5383# avx2 optimization requirement check
5384#
5385# There is no point enabling this if cpuid.h is not usable,
5386# since we won't be able to select the new routines.
5387
Eric Blakee633a5c2019-02-04 20:39:37 -06005388if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005389 cat > $TMPC << EOF
5390#pragma GCC push_options
5391#pragma GCC target("avx2")
5392#include <cpuid.h>
5393#include <immintrin.h>
5394static int bar(void *a) {
5395 __m256i x = *(__m256i *)a;
5396 return _mm256_testz_si256(x, x);
5397}
5398int main(int argc, char *argv[]) { return bar(argv[0]); }
5399EOF
5400 if compile_object "" ; then
5401 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005402 else
5403 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005404 fi
5405fi
5406
Richard Hendersonf5401662013-02-16 12:46:59 -08005407########################################
5408# check if __[u]int128_t is usable.
5409
5410int128=no
5411cat > $TMPC << EOF
5412__int128_t a;
5413__uint128_t b;
5414int main (void) {
5415 a = a + b;
5416 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005417 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005418 return 0;
5419}
5420EOF
5421if compile_prog "" "" ; then
5422 int128=yes
5423fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005424
Richard Henderson7ebee432016-06-29 21:10:59 -07005425#########################################
5426# See if 128-bit atomic operations are supported.
5427
5428atomic128=no
5429if test "$int128" = "yes"; then
5430 cat > $TMPC << EOF
5431int main(void)
5432{
5433 unsigned __int128 x = 0, y = 0;
5434 y = __atomic_load_16(&x, 0);
5435 __atomic_store_16(&x, y, 0);
5436 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5437 return 0;
5438}
5439EOF
5440 if compile_prog "" "" ; then
5441 atomic128=yes
5442 fi
5443fi
5444
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005445cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005446if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005447 cat > $TMPC << EOF
5448int main(void)
5449{
5450 unsigned __int128 x = 0, y = 0;
5451 __sync_val_compare_and_swap_16(&x, y, x);
5452 return 0;
5453}
5454EOF
5455 if compile_prog "" "" ; then
5456 cmpxchg128=yes
5457 fi
5458fi
5459
Richard Hendersondf79b992016-09-02 12:23:57 -07005460#########################################
5461# See if 64-bit atomic operations are supported.
5462# Note that without __atomic builtins, we can only
5463# assume atomic loads/stores max at pointer size.
5464
5465cat > $TMPC << EOF
5466#include <stdint.h>
5467int main(void)
5468{
5469 uint64_t x = 0, y = 0;
5470#ifdef __ATOMIC_RELAXED
5471 y = __atomic_load_8(&x, 0);
5472 __atomic_store_8(&x, y, 0);
5473 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5474 __atomic_exchange_8(&x, y, 0);
5475 __atomic_fetch_add_8(&x, y, 0);
5476#else
5477 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5478 __sync_lock_test_and_set(&x, y);
5479 __sync_val_compare_and_swap(&x, y, 0);
5480 __sync_fetch_and_add(&x, y);
5481#endif
5482 return 0;
5483}
5484EOF
5485if compile_prog "" "" ; then
5486 atomic64=yes
5487fi
5488
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005489########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005490# See if 16-byte vector operations are supported.
5491# Even without a vector unit the compiler may expand these.
5492# There is a bug in old GCC for PPC that crashes here.
5493# Unfortunately it's the system compiler for Centos 7.
5494
5495cat > $TMPC << EOF
5496typedef unsigned char U1 __attribute__((vector_size(16)));
5497typedef unsigned short U2 __attribute__((vector_size(16)));
5498typedef unsigned int U4 __attribute__((vector_size(16)));
5499typedef unsigned long long U8 __attribute__((vector_size(16)));
5500typedef signed char S1 __attribute__((vector_size(16)));
5501typedef signed short S2 __attribute__((vector_size(16)));
5502typedef signed int S4 __attribute__((vector_size(16)));
5503typedef signed long long S8 __attribute__((vector_size(16)));
5504static U1 a1, b1;
5505static U2 a2, b2;
5506static U4 a4, b4;
5507static U8 a8, b8;
5508static S1 c1;
5509static S2 c2;
5510static S4 c4;
5511static S8 c8;
5512static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005513void helper(void *d, void *a, int shift, int i);
5514void helper(void *d, void *a, int shift, int i)
5515{
5516 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5517 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5518 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5519 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5520}
Richard Hendersondb432672017-09-15 14:11:45 -07005521int main(void)
5522{
5523 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5524 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5525 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5526 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5527 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5528 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5529 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5530 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5531 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5532 return 0;
5533}
5534EOF
5535
5536vector16=no
5537if compile_prog "" "" ; then
5538 vector16=yes
5539fi
5540
5541########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005542# check if getauxval is available.
5543
5544getauxval=no
5545cat > $TMPC << EOF
5546#include <sys/auxv.h>
5547int main(void) {
5548 return getauxval(AT_HWCAP) == 0;
5549}
5550EOF
5551if compile_prog "" "" ; then
5552 getauxval=yes
5553fi
5554
John Snowfd0e6052015-03-25 18:57:39 -04005555########################################
5556# check if ccache is interfering with
5557# semantic analysis of macros
5558
John Snow5e4dfd32015-10-28 13:56:40 -04005559unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005560ccache_cpp2=no
5561cat > $TMPC << EOF
5562static const int Z = 1;
5563#define fn() ({ Z; })
5564#define TAUT(X) ((X) == Z)
5565#define PAREN(X, Y) (X == Y)
5566#define ID(X) (X)
5567int main(int argc, char *argv[])
5568{
5569 int x = 0, y = 0;
5570 x = ID(x);
5571 x = fn();
5572 fn();
5573 if (PAREN(x, y)) return 0;
5574 if (TAUT(Z)) return 0;
5575 return 0;
5576}
5577EOF
5578
5579if ! compile_object "-Werror"; then
5580 ccache_cpp2=yes
5581fi
5582
John Snowb553a042015-11-03 15:43:42 -05005583#################################################
5584# clang does not support glibc + FORTIFY_SOURCE.
5585
5586if test "$fortify_source" != "no"; then
5587 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5588 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005589 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005590 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005591 fortify_source="no";
5592 else
5593 fortify_source="yes"
5594 fi
5595fi
5596
Fam Zheng1efad062018-06-01 17:26:43 +08005597###############################################
5598# Check if copy_file_range is provided by glibc
5599have_copy_file_range=no
5600cat > $TMPC << EOF
5601#include <unistd.h>
5602int main(void) {
5603 copy_file_range(0, NULL, 0, NULL, 0, 0);
5604 return 0;
5605}
5606EOF
5607if compile_prog "" "" ; then
5608 have_copy_file_range=yes
5609fi
5610
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305611##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005612# check if struct fsxattr is available via linux/fs.h
5613
5614have_fsxattr=no
5615cat > $TMPC << EOF
5616#include <linux/fs.h>
5617struct fsxattr foo;
5618int main(void) {
5619 return 0;
5620}
5621EOF
5622if compile_prog "" "" ; then
5623 have_fsxattr=yes
5624fi
5625
Peter Maydellb66e10e2016-06-08 18:34:32 +01005626##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005627# check for usable membarrier system call
5628if test "$membarrier" = "yes"; then
5629 have_membarrier=no
5630 if test "$mingw32" = "yes" ; then
5631 have_membarrier=yes
5632 elif test "$linux" = "yes" ; then
5633 cat > $TMPC << EOF
5634 #include <linux/membarrier.h>
5635 #include <sys/syscall.h>
5636 #include <unistd.h>
5637 #include <stdlib.h>
5638 int main(void) {
5639 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5640 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5641 exit(0);
5642 }
5643EOF
5644 if compile_prog "" "" ; then
5645 have_membarrier=yes
5646 fi
5647 fi
5648 if test "$have_membarrier" = "no"; then
5649 feature_not_found "membarrier" "membarrier system call not available"
5650 fi
5651else
5652 # Do not enable it by default even for Mingw32, because it doesn't
5653 # work on Wine.
5654 membarrier=no
5655fi
5656
5657##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005658# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005659have_rtnetlink=no
5660cat > $TMPC << EOF
5661#include <linux/rtnetlink.h>
5662int main(void) {
5663 return IFLA_PROTO_DOWN;
5664}
5665EOF
5666if compile_prog "" "" ; then
5667 have_rtnetlink=yes
5668fi
5669
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005670##########################################
5671# check for usable AF_VSOCK environment
5672have_af_vsock=no
5673cat > $TMPC << EOF
5674#include <errno.h>
5675#include <sys/types.h>
5676#include <sys/socket.h>
5677#if !defined(AF_VSOCK)
5678# error missing AF_VSOCK flag
5679#endif
5680#include <linux/vm_sockets.h>
5681int main(void) {
5682 int sock, ret;
5683 struct sockaddr_vm svm;
5684 socklen_t len = sizeof(svm);
5685 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5686 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5687 if ((ret == -1) && (errno == ENOTCONN)) {
5688 return 0;
5689 }
5690 return -1;
5691}
5692EOF
5693if compile_prog "" "" ; then
5694 have_af_vsock=yes
5695fi
5696
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005697##########################################
5698# check for usable AF_ALG environment
5699hava_afalg=no
5700cat > $TMPC << EOF
5701#include <errno.h>
5702#include <sys/types.h>
5703#include <sys/socket.h>
5704#include <linux/if_alg.h>
5705int main(void) {
5706 int sock;
5707 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5708 return sock;
5709}
5710EOF
5711if compile_prog "" "" ; then
5712 have_afalg=yes
5713fi
5714if test "$crypto_afalg" = "yes"
5715then
5716 if test "$have_afalg" != "yes"
5717 then
5718 error_exit "AF_ALG requested but could not be detected"
5719 fi
5720fi
5721
5722
James Clarke6969ec62016-06-06 12:02:50 +01005723#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005724# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005725if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005726 cat > $TMPC << EOF
5727#include <Hypervisor/hv.h>
5728int main() { return 0;}
5729EOF
5730 if ! compile_object ""; then
5731 hvf='no'
5732 else
5733 hvf='yes'
5734 LDFLAGS="-framework Hypervisor $LDFLAGS"
5735 fi
5736fi
5737
5738#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005739# Sparc implicitly links with --relax, which is
5740# incompatible with -r, so --no-relax should be
5741# given. It does no harm to give it on other
5742# platforms too.
5743
5744# Note: the prototype is needed since QEMU_CFLAGS
5745# contains -Wmissing-prototypes
5746cat > $TMPC << EOF
5747extern int foo(void);
5748int foo(void) { return 0; }
5749EOF
5750if ! compile_object ""; then
5751 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5752fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005753for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5754 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5755 LD_REL_FLAGS=$i
5756 break
5757 fi
5758done
5759if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5760 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005761fi
5762
Jan Vesely277abf12016-04-29 13:15:23 -04005763##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005764# check for sysmacros.h
5765
5766have_sysmacros=no
5767cat > $TMPC << EOF
5768#include <sys/sysmacros.h>
5769int main(void) {
5770 return makedev(0, 0);
5771}
5772EOF
5773if compile_prog "" "" ; then
5774 have_sysmacros=yes
5775fi
5776
5777##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005778# Veritas HyperScale block driver VxHS
5779# Check if libvxhs is installed
5780
5781if test "$vxhs" != "no" ; then
5782 cat > $TMPC <<EOF
5783#include <stdint.h>
5784#include <qnio/qnio_api.h>
5785
5786void *vxhs_callback;
5787
5788int main(void) {
5789 iio_init(QNIO_VERSION, vxhs_callback);
5790 return 0;
5791}
5792EOF
5793 vxhs_libs="-lvxhs -lssl"
5794 if compile_prog "" "$vxhs_libs" ; then
5795 vxhs=yes
5796 else
5797 if test "$vxhs" = "yes" ; then
5798 feature_not_found "vxhs block device" "Install libvxhs See github"
5799 fi
5800 vxhs=no
5801 fi
5802fi
5803
5804##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005805# check for _Static_assert()
5806
5807have_static_assert=no
5808cat > $TMPC << EOF
5809_Static_assert(1, "success");
5810int main(void) {
5811 return 0;
5812}
5813EOF
5814if compile_prog "" "" ; then
5815 have_static_assert=yes
5816fi
5817
5818##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005819# check for utmpx.h, it is missing e.g. on OpenBSD
5820
5821have_utmpx=no
5822cat > $TMPC << EOF
5823#include <utmpx.h>
5824struct utmpx user_info;
5825int main(void) {
5826 return 0;
5827}
5828EOF
5829if compile_prog "" "" ; then
5830 have_utmpx=yes
5831fi
5832
5833##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07005834# check for getrandom()
5835
5836have_getrandom=no
5837cat > $TMPC << EOF
5838#include <sys/random.h>
5839int main(void) {
5840 return getrandom(0, 0, GRND_NONBLOCK);
5841}
5842EOF
5843if compile_prog "" "" ; then
5844 have_getrandom=yes
5845fi
5846
5847##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005848# checks for sanitizers
5849
Marc-André Lureau247724c2018-01-16 16:11:51 +01005850have_asan=no
5851have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005852have_asan_iface_h=no
5853have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005854
5855if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005856 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005857 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5858 have_asan=yes
5859 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005860
5861 # we could use a simple skeleton for flags checks, but this also
5862 # detect the static linking issue of ubsan, see also:
5863 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5864 cat > $TMPC << EOF
5865#include <stdlib.h>
5866int main(void) {
5867 void *tmp = malloc(10);
5868 return *(int *)(tmp + 2);
5869}
5870EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005871 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5872 have_ubsan=yes
5873 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005874
5875 if check_include "sanitizer/asan_interface.h" ; then
5876 have_asan_iface_h=yes
5877 fi
5878
5879 cat > $TMPC << EOF
5880#include <sanitizer/asan_interface.h>
5881int main(void) {
5882 __sanitizer_start_switch_fiber(0, 0, 0);
5883 return 0;
5884}
5885EOF
5886 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5887 have_asan_iface_fiber=yes
5888 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005889fi
5890
5891##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005892# Docker and cross-compiler support
5893#
5894# This is specifically for building test
5895# cases for foreign architectures, not
5896# cross-compiling QEMU itself.
5897
5898if has "docker"; then
5899 docker=$($python $source_path/tests/docker/docker.py probe)
5900fi
5901
5902##########################################
Junyan He17824402018-07-18 15:47:59 +08005903# check for libpmem
5904
5905if test "$libpmem" != "no"; then
5906 if $pkg_config --exists "libpmem"; then
5907 libpmem="yes"
5908 libpmem_libs=$($pkg_config --libs libpmem)
5909 libpmem_cflags=$($pkg_config --cflags libpmem)
5910 libs_softmmu="$libs_softmmu $libpmem_libs"
5911 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5912 else
5913 if test "$libpmem" = "yes" ; then
5914 feature_not_found "libpmem" "Install nvml or pmdk"
5915 fi
5916 libpmem="no"
5917 fi
5918fi
5919
5920##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005921# check for slirp
5922
5923case "$slirp" in
5924 "" | yes)
5925 if $pkg_config slirp; then
5926 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02005927 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5928 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005929 elif test -e "${source_path}/slirp/Makefile" ; then
5930 slirp=internal
5931 elif test -z "$slirp" ; then
5932 slirp=no
5933 else
5934 feature_not_found "slirp" "Install slirp devel or git submodule"
5935 fi
5936 ;;
5937
5938 system)
5939 if ! $pkg_config slirp; then
5940 feature_not_found "slirp" "Install slirp devel"
5941 fi
5942 ;;
5943esac
5944
5945case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02005946 git | internal)
5947 if test "$slirp" = git; then
5948 git_submodules="${git_submodules} slirp"
5949 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005950 mkdir -p slirp
5951 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5952 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5953 ;;
5954
5955 system)
5956 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5957 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5958 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5959 ;;
5960
5961 no)
5962 ;;
5963 *)
5964 error_exit "Unknown state for slirp: $slirp"
5965 ;;
5966esac
5967
5968
5969##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005970# End of CC checks
5971# After here, no more $cc or $ld runs
5972
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005973write_c_skeleton
5974
Blue Swirl1d728c32012-05-01 18:45:39 +00005975if test "$gcov" = "yes" ; then
5976 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5977 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005978elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005979 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005980elif test "$debug" = "no"; then
5981 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005982fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005983
Marc-André Lureau247724c2018-01-16 16:11:51 +01005984if test "$have_asan" = "yes"; then
5985 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005986 if test "$have_asan_iface_h" = "no" ; then
5987 echo "ASAN build enabled, but ASAN header missing." \
5988 "Without code annotation, the report may be inferior."
5989 elif test "$have_asan_iface_fiber" = "no" ; then
5990 echo "ASAN build enabled, but ASAN header is too old." \
5991 "Without code annotation, the report may be inferior."
5992 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005993fi
5994if test "$have_ubsan" = "yes"; then
5995 CFLAGS="-fsanitize=undefined $CFLAGS"
5996fi
5997
Peter Lieven6542aa92014-02-03 10:26:13 +01005998##########################################
5999# Do we have libnfs
6000if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01006001 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01006002 libnfs="yes"
6003 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01006004 else
6005 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08006006 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01006007 fi
6008 libnfs="no"
6009 fi
6010fi
Blue Swirl1d728c32012-05-01 18:45:39 +00006011
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006012##########################################
6013# Do we have libudev
6014if test "$libudev" != "no" ; then
6015 if $pkg_config libudev && test "$static" != "yes"; then
6016 libudev="yes"
6017 libudev_libs=$($pkg_config --libs libudev)
6018 else
6019 libudev="no"
6020 fi
6021fi
6022
Peter Maydell6ca026c2012-07-18 15:10:18 +01006023# Now we've finished running tests it's OK to add -Werror to the compiler flags
6024if test "$werror" = "yes"; then
6025 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6026fi
6027
Juan Quintelae86ecd42009-08-03 14:45:59 +02006028if test "$solaris" = "no" ; then
6029 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02006030 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02006031 fi
6032fi
6033
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006034# test if pod2man has --utf8 option
6035if pod2man --help | grep -q utf8; then
6036 POD2MAN="pod2man --utf8"
6037else
6038 POD2MAN="pod2man"
6039fi
6040
Blue Swirl952afb72010-09-19 08:36:34 +00006041# Use ASLR, no-SEH and DEP if available
6042if test "$mingw32" = "yes" ; then
6043 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006044 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00006045 LDFLAGS="-Wl,$flag $LDFLAGS"
6046 fi
6047 done
6048fi
6049
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006050# Disable OpenBSD W^X if available
6051if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6052 cat > $TMPC <<EOF
6053 int main(void) { return 0; }
6054EOF
6055 wx_ldflags="-Wl,-z,wxneeded"
6056 if compile_prog "" "$wx_ldflags"; then
6057 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6058 fi
6059fi
6060
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006061qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006062qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006063qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006064qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006065qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006066qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006067
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006068# We can only support ivshmem if we have eventfd
6069if [ "$eventfd" = "yes" ]; then
6070 ivshmem=yes
6071fi
6072
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006073tools=""
6074if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006075 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006076 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6077 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006078 fi
6079 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006080 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006081 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006082 if [ "$curl" = "yes" ]; then
6083 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006084 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006085fi
6086if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006087 if test "$linux" = yes; then
6088 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006089 virtfs=yes
6090 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6091 else
6092 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006093 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306094 fi
Andreas Färber17500372012-05-01 01:12:03 +02006095 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006096 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006097 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6098 mpath=yes
6099 else
6100 if test "$mpath" = yes; then
6101 error_exit "Multipath requires libmpathpersist devel"
6102 fi
6103 mpath=no
6104 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006105 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6106 else
6107 if test "$virtfs" = yes; then
6108 error_exit "VirtFS is supported only on Linux"
6109 fi
6110 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006111 if test "$mpath" = yes; then
6112 error_exit "Multipath is supported only on Linux"
6113 fi
6114 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306115 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006116 if test "$xkbcommon" = "yes"; then
6117 tools="qemu-keymap\$(EXESUF) $tools"
6118 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006119fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006120
6121# Probe for guest agent support/options
6122
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006123if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006124 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6125 guest_agent=no
6126 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05006127 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006128 guest_agent=yes
6129 elif [ "$guest_agent" != yes ]; then
6130 guest_agent=no
6131 else
6132 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006133 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006134fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006135
Michael Roth9d6bc272015-08-26 10:49:13 -05006136# Guest agent Window MSI package
6137
6138if test "$guest_agent" != yes; then
6139 if test "$guest_agent_msi" = yes; then
6140 error_exit "MSI guest agent package requires guest agent enabled"
6141 fi
6142 guest_agent_msi=no
6143elif test "$mingw32" != "yes"; then
6144 if test "$guest_agent_msi" = "yes"; then
6145 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6146 fi
6147 guest_agent_msi=no
6148elif ! has wixl; then
6149 if test "$guest_agent_msi" = "yes"; then
6150 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6151 fi
6152 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006153else
6154 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6155 # disabled explicitly
6156 if test "$guest_agent_msi" != "no"; then
6157 guest_agent_msi=yes
6158 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006159fi
6160
Michael Roth1a349042015-08-26 11:14:31 -05006161if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006162 if test "$guest_agent_with_vss" = "yes"; then
6163 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6164 fi
6165
6166 if test "$QEMU_GA_MANUFACTURER" = ""; then
6167 QEMU_GA_MANUFACTURER=QEMU
6168 fi
6169
6170 if test "$QEMU_GA_DISTRO" = ""; then
6171 QEMU_GA_DISTRO=Linux
6172 fi
6173
6174 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006175 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006176 fi
6177
Stefan Weil89138852016-05-16 15:10:20 +02006178 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006179
6180 case "$cpu" in
6181 x86_64)
6182 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6183 ;;
6184 i386)
6185 QEMU_GA_MSI_ARCH="-D Arch=32"
6186 ;;
6187 *)
6188 error_exit "CPU $cpu not supported for building installation package"
6189 ;;
6190 esac
6191fi
6192
Paolo Bonzinica35f782010-05-26 16:08:29 +02006193# Mac OS X ships with a broken assembler
6194roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006195if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6196 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6197 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006198 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006199 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6200 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6201 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006202 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6203 ld_i386_emulation="$emu"
6204 roms="optionrom"
6205 break
6206 fi
6207 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006208fi
Richard Hendersonf8378ac2019-05-01 15:38:18 -07006209if test "$ARCH" = "ppc64" && test "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11006210 roms="$roms spapr-rtas"
6211fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006212
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006213# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006214if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006215 write_c_skeleton
6216 if compile_prog "-march=z900" ""; then
6217 roms="$roms s390-ccw"
6218 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006219fi
6220
Richard Henderson964c6fa2013-06-21 19:10:16 -07006221# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006222if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006223 textseg_addr=
6224 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006225 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6226 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006227 textseg_addr=0x60000000
6228 ;;
6229 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006230 # A 256M aligned address, high in the address space, with enough
6231 # room for the code_gen_buffer above it before the stack.
6232 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006233 ;;
6234 esac
6235 if [ -n "$textseg_addr" ]; then
6236 cat > $TMPC <<EOF
6237 int main(void) { return 0; }
6238EOF
6239 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6240 if ! compile_prog "" "$textseg_ldflags"; then
6241 # In case ld does not support -Ttext-segment, edit the default linker
6242 # script via sed to set the .text start addr. This is needed on FreeBSD
6243 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006244 if ! $ld --verbose >/dev/null 2>&1; then
6245 error_exit \
6246 "We need to link the QEMU user mode binaries at a" \
6247 "specific text address. Unfortunately your linker" \
6248 "doesn't support either the -Ttext-segment option or" \
6249 "printing the default linker script with --verbose." \
6250 "If you don't want the user mode binaries, pass the" \
6251 "--disable-user option to configure."
6252 fi
6253
Richard Henderson964c6fa2013-06-21 19:10:16 -07006254 $ld --verbose | sed \
6255 -e '1,/==================================================/d' \
6256 -e '/==================================================/,$d' \
6257 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6258 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6259 textseg_ldflags="-Wl,-T../config-host.ld"
6260 fi
6261 fi
6262fi
6263
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006264# Check that the C++ compiler exists and works with the C compiler.
6265# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6266if has $cxx; then
6267 cat > $TMPC <<EOF
6268int c_function(void);
6269int main(void) { return c_function(); }
6270EOF
6271
6272 compile_object
6273
6274 cat > $TMPCXX <<EOF
6275extern "C" {
6276 int c_function(void);
6277}
6278int c_function(void) { return 42; }
6279EOF
6280
6281 update_cxxflags
6282
6283 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6284 # C++ compiler $cxx works ok with C compiler $cc
6285 :
6286 else
6287 echo "C++ compiler $cxx does not work with C compiler $cc"
6288 echo "Disabling C++ specific optional code"
6289 cxx=
6290 fi
6291else
6292 echo "No C++ compiler available; disabling C++ specific optional code"
6293 cxx=
6294fi
6295
Cole Robinson02d34f62016-05-06 14:03:09 -04006296echo_version() {
6297 if test "$1" = "yes" ; then
6298 echo "($2)"
6299 fi
6300}
6301
Jan Kiszka50e12062014-10-02 10:03:55 +02006302# prepend pixman and ftd flags after all config tests are done
6303QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006304QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006305libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006306
bellard43ce4df2003-06-09 19:53:12 +00006307echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006308echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006309echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006310echo "binary directory $(eval echo $bindir)"
6311echo "library directory $(eval echo $libdir)"
6312echo "module directory $(eval echo $qemu_moddir)"
6313echo "libexec directory $(eval echo $libexecdir)"
6314echo "include directory $(eval echo $includedir)"
6315echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006316if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006317echo "local state directory $(eval echo $local_statedir)"
6318echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006319echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006320else
6321echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006322echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006323fi
bellard5a671352003-10-01 00:13:48 +00006324echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006325echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006326echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006327echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006328echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006329echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006330echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006331echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006332echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006333echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006334echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006335echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006336echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006337echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006338echo "python $python ($python_version)"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006339echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6340if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006341 echo "smbd $smbd"
6342fi
Fam Zheng17969262014-02-10 14:48:56 +08006343echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006344echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006345echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006346echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006347echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006348echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006349echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006350echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006351echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006352if test "$darwin" = "yes" ; then
6353 echo "Cocoa support $cocoa"
6354fi
Stefan Weil89138852016-05-16 15:10:20 +02006355echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006356echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006357echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006358echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006359echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006360echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006361echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006362echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006363echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006364echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006365echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006366echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006367echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006368echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006369echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006370echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006371echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006372echo "Block whitelist (rw) $block_drv_rw_whitelist"
6373echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306374echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006375echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006376echo "VNC support $vnc"
6377if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006378 echo "VNC SASL support $vnc_sasl"
6379 echo "VNC JPEG support $vnc_jpeg"
6380 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006381fi
blueswir131422552007-04-16 18:27:06 +00006382if test -n "$sparc_cpu"; then
6383 echo "Target Sparc Arch $sparc_cpu"
6384fi
aliguorie37630c2009-04-22 15:19:10 +00006385echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006386if test "$xen" = "yes" ; then
6387 echo "xen ctrl version $xen_ctrl_version"
6388fi
aurel322e4d9fb2008-04-08 06:01:02 +00006389echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006390echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006391echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006392echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006393echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006394echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006395echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006396echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006397echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006398echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006399echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006400echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006401echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006402echo "TCG support $tcg"
6403if test "$tcg" = "yes" ; then
6404 echo "TCG debug enabled $debug_tcg"
6405 echo "TCG interpreter $tcg_interpreter"
6406fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006407echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006408echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006409echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006410echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006411echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006412echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006413echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006414echo "madvise $madvise"
6415echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006416echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006417echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006418echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006419echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006420echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006421echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006422echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006423echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006424if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006425echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006426fi
Stefan Weil89138852016-05-16 15:10:20 +02006427echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006428echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006429echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006430echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006431echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006432echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006433echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006434echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006435echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006436echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006437echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006438echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006439echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006440echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006441echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006442echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006443echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006444echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006445echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006446echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306447echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006448echo "gcov $gcov_tool"
6449echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006450echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006451echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006452echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006453echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006454echo "lzo support $lzo"
6455echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006456echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006457echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006458echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006459echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006460echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006461echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006462echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006463echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006464echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006465echo "bochs support $bochs"
6466echo "cloop support $cloop"
6467echo "dmg support $dmg"
6468echo "qcow v1 support $qcow1"
6469echo "vdi support $vdi"
6470echo "vvfat support $vvfat"
6471echo "qed support $qed"
6472echo "parallels support $parallels"
6473echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006474echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006475echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006476echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006477echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006478echo "default devices $default_devices"
bellard67b915a2004-03-31 23:37:16 +00006479
Peter Maydell898be3e2017-03-21 14:31:57 +00006480if test "$supported_cpu" = "no"; then
6481 echo
6482 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6483 echo
6484 echo "CPU host architecture $cpu support is not currently maintained."
6485 echo "The QEMU project intends to remove support for this host CPU in"
6486 echo "a future release if nobody volunteers to maintain it and to"
6487 echo "provide a build host for our continuous integration setup."
6488 echo "configure has succeeded and you can continue to build, but"
6489 echo "if you care about QEMU on this platform you should contact"
6490 echo "us upstream at qemu-devel@nongnu.org."
6491fi
6492
6493if test "$supported_os" = "no"; then
6494 echo
6495 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6496 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006497 echo "Host OS $targetos support is not currently maintained."
6498 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006499 echo "a future release if nobody volunteers to maintain it and to"
6500 echo "provide a build host for our continuous integration setup."
6501 echo "configure has succeeded and you can continue to build, but"
6502 echo "if you care about QEMU on this platform you should contact"
6503 echo "us upstream at qemu-devel@nongnu.org."
6504fi
6505
Eduardo Habkoste5abf592019-05-03 16:37:21 -03006506# Note that if the Python conditional here evaluates True we will exit
6507# with status 1 which is a shell 'false' value.
6508if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6509 echo
6510 echo "warning: Python 2 support is deprecated" >&2
6511 echo "warning: Python 3 will be required for building future versions of QEMU" >&2
6512fi
6513
Juan Quintela98ec69a2009-07-16 18:34:18 +02006514config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006515
Stefan Weildbd99ae2013-01-01 18:33:44 +01006516echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6517
Juan Quintela98ec69a2009-07-16 18:34:18 +02006518echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006519echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006520
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006521echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006522echo "prefix=$prefix" >> $config_host_mak
6523echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006524echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006525echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006526echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006527echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006528echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006529echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006530echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006531echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006532echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006533echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006534if test "$mingw32" = "no" ; then
6535 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6536fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006537echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006538echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006539echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006540echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006541echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006542echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006543echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006544echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006545echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006546
Juan Quintela98ec69a2009-07-16 18:34:18 +02006547echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006548
Paolo Bonzinif3494742019-01-23 14:56:17 +08006549if test "$default_devices" = "yes" ; then
6550 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6551else
6552 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6553fi
aurel32f8393942009-04-13 18:45:38 +00006554if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006555 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006556fi
aliguori1625af82009-04-05 17:41:02 +00006557if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006558 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006559fi
bellard7d132992003-03-06 23:23:54 +00006560if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006561 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006562fi
bellard67b915a2004-03-31 23:37:16 +00006563if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006564 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006565 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006566 version_major=${rc_version%%.*}
6567 rc_version=${rc_version#*.}
6568 version_minor=${rc_version%%.*}
6569 rc_version=${rc_version#*.}
6570 version_subminor=${rc_version%%.*}
6571 version_micro=0
6572 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6573 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006574 if test "$guest_agent_with_vss" = "yes" ; then
6575 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006576 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006577 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6578 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006579 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006580 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006581 fi
Michael Roth1a349042015-08-26 11:14:31 -05006582 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006583 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006584 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6585 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6586 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6587 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6588 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6589 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6590 fi
pbrook210fa552007-02-27 21:04:49 +00006591else
Juan Quintela35f4df22009-07-27 16:13:07 +02006592 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006593fi
blueswir1128ab2f2008-08-15 18:33:42 +00006594
Mark McLoughlindffcb712009-10-22 17:49:11 +01006595if test "$linux" = "yes" ; then
6596 echo "CONFIG_LINUX=y" >> $config_host_mak
6597fi
6598
bellard83fb7ad2004-07-05 21:25:26 +00006599if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006600 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006601fi
malcb29fe3e2008-11-18 01:42:22 +00006602
bellardec530c82006-04-25 22:36:06 +00006603if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006604 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006605fi
Andreas Färber179cf402010-09-20 00:50:43 +02006606if test "$haiku" = "yes" ; then
6607 echo "CONFIG_HAIKU=y" >> $config_host_mak
6608fi
bellard97a847b2003-08-10 21:36:04 +00006609if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006610 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006611fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006612if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006613 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006614fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006615if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006616 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006617 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006618 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6619 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6620fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006621if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006622 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006623fi
ths8a16d272008-07-19 09:56:24 +00006624if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006625 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006626 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006627fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006628if test "$netmap" = "yes" ; then
6629 echo "CONFIG_NETMAP=y" >> $config_host_mak
6630fi
Gonglei015a33b2014-07-01 20:58:08 +08006631if test "$l2tpv3" = "yes" ; then
6632 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6633fi
Corey Bryant47e98652012-01-26 09:42:26 -05006634if test "$cap_ng" = "yes" ; then
6635 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6636fi
Juan Quintela2358a492009-07-27 16:13:25 +02006637echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006638for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006639 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006640 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006641 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006642 echo "$def=m" >> $config_host_mak ;;
6643 *)
6644 echo "$def=y" >> $config_host_mak ;;
6645 esac
malc0c58ac12008-06-25 21:04:05 +00006646done
Fam Zhengb1149912017-09-07 16:29:13 +08006647echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6648echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6649echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6650echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6651echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006652if test "$audio_pt_int" = "yes" ; then
6653 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6654fi
malcd5631632009-10-10 01:13:41 +04006655if test "$audio_win_int" = "yes" ; then
6656 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6657fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006658echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6659echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006660if test "$vnc" = "yes" ; then
6661 echo "CONFIG_VNC=y" >> $config_host_mak
6662fi
aliguori2f9606b2009-03-06 20:27:28 +00006663if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006664 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006665fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006666if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006667 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006668fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006669if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006670 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006671fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006672if test "$xkbcommon" = "yes" ; then
6673 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6674 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6675fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006676if test "$xfs" = "yes" ; then
6677 echo "CONFIG_XFS=y" >> $config_host_mak
6678fi
Stefan Weil89138852016-05-16 15:10:20 +02006679qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006680echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006681echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006682echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006683echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006684if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006685 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006686fi
Fam Zheng17969262014-02-10 14:48:56 +08006687if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006688 # $shacmd can generate a hash started with digit, which the compiler doesn't
6689 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006690 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006691 echo "CONFIG_MODULES=y" >> $config_host_mak
6692fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006693if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006694 echo "CONFIG_X11=y" >> $config_host_mak
6695 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6696 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6697fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006698if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006699 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006700 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006701 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006702 if test "$sdl_image" = "yes" ; then
6703 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6704 fi
bellard49ecc3f2007-11-07 19:25:15 +00006705fi
6706if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006707 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006708fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006709if test "$iconv" = "yes" ; then
6710 echo "CONFIG_ICONV=y" >> $config_host_mak
6711 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6712 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6713fi
balrog4d3b6f62008-02-10 16:33:14 +00006714if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006715 echo "CONFIG_CURSES=m" >> $config_host_mak
6716 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6717 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006718fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006719if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006720 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006721fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006722if test "$accept4" = "yes" ; then
6723 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6724fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306725if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006726 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306727fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006728if test "$eventfd" = "yes" ; then
6729 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6730fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006731if test "$memfd" = "yes" ; then
6732 echo "CONFIG_MEMFD=y" >> $config_host_mak
6733fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006734if test "$have_usbfs" = "yes" ; then
6735 echo "CONFIG_USBFS=y" >> $config_host_mak
6736fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006737if test "$fallocate" = "yes" ; then
6738 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6739fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006740if test "$fallocate_punch_hole" = "yes" ; then
6741 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6742fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006743if test "$fallocate_zero_range" = "yes" ; then
6744 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6745fi
Kevin Wolfed911432014-09-29 17:12:59 +02006746if test "$posix_fallocate" = "yes" ; then
6747 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6748fi
Peter Maydellc727f472011-01-06 11:05:10 +00006749if test "$sync_file_range" = "yes" ; then
6750 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6751fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006752if test "$fiemap" = "yes" ; then
6753 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6754fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006755if test "$dup3" = "yes" ; then
6756 echo "CONFIG_DUP3=y" >> $config_host_mak
6757fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006758if test "$ppoll" = "yes" ; then
6759 echo "CONFIG_PPOLL=y" >> $config_host_mak
6760fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006761if test "$prctl_pr_set_timerslack" = "yes" ; then
6762 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6763fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006764if test "$epoll" = "yes" ; then
6765 echo "CONFIG_EPOLL=y" >> $config_host_mak
6766fi
6767if test "$epoll_create1" = "yes" ; then
6768 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6769fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006770if test "$sendfile" = "yes" ; then
6771 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6772fi
Riku Voipio51834342014-06-22 11:25:42 +01006773if test "$timerfd" = "yes" ; then
6774 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6775fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006776if test "$setns" = "yes" ; then
6777 echo "CONFIG_SETNS=y" >> $config_host_mak
6778fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006779if test "$clock_adjtime" = "yes" ; then
6780 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6781fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006782if test "$syncfs" = "yes" ; then
6783 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6784fi
aurel323b3f24a2009-04-15 16:12:13 +00006785if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006786 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006787fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006788if test "$inotify1" = "yes" ; then
6789 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6790fi
Peter Maydell401bc052017-09-05 13:19:32 +01006791if test "$sem_timedwait" = "yes" ; then
6792 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6793fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006794if test "$strchrnul" = "yes" ; then
6795 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6796fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006797if test "$byteswap_h" = "yes" ; then
6798 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6799fi
6800if test "$bswap_h" = "yes" ; then
6801 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6802fi
Alexander Graf769ce762009-05-11 17:41:42 +02006803if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006804 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006805 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006806 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006807fi
aurel322e4d9fb2008-04-08 06:01:02 +00006808if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006809 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006810 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006811fi
balrogfb599c92008-09-28 23:49:55 +00006812if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006813 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006814 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006815fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006816if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006817 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006818 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006819 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006820 if test "$gtk_gl" = "yes" ; then
6821 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6822 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006823fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01006824if test "$gio" = "yes" ; then
6825 echo "CONFIG_GIO=y" >> $config_host_mak
6826 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6827 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6828fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006829echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006830if test "$gnutls" = "yes" ; then
6831 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6832fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006833if test "$gcrypt" = "yes" ; then
6834 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006835 if test "$gcrypt_hmac" = "yes" ; then
6836 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6837 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006838fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006839if test "$nettle" = "yes" ; then
6840 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006841 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006842fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006843if test "$tasn1" = "yes" ; then
6844 echo "CONFIG_TASN1=y" >> $config_host_mak
6845fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006846if test "$auth_pam" = "yes" ; then
6847 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6848fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006849if test "$have_ifaddrs_h" = "yes" ; then
6850 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6851fi
Eric Blake6b39b062016-10-11 10:46:23 -05006852if test "$have_broken_size_max" = "yes" ; then
6853 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6854fi
Jan Vesely277abf12016-04-29 13:15:23 -04006855
6856# Work around a system header bug with some kernel/XFS header
6857# versions where they both try to define 'struct fsxattr':
6858# xfs headers will not try to redefine structs from linux headers
6859# if this macro is set.
6860if test "$have_fsxattr" = "yes" ; then
6861 echo "HAVE_FSXATTR=y" >> $config_host_mak
6862fi
Fam Zheng1efad062018-06-01 17:26:43 +08006863if test "$have_copy_file_range" = "yes" ; then
6864 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6865fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006866if test "$vte" = "yes" ; then
6867 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006868 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006869 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006870fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006871if test "$virglrenderer" = "yes" ; then
6872 echo "CONFIG_VIRGL=y" >> $config_host_mak
6873 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6874 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6875fi
aliguorie37630c2009-04-22 15:19:10 +00006876if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006877 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006878 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006879fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006880if test "$linux_aio" = "yes" ; then
6881 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6882fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006883if test "$attr" = "yes" ; then
6884 echo "CONFIG_ATTR=y" >> $config_host_mak
6885fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006886if test "$libattr" = "yes" ; then
6887 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6888fi
Meador Inge983eef52012-02-24 14:00:42 +05306889if test "$virtfs" = "yes" ; then
6890 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006891fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006892if test "$mpath" = "yes" ; then
6893 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006894 if test "$mpathpersist_new_api" = "yes"; then
6895 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6896 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006897fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006898if test "$vhost_scsi" = "yes" ; then
6899 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6900fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01006901if test "$vhost_net" = "yes" ; then
6902 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6903fi
6904if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01006905 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006906fi
Gonglei042cea22018-03-01 21:46:28 +08006907if test "$vhost_crypto" = "yes" ; then
6908 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6909fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006910if test "$vhost_vsock" = "yes" ; then
6911 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6912fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01006913if test "$vhost_kernel" = "yes" ; then
6914 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6915fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006916if test "$vhost_user" = "yes" ; then
6917 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6918fi
ths77755342008-11-27 15:45:16 +00006919if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006920 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006921fi
aliguoribf9298b2008-12-05 20:05:26 +00006922if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006923 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006924fi
aliguoriceb42de2009-04-07 18:43:28 +00006925if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006926 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006927fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006928if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006929 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006930fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006931if test "$membarrier" = "yes" ; then
6932 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6933fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006934if test "$signalfd" = "yes" ; then
6935 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6936fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00006937if test "$optreset" = "yes" ; then
6938 echo "HAVE_OPTRESET=y" >> $config_host_mak
6939fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006940if test "$tcg" = "yes"; then
6941 echo "CONFIG_TCG=y" >> $config_host_mak
6942 if test "$tcg_interpreter" = "yes" ; then
6943 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6944 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006945fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006946if test "$fdatasync" = "yes" ; then
6947 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6948fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006949if test "$madvise" = "yes" ; then
6950 echo "CONFIG_MADVISE=y" >> $config_host_mak
6951fi
6952if test "$posix_madvise" = "yes" ; then
6953 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6954fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006955if test "$posix_memalign" = "yes" ; then
6956 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6957fi
bellard97a847b2003-08-10 21:36:04 +00006958
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006959if test "$spice" = "yes" ; then
6960 echo "CONFIG_SPICE=y" >> $config_host_mak
6961fi
6962
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006963if test "$smartcard" = "yes" ; then
6964 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006965 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6966 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006967fi
6968
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006969if test "$libusb" = "yes" ; then
6970 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006971 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6972 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006973fi
6974
Hans de Goede69354a82011-07-19 11:04:10 +02006975if test "$usb_redir" = "yes" ; then
6976 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006977 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6978 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006979fi
6980
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006981if test "$opengl" = "yes" ; then
6982 echo "CONFIG_OPENGL=y" >> $config_host_mak
6983 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006984 if test "$opengl_dmabuf" = "yes" ; then
6985 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6986 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006987fi
6988
Marc-André Lureaud52c4542019-05-24 15:09:42 +02006989if test "$gbm" = "yes" ; then
6990 echo "CONFIG_GBM=y" >> $config_host_mak
6991 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6992 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6993fi
6994
6995
Yang Zhong5a22ab72017-12-20 21:16:46 +08006996if test "$malloc_trim" = "yes" ; then
6997 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6998fi
6999
Liang Li99f2dbd2016-03-08 13:53:16 +08007000if test "$avx2_opt" = "yes" ; then
7001 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7002fi
7003
qiaonuohan607dacd2014-02-18 14:11:30 +08007004if test "$lzo" = "yes" ; then
7005 echo "CONFIG_LZO=y" >> $config_host_mak
7006fi
7007
7008if test "$snappy" = "yes" ; then
7009 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7010fi
7011
Peter Wu6b383c02015-01-06 18:48:14 +01007012if test "$bzip2" = "yes" ; then
7013 echo "CONFIG_BZIP2=y" >> $config_host_mak
7014 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7015fi
7016
Julio Faracco83bc1f92018-11-05 13:08:04 -02007017if test "$lzfse" = "yes" ; then
7018 echo "CONFIG_LZFSE=y" >> $config_host_mak
7019 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7020fi
7021
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007022if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007023 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007024 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7025 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11007026fi
7027
Peter Lieven6542aa92014-02-03 10:26:13 +01007028if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04007029 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7030 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01007031fi
7032
Eduardo Otubof7945732012-08-14 18:44:05 -03007033if test "$seccomp" = "yes"; then
7034 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08007035 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7036 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03007037fi
7038
bellard83fb7ad2004-07-05 21:25:26 +00007039# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00007040if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02007041 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00007042fi
7043
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01007044if test "$localtime_r" = "yes" ; then
7045 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7046fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007047if test "$qom_cast_debug" = "yes" ; then
7048 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7049fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007050if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007051 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007052 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7053 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007054fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007055
Peter Maydell7c2acc72013-04-08 12:11:27 +01007056echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007057if test "$coroutine_pool" = "yes" ; then
7058 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7059else
7060 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7061fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307062
Peter Lieven7d992e42016-09-27 11:58:45 +02007063if test "$debug_stack_usage" = "yes" ; then
7064 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7065fi
7066
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007067if test "$crypto_afalg" = "yes" ; then
7068 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7069fi
7070
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307071if test "$open_by_handle_at" = "yes" ; then
7072 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7073fi
7074
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307075if test "$linux_magic_h" = "yes" ; then
7076 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7077fi
7078
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007079if test "$pragma_diagnostic_available" = "yes" ; then
7080 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007081fi
7082
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007083if test "$valgrind_h" = "yes" ; then
7084 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7085fi
7086
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007087if test "$have_asan_iface_fiber" = "yes" ; then
7088 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7089fi
7090
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007091if test "$has_environ" = "yes" ; then
7092 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7093fi
7094
Richard Henderson76a347e2012-12-28 14:17:02 -08007095if test "$cpuid_h" = "yes" ; then
7096 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7097fi
7098
Richard Hendersonf5401662013-02-16 12:46:59 -08007099if test "$int128" = "yes" ; then
7100 echo "CONFIG_INT128=y" >> $config_host_mak
7101fi
7102
Richard Henderson7ebee432016-06-29 21:10:59 -07007103if test "$atomic128" = "yes" ; then
7104 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7105fi
7106
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007107if test "$cmpxchg128" = "yes" ; then
7108 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7109fi
7110
Richard Hendersondf79b992016-09-02 12:23:57 -07007111if test "$atomic64" = "yes" ; then
7112 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7113fi
7114
Richard Hendersondb432672017-09-15 14:11:45 -07007115if test "$vector16" = "yes" ; then
7116 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7117fi
7118
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007119if test "$getauxval" = "yes" ; then
7120 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7121fi
7122
Bharata B Raoeb100392012-09-24 14:42:45 +05307123if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007124 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007125 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7126 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307127fi
7128
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007129if test "$glusterfs_xlator_opt" = "yes" ; then
7130 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7131fi
7132
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307133if test "$glusterfs_discard" = "yes" ; then
7134 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7135fi
7136
Niels de Vosdf3a4292017-05-28 12:01:14 +05307137if test "$glusterfs_fallocate" = "yes" ; then
7138 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7139fi
7140
Bharata B Rao7c815372013-12-21 14:51:25 +05307141if test "$glusterfs_zerofill" = "yes" ; then
7142 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7143fi
7144
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007145if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7146 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7147fi
7148
Niels de Vos0e3b8912019-03-05 16:46:34 +01007149if test "$glusterfs_iocb_has_stat" = "yes" ; then
7150 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7151fi
7152
Pino Toscanob10d49d2019-06-20 22:08:40 +02007153if test "$libssh" = "yes" ; then
7154 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7155 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7156 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007157fi
7158
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007159if test "$live_block_migration" = "yes" ; then
7160 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7161fi
7162
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007163if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007164 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007165fi
7166
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007167echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7168if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007169 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307170fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007171if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007172 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7173 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007174 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007175fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007176if have_backend "log"; then
7177 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02007178fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007179if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007180 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7181fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007182if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007183 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7184 if test "$trace_backend_stap" = "yes" ; then
7185 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7186 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007187fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007188if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007189 if test "$linux" = "yes" ; then
7190 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007191 else
Stewart Smith21684af2014-01-24 12:39:10 +11007192 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007193 fi
7194fi
Paul Durrant0a852412016-08-04 14:44:14 +01007195if have_backend "syslog"; then
7196 if test "$posix_syslog" = "yes" ; then
7197 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7198 else
7199 feature_not_found "syslog(trace backend)" "syslog not available"
7200 fi
7201fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007202echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7203
Michael R. Hines2da776d2013-07-22 10:01:54 -04007204if test "$rdma" = "yes" ; then
7205 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007206 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007207fi
7208
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007209if test "$pvrdma" = "yes" ; then
7210 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7211fi
7212
Laurent Vivier575b22b2016-06-02 22:14:15 +02007213if test "$have_rtnetlink" = "yes" ; then
7214 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7215fi
7216
Klim Kireeved279a02018-01-12 12:01:19 +03007217if test "$libxml2" = "yes" ; then
7218 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7219 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7220 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7221fi
7222
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007223if test "$replication" = "yes" ; then
7224 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7225fi
7226
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007227if test "$have_af_vsock" = "yes" ; then
7228 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7229fi
7230
Christopher Covington4d043512016-12-28 15:04:33 -05007231if test "$have_sysmacros" = "yes" ; then
7232 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7233fi
7234
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007235if test "$have_static_assert" = "yes" ; then
7236 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7237fi
7238
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007239if test "$have_utmpx" = "yes" ; then
7240 echo "HAVE_UTMPX=y" >> $config_host_mak
7241fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007242if test "$have_getrandom" = "yes" ; then
7243 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7244fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007245if test "$ivshmem" = "yes" ; then
7246 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7247fi
Richard Hendersone219c492017-09-28 09:01:23 -07007248if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007249 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7250fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007251if test "$debug_mutex" = "yes" ; then
7252 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7253fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007254
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007255# Hold two types of flag:
7256# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7257# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007258# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007259# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007260if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007261 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007262 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7263elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7264 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7265 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007266fi
7267
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007268if test "$vxhs" = "yes" ; then
7269 echo "CONFIG_VXHS=y" >> $config_host_mak
7270 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7271fi
7272
Junyan He17824402018-07-18 15:47:59 +08007273if test "$libpmem" = "yes" ; then
7274 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7275fi
7276
Jeff Cody2f740132018-11-07 07:36:44 +01007277if test "$bochs" = "yes" ; then
7278 echo "CONFIG_BOCHS=y" >> $config_host_mak
7279fi
7280if test "$cloop" = "yes" ; then
7281 echo "CONFIG_CLOOP=y" >> $config_host_mak
7282fi
7283if test "$dmg" = "yes" ; then
7284 echo "CONFIG_DMG=y" >> $config_host_mak
7285fi
7286if test "$qcow1" = "yes" ; then
7287 echo "CONFIG_QCOW1=y" >> $config_host_mak
7288fi
7289if test "$vdi" = "yes" ; then
7290 echo "CONFIG_VDI=y" >> $config_host_mak
7291fi
7292if test "$vvfat" = "yes" ; then
7293 echo "CONFIG_VVFAT=y" >> $config_host_mak
7294fi
7295if test "$qed" = "yes" ; then
7296 echo "CONFIG_QED=y" >> $config_host_mak
7297fi
7298if test "$parallels" = "yes" ; then
7299 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7300fi
7301if test "$sheepdog" = "yes" ; then
7302 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7303fi
7304
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007305if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007306 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007307elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007308 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007309elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007310 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007311elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007312 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007313elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007314 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007315elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007316 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007317else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007318 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007319fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007320QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007321
Juan Quintela98ec69a2009-07-16 18:34:18 +02007322echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007323echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007324echo "MAKE=$make" >> $config_host_mak
7325echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007326echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7327echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007328echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7329echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007330echo "PYTHON=$python" >> $config_host_mak
Cleber Rosa755ee702018-11-09 10:07:07 -05007331echo "PYTHON_VERSION=$python_version" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007332echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007333if $iasl -h > /dev/null 2>&1; then
7334 echo "IASL=$iasl" >> $config_host_mak
7335fi
Juan Quintela804edf22009-07-27 16:12:49 +02007336echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007337echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007338echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007339echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007340echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007341echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007342echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007343echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007344echo "OBJCOPY=$objcopy" >> $config_host_mak
7345echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007346echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007347echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007348echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007349echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007350echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007351echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007352echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007353echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007354if test "$sparse" = "yes" ; then
7355 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007356 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007357 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007358 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7359 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7360fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01007361if test "$cross_prefix" != ""; then
7362 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
7363else
7364 echo "AUTOCONF_HOST := " >> $config_host_mak
7365fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007366echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007367echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007368echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007369echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007370echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007371echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007372echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007373echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007374echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007375echo "DSOSUF=$DSOSUF" >> $config_host_mak
7376echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007377echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007378echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7379echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007380echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007381if test "$gcov" = "yes" ; then
7382 echo "CONFIG_GCOV=y" >> $config_host_mak
7383 echo "GCOV=$gcov_tool" >> $config_host_mak
7384fi
Juan Quintela804edf22009-07-27 16:12:49 +02007385
Alex Bennée51a12b52018-04-04 14:24:39 +01007386if test "$docker" != "no"; then
7387 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7388fi
7389
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007390if test "$libudev" != "no"; then
7391 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7392 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7393fi
7394
Peter Maydell6efd7512011-11-30 11:59:04 +00007395# use included Linux headers
7396if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007397 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007398 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007399 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007400 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007401 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007402 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007403 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007404 ;;
7405 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007406 linux_arch=s390
7407 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007408 aarch64)
7409 linux_arch=arm64
7410 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007411 mips64)
7412 linux_arch=mips
7413 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007414 *)
7415 # For most CPUs the kernel architecture name and QEMU CPU name match.
7416 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007417 ;;
7418 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007419 # For non-KVM architectures we will not have asm headers
7420 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7421 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7422 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007423fi
7424
bellard1d14ffa2005-10-30 18:58:22 +00007425for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007426target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007427config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007428target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00007429target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02007430
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007431case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007432 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007433 target_bigendian=yes
7434 ;;
7435esac
bellard97a847b2003-08-10 21:36:04 +00007436target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007437target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007438target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007439target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007440case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007441 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007442 target_softmmu="yes"
7443 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007444 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007445 target_user_only="yes"
7446 target_linux_user="yes"
7447 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007448 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007449 target_user_only="yes"
7450 target_bsd_user="yes"
7451 ;;
pbrook9e407a82007-05-26 16:38:53 +00007452 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007453 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007454 exit 1
7455 ;;
7456esac
ths831b7822007-01-18 20:06:33 +00007457
Alex Bennéed75402b2018-04-04 20:27:05 +01007458target_compiler=""
7459target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007460target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007461
bellard97a847b2003-08-10 21:36:04 +00007462mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007463echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007464
pbrooke5fe0c52006-06-11 13:32:59 +00007465bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007466mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007467interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007468gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007469
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007470TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007471TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007472TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007473
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007474case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007475 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007476 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307477 gdb_xml_files="i386-32bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007478 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007479 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007480 ;;
7481 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007482 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007483 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307484 gdb_xml_files="i386-64bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007485 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007486 ;;
7487 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007488 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007489 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007490 ;;
7491 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007492 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007493 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007494 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007495 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007496 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007497 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007498 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007499 aarch64|aarch64_be)
7500 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007501 TARGET_BASE_ARCH=arm
7502 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007503 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007504 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007505 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007506 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007507 ;;
aurel322408a522008-04-20 20:19:44 +00007508 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007509 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007510 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007511 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007512 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007513 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007514 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007515 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007516 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007517 ;;
aurel322408a522008-04-20 20:19:44 +00007518 m68k)
aurel322408a522008-04-20 20:19:44 +00007519 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007520 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007521 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007522 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007523 microblaze|microblazeel)
7524 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007525 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007526 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007527 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007528 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007529 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007530 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007531 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007532 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007533 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007534 ;;
7535 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007536 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007537 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007538 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007539 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007540 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007541 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007542 ;;
7543 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007544 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007545 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007546 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007547 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007548 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007549 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007550 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007551 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007552 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007553 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007554 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007555 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007556 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007557 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007558 TARGET_ARCH=openrisc
7559 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007560 ;;
aurel322408a522008-04-20 20:19:44 +00007561 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007562 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007563 target_compiler=$cross_cc_ppc
7564 target_compiler_cflags="$cross_cc_cflags_ppc"
aurel322408a522008-04-20 20:19:44 +00007565 ;;
aurel322408a522008-04-20 20:19:44 +00007566 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007567 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007568 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307569 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007570 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007571 target_compiler=$cross_cc_ppc64
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007572 target_compiler_cflags="$cross_cc_cflags_ppc64"
aurel322408a522008-04-20 20:19:44 +00007573 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007574 ppc64le)
7575 TARGET_ARCH=ppc64
7576 TARGET_BASE_ARCH=ppc
7577 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307578 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007579 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007580 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007581 ;;
aurel322408a522008-04-20 20:19:44 +00007582 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007583 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007584 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007585 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007586 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007587 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007588 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007589 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007590 riscv32)
7591 TARGET_BASE_ARCH=riscv
7592 TARGET_ABI_DIR=riscv
7593 mttcg=yes
Jim Wilson1a987a12019-03-15 03:26:55 -07007594 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007595 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007596 ;;
7597 riscv64)
7598 TARGET_BASE_ARCH=riscv
7599 TARGET_ABI_DIR=riscv
7600 mttcg=yes
Jim Wilsonc6709702019-03-15 03:26:56 -07007601 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007602 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007603 ;;
aurel322408a522008-04-20 20:19:44 +00007604 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007605 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007606 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007607 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007608 ;;
7609 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007610 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007611 ;;
7612 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007613 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007614 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007615 ;;
7616 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007617 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007618 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007619 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007620 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007621 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007622 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007623 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007624 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007625 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007626 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007627 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007628 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007629 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007630 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007631 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007632 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007633 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007634 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007635 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007636 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007637 xtensa|xtensaeb)
7638 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007639 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007640 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007641 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007642 ;;
aurel322408a522008-04-20 20:19:44 +00007643 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007644 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007645 ;;
7646esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007647# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7648if [ "$TARGET_BASE_ARCH" = "" ]; then
7649 TARGET_BASE_ARCH=$TARGET_ARCH
7650fi
7651
Alex Bennéed75402b2018-04-04 20:27:05 +01007652# Do we have a cross compiler for this target?
7653if has $target_compiler; then
7654
7655 write_c_skeleton
7656
Alex Bennée716a5072018-04-10 12:19:40 +01007657 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007658 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007659 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007660 target_compiler=""
7661 else
7662 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7663 target_compiler_static="n"
7664 fi
7665 else
7666 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7667 target_compiler_static="y"
7668 fi
7669else
7670 target_compiler=""
7671fi
7672
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007673symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7674
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007675upper() {
7676 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7677}
7678
Stefan Weil89138852016-05-16 15:10:20 +02007679target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007680echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007681echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007682echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007683if [ "$TARGET_ABI_DIR" = "" ]; then
7684 TARGET_ABI_DIR=$TARGET_ARCH
7685fi
Juan Quintela25be2102009-10-07 02:41:00 +02007686echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007687if [ "$HOST_VARIANT_DIR" != "" ]; then
7688 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7689fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007690
7691if supported_xen_target $target; then
7692 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007693 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007694 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007695 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007696 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007697else
7698 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007699fi
7700if supported_kvm_target $target; then
7701 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007702 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7703else
7704 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007705fi
7706if supported_hax_target $target; then
7707 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007708fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007709if supported_hvf_target $target; then
7710 echo "CONFIG_HVF=y" >> $config_target_mak
7711fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007712if supported_whpx_target $target; then
7713 echo "CONFIG_WHPX=y" >> $config_target_mak
7714fi
bellardde83cd02003-06-15 20:25:43 +00007715if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007716 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007717fi
7718if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007719 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007720 if test "$mttcg" = "yes" ; then
7721 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7722 fi
bellardde83cd02003-06-15 20:25:43 +00007723fi
bellard997344f2003-10-27 21:10:39 +00007724if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007725 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007726 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007727fi
ths831b7822007-01-18 20:06:33 +00007728if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007729 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007730fi
pbrook56aebc82008-10-11 17:55:29 +00007731list=""
7732if test ! -z "$gdb_xml_files" ; then
7733 for x in $gdb_xml_files; do
7734 list="$list $source_path/gdb-xml/$x"
7735 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007736 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007737fi
bellardde83cd02003-06-15 20:25:43 +00007738
Eric Blakee633a5c2019-02-04 20:39:37 -06007739if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007740 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007741fi
blueswir184778502008-10-26 20:33:16 +00007742if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007743 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007744fi
bellard5b0753e2005-03-01 21:37:28 +00007745
Alex Bennéed75402b2018-04-04 20:27:05 +01007746if test -n "$target_compiler"; then
7747 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7748
7749 if test -n "$target_compiler_static"; then
7750 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7751 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007752
7753 if test -n "$target_compiler_cflags"; then
7754 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7755 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007756fi
7757
Alex Bennée716a5072018-04-10 12:19:40 +01007758
Juan Quintela4afddb52009-08-03 14:46:45 +02007759# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007760
Juan Quintela4afddb52009-08-03 14:46:45 +02007761cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007762ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007763
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007764disas_config() {
7765 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7766 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7767}
7768
Juan Quintela64656022009-08-03 14:46:53 +02007769for i in $ARCH $TARGET_BASE_ARCH ; do
7770 case "$i" in
7771 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007772 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007773 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007774 aarch64)
7775 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007776 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007777 fi
7778 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007779 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007780 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007781 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007782 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007783 fi
Juan Quintela64656022009-08-03 14:46:53 +02007784 ;;
7785 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007786 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007787 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007788 hppa)
7789 disas_config "HPPA"
7790 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007791 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007792 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007793 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007794 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007795 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007796 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007797 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007798 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007799 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007800 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007801 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007802 ;;
7803 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007804 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007805 if test -n "${cxx}"; then
7806 disas_config "NANOMIPS"
7807 fi
Juan Quintela64656022009-08-03 14:46:53 +02007808 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007809 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007810 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007811 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007812 nios2)
7813 disas_config "NIOS2"
7814 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007815 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007816 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007817 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007818 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007819 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007820 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007821 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007822 disas_config "RISCV"
7823 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007824 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007825 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007826 ;;
7827 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007828 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007829 ;;
7830 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007831 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007832 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007833 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007834 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007835 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007836 esac
7837done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007838if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007839 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007840fi
Juan Quintela64656022009-08-03 14:46:53 +02007841
Juan Quintela6ee71262009-08-03 14:46:47 +02007842case "$ARCH" in
7843alpha)
7844 # Ensure there's only a single GP
7845 cflags="-msmall-data $cflags"
7846;;
7847esac
7848
Juan Quintelad02c1db2009-08-03 14:46:50 +02007849if test "$gprof" = "yes" ; then
Philippe Mathieu-Daudé0acf7de2019-01-03 16:09:50 +01007850 echo "TARGET_GPROF=y" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007851 if test "$target_linux_user" = "yes" ; then
7852 cflags="-p $cflags"
7853 ldflags="-p $ldflags"
7854 fi
7855 if test "$target_softmmu" = "yes" ; then
7856 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007857 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007858 fi
7859fi
7860
Eric Blakee633a5c2019-02-04 20:39:37 -06007861if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007862 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007863fi
Juan Quintelafa282482009-07-22 22:37:39 +02007864
Christian Borntraegere9a35912017-08-23 12:16:23 +02007865# Newer kernels on s390 check for an S390_PGSTE program header and
7866# enable the pgste page table extensions in that case. This makes
7867# the vm.allocate_pgste sysctl unnecessary. We enable this program
7868# header if
7869# - we build on s390x
7870# - we build the system emulation for s390x (qemu-system-s390x)
7871# - KVM is enabled
7872# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06007873if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7874 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02007875 if ld_has --s390-pgste ; then
7876 ldflags="-Wl,--s390-pgste $ldflags"
7877 fi
7878fi
7879
Juan Quintela25be2102009-10-07 02:41:00 +02007880echo "LDFLAGS+=$ldflags" >> $config_target_mak
7881echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007882
bellard97a847b2003-08-10 21:36:04 +00007883done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007884
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007885echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7886echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7887
Alex Bennéed75402b2018-04-04 20:27:05 +01007888if test -n "$enabled_cross_compilers"; then
7889 echo
7890 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7891fi
7892
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007893if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02007894 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007895fi
Richard Hendersone219c492017-09-28 09:01:23 -07007896if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02007897 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07007898fi
7899if test -n "$LIBCAPSTONE"; then
7900 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7901fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007902
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007903if test "$numa" = "yes"; then
7904 echo "CONFIG_NUMA=y" >> $config_host_mak
7905fi
7906
John Snowfd0e6052015-03-25 18:57:39 -04007907if test "$ccache_cpp2" = "yes"; then
7908 echo "export CCACHE_CPP2=y" >> $config_host_mak
7909fi
7910
Peter Maydelle29e5c62018-11-02 11:52:38 +00007911# If we're using a separate build tree, set it up now.
7912# DIRS are directories which we simply mkdir in the build tree;
7913# LINKS are things to symlink back into the source tree
7914# (these can be both files and directories).
7915# Caution: do not add files or directories here using wildcards. This
7916# will result in problems later if a new file matching the wildcard is
7917# added to the source tree -- nothing will cause configure to be rerun
7918# so the build tree will be missing the link back to the new file, and
7919# tests might fail. Prefer to keep the relevant files in their own
7920# directory and symlink the directory instead.
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007921DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
Emanuele Giuseppe Espositofc281c82018-06-13 17:07:21 +02007922DIRS="$DIRS tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007923DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007924DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007925DIRS="$DIRS roms/seabios roms/vgabios"
Philippe Mathieu-Daudéfe07b622018-12-18 12:37:17 +01007926LINKS="Makefile tests/tcg/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007927LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7928LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7929LINKS="$LINKS tests/fp/Makefile"
7930LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7931LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7932LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7933LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7934LINKS="$LINKS pc-bios/qemu-icon.bmp"
7935LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007936LINKS="$LINKS tests/acceptance tests/data"
7937LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05007938LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07007939for bios_file in \
7940 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007941 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07007942 $source_path/pc-bios/*.rom \
7943 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007944 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007945 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007946 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01007947 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07007948 $source_path/pc-bios/palcode-*
7949do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007950 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007951done
7952mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007953for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007954 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007955 symlink "$source_path/$f" "$f"
7956 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007957done
Paul Brook1ad21342009-05-19 16:17:58 +01007958
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007959# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007960for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007961 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007962 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007963 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007964 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007965 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007966 echo "CC=$cc" >> $config_mak
7967 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007968 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007969 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007970 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007971 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007972 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007973done
7974
Max Reitz76c75602014-05-24 23:24:56 +02007975# set up qemu-iotests in this build directory
7976iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007977
7978echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7979echo >> "$iotests_common_env"
7980echo "export PYTHON='$python'" >> "$iotests_common_env"
7981
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007982# Save the configure command line for later reuse.
7983cat <<EOD >config.status
7984#!/bin/sh
7985# Generated by configure.
7986# Run this file to recreate the current configuration.
7987# Compiler output produced by configure, useful for debugging
7988# configure, is in config.log if it exists.
7989EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007990
7991preserve_env() {
7992 envname=$1
7993
7994 eval envval=\$$envname
7995
7996 if test -n "$envval"
7997 then
7998 echo "$envname='$envval'" >> config.status
7999 echo "export $envname" >> config.status
8000 else
8001 echo "unset $envname" >> config.status
8002 fi
8003}
8004
8005# Preserve various env variables that influence what
8006# features/build target configure will detect
8007preserve_env AR
8008preserve_env AS
8009preserve_env CC
8010preserve_env CPP
8011preserve_env CXX
8012preserve_env INSTALL
8013preserve_env LD
8014preserve_env LD_LIBRARY_PATH
8015preserve_env LIBTOOL
8016preserve_env MAKE
8017preserve_env NM
8018preserve_env OBJCOPY
8019preserve_env PATH
8020preserve_env PKG_CONFIG
8021preserve_env PKG_CONFIG_LIBDIR
8022preserve_env PKG_CONFIG_PATH
8023preserve_env PYTHON
8024preserve_env SDL_CONFIG
8025preserve_env SDL2_CONFIG
8026preserve_env SMBD
8027preserve_env STRIP
8028preserve_env WINDRES
8029
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008030printf "exec" >>config.status
8031printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00008032echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02008033chmod +x config.status
8034
Peter Maydell8cd05ab2014-05-23 17:07:24 +01008035rm -r "$TMPDIR1"