blob: 7621c008a549882e8e50d6a1dff78f0d194d27c1 [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 ;;
110 *)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
112 ;;
113 esac
114 done
115}
116
Juan Quintela52166aa2009-08-03 14:46:03 +0200117compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400118 local_cflags="$1"
119 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200120}
121
122compile_prog() {
123 local_cflags="$1"
124 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100125 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200126}
127
Paolo Bonzini11568d62010-12-23 11:43:58 +0100128# symbolically link $1 to $2. Portable version of "ln -sf".
129symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100130 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800131 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100132 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100133}
134
LoĂŻc Minier0dba6192010-01-28 21:26:51 +0000135# check whether a command is available to this shell (may be either an
136# executable or a builtin)
137has() {
138 type "$1" >/dev/null 2>&1
139}
140
141# search for an executable in PATH
142path_of() {
143 local_command="$1"
144 local_ifs="$IFS"
145 local_dir=""
146
147 # pathname has a dir component?
148 if [ "${local_command#*/}" != "$local_command" ]; then
149 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
150 echo "$local_command"
151 return 0
152 fi
153 fi
154 if [ -z "$local_command" ]; then
155 return 1
156 fi
157
158 IFS=:
159 for local_dir in $PATH; do
160 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
161 echo "$local_dir/$local_command"
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 0
164 fi
165 done
166 # not found
167 IFS="${local_ifs:-$(printf ' \t\n')}"
168 return 1
169}
170
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200171have_backend () {
172 echo "$trace_backends" | grep "$1" >/dev/null
173}
174
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200175glob() {
176 eval test -z '"${1#'"$2"'}"'
177}
178
179supported_hax_target() {
180 test "$hax" = "yes" || return 1
181 glob "$1" "*-softmmu" || return 1
182 case "${1%-softmmu}" in
183 i386|x86_64)
184 return 0
185 ;;
186 esac
187 return 1
188}
189
190supported_kvm_target() {
191 test "$kvm" = "yes" || return 1
192 glob "$1" "*-softmmu" || return 1
193 case "${1%-softmmu}:$cpu" in
194 arm:arm | aarch64:aarch64 | \
195 i386:i386 | i386:x86_64 | i386:x32 | \
196 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
197 mips:mips | mipsel:mips | \
Thomas Hutha69dc532018-08-21 13:27:48 +0200198 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200199 s390x:s390x)
200 return 0
201 ;;
202 esac
203 return 1
204}
205
206supported_xen_target() {
207 test "$xen" = "yes" || return 1
208 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200209 # Only i386 and x86_64 provide the xenpv machine.
210 case "${1%-softmmu}" in
211 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200212 return 0
213 ;;
214 esac
215 return 1
216}
217
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500218supported_hvf_target() {
219 test "$hvf" = "yes" || return 1
220 glob "$1" "*-softmmu" || return 1
221 case "${1%-softmmu}" in
222 x86_64)
223 return 0
224 ;;
225 esac
226 return 1
227}
228
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800229supported_whpx_target() {
230 test "$whpx" = "yes" || return 1
231 glob "$1" "*-softmmu" || return 1
232 case "${1%-softmmu}" in
233 i386|x86_64)
234 return 0
235 ;;
236 esac
237 return 1
238}
239
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200240supported_target() {
241 case "$1" in
242 *-softmmu)
243 ;;
244 *-linux-user)
245 if test "$linux" != "yes"; then
246 print_error "Target '$target' is only available on a Linux host"
247 return 1
248 fi
249 ;;
250 *-bsd-user)
251 if test "$bsd" != "yes"; then
252 print_error "Target '$target' is only available on a BSD host"
253 return 1
254 fi
255 ;;
256 *)
257 print_error "Invalid target name '$target'"
258 return 1
259 ;;
260 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200261 test "$tcg" = "yes" && return 0
262 supported_kvm_target "$1" && return 0
263 supported_xen_target "$1" && return 0
264 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500265 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800266 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200267 print_error "TCG disabled, but hardware accelerator not available for '$target'"
268 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200269}
270
Christian Borntraegere9a35912017-08-23 12:16:23 +0200271
272ld_has() {
273 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
274}
275
bellard7d132992003-03-06 23:23:54 +0000276# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200277source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200278cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300279iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000280interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000281static="no"
bellard7d132992003-03-06 23:23:54 +0000282cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000283audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800284block_drv_rw_whitelist=""
285block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000286host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200287libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200288libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200289audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400290audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500291libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100292debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100293stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000294
Daniel P. Berrange92712822017-09-29 11:11:58 +0100295if test -e "$source_path/.git"
296then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100297 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100298 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500299 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
300 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100301else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100302 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100303 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100304
305 if ! test -f "$source_path/ui/keycodemapdb/README"
306 then
307 echo
308 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
309 echo
310 echo "This is not a GIT checkout but module content appears to"
311 echo "be missing. Do not use 'git archive' or GitHub download links"
312 echo "to acquire QEMU source archives. Non-GIT builds are only"
313 echo "supported with source archives linked from:"
314 echo
315 echo " https://www.qemu.org/download/"
316 echo
317 echo "Developers working with GIT can use scripts/archive-source.sh"
318 echo "if they need to create valid source archives."
319 echo
320 exit 1
321 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100322fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100323git="git"
aliguoriac0df512008-12-29 17:14:15 +0000324
Stefan Weilafb63eb2012-09-26 22:04:38 +0200325# Don't accept a target_list environment variable.
326unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100327
328# Default value for a variable defining feature "foo".
329# * foo="no" feature will only be used if --enable-foo arg is given
330# * foo="" feature will be searched for, and if found, will be used
331# unless --disable-foo is given
332# * foo="yes" this value will only be set by --enable-foo flag.
333# feature will searched for,
334# if not found, configure exits with error
335#
336# Always add --enable-foo and --disable-foo command line args.
337# Distributions want to ensure that several features are compiled in, and it
338# is impossible without a --enable-foo that exits if a feature is not found.
339
340bluez=""
341brlapi=""
342curl=""
343curses=""
344docs=""
345fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100346netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100347sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400348sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530349virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200350mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100351vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100352sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100354vnc_sasl=""
355vnc_jpeg=""
356vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200357xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100358xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000359xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000360xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000361xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100362linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500363cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200365libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200367tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100368membarrier=""
Bradd41a75a2011-07-26 23:11:26 -0400369vhost_net="no"
Gonglei042cea22018-03-01 21:46:28 +0800370vhost_crypto="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000371vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100372vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200373vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400374kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100375hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500376hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800377whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400378rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300379pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100380gprof="no"
381debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100382debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100383sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500384fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100385strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200386tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100387bigendian="no"
388mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000389gcov="no"
390gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100391EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800392DSOSUF=".so"
393LDFLAGS_SHARED="-shared"
394modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100395prefix="/usr/local"
396mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300397datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200398firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300399qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100400bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300401libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400402libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200403includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100404sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300405local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100406confsuffix="/qemu"
407slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100408oss_lib=""
409bsd="no"
410linux="no"
411solaris="no"
412profiler="no"
413cocoa="no"
414softmmu="yes"
415linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100416bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100417blobs="yes"
418pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200419pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200420qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300421trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100422trace_file="trace"
423spice=""
424rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200425smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100426libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200427usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100428opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100429opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000430cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100431avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300432zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700433capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200434lzo=""
435snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100436bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400437guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400438guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500439guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300440guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400441vss_win32_sdk=""
442win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100443want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100444libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100445libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100446coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200447coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200448debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400449crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300450seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530451glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400452glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530453glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530454glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530455glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600456gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200457gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100458tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100459gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100460nettle=""
461gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800462gcrypt_hmac="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100463vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200464virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400465tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100466libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100467live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800468numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800469tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200470jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800471replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700472vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100473bochs="yes"
474cloop="yes"
475dmg="yes"
476qcow1="yes"
477vdi="yes"
478vvfat="yes"
479qed="yes"
480parallels="yes"
481sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300482libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100483docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200484debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800485libpmem=""
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200486libudev="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100487
Alex Bennéed75402b2018-04-04 20:27:05 +0100488# cross compilers defaults, can be overridden with --cross-cc-ARCH
489cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100490cross_cc_aarch64_be="$cross_cc_aarch64"
491cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100492cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100493cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100494cross_cc_i386="i386-pc-linux-gnu-gcc"
495cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100496cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100497cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100498
499enabled_cross_compilers=""
500
Peter Maydell898be3e2017-03-21 14:31:57 +0000501supported_cpu="no"
502supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100503bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800504malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000505
aliguoriac0df512008-12-29 17:14:15 +0000506# parse CC options first
507for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200508 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000509 case "$opt" in
510 --cross-prefix=*) cross_prefix="$optarg"
511 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100512 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000513 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400514 --cxx=*) CXX="$optarg"
515 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100516 --source-path=*) source_path="$optarg"
517 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200518 --cpu=*) cpu="$optarg"
519 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100520 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200521 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100522 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100523 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100524 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100525 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200526 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100527 --enable-debug-info) debug_info="yes"
528 ;;
529 --disable-debug-info) debug_info="no"
530 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100531 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
532 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100533 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
534 eval "cross_cc_cflags_${cc_arch}=\$optarg"
535 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100536 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
537 eval "cross_cc_${cc_arch}=\$optarg"
538 ;;
aliguoriac0df512008-12-29 17:14:15 +0000539 esac
540done
aliguoriac0df512008-12-29 17:14:15 +0000541# OS specific
542# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100543# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000544
Peter Maydelle49d0212012-12-07 15:39:13 +0000545# Preferred compiler:
546# ${CC} (if set)
547# ${cross_prefix}gcc (if cross-prefix specified)
548# system compiler
549if test -z "${CC}${cross_prefix}"; then
550 cc="$host_cc"
551else
552 cc="${CC-${cross_prefix}gcc}"
553fi
554
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400555if test -z "${CXX}${cross_prefix}"; then
556 cxx="c++"
557else
558 cxx="${CXX-${cross_prefix}g++}"
559fi
560
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500561ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700562as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700563ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000564cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500565objcopy="${OBJCOPY-${cross_prefix}objcopy}"
566ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800567ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200568nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500569strip="${STRIP-${cross_prefix}strip}"
570windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300571pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
572query_pkg_config() {
573 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
574}
575pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500576sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000577sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000578
Peter Maydell45d285a2013-10-21 21:03:06 +0100579# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
580ARFLAGS="${ARFLAGS-rv}"
581
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200582# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100583# We use -fwrapv to tell the compiler that we require a C dialect where
584# left shift of signed integers is well defined and has the expected
585# 2s-complement style results. (Both clang and gcc agree that it
586# provides these semantics.)
587QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400588QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100589QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200590QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200591QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100592if test "$debug_info" = "yes"; then
593 CFLAGS="-g $CFLAGS"
594 LDFLAGS="-g $LDFLAGS"
595fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200596
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100597# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200598source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100599
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300600# running configure in the source tree?
601# we know that's the case if configure is there.
602if test -f "./configure"; then
603 pwd_is_source_path="y"
604else
605 pwd_is_source_path="n"
606fi
607
aliguoriac0df512008-12-29 17:14:15 +0000608check_define() {
609cat > $TMPC <<EOF
610#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000611#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000612#endif
613int main(void) { return 0; }
614EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200615 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000616}
617
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200618check_include() {
619cat > $TMPC <<EOF
620#include <$1>
621int main(void) { return 0; }
622EOF
623 compile_object
624}
625
John Snow93b25862015-03-25 18:57:37 -0400626write_c_skeleton() {
627 cat > $TMPC <<EOF
628int main(void) { return 0; }
629EOF
630}
631
Peter Maydellbbea4052012-08-14 15:35:34 +0100632if check_define __linux__ ; then
633 targetos="Linux"
634elif check_define _WIN32 ; then
635 targetos='MINGW32'
636elif check_define __OpenBSD__ ; then
637 targetos='OpenBSD'
638elif check_define __sun__ ; then
639 targetos='SunOS'
640elif check_define __HAIKU__ ; then
641 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100642elif check_define __FreeBSD__ ; then
643 targetos='FreeBSD'
644elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
645 targetos='GNU/kFreeBSD'
646elif check_define __DragonFly__ ; then
647 targetos='DragonFly'
648elif check_define __NetBSD__; then
649 targetos='NetBSD'
650elif check_define __APPLE__; then
651 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100652else
Peter Maydell951fedf2017-07-13 16:15:32 +0100653 # This is a fatal error, but don't report it yet, because we
654 # might be going to just print the --help text, or it might
655 # be the result of a missing compiler.
656 targetos='bogus'
657 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100658fi
659
660# Some host OSes need non-standard checks for which CPU to use.
661# Note that these checks are broken for cross-compilation: if you're
662# cross-compiling to one of these OSes then you'll need to specify
663# the correct CPU with the --cpu option.
664case $targetos in
665Darwin)
666 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
667 # run 64-bit userspace code.
668 # If the user didn't specify a CPU explicitly and the kernel says this is
669 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
670 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
671 cpu="x86_64"
672 fi
673 ;;
674SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200675 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100676 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
677 cpu="x86_64"
678 fi
679esac
680
Juan Quintela2ff6b912009-08-03 14:45:55 +0200681if test ! -z "$cpu" ; then
682 # command line argument
683 :
684elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000685 cpu="i386"
686elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700687 if check_define __ILP32__ ; then
688 cpu="x32"
689 else
690 cpu="x86_64"
691 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000692elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000693 if check_define __arch64__ ; then
694 cpu="sparc64"
695 else
696 cpu="sparc"
697 fi
malcfdf7ed92009-01-14 18:39:52 +0000698elif check_define _ARCH_PPC ; then
699 if check_define _ARCH_PPC64 ; then
700 cpu="ppc64"
701 else
702 cpu="ppc"
703 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200704elif check_define __mips__ ; then
705 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200706elif check_define __s390__ ; then
707 if check_define __s390x__ ; then
708 cpu="s390x"
709 else
710 cpu="s390"
711 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100712elif check_define __arm__ ; then
713 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100714elif check_define __aarch64__ ; then
715 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000716else
Stefan Weil89138852016-05-16 15:10:20 +0200717 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000718fi
719
Peter Maydell359bc952011-12-24 13:07:25 +0000720ARCH=
721# Normalise host CPU name and set ARCH.
722# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000723case "$cpu" in
Peter Maydell6499fd12017-03-28 11:58:38 +0100724 ppc|ppc64|s390|s390x|sparc64|x32)
Peter Maydell898be3e2017-03-21 14:31:57 +0000725 cpu="$cpu"
726 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100727 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000728 ;;
bellard7d132992003-03-06 23:23:54 +0000729 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000730 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000731 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100732 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000733 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000734 x86_64|amd64)
735 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000736 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100737 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000738 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100739 armv*b|armv*l|arm)
740 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000741 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100742 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000743 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100744 aarch64)
745 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000746 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100747 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100748 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200749 mips*)
750 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000751 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100752 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200753 ;;
blueswir131422552007-04-16 18:27:06 +0000754 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000755 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100756 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100757 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000758 ;;
bellard7d132992003-03-06 23:23:54 +0000759 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000760 # This will result in either an error or falling back to TCI later
761 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000762 ;;
763esac
Peter Maydell359bc952011-12-24 13:07:25 +0000764if test -z "$ARCH"; then
765 ARCH="$cpu"
766fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200767
bellard7d132992003-03-06 23:23:54 +0000768# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200769
Stacey Sonadfc3e92014-06-08 09:57:22 -0700770# host *BSD for user mode
771HOST_VARIANT_DIR=""
772
bellard7d132992003-03-06 23:23:54 +0000773case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000774MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200775 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100776 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200777 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200778 if check_include dsound.h; then
779 audio_drv_list="dsound"
780 else
781 audio_drv_list=""
782 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000783 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000784;;
ths5c40d2b2007-06-23 16:03:36 +0000785GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100786 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200787 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200788 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000789;;
bellard7d3505c2004-05-12 19:32:15 +0000790FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200791 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100792 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200793 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200794 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100795 # needed for kinfo_getvmmap(3) in libutil.h
796 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500797 # needed for kinfo_getproc
798 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100799 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700800 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000801 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000802;;
blueswir1c5e97232009-03-07 20:06:23 +0000803DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200804 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100805 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200806 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200807 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700808 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000809;;
bellard7d3505c2004-05-12 19:32:15 +0000810NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200811 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100812 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200813 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200814 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200815 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700816 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200817 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000818;;
819OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200820 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100821 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400822 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200823 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700824 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500825 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000826;;
bellard83fb7ad2004-07-05 21:25:26 +0000827Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200828 bsd="yes"
829 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100830 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500831 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800832 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200833 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200834 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200835 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200836 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200837 cocoa="yes"
838 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200839 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200840 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200841 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100842 # Disable attempts to use ObjectiveC features in os/object.h since they
843 # won't work when we're compiling with gcc as a C compiler.
844 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700845 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000846 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000847;;
bellardec530c82006-04-25 22:36:06 +0000848SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200849 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100850 make="${MAKE-gmake}"
851 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400852 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200853 if test -f /usr/include/sys/soundcard.h ; then
854 audio_drv_list="oss"
855 fi
856 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000857# needed for CMSG_ macros in sys/socket.h
858 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
859# needed for TIOCWIN* defines in termios.h
860 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200861 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200862 solarisnetlibs="-lsocket -lnsl -lresolv"
863 LIBS="$solarisnetlibs $LIBS"
864 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000865;;
Andreas Färber179cf402010-09-20 00:50:43 +0200866Haiku)
867 haiku="yes"
868 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
869 LIBS="-lposix_error_mapper -lnetwork $LIBS"
870;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000871Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200872 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200873 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200874 linux="yes"
875 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200876 kvm="yes"
877 vhost_net="yes"
Gonglei042cea22018-03-01 21:46:28 +0800878 vhost_crypto="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000879 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100880 vhost_vsock="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600881 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000882 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200883 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000884;;
bellard7d132992003-03-06 23:23:54 +0000885esac
886
bellard7d3505c2004-05-12 19:32:15 +0000887if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000888 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200889 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000890 fi
bellard7d3505c2004-05-12 19:32:15 +0000891fi
892
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100893: ${make=${MAKE-make}}
894: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100895: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400896: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100897
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100898# Default objcc to clang if available, otherwise use CC
899if has clang; then
900 objcc=clang
901else
902 objcc="$cc"
903fi
904
Juan Quintela3457a3f2009-08-03 14:46:07 +0200905if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200906 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800907 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200908 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100909 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
910 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100911 # MinGW needs -mthreads for TLS and macro _MT.
912 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100913 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400914 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100915 if compile_prog "" "-liberty" ; then
916 LIBS="-liberty $LIBS"
917 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200918 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200919 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300920 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300921 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200922 bindir="\${prefix}"
923 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200924 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200925 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300926 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200927fi
928
Anthony Liguori487fefd2009-06-11 13:28:25 -0500929werror=""
bellard85aa5182007-11-11 20:17:03 +0000930
bellard7d132992003-03-06 23:23:54 +0000931for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200932 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000933 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000934 --help|-h) show_help=yes
935 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400936 --version|-V) exec cat $source_path/VERSION
937 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000938 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000939 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000940 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000941 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100942 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000943 ;;
aliguoriac0df512008-12-29 17:14:15 +0000944 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000945 ;;
aliguoriac0df512008-12-29 17:14:15 +0000946 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000947 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000948 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000949 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400950 --cxx=*)
951 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200952 --iasl=*) iasl="$optarg"
953 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100954 --objcc=*) objcc="$optarg"
955 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000956 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000957 ;;
pbrook6a882642006-04-17 13:57:12 +0000958 --install=*) install="$optarg"
959 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000960 --python=*) python="$optarg"
961 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000962 --gcov=*) gcov_tool="$optarg"
963 ;;
Brade2d88302011-09-02 16:53:28 -0400964 --smbd=*) smbd="$optarg"
965 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200966 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000967 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100968 --extra-cxxflags=*)
969 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200970 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000971 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100972 --enable-debug-info)
973 ;;
974 --disable-debug-info)
975 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100976 --cross-cc-*)
977 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800978 --enable-modules)
979 modules="yes"
980 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000981 --disable-modules)
982 modules="no"
983 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200984 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000985 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000986 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000987 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200988 --enable-trace-backends=*) trace_backends="$optarg"
989 ;;
990 # XXX: backwards compatibility
991 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100992 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100993 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100994 ;;
bellard7d132992003-03-06 23:23:54 +0000995 --enable-gprof) gprof="yes"
996 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000997 --enable-gcov) gcov="yes"
998 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +0100999 --static)
1000 static="yes"
1001 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001002 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001003 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001004 --mandir=*) mandir="$optarg"
1005 ;;
1006 --bindir=*) bindir="$optarg"
1007 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001008 --libdir=*) libdir="$optarg"
1009 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001010 --libexecdir=*) libexecdir="$optarg"
1011 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001012 --includedir=*) includedir="$optarg"
1013 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001014 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001015 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001016 --with-confsuffix=*) confsuffix="$optarg"
1017 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001018 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001019 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001020 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001021 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001022 --localstatedir=*) local_statedir="$optarg"
1023 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001024 --firmwarepath=*) firmwarepath="$optarg"
1025 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001026 --host=*|--build=*|\
1027 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001028 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001029 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1030 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1031 # These switches are silently ignored, for compatibility with
1032 # autoconf-generated configure scripts. This allows QEMU's
1033 # configure to be used by RPM and similar macros that set
1034 # lots of directory switches by default.
1035 ;;
bellard97a847b2003-08-10 21:36:04 +00001036 --disable-sdl) sdl="no"
1037 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001038 --enable-sdl) sdl="yes"
1039 ;;
Dave Airlie47c03742013-12-10 14:05:51 +10001040 --with-sdlabi=*) sdlabi="$optarg"
1041 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001042 --disable-qom-cast-debug) qom_cast_debug="no"
1043 ;;
1044 --enable-qom-cast-debug) qom_cast_debug="yes"
1045 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301046 --disable-virtfs) virtfs="no"
1047 ;;
1048 --enable-virtfs) virtfs="yes"
1049 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001050 --disable-mpath) mpath="no"
1051 ;;
1052 --enable-mpath) mpath="yes"
1053 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001054 --disable-vnc) vnc="no"
1055 ;;
1056 --enable-vnc) vnc="yes"
1057 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001058 --oss-lib=*) oss_lib="$optarg"
1059 ;;
malc0c58ac12008-06-25 21:04:05 +00001060 --audio-drv-list=*) audio_drv_list="$optarg"
1061 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001062 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001063 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001064 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001065 ;;
aurel32f8393942009-04-13 18:45:38 +00001066 --enable-debug-tcg) debug_tcg="yes"
1067 ;;
1068 --disable-debug-tcg) debug_tcg="no"
1069 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001070 --enable-debug)
1071 # Enable debugging options that aren't excessively noisy
1072 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001073 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001074 debug="yes"
1075 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001076 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001077 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001078 --enable-sanitizers) sanitizers="yes"
1079 ;;
1080 --disable-sanitizers) sanitizers="no"
1081 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001082 --enable-sparse) sparse="yes"
1083 ;;
1084 --disable-sparse) sparse="no"
1085 ;;
aliguori1625af82009-04-05 17:41:02 +00001086 --disable-strip) strip_opt="no"
1087 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001088 --disable-vnc-sasl) vnc_sasl="no"
1089 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001090 --enable-vnc-sasl) vnc_sasl="yes"
1091 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001092 --disable-vnc-jpeg) vnc_jpeg="no"
1093 ;;
1094 --enable-vnc-jpeg) vnc_jpeg="yes"
1095 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001096 --disable-vnc-png) vnc_png="no"
1097 ;;
1098 --enable-vnc-png) vnc_png="yes"
1099 ;;
bellard443f1372004-06-04 11:13:20 +00001100 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001101 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001102 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001103 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001104 --enable-vde) vde="yes"
1105 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001106 --disable-netmap) netmap="no"
1107 ;;
1108 --enable-netmap) netmap="yes"
1109 ;;
aliguorie37630c2009-04-22 15:19:10 +00001110 --disable-xen) xen="no"
1111 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001112 --enable-xen) xen="yes"
1113 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001114 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1115 ;;
1116 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1117 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001118 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1119 ;;
1120 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1121 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001122 --disable-brlapi) brlapi="no"
1123 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001124 --enable-brlapi) brlapi="yes"
1125 ;;
balrogfb599c92008-09-28 23:49:55 +00001126 --disable-bluez) bluez="no"
1127 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001128 --enable-bluez) bluez="yes"
1129 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001130 --disable-kvm) kvm="no"
1131 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001132 --enable-kvm) kvm="yes"
1133 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001134 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001135 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001136 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001137 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001138 --disable-hvf) hvf="no"
1139 ;;
1140 --enable-hvf) hvf="yes"
1141 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001142 --disable-whpx) whpx="no"
1143 ;;
1144 --enable-whpx) whpx="yes"
1145 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001146 --disable-tcg-interpreter) tcg_interpreter="no"
1147 ;;
1148 --enable-tcg-interpreter) tcg_interpreter="yes"
1149 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001150 --disable-cap-ng) cap_ng="no"
1151 ;;
1152 --enable-cap-ng) cap_ng="yes"
1153 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001154 --disable-tcg) tcg="no"
1155 ;;
1156 --enable-tcg) tcg="yes"
1157 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001158 --disable-malloc-trim) malloc_trim="no"
1159 ;;
1160 --enable-malloc-trim) malloc_trim="yes"
1161 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001162 --disable-spice) spice="no"
1163 ;;
1164 --enable-spice) spice="yes"
1165 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001166 --disable-libiscsi) libiscsi="no"
1167 ;;
1168 --enable-libiscsi) libiscsi="yes"
1169 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001170 --disable-libnfs) libnfs="no"
1171 ;;
1172 --enable-libnfs) libnfs="yes"
1173 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001174 --enable-profiler) profiler="yes"
1175 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001176 --disable-cocoa) cocoa="no"
1177 ;;
malcc2de5c92008-06-28 19:13:06 +00001178 --enable-cocoa)
1179 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001180 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001181 ;;
pbrookcad25d62006-03-19 16:31:11 +00001182 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001183 ;;
pbrookcad25d62006-03-19 16:31:11 +00001184 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001185 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001186 --disable-user)
1187 linux_user="no" ;
1188 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001189 ;;
1190 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001191 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001192 ;;
ths831b7822007-01-18 20:06:33 +00001193 --enable-linux-user) linux_user="yes"
1194 ;;
blueswir184778502008-10-26 20:33:16 +00001195 --disable-bsd-user) bsd_user="no"
1196 ;;
1197 --enable-bsd-user) bsd_user="yes"
1198 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001199 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001200 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001201 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001202 ;;
bellard85aa5182007-11-11 20:17:03 +00001203 --enable-werror) werror="yes"
1204 ;;
1205 --disable-werror) werror="no"
1206 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001207 --enable-stack-protector) stack_protector="yes"
1208 ;;
1209 --disable-stack-protector) stack_protector="no"
1210 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001211 --disable-curses) curses="no"
1212 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001213 --enable-curses) curses="yes"
1214 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001215 --disable-curl) curl="no"
1216 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001217 --enable-curl) curl="yes"
1218 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001219 --disable-fdt) fdt="no"
1220 ;;
1221 --enable-fdt) fdt="yes"
1222 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001223 --disable-linux-aio) linux_aio="no"
1224 ;;
1225 --enable-linux-aio) linux_aio="yes"
1226 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001227 --disable-attr) attr="no"
1228 ;;
1229 --enable-attr) attr="yes"
1230 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001231 --disable-membarrier) membarrier="no"
1232 ;;
1233 --enable-membarrier) membarrier="yes"
1234 ;;
ths77755342008-11-27 15:45:16 +00001235 --disable-blobs) blobs="no"
1236 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001237 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001238 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001239 --with-coroutine=*) coroutine="$optarg"
1240 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001241 --disable-coroutine-pool) coroutine_pool="no"
1242 ;;
1243 --enable-coroutine-pool) coroutine_pool="yes"
1244 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001245 --enable-debug-stack-usage) debug_stack_usage="yes"
1246 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001247 --enable-crypto-afalg) crypto_afalg="yes"
1248 ;;
1249 --disable-crypto-afalg) crypto_afalg="no"
1250 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001251 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001252 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001253 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001254 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001255 --disable-vhost-net) vhost_net="no"
1256 ;;
1257 --enable-vhost-net) vhost_net="yes"
1258 ;;
Gonglei042cea22018-03-01 21:46:28 +08001259 --disable-vhost-crypto) vhost_crypto="no"
1260 ;;
1261 --enable-vhost-crypto)
1262 vhost_crypto="yes"
1263 if test "$mingw32" = "yes"; then
1264 error_exit "vhost-crypto isn't available on win32"
1265 fi
1266 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001267 --disable-vhost-scsi) vhost_scsi="no"
1268 ;;
1269 --enable-vhost-scsi) vhost_scsi="yes"
1270 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001271 --disable-vhost-vsock) vhost_vsock="no"
1272 ;;
1273 --enable-vhost-vsock) vhost_vsock="yes"
1274 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001275 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001276 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001277 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001278 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001279 --disable-rbd) rbd="no"
1280 ;;
1281 --enable-rbd) rbd="yes"
1282 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001283 --disable-xfsctl) xfs="no"
1284 ;;
1285 --enable-xfsctl) xfs="yes"
1286 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001287 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001288 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001289 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001290 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001291 --disable-libusb) libusb="no"
1292 ;;
1293 --enable-libusb) libusb="yes"
1294 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001295 --disable-usb-redir) usb_redir="no"
1296 ;;
1297 --enable-usb-redir) usb_redir="yes"
1298 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001299 --disable-zlib-test) zlib="no"
1300 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001301 --disable-lzo) lzo="no"
1302 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001303 --enable-lzo) lzo="yes"
1304 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001305 --disable-snappy) snappy="no"
1306 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001307 --enable-snappy) snappy="yes"
1308 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001309 --disable-bzip2) bzip2="no"
1310 ;;
1311 --enable-bzip2) bzip2="yes"
1312 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001313 --enable-guest-agent) guest_agent="yes"
1314 ;;
1315 --disable-guest-agent) guest_agent="no"
1316 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001317 --enable-guest-agent-msi) guest_agent_msi="yes"
1318 ;;
1319 --disable-guest-agent-msi) guest_agent_msi="no"
1320 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001321 --with-vss-sdk) vss_win32_sdk=""
1322 ;;
1323 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1324 ;;
1325 --without-vss-sdk) vss_win32_sdk="no"
1326 ;;
1327 --with-win-sdk) win_sdk=""
1328 ;;
1329 --with-win-sdk=*) win_sdk="$optarg"
1330 ;;
1331 --without-win-sdk) win_sdk="no"
1332 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001333 --enable-tools) want_tools="yes"
1334 ;;
1335 --disable-tools) want_tools="no"
1336 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001337 --enable-seccomp) seccomp="yes"
1338 ;;
1339 --disable-seccomp) seccomp="no"
1340 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301341 --disable-glusterfs) glusterfs="no"
1342 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001343 --disable-avx2) avx2_opt="no"
1344 ;;
1345 --enable-avx2) avx2_opt="yes"
1346 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301347 --enable-glusterfs) glusterfs="yes"
1348 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001349 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1350 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001351 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001352 --enable-vhdx|--disable-vhdx)
1353 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1354 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001355 --enable-uuid|--disable-uuid)
1356 echo "$0: $opt is obsolete, UUID support is always built" >&2
1357 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001358 --disable-gtk) gtk="no"
1359 ;;
1360 --enable-gtk) gtk="yes"
1361 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001362 --tls-priority=*) tls_priority="$optarg"
1363 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001364 --disable-gnutls) gnutls="no"
1365 ;;
1366 --enable-gnutls) gnutls="yes"
1367 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001368 --disable-nettle) nettle="no"
1369 ;;
1370 --enable-nettle) nettle="yes"
1371 ;;
1372 --disable-gcrypt) gcrypt="no"
1373 ;;
1374 --enable-gcrypt) gcrypt="yes"
1375 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001376 --enable-rdma) rdma="yes"
1377 ;;
1378 --disable-rdma) rdma="no"
1379 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001380 --enable-pvrdma) pvrdma="yes"
1381 ;;
1382 --disable-pvrdma) pvrdma="no"
1383 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001384 --disable-vte) vte="no"
1385 ;;
1386 --enable-vte) vte="yes"
1387 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001388 --disable-virglrenderer) virglrenderer="no"
1389 ;;
1390 --enable-virglrenderer) virglrenderer="yes"
1391 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001392 --disable-tpm) tpm="no"
1393 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001394 --enable-tpm) tpm="yes"
1395 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001396 --disable-libssh2) libssh2="no"
1397 ;;
1398 --enable-libssh2) libssh2="yes"
1399 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001400 --disable-live-block-migration) live_block_migration="no"
1401 ;;
1402 --enable-live-block-migration) live_block_migration="yes"
1403 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001404 --disable-numa) numa="no"
1405 ;;
1406 --enable-numa) numa="yes"
1407 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001408 --disable-libxml2) libxml2="no"
1409 ;;
1410 --enable-libxml2) libxml2="yes"
1411 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001412 --disable-tcmalloc) tcmalloc="no"
1413 ;;
1414 --enable-tcmalloc) tcmalloc="yes"
1415 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001416 --disable-jemalloc) jemalloc="no"
1417 ;;
1418 --enable-jemalloc) jemalloc="yes"
1419 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001420 --disable-replication) replication="no"
1421 ;;
1422 --enable-replication) replication="yes"
1423 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001424 --disable-vxhs) vxhs="no"
1425 ;;
1426 --enable-vxhs) vxhs="yes"
1427 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001428 --disable-bochs) bochs="no"
1429 ;;
1430 --enable-bochs) bochs="yes"
1431 ;;
1432 --disable-cloop) cloop="no"
1433 ;;
1434 --enable-cloop) cloop="yes"
1435 ;;
1436 --disable-dmg) dmg="no"
1437 ;;
1438 --enable-dmg) dmg="yes"
1439 ;;
1440 --disable-qcow1) qcow1="no"
1441 ;;
1442 --enable-qcow1) qcow1="yes"
1443 ;;
1444 --disable-vdi) vdi="no"
1445 ;;
1446 --enable-vdi) vdi="yes"
1447 ;;
1448 --disable-vvfat) vvfat="no"
1449 ;;
1450 --enable-vvfat) vvfat="yes"
1451 ;;
1452 --disable-qed) qed="no"
1453 ;;
1454 --enable-qed) qed="yes"
1455 ;;
1456 --disable-parallels) parallels="no"
1457 ;;
1458 --enable-parallels) parallels="yes"
1459 ;;
1460 --disable-sheepdog) sheepdog="no"
1461 ;;
1462 --enable-sheepdog) sheepdog="yes"
1463 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001464 --disable-vhost-user) vhost_user="no"
1465 ;;
1466 --enable-vhost-user)
1467 vhost_user="yes"
1468 if test "$mingw32" = "yes"; then
1469 error_exit "vhost-user isn't available on win32"
1470 fi
1471 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001472 --disable-capstone) capstone="no"
1473 ;;
1474 --enable-capstone) capstone="yes"
1475 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001476 --enable-capstone=git) capstone="git"
1477 ;;
1478 --enable-capstone=system) capstone="system"
1479 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001480 --with-git=*) git="$optarg"
1481 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001482 --enable-git-update) git_update=yes
1483 ;;
1484 --disable-git-update) git_update=no
1485 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001486 --enable-debug-mutex) debug_mutex=yes
1487 ;;
1488 --disable-debug-mutex) debug_mutex=no
1489 ;;
Junyan He17824402018-07-18 15:47:59 +08001490 --enable-libpmem) libpmem=yes
1491 ;;
1492 --disable-libpmem) libpmem=no
1493 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001494 *)
1495 echo "ERROR: unknown option $opt"
1496 echo "Try '$0 --help' for more information"
1497 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001498 ;;
bellard7d132992003-03-06 23:23:54 +00001499 esac
1500done
1501
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001502if test "$vhost_user" = ""; then
1503 if test "$mingw32" = "yes"; then
1504 vhost_user="no"
1505 else
1506 vhost_user="yes"
1507 fi
1508fi
1509
bellard40293e52008-01-31 11:32:10 +00001510case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001511 ppc)
1512 CPU_CFLAGS="-m32"
1513 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001514 cross_cc_powerpc=$cc
1515 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001516 ;;
1517 ppc64)
1518 CPU_CFLAGS="-m64"
1519 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001520 cross_cc_ppc64=$cc
1521 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001522 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001523 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001524 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1525 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001526 cross_cc_sparc=$cc
1527 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001528 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001529 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001530 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001531 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001532 cross_cc_sparc64=$cc
1533 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001534 ;;
ths76d83bd2007-11-18 21:22:10 +00001535 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001536 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001537 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001538 cross_cc_s390=$cc
1539 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001540 ;;
1541 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001542 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001543 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001544 cross_cc_s390x=$cc
1545 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001546 ;;
bellard40293e52008-01-31 11:32:10 +00001547 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001548 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001549 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001550 cross_cc_i386=$cc
1551 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001552 ;;
1553 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001554 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1555 # If we truly care, we should simply detect this case at
1556 # runtime and generate the fallback to serial emulation.
1557 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001558 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001559 cross_cc_x86_64=$cc
1560 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001561 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001562 x32)
1563 CPU_CFLAGS="-mx32"
1564 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001565 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001566 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001567 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001568 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001569esac
1570
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001571QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001572
Peter Maydellaffc88c2016-06-13 11:32:24 +01001573# For user-mode emulation the host arch has to be one we explicitly
1574# support, even if we're using TCI.
1575if [ "$ARCH" = "unknown" ]; then
1576 bsd_user="no"
1577 linux_user="no"
1578fi
1579
Peter Maydell60e0df22011-05-03 14:50:13 +01001580default_target_list=""
1581
Peter Maydell6e92f822013-05-20 16:16:15 +01001582mak_wilds=""
1583
1584if [ "$softmmu" = "yes" ]; then
1585 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001586fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001587if [ "$linux_user" = "yes" ]; then
1588 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001589fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001590if [ "$bsd_user" = "yes" ]; then
1591 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001592fi
1593
Peter Maydell6e92f822013-05-20 16:16:15 +01001594for config in $mak_wilds; do
1595 default_target_list="${default_target_list} $(basename "$config" .mak)"
1596done
1597
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001598# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001599trace_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 +01001600
pbrookaf5db582006-04-08 14:26:41 +00001601if test x"$show_help" = x"yes" ; then
1602cat << EOF
1603
1604Usage: configure [options]
1605Options: [defaults in brackets after descriptions]
1606
Stefan Weil08fb77e2013-12-18 22:09:39 +01001607Standard options:
1608 --help print this message
1609 --prefix=PREFIX install in PREFIX [$prefix]
1610 --interp-prefix=PREFIX where to find shared libraries, etc.
1611 use %M for cpu name [$interp_prefix]
1612 --target-list=LIST set target list (default: build everything)
1613$(echo Available targets: $default_target_list | \
1614 fold -s -w 53 | sed -e 's/^/ /')
1615
1616Advanced options (experts only):
1617 --source-path=PATH path of source code [$source_path]
1618 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1619 --cc=CC use C compiler CC [$cc]
1620 --iasl=IASL use ACPI compiler IASL [$iasl]
1621 --host-cc=CC use C compiler CC [$host_cc] for code run at
1622 build time
1623 --cxx=CXX use C++ compiler CXX [$cxx]
1624 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1625 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001626 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001627 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001628 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001629 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001630 --make=MAKE use specified make [$make]
1631 --install=INSTALL use specified install [$install]
1632 --python=PYTHON use specified python [$python]
1633 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001634 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001635 --static enable static build [$static]
1636 --mandir=PATH install man pages in PATH
1637 --datadir=PATH install firmware in PATH$confsuffix
1638 --docdir=PATH install documentation in PATH$confsuffix
1639 --bindir=PATH install binaries in PATH
1640 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001641 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001642 --sysconfdir=PATH install config in PATH$confsuffix
1643 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001644 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001645 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001646 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001647 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001648 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001649 --disable-strip disable stripping binaries
1650 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001651 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001652 --audio-drv-list=LIST set audio drivers list:
1653 Available drivers: $audio_possible_drivers
1654 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1655 --block-drv-rw-whitelist=L
1656 set block driver read-write whitelist
1657 (affects only QEMU, not qemu-img)
1658 --block-drv-ro-whitelist=L
1659 set block driver read-only whitelist
1660 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001661 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001662 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001663 --with-trace-file=NAME Full PATH,NAME of file to store traces
1664 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001665 --disable-slirp disable SLIRP userspace network connectivity
1666 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001667 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001668 --oss-lib path to OSS library
1669 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001670 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001671 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001672 --enable-gcov enable test coverage analysis with gcov
1673 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001674 --disable-blobs disable installing provided firmware blobs
1675 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1676 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001677 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001678 --enable-gprof QEMU profiling with gprof
1679 --enable-profiler profiler support
1680 --enable-xen-pv-domain-build
1681 xen pv domain builder
1682 --enable-debug-stack-usage
1683 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001684
1685Optional features, enabled with --enable-FEATURE and
1686disabled with --disable-FEATURE, default is enabled if available:
1687
1688 system all system emulation targets
1689 user supported user emulation targets
1690 linux-user all linux usermode emulation targets
1691 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001692 docs build documentation
1693 guest-agent build the QEMU Guest Agent
1694 guest-agent-msi build guest agent Windows MSI installation package
1695 pie Position Independent Executables
1696 modules modules support
1697 debug-tcg TCG debugging (default is disabled)
1698 debug-info debugging information
1699 sparse sparse checker
1700
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001701 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001702 nettle nettle cryptography support
1703 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001704 sdl SDL UI
1705 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1706 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001707 vte vte support for the gtk UI
1708 curses curses UI
1709 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001710 vnc-sasl SASL encryption for VNC server
1711 vnc-jpeg JPEG lossy compression for VNC server
1712 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001713 cocoa Cocoa UI (Mac OS X only)
1714 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001715 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001716 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001717 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001718 brlapi BrlAPI (Braile)
1719 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001720 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001721 fdt fdt device tree
1722 bluez bluez stack connectivity
1723 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001724 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001725 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001726 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001727 rdma Enable RDMA-based migration
1728 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001729 vde support for vde network
1730 netmap support for netmap network
1731 linux-aio Linux AIO support
1732 cap-ng libcap-ng support
1733 attr attr and xattr support
1734 vhost-net vhost-net acceleration support
Gonglei042cea22018-03-01 21:46:28 +08001735 vhost-crypto vhost-crypto acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001736 spice spice
1737 rbd rados block device (rbd)
1738 libiscsi iscsi support
1739 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001740 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001741 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001742 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001743 usb-redir usb network redirection support
1744 lzo support of lzo compression library
1745 snappy support of snappy compression library
1746 bzip2 support of bzip2 compression library
1747 (for reading bzip2-compressed dmg images)
1748 seccomp seccomp support
1749 coroutine-pool coroutine freelist (better performance)
1750 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001751 tpm TPM support
1752 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001753 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001754 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001755 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001756 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001757 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001758 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001759 vhost-vsock virtio sockets device support
1760 opengl opengl support
1761 virglrenderer virgl rendering support
1762 xfsctl xfsctl support
1763 qom-cast-debug cast debugging support
1764 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001765 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001766 bochs bochs image format support
1767 cloop cloop image format support
1768 dmg dmg image format support
1769 qcow1 qcow v1 image format support
1770 vdi vdi image format support
1771 vvfat vvfat image format support
1772 qed qed image format support
1773 parallels parallels image format support
1774 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001775 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001776 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001777 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001778 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001779 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001780
1781NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001782EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001783exit 0
pbrookaf5db582006-04-08 14:26:41 +00001784fi
1785
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001786if ! has $python; then
1787 error_exit "Python not found. Use --python=/path/to/python"
1788fi
1789
1790# Note that if the Python conditional here evaluates True we will exit
1791# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001792if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1793 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001794 "Use --python=/path/to/python to specify a supported Python."
1795fi
1796
1797# Suppress writing compiled files
1798python="$python -B"
1799
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001800# Check that the C compiler works. Doing this here before testing
1801# the host CPU ensures that we had a valid CC to autodetect the
1802# $cpu var (and we should bail right here if that's not the case).
1803# It also allows the help message to be printed without a CC.
1804write_c_skeleton;
1805if compile_object ; then
1806 : C compiler works ok
1807else
1808 error_exit "\"$cc\" either does not exist or does not work"
1809fi
1810if ! compile_prog ; then
1811 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1812fi
1813
Peter Maydell359bc952011-12-24 13:07:25 +00001814# Now we have handled --enable-tcg-interpreter and know we're not just
1815# printing the help message, bail out if the host CPU isn't supported.
1816if test "$ARCH" = "unknown"; then
1817 if test "$tcg_interpreter" = "yes" ; then
1818 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001819 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001820 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001821 fi
1822fi
1823
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001824# Consult white-list to determine whether to enable werror
1825# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001826if test -z "$werror" ; then
1827 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001828 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001829 werror="yes"
1830 else
1831 werror="no"
1832 fi
1833fi
1834
Peter Maydellfb59dab2017-03-28 14:01:52 +01001835if test "$bogus_os" = "yes"; then
1836 # Now that we know that we're not printing the help and that
1837 # the compiler works (so the results of the check_defines we used
1838 # to identify the OS are reliable), if we didn't recognize the
1839 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001840 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001841fi
1842
Thomas Huthefc6c072018-12-03 10:12:32 +01001843# Check whether the compiler matches our minimum requirements:
1844cat > $TMPC << EOF
1845#if defined(__clang_major__) && defined(__clang_minor__)
1846# ifdef __apple_build_version__
1847# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1848# error You need at least XCode Clang v5.1 to compile QEMU
1849# endif
1850# else
1851# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1852# error You need at least Clang v3.4 to compile QEMU
1853# endif
1854# endif
1855#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1856# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1857# error You need at least GCC v4.8 to compile QEMU
1858# endif
1859#else
1860# error You either need GCC or Clang to compiler QEMU
1861#endif
1862int main (void) { return 0; }
1863EOF
1864if ! compile_prog "" "" ; then
1865 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1866fi
1867
Paolo Bonzini8d050952010-12-23 11:43:52 +01001868gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1869gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001870gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001871gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001872gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001873gcc_flags="-Wno-string-plus-int $gcc_flags"
Gerd Hoffmann0e39c4a2018-03-09 14:59:45 +01001874gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001875# Note that we do not add -Werror to gcc_flags here, because that would
1876# enable it for all configure tests. If a configure test failed due
1877# to -Werror this would just silently disable some features,
1878# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001879
1880cc_has_warning_flag() {
1881 write_c_skeleton;
1882
Peter Maydella1d29d62012-10-27 22:19:07 +01001883 # Use the positive sense of the flag when testing for -Wno-wombat
1884 # support (gcc will happily accept the -Wno- form of unknown
1885 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001886 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1887 compile_prog "-Werror $optflag" ""
1888}
1889
1890for flag in $gcc_flags; do
1891 if cc_has_warning_flag $flag ; then
1892 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001893 fi
1894done
1895
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001896if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001897 cat > $TMPC << EOF
1898int main(int argc, char *argv[])
1899{
1900 char arr[64], *p = arr, *c = argv[0];
1901 while (*c) {
1902 *p++ = *c++;
1903 }
1904 return 0;
1905}
1906EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001907 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001908 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001909 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001910 # We need to check both a compile and a link, since some compiler
1911 # setups fail only on a .c->.o compile and some only at link time
1912 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1913 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001914 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001915 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001916 break
1917 fi
1918 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001919 if test "$stack_protector" = yes; then
1920 if test $sp_on = 0; then
1921 error_exit "Stack protector not supported"
1922 fi
1923 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001924fi
1925
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001926# Disable -Wmissing-braces on older compilers that warn even for
1927# the "universal" C zero initializer {0}.
1928cat > $TMPC << EOF
1929struct {
1930 int a[2];
1931} x = {0};
1932EOF
1933if compile_object "-Werror" "" ; then
1934 :
1935else
1936 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1937fi
1938
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001939# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1940# large functions that use global variables. The bug is in all releases of
1941# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1942# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1943cat > $TMPC << EOF
1944#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1945int main(void) { return 0; }
1946#else
1947#error No bug in this compiler.
1948#endif
1949EOF
1950if compile_prog "-Werror -fno-gcse" "" ; then
1951 TRANSLATE_OPT_CFLAGS=-fno-gcse
1952fi
1953
Avi Kivity40d64442011-11-15 20:12:17 +02001954if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001955 if test "$modules" = "yes" ; then
1956 error_exit "static and modules are mutually incompatible"
1957 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001958 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001959 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001960 else
1961 pie="no"
1962 fi
1963fi
1964
Emilio G. Cota768b7852015-04-29 13:09:02 +02001965# Unconditional check for compiler __thread support
1966 cat > $TMPC << EOF
1967static __thread int tls_var;
1968int main(void) { return tls_var; }
1969EOF
1970
1971if ! compile_prog "-Werror" "" ; then
1972 error_exit "Your compiler does not support the __thread specifier for " \
1973 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1974fi
1975
Avi Kivity40d64442011-11-15 20:12:17 +02001976if test "$pie" = ""; then
1977 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001978 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001979 ;;
1980 *)
1981 pie="no"
1982 ;;
1983 esac
1984fi
1985
1986if test "$pie" != "no" ; then
1987 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001988
1989#ifdef __linux__
1990# define THREAD __thread
1991#else
1992# define THREAD
1993#endif
1994
1995static THREAD int tls_var;
1996
1997int main(void) { return tls_var; }
1998
Avi Kivity40d64442011-11-15 20:12:17 +02001999EOF
2000 if compile_prog "-fPIE -DPIE" "-pie"; then
2001 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2002 LDFLAGS="-pie $LDFLAGS"
2003 pie="yes"
2004 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2005 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2006 fi
2007 else
2008 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002009 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002010 else
2011 echo "Disabling PIE due to missing toolchain support"
2012 pie="no"
2013 fi
2014 fi
Brad46eef332013-12-10 19:49:08 -05002015
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04002016 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002017 CFLAGS_NOPIE="-fno-pie"
2018 LDFLAGS_NOPIE="-nopie"
2019 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002020fi
2021
Paolo Bonzini09dada42013-04-17 16:26:47 +02002022##########################################
2023# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2024# use i686 as default anyway, but for those that don't, an explicit
2025# specification is necessary
2026
2027if test "$cpu" = "i386"; then
2028 cat > $TMPC << EOF
2029static int sfaa(int *ptr)
2030{
2031 return __sync_fetch_and_and(ptr, 0);
2032}
2033
2034int main(void)
2035{
2036 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002037 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002038 sfaa(&val);
2039 return val;
2040}
2041EOF
2042 if ! compile_prog "" "" ; then
2043 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2044 fi
2045fi
2046
2047#########################################
bellardec530c82006-04-25 22:36:06 +00002048# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002049
bellardec530c82006-04-25 22:36:06 +00002050if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002051 if has $install; then
2052 :
2053 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002054 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2055 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2056 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002057 fi
Stefan Weil89138852016-05-16 15:10:20 +02002058 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002059 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2060 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2061 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002062 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002063 if has ar; then
2064 :
2065 else
bellardec530c82006-04-25 22:36:06 +00002066 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002067 error_exit "No path includes ar" \
2068 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002069 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002070 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002071 fi
ths5fafdf22007-09-16 21:08:06 +00002072fi
bellardec530c82006-04-25 22:36:06 +00002073
Stefan Weilafb63eb2012-09-26 22:04:38 +02002074if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002075 for target in $default_target_list; do
2076 supported_target $target 2>/dev/null && \
2077 target_list="$target_list $target"
2078 done
2079 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002080else
Stefan Weil89138852016-05-16 15:10:20 +02002081 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002082 for target in $target_list; do
2083 # Check that we recognised the target name; this allows a more
2084 # friendly error message than if we let it fall through.
2085 case " $default_target_list " in
2086 *" $target "*)
2087 ;;
2088 *)
2089 error_exit "Unknown target name '$target'"
2090 ;;
2091 esac
2092 supported_target $target || exit 1
2093 done
bellard5327cf42005-01-10 23:18:50 +00002094fi
Peter Maydell25b48332013-05-20 16:16:16 +01002095
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002096# see if system emulation was really requested
2097case " $target_list " in
2098 *"-softmmu "*) softmmu=yes
2099 ;;
2100 *) softmmu=no
2101 ;;
2102esac
bellard5327cf42005-01-10 23:18:50 +00002103
Juan Quintela249247c2009-08-12 18:20:25 +02002104feature_not_found() {
2105 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002106 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002107
Peter Maydell76ad07a2013-04-08 12:11:26 +01002108 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002109 "configure was not able to find it." \
2110 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002111}
2112
bellard7d132992003-03-06 23:23:54 +00002113# ---
2114# big/little endian test
2115cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002116short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2117short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2118extern int foo(short *, short *);
2119int main(int argc, char *argv[]) {
2120 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002121}
2122EOF
2123
Mike Frysinger61cc9192013-06-30 23:30:18 -04002124if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002125 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002126 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002127 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002128 bigendian="no"
2129 else
2130 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002131 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002132else
2133 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002134fi
2135
Juan Quintelab0a47e72009-08-12 18:29:49 +02002136##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002137# cocoa implies not SDL or GTK
2138# (the cocoa UI code currently assumes it is always the active UI
2139# and doesn't interact well with other UI frontend code)
2140if test "$cocoa" = "yes"; then
2141 if test "$sdl" = "yes"; then
2142 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2143 fi
2144 if test "$gtk" = "yes"; then
2145 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2146 fi
2147 gtk=no
2148 sdl=no
2149fi
2150
Eric Blake6b39b062016-10-11 10:46:23 -05002151# Some versions of Mac OS X incorrectly define SIZE_MAX
2152cat > $TMPC << EOF
2153#include <stdint.h>
2154#include <stdio.h>
2155int main(int argc, char *argv[]) {
2156 return printf("%zu", SIZE_MAX);
2157}
2158EOF
2159have_broken_size_max=no
2160if ! compile_object -Werror ; then
2161 have_broken_size_max=yes
2162fi
2163
Peter Maydella30878e2015-08-14 16:10:52 +01002164##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002165# L2TPV3 probe
2166
2167cat > $TMPC <<EOF
2168#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002169#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002170int main(void) { return sizeof(struct mmsghdr); }
2171EOF
2172if compile_prog "" "" ; then
2173 l2tpv3=yes
2174else
2175 l2tpv3=no
2176fi
2177
2178##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002179# MinGW / Mingw-w64 localtime_r/gmtime_r check
2180
2181if test "$mingw32" = "yes"; then
2182 # Some versions of MinGW / Mingw-w64 lack localtime_r
2183 # and gmtime_r entirely.
2184 #
2185 # Some versions of Mingw-w64 define a macro for
2186 # localtime_r/gmtime_r.
2187 #
2188 # Some versions of Mingw-w64 will define functions
2189 # for localtime_r/gmtime_r, but only if you have
2190 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2191 # though, unistd.h and pthread.h both define
2192 # that for you.
2193 #
2194 # So this #undef localtime_r and #include <unistd.h>
2195 # are not in fact redundant.
2196cat > $TMPC << EOF
2197#include <unistd.h>
2198#include <time.h>
2199#undef localtime_r
2200int main(void) { localtime_r(NULL, NULL); return 0; }
2201EOF
2202 if compile_prog "" "" ; then
2203 localtime_r="yes"
2204 else
2205 localtime_r="no"
2206 fi
2207fi
2208
2209##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002210# pkg-config probe
2211
2212if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002213 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002214fi
2215
2216##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002217# NPTL probe
2218
Peter Maydell24cb36a2013-07-16 18:45:00 +01002219if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002220 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002221#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002222#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002223int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002224#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2225#error bork
2226#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002227 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002228}
2229EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002230 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002231 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002232 fi
pbrookbd0c5662008-05-29 14:34:11 +00002233fi
2234
balrogac629222008-10-11 09:56:04 +00002235##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002236# lzo check
2237
2238if test "$lzo" != "no" ; then
2239 cat > $TMPC << EOF
2240#include <lzo/lzo1x.h>
2241int main(void) { lzo_version(); return 0; }
2242EOF
2243 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002244 libs_softmmu="$libs_softmmu -llzo2"
2245 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002246 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002247 if test "$lzo" = "yes"; then
2248 feature_not_found "liblzo2" "Install liblzo2 devel"
2249 fi
2250 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002251 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002252fi
2253
2254##########################################
2255# snappy check
2256
2257if test "$snappy" != "no" ; then
2258 cat > $TMPC << EOF
2259#include <snappy-c.h>
2260int main(void) { snappy_max_compressed_length(4096); return 0; }
2261EOF
2262 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002263 libs_softmmu="$libs_softmmu -lsnappy"
2264 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002265 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002266 if test "$snappy" = "yes"; then
2267 feature_not_found "libsnappy" "Install libsnappy devel"
2268 fi
2269 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002270 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002271fi
2272
2273##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002274# bzip2 check
2275
2276if test "$bzip2" != "no" ; then
2277 cat > $TMPC << EOF
2278#include <bzlib.h>
2279int main(void) { BZ2_bzlibVersion(); return 0; }
2280EOF
2281 if compile_prog "" "-lbz2" ; then
2282 bzip2="yes"
2283 else
2284 if test "$bzip2" = "yes"; then
2285 feature_not_found "libbzip2" "Install libbzip2 devel"
2286 fi
2287 bzip2="no"
2288 fi
2289fi
2290
2291##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002292# libseccomp check
2293
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002294libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002295if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002296 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002297 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002298 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002299 arm|aarch64)
2300 libseccomp_minver="2.2.3"
2301 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002302 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002303 libseccomp_minver="2.3.0"
2304 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002305 *)
2306 libseccomp_minver=""
2307 ;;
2308 esac
2309
2310 if test "$libseccomp_minver" != "" &&
2311 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002312 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2313 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002314 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002315 else
Andrew Jones693e5912015-09-30 11:59:18 -04002316 if test "$seccomp" = "yes" ; then
2317 if test "$libseccomp_minver" != "" ; then
2318 feature_not_found "libseccomp" \
2319 "Install libseccomp devel >= $libseccomp_minver"
2320 else
2321 feature_not_found "libseccomp" \
2322 "libseccomp is not supported for host cpu $cpu"
2323 fi
2324 fi
2325 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002326 fi
2327fi
2328##########################################
aliguorie37630c2009-04-22 15:19:10 +00002329# xen probe
2330
Juan Quintelafc321b42009-08-12 18:29:55 +02002331if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002332 # Check whether Xen library path is specified via --extra-ldflags to avoid
2333 # overriding this setting with pkg-config output. If not, try pkg-config
2334 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002335
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002336 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2337 $pkg_config --exists xencontrol ; then
2338 xen_ctrl_version="$(printf '%d%02d%02d' \
2339 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2340 xen=yes
2341 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2342 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002343 if $pkg_config --exists xentoolcore; then
2344 xen_pc="$xen_pc xentoolcore"
2345 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002346 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2347 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2348 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2349 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002350
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002351 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002352 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002353
2354 # First we test whether Xen headers and libraries are available.
2355 # If no, we are done and there is no Xen support.
2356 # If yes, more tests are run to detect the Xen version.
2357
2358 # Xen (any)
2359 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002360#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002361int main(void) {
2362 return 0;
2363}
2364EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002365 if ! compile_prog "" "$xen_libs" ; then
2366 # Xen not found
2367 if test "$xen" = "yes" ; then
2368 feature_not_found "xen" "Install xen devel"
2369 fi
2370 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002371
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002372 # Xen unstable
2373 elif
2374 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002375#undef XC_WANT_COMPAT_DEVICEMODEL_API
2376#define __XEN_TOOLS__
2377#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002378#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002379int main(void) {
2380 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002381 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002382
2383 xd = xendevicemodel_open(0, 0);
2384 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2385
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002386 xfmem = xenforeignmemory_open(0, 0);
2387 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2388
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002389 return 0;
2390}
2391EOF
2392 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2393 then
2394 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2395 xen_ctrl_version=41100
2396 xen=yes
2397 elif
2398 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002399#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2400#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002401#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002402int main(void) {
2403 xenforeignmemory_handle *xfmem;
2404
2405 xfmem = xenforeignmemory_open(0, 0);
2406 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002407 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002408
2409 return 0;
2410}
2411EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002412 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002413 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002414 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002415 xen_ctrl_version=41000
2416 xen=yes
2417 elif
2418 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002419#undef XC_WANT_COMPAT_DEVICEMODEL_API
2420#define __XEN_TOOLS__
2421#include <xendevicemodel.h>
2422int main(void) {
2423 xendevicemodel_handle *xd;
2424
2425 xd = xendevicemodel_open(0, 0);
2426 xendevicemodel_close(xd);
2427
2428 return 0;
2429}
2430EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002431 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2432 then
2433 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2434 xen_ctrl_version=40900
2435 xen=yes
2436 elif
2437 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002438/*
2439 * If we have stable libs the we don't want the libxc compat
2440 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002441 *
2442 * Also, check if xengnttab_grant_copy_segment_t is defined and
2443 * grant copy operation is implemented.
2444 */
2445#undef XC_WANT_COMPAT_EVTCHN_API
2446#undef XC_WANT_COMPAT_GNTTAB_API
2447#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2448#include <xenctrl.h>
2449#include <xenstore.h>
2450#include <xenevtchn.h>
2451#include <xengnttab.h>
2452#include <xenforeignmemory.h>
2453#include <stdint.h>
2454#include <xen/hvm/hvm_info_table.h>
2455#if !defined(HVM_MAX_VCPUS)
2456# error HVM_MAX_VCPUS not defined
2457#endif
2458int main(void) {
2459 xc_interface *xc = NULL;
2460 xenforeignmemory_handle *xfmem;
2461 xenevtchn_handle *xe;
2462 xengnttab_handle *xg;
2463 xen_domain_handle_t handle;
2464 xengnttab_grant_copy_segment_t* seg = NULL;
2465
2466 xs_daemon_open();
2467
2468 xc = xc_interface_open(0, 0, 0);
2469 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2470 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2471 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2472 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2473 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2474
2475 xfmem = xenforeignmemory_open(0, 0);
2476 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2477
2478 xe = xenevtchn_open(0, 0);
2479 xenevtchn_fd(xe);
2480
2481 xg = xengnttab_open(0, 0);
2482 xengnttab_grant_copy(xg, 0, seg);
2483
2484 return 0;
2485}
2486EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002487 compile_prog "" "$xen_libs $xen_stable_libs"
2488 then
2489 xen_ctrl_version=40800
2490 xen=yes
2491 elif
2492 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002493/*
2494 * If we have stable libs the we don't want the libxc compat
2495 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002496 */
2497#undef XC_WANT_COMPAT_EVTCHN_API
2498#undef XC_WANT_COMPAT_GNTTAB_API
2499#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2500#include <xenctrl.h>
2501#include <xenstore.h>
2502#include <xenevtchn.h>
2503#include <xengnttab.h>
2504#include <xenforeignmemory.h>
2505#include <stdint.h>
2506#include <xen/hvm/hvm_info_table.h>
2507#if !defined(HVM_MAX_VCPUS)
2508# error HVM_MAX_VCPUS not defined
2509#endif
2510int main(void) {
2511 xc_interface *xc = NULL;
2512 xenforeignmemory_handle *xfmem;
2513 xenevtchn_handle *xe;
2514 xengnttab_handle *xg;
2515 xen_domain_handle_t handle;
2516
2517 xs_daemon_open();
2518
2519 xc = xc_interface_open(0, 0, 0);
2520 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2521 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2522 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2523 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2524 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2525
2526 xfmem = xenforeignmemory_open(0, 0);
2527 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2528
2529 xe = xenevtchn_open(0, 0);
2530 xenevtchn_fd(xe);
2531
2532 xg = xengnttab_open(0, 0);
2533 xengnttab_map_grant_ref(xg, 0, 0, 0);
2534
2535 return 0;
2536}
2537EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002538 compile_prog "" "$xen_libs $xen_stable_libs"
2539 then
2540 xen_ctrl_version=40701
2541 xen=yes
2542 elif
2543 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002544#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002545#include <stdint.h>
2546int main(void) {
2547 xc_interface *xc = NULL;
2548 xen_domain_handle_t handle;
2549 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2550 return 0;
2551}
2552EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002553 compile_prog "" "$xen_libs"
2554 then
2555 xen_ctrl_version=40700
2556 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002557
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002558 # Xen 4.6
2559 elif
2560 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002561#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002562#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002563#include <stdint.h>
2564#include <xen/hvm/hvm_info_table.h>
2565#if !defined(HVM_MAX_VCPUS)
2566# error HVM_MAX_VCPUS not defined
2567#endif
2568int main(void) {
2569 xc_interface *xc;
2570 xs_daemon_open();
2571 xc = xc_interface_open(0, 0, 0);
2572 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2573 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002574 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002575 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002576 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002577 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002578 return 0;
2579}
2580EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002581 compile_prog "" "$xen_libs"
2582 then
2583 xen_ctrl_version=40600
2584 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002585
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002586 # Xen 4.5
2587 elif
2588 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002589#include <xenctrl.h>
2590#include <xenstore.h>
2591#include <stdint.h>
2592#include <xen/hvm/hvm_info_table.h>
2593#if !defined(HVM_MAX_VCPUS)
2594# error HVM_MAX_VCPUS not defined
2595#endif
2596int main(void) {
2597 xc_interface *xc;
2598 xs_daemon_open();
2599 xc = xc_interface_open(0, 0, 0);
2600 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2601 xc_gnttab_open(NULL, 0);
2602 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2603 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002604 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2605 return 0;
2606}
2607EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002608 compile_prog "" "$xen_libs"
2609 then
2610 xen_ctrl_version=40500
2611 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002612
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002613 elif
2614 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002615#include <xenctrl.h>
2616#include <xenstore.h>
2617#include <stdint.h>
2618#include <xen/hvm/hvm_info_table.h>
2619#if !defined(HVM_MAX_VCPUS)
2620# error HVM_MAX_VCPUS not defined
2621#endif
2622int main(void) {
2623 xc_interface *xc;
2624 xs_daemon_open();
2625 xc = xc_interface_open(0, 0, 0);
2626 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2627 xc_gnttab_open(NULL, 0);
2628 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2629 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002630 return 0;
2631}
2632EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002633 compile_prog "" "$xen_libs"
2634 then
2635 xen_ctrl_version=40200
2636 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002637
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002638 else
2639 if test "$xen" = "yes" ; then
2640 feature_not_found "xen (unsupported version)" \
2641 "Install a supported xen (xen 4.2 or newer)"
2642 fi
2643 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002644 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002645
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002646 if test "$xen" = yes; then
2647 if test $xen_ctrl_version -ge 40701 ; then
2648 libs_softmmu="$xen_stable_libs $libs_softmmu"
2649 fi
2650 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002651 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002652 fi
aliguorie37630c2009-04-22 15:19:10 +00002653fi
2654
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002655if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002656 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002657 xen_pci_passthrough=yes
2658 else
2659 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002660 error_exit "User requested feature Xen PCI Passthrough" \
2661 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002662 fi
2663 xen_pci_passthrough=no
2664 fi
2665fi
2666
Ian Campbell64a7ad62016-01-15 13:23:44 +00002667if test "$xen_pv_domain_build" = "yes" &&
2668 test "$xen" != "yes"; then
2669 error_exit "User requested Xen PV domain builder support" \
2670 "which requires Xen support."
2671fi
2672
aliguorie37630c2009-04-22 15:19:10 +00002673##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002674# Windows Hypervisor Platform accelerator (WHPX) check
2675if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002676 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002677 whpx="yes"
2678 else
2679 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002680 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002681 fi
2682 whpx="no"
2683 fi
2684fi
2685
2686##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002687# Sparse probe
2688if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002689 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002690 sparse=yes
2691 else
2692 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002693 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002694 fi
2695 sparse=no
2696 fi
2697fi
2698
2699##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002700# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002701if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002702 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002703 x11_cflags=$($pkg_config --cflags x11)
2704 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002705fi
2706
2707##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002708# GTK probe
2709
2710if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002711 gtkpackage="gtk+-3.0"
2712 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002713 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002714 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002715 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2716 gtk_libs=$($pkg_config --libs $gtkpackage)
2717 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002718 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002719 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002720 gtk_cflags="$gtk_cflags $x11_cflags"
2721 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002722 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002723 gtk="yes"
2724 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002725 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002726 else
2727 gtk="no"
2728 fi
2729fi
2730
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002731
2732##########################################
2733# GNUTLS probe
2734
2735if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002736 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002737 gnutls_cflags=$($pkg_config --cflags gnutls)
2738 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002739 libs_softmmu="$gnutls_libs $libs_softmmu"
2740 libs_tools="$gnutls_libs $libs_tools"
2741 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2742 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002743 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002744 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002745 else
2746 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002747 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002748fi
2749
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002750
2751# If user didn't give a --disable/enable-gcrypt flag,
2752# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002753# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002754if test -z "$gcrypt"
2755then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002756 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002757 then
2758 gcrypt="no"
2759 fi
2760fi
2761
2762# If user didn't give a --disable/enable-nettle flag,
2763# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002764# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002765if test -z "$nettle"
2766then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002767 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002768 then
2769 nettle="no"
2770 fi
2771fi
2772
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002773has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002774 if ! has "libgcrypt-config"
2775 then
2776 return 1
2777 fi
2778
2779 if test -n "$cross_prefix"
2780 then
Stefan Weil89138852016-05-16 15:10:20 +02002781 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002782 if test "$host-" != $cross_prefix
2783 then
2784 return 1
2785 fi
2786 fi
2787
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002788 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2789 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2790
2791 if test $maj != 1 || test $min -lt 5
2792 then
2793 return 1
2794 fi
2795
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002796 return 0
2797}
2798
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002799
2800if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002801 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002802 nettle_cflags=$($pkg_config --cflags nettle)
2803 nettle_libs=$($pkg_config --libs nettle)
2804 nettle_version=$($pkg_config --modversion nettle)
2805 libs_softmmu="$nettle_libs $libs_softmmu"
2806 libs_tools="$nettle_libs $libs_tools"
2807 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2808 nettle="yes"
2809
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002810 if test -z "$gcrypt"; then
2811 gcrypt="no"
2812 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002813 else
2814 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002815 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002816 else
2817 nettle="no"
2818 fi
2819 fi
2820fi
2821
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002822if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002823 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002824 gcrypt_cflags=$(libgcrypt-config --cflags)
2825 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002826 # Debian has remove -lgpg-error from libgcrypt-config
2827 # as it "spreads unnecessary dependencies" which in
2828 # turn breaks static builds...
2829 if test "$static" = "yes"
2830 then
2831 gcrypt_libs="$gcrypt_libs -lgpg-error"
2832 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002833 libs_softmmu="$gcrypt_libs $libs_softmmu"
2834 libs_tools="$gcrypt_libs $libs_tools"
2835 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002836 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002837
2838 cat > $TMPC << EOF
2839#include <gcrypt.h>
2840int main(void) {
2841 gcry_mac_hd_t handle;
2842 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2843 GCRY_MAC_FLAG_SECURE, NULL);
2844 return 0;
2845}
2846EOF
2847 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2848 gcrypt_hmac=yes
2849 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002850 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002851 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002852 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002853 else
2854 gcrypt="no"
2855 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002856 fi
2857fi
2858
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002859
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002860if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2861then
2862 error_exit "Only one of gcrypt & nettle can be enabled"
2863fi
2864
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002865##########################################
2866# libtasn1 - only for the TLS creds/session test suite
2867
2868tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002869tasn1_cflags=""
2870tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002871if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002872 tasn1_cflags=$($pkg_config --cflags libtasn1)
2873 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002874else
2875 tasn1=no
2876fi
2877
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002878
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002879##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002880# getifaddrs (for tests/test-io-channel-socket )
2881
2882have_ifaddrs_h=yes
2883if ! check_include "ifaddrs.h" ; then
2884 have_ifaddrs_h=no
2885fi
2886
2887##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002888# VTE probe
2889
2890if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002891 vteminversion="0.32.0"
2892 if $pkg_config --exists "vte-2.91"; then
2893 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002894 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002895 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002896 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002897 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002898 vte_cflags=$($pkg_config --cflags $vtepackage)
2899 vte_libs=$($pkg_config --libs $vtepackage)
2900 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002901 vte="yes"
2902 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002903 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002904 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002905 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002906 fi
2907fi
2908
2909##########################################
bellard11d9f692004-04-02 20:55:59 +00002910# SDL probe
2911
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002912# Look for sdl configuration program (pkg-config or sdl-config). Try
2913# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002914
Peter Xuc6093a02018-04-10 13:40:34 +08002915sdl_probe ()
2916{
2917 sdl_too_old=no
2918 if test "$sdlabi" = ""; then
2919 if $pkg_config --exists "sdl2"; then
2920 sdlabi=2.0
2921 elif $pkg_config --exists "sdl"; then
2922 sdlabi=1.2
2923 else
2924 sdlabi=2.0
2925 fi
LoĂŻc Miniera0dfd8a2010-01-28 21:15:18 +00002926 fi
bellard11d9f692004-04-02 20:55:59 +00002927
Peter Xuc6093a02018-04-10 13:40:34 +08002928 if test $sdlabi = "2.0"; then
2929 sdl_config=$sdl2_config
2930 sdlname=sdl2
2931 sdlconfigname=sdl2_config
2932 elif test $sdlabi = "1.2"; then
2933 sdlname=sdl
2934 sdlconfigname=sdl_config
2935 else
2936 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2937 fi
2938
2939 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2940 sdl_config=$sdlconfigname
2941 fi
2942
2943 if $pkg_config $sdlname --exists; then
2944 sdlconfig="$pkg_config $sdlname"
2945 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2946 elif has ${sdl_config}; then
2947 sdlconfig="$sdl_config"
2948 sdlversion=$($sdlconfig --version)
2949 else
2950 if test "$sdl" = "yes" ; then
2951 feature_not_found "sdl" "Install SDL2-devel"
2952 fi
2953 sdl=no
2954 # no need to do the rest
2955 return
2956 fi
2957 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2958 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2959 fi
2960
Juan Quintelaac119f92009-07-27 16:13:15 +02002961 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002962#include <SDL.h>
2963#undef main /* We don't want SDL to override our main() */
2964int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2965EOF
Stefan Weil89138852016-05-16 15:10:20 +02002966 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002967 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002968 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002969 if $pkg_config $sdlname --exists; then
2970 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2971 else
2972 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2973 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002974 else
Stefan Weil89138852016-05-16 15:10:20 +02002975 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002976 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002977 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002978 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002979 sdl_too_old=yes
2980 else
Peter Maydella30878e2015-08-14 16:10:52 +01002981 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002982 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002983
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002984 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002985 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002986 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002987 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2988 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002989 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002990 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002991 :
2992 else
2993 sdl=no
2994 fi
2995 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002996 else # sdl not found
2997 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002998 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002999 fi
3000 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003001 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003002}
3003
3004if test "$sdl" != "no" ; then
3005 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003006fi
bellard11d9f692004-04-02 20:55:59 +00003007
aliguori5368a422009-03-03 17:37:21 +00003008if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003009 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003010#include <SDL.h>
3011#if defined(SDL_VIDEO_DRIVER_X11)
3012#include <X11/XKBlib.h>
3013#else
3014#error No x11 support
3015#endif
3016int main(void) { return 0; }
3017EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003018 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003019 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003020 sdl_cflags="$sdl_cflags $x11_cflags"
3021 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003022 fi
aliguori5368a422009-03-03 17:37:21 +00003023fi
3024
ths8f28f3f2007-01-05 21:25:54 +00003025##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003026# RDMA needs OpenFabrics libraries
3027if test "$rdma" != "no" ; then
3028 cat > $TMPC <<EOF
3029#include <rdma/rdma_cma.h>
3030int main(void) { return 0; }
3031EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003032 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003033 if compile_prog "" "$rdma_libs" ; then
3034 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003035 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003036 else
3037 if test "$rdma" = "yes" ; then
3038 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003039 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003040 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003041 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003042 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3043 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3044 fi
3045 rdma="no"
3046 fi
3047fi
3048
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003049##########################################
3050# PVRDMA detection
3051
3052cat > $TMPC <<EOF &&
3053#include <sys/mman.h>
3054
3055int
3056main(void)
3057{
3058 char buf = 0;
3059 void *addr = &buf;
3060 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3061
3062 return 0;
3063}
3064EOF
3065
3066if test "$rdma" = "yes" ; then
3067 case "$pvrdma" in
3068 "")
3069 if compile_prog "" ""; then
3070 pvrdma="yes"
3071 else
3072 pvrdma="no"
3073 fi
3074 ;;
3075 "yes")
3076 if ! compile_prog "" ""; then
3077 error_exit "PVRDMA is not supported since mremap is not implemented"
3078 fi
3079 pvrdma="yes"
3080 ;;
3081 "no")
3082 pvrdma="no"
3083 ;;
3084 esac
3085else
3086 if test "$pvrdma" = "yes" ; then
3087 error_exit "PVRDMA requires rdma suppport"
3088 fi
3089 pvrdma="no"
3090fi
ths8d5d2d42007-08-25 01:37:51 +00003091
3092##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003093# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003094if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003095 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003096#include <sasl/sasl.h>
3097#include <stdio.h>
3098int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3099EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003100 # Assuming Cyrus-SASL installed in /usr prefix
3101 vnc_sasl_cflags=""
3102 vnc_sasl_libs="-lsasl2"
3103 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3104 vnc_sasl=yes
3105 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003106 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003107 else
3108 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003109 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003110 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003111 vnc_sasl=no
3112 fi
aliguori2f9606b2009-03-06 20:27:28 +00003113fi
3114
3115##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003116# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003117if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003118cat > $TMPC <<EOF
3119#include <stdio.h>
3120#include <jpeglib.h>
3121int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3122EOF
3123 vnc_jpeg_cflags=""
3124 vnc_jpeg_libs="-ljpeg"
3125 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3126 vnc_jpeg=yes
3127 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003128 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003129 else
3130 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003131 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003132 fi
3133 vnc_jpeg=no
3134 fi
3135fi
3136
3137##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003138# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003139if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003140cat > $TMPC <<EOF
3141//#include <stdio.h>
3142#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003143#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003144int main(void) {
3145 png_structp png_ptr;
3146 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003147 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003148}
3149EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003150 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003151 vnc_png_cflags=$($pkg_config libpng --cflags)
3152 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003153 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003154 vnc_png_cflags=""
3155 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003156 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003157 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3158 vnc_png=yes
3159 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003160 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003161 else
3162 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003163 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003164 fi
3165 vnc_png=no
3166 fi
3167fi
3168
3169##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003170# xkbcommon probe
3171if test "$xkbcommon" != "no" ; then
3172 if $pkg_config xkbcommon --exists; then
3173 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3174 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3175 xkbcommon=yes
3176 else
3177 if test "$xkbcommon" = "yes" ; then
3178 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3179 fi
3180 xkbcommon=no
3181 fi
3182fi
3183
3184##########################################
aliguori76655d62009-03-06 20:27:37 +00003185# fnmatch() probe, used for ACL routines
3186fnmatch="no"
3187cat > $TMPC << EOF
3188#include <fnmatch.h>
3189int main(void)
3190{
3191 fnmatch("foo", "foo", 0);
3192 return 0;
3193}
3194EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003195if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003196 fnmatch="yes"
3197fi
3198
3199##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003200# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003201if test "$xfs" != "no" ; then
3202 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003203#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003204#include <xfs/xfs.h>
3205int main(void)
3206{
3207 xfsctl(NULL, 0, 0, NULL);
3208 return 0;
3209}
3210EOF
3211 if compile_prog "" "" ; then
3212 xfs="yes"
3213 else
3214 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003215 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003216 fi
3217 xfs=no
3218 fi
3219fi
3220
3221##########################################
ths8a16d272008-07-19 09:56:24 +00003222# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003223if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003224 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003225 cat > $TMPC << EOF
3226#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003227int main(void)
3228{
3229 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003230 char s[] = "";
3231 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003232 return 0;
3233}
ths8a16d272008-07-19 09:56:24 +00003234EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003235 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003236 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003237 else
3238 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003239 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003240 fi
3241 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003242 fi
ths8a16d272008-07-19 09:56:24 +00003243fi
3244
3245##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003246# netmap support probe
3247# Apart from looking for netmap headers, we make sure that the host API version
3248# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3249# a minor/major version number. Minor new features will be marked with values up
3250# to 15, and if something happens that requires a change to the backend we will
3251# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003252if test "$netmap" != "no" ; then
3253 cat > $TMPC << EOF
3254#include <inttypes.h>
3255#include <net/if.h>
3256#include <net/netmap.h>
3257#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003258#if (NETMAP_API < 11) || (NETMAP_API > 15)
3259#error
3260#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003261int main(void) { return 0; }
3262EOF
3263 if compile_prog "" "" ; then
3264 netmap=yes
3265 else
3266 if test "$netmap" = "yes" ; then
3267 feature_not_found "netmap"
3268 fi
3269 netmap=no
3270 fi
3271fi
3272
3273##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003274# libcap-ng library probe
3275if test "$cap_ng" != "no" ; then
3276 cap_libs="-lcap-ng"
3277 cat > $TMPC << EOF
3278#include <cap-ng.h>
3279int main(void)
3280{
3281 capng_capability_to_name(CAPNG_EFFECTIVE);
3282 return 0;
3283}
3284EOF
3285 if compile_prog "" "$cap_libs" ; then
3286 cap_ng=yes
3287 libs_tools="$cap_libs $libs_tools"
3288 else
3289 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003290 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003291 fi
3292 cap_ng=no
3293 fi
3294fi
3295
3296##########################################
malcc2de5c92008-06-28 19:13:06 +00003297# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003298
malcc2de5c92008-06-28 19:13:06 +00003299audio_drv_probe()
3300{
3301 drv=$1
3302 hdr=$2
3303 lib=$3
3304 exp=$4
3305 cfl=$5
3306 cat > $TMPC << EOF
3307#include <$hdr>
3308int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003309EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003310 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003311 :
3312 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003313 error_exit "$drv check failed" \
3314 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003315 fi
3316}
3317
Stefan Weil89138852016-05-16 15:10:20 +02003318audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003319for drv in $audio_drv_list; do
3320 case $drv in
3321 alsa)
3322 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003323 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003324 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003325 ;;
3326
malcb8e59f12008-07-02 21:03:08 +00003327 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003328 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3329 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003330 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003331 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003332 ;;
3333
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003334 sdl)
3335 if test "$sdl" = "no"; then
3336 error_exit "sdl not found or disabled, can not use sdl audio driver"
3337 fi
3338 ;;
3339
Juan Quintela997e6902009-08-03 14:46:29 +02003340 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003341 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003342 ;;
3343
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003344 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003345 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003346 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003347 ;;
3348
3349 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003350 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003351 ;;
3352
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003353 wav)
3354 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003355 ;;
3356
malce4c63a62008-07-19 16:15:16 +00003357 *)
malc1c9b2a52008-07-19 16:57:30 +00003358 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003359 error_exit "Unknown driver '$drv' selected" \
3360 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003361 }
3362 ;;
malcc2de5c92008-06-28 19:13:06 +00003363 esac
3364done
ths8f28f3f2007-01-05 21:25:54 +00003365
balrog4d3b6f62008-02-10 16:33:14 +00003366##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003367# BrlAPI probe
3368
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003369if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003370 brlapi_libs="-lbrlapi"
3371 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003372#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003373#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003374int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3375EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003376 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003377 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003378 else
3379 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003380 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003381 fi
3382 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003383 fi
3384fi
aurel322e4d9fb2008-04-08 06:01:02 +00003385
3386##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003387# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003388if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003389 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003390 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3391 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003392 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003393 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003394 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003395 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003396 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003397 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003398#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003399#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003400#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003401int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003402 wchar_t wch = L'w';
3403 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003404 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003405 addwstr(L"wide chars\n");
3406 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003407 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003408 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003409}
balrog4d3b6f62008-02-10 16:33:14 +00003410EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003411 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003412 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003413 # Make sure we get the wide character prototypes
3414 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003415 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003416 for curses_lib in $curses_lib_list; do
3417 unset IFS
3418 if compile_prog "$curses_inc" "$curses_lib" ; then
3419 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003420 break
3421 fi
3422 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003423 if test "$curses_found" = yes ; then
3424 break
3425 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003426 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003427 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003428 if test "$curses_found" = "yes" ; then
3429 curses=yes
3430 else
3431 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003432 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003433 fi
3434 curses=no
3435 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003436fi
balrog4d3b6f62008-02-10 16:33:14 +00003437
blueswir1414f0da2008-08-15 18:20:52 +00003438##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003439# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003440if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003441 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003442 curlconfig="$pkg_config libcurl"
3443 else
3444 curlconfig=curl-config
3445 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003446 cat > $TMPC << EOF
3447#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003448int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003449EOF
Stefan Weil89138852016-05-16 15:10:20 +02003450 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3451 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003452 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003453 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003454 else
3455 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003456 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003457 fi
3458 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003459 fi
3460fi # test "$curl"
3461
3462##########################################
balrogfb599c92008-09-28 23:49:55 +00003463# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003464if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003465 cat > $TMPC << EOF
3466#include <bluetooth/bluetooth.h>
3467int main(void) { return bt_error(0); }
3468EOF
Stefan Weil89138852016-05-16 15:10:20 +02003469 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3470 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003471 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003472 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003473 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003474 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003475 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003476 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003477 fi
balroge820e3f2008-09-30 02:27:44 +00003478 bluez="no"
3479 fi
balrogfb599c92008-09-28 23:49:55 +00003480fi
3481
3482##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003483# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003484
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003485glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003486glib_modules=gthread-2.0
3487if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003488 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003489fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003490
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003491# This workaround is required due to a bug in pkg-config file for glib as it
3492# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3493
3494if test "$static" = yes -a "$mingw32" = yes; then
3495 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3496fi
3497
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003498for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003499 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003500 glib_cflags=$($pkg_config --cflags $i)
3501 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003502 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003503 LIBS="$glib_libs $LIBS"
3504 libs_qga="$glib_libs $libs_qga"
3505 else
3506 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3507 fi
3508done
3509
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003510# Sanity check that the current size_t matches the
3511# size that glib thinks it should be. This catches
3512# problems on multi-arch where people try to build
3513# 32-bit QEMU while pointing at 64-bit glib headers
3514cat > $TMPC <<EOF
3515#include <glib.h>
3516#include <unistd.h>
3517
3518#define QEMU_BUILD_BUG_ON(x) \
3519 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3520
3521int main(void) {
3522 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3523 return 0;
3524}
3525EOF
3526
Stefan Weil5919e032016-04-28 23:33:41 +02003527if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003528 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3529 "You probably need to set PKG_CONFIG_LIBDIR"\
3530 "to point to the right pkg-config files for your"\
3531 "build target"
3532fi
3533
John Snowbbbf2e02015-03-25 18:57:38 -04003534# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3535cat > $TMPC << EOF
3536#include <glib.h>
3537int main(void) { return 0; }
3538EOF
3539if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3540 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3541 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3542 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3543 fi
3544fi
3545
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003546#########################################
3547# zlib check
3548
3549if test "$zlib" != "no" ; then
3550 if $pkg_config --exists zlib; then
3551 zlib_cflags=$($pkg_config --cflags zlib)
3552 zlib_libs=$($pkg_config --libs zlib)
3553 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3554 LIBS="$zlib_libs $LIBS"
3555 else
3556 cat > $TMPC << EOF
3557#include <zlib.h>
3558int main(void) { zlibVersion(); return 0; }
3559EOF
3560 if compile_prog "" "-lz" ; then
3561 LIBS="$LIBS -lz"
3562 else
3563 error_exit "zlib check failed" \
3564 "Make sure to have the zlib libs and headers installed."
3565 fi
3566 fi
3567fi
3568
Fam Zhenge26110c2014-02-10 14:48:57 +08003569##########################################
3570# SHA command probe for modules
3571if test "$modules" = yes; then
3572 shacmd_probe="sha1sum sha1 shasum"
3573 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003574 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003575 shacmd="$c"
3576 break
3577 fi
3578 done
3579 if test "$shacmd" = ""; then
3580 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3581 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003582fi
3583
3584##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003585# pixman support probe
3586
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003587if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003588 pixman_cflags=
3589 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003590elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003591 pixman_cflags=$($pkg_config --cflags pixman-1)
3592 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003593else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003594 error_exit "pixman >= 0.21.8 not present." \
3595 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003596fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003597
3598##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003599# libmpathpersist probe
3600
3601if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003602 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003603 cat > $TMPC <<EOF
3604#include <libudev.h>
3605#include <mpath_persist.h>
3606unsigned mpath_mx_alloc_len = 1024;
3607int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003608static struct config *multipath_conf;
3609extern struct udev *udev;
3610extern struct config *get_multipath_config(void);
3611extern void put_multipath_config(struct config *conf);
3612struct udev *udev;
3613struct config *get_multipath_config(void) { return multipath_conf; }
3614void put_multipath_config(struct config *conf) { }
3615
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003616int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003617 udev = udev_new();
3618 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003619 return 0;
3620}
3621EOF
3622 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3623 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003624 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003625 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003626 # probe for the old API
3627 cat > $TMPC <<EOF
3628#include <libudev.h>
3629#include <mpath_persist.h>
3630unsigned mpath_mx_alloc_len = 1024;
3631int logsink;
3632int main(void) {
3633 struct udev *udev = udev_new();
3634 mpath_lib_init(udev);
3635 return 0;
3636}
3637EOF
3638 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3639 mpathpersist=yes
3640 mpathpersist_new_api=no
3641 else
3642 mpathpersist=no
3643 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003644 fi
3645else
3646 mpathpersist=no
3647fi
3648
3649##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303650# libcap probe
3651
3652if test "$cap" != "no" ; then
3653 cat > $TMPC <<EOF
3654#include <stdio.h>
3655#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003656int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303657EOF
3658 if compile_prog "" "-lcap" ; then
3659 cap=yes
3660 else
3661 cap=no
3662 fi
3663fi
3664
3665##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003666# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003667PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003668
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003669pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003670cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003671#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003672static void *f(void *p) { return NULL; }
3673int main(void) {
3674 pthread_t thread;
3675 pthread_create(&thread, 0, f, 0);
3676 return 0;
3677}
blueswir1414f0da2008-08-15 18:20:52 +00003678EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003679if compile_prog "" "" ; then
3680 pthread=yes
3681else
3682 for pthread_lib in $PTHREADLIBS_LIST; do
3683 if compile_prog "" "$pthread_lib" ; then
3684 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003685 found=no
3686 for lib_entry in $LIBS; do
3687 if test "$lib_entry" = "$pthread_lib"; then
3688 found=yes
3689 break
3690 fi
3691 done
3692 if test "$found" = "no"; then
3693 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003694 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003695 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003696 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003697 break
3698 fi
3699 done
3700fi
blueswir1414f0da2008-08-15 18:20:52 +00003701
Anthony Liguori4617e592009-08-25 17:21:56 -05003702if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003703 error_exit "pthread check failed" \
3704 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003705fi
3706
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003707# check for pthread_setname_np
3708pthread_setname_np=no
3709cat > $TMPC << EOF
3710#include <pthread.h>
3711
3712static void *f(void *p) { return NULL; }
3713int main(void)
3714{
3715 pthread_t thread;
3716 pthread_create(&thread, 0, f, 0);
3717 pthread_setname_np(thread, "QEMU");
3718 return 0;
3719}
3720EOF
3721if compile_prog "" "$pthread_lib" ; then
3722 pthread_setname_np=yes
3723fi
3724
aliguoribf9298b2008-12-05 20:05:26 +00003725##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003726# rbd probe
3727if test "$rbd" != "no" ; then
3728 cat > $TMPC <<EOF
3729#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003730#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003731int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003732 rados_t cluster;
3733 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003734 return 0;
3735}
3736EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003737 rbd_libs="-lrbd -lrados"
3738 if compile_prog "" "$rbd_libs" ; then
3739 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003740 else
3741 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003742 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003743 fi
3744 rbd=no
3745 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003746fi
3747
3748##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003749# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003750min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003751if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003752 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003753 libssh2_cflags=$($pkg_config libssh2 --cflags)
3754 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003755 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003756 else
3757 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003758 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003759 fi
3760 libssh2=no
3761 fi
3762fi
3763
3764##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003765# libssh2_sftp_fsync probe
3766
3767if test "$libssh2" = "yes"; then
3768 cat > $TMPC <<EOF
3769#include <stdio.h>
3770#include <libssh2.h>
3771#include <libssh2_sftp.h>
3772int main(void) {
3773 LIBSSH2_SESSION *session;
3774 LIBSSH2_SFTP *sftp;
3775 LIBSSH2_SFTP_HANDLE *sftp_handle;
3776 session = libssh2_session_init ();
3777 sftp = libssh2_sftp_init (session);
3778 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3779 libssh2_sftp_fsync (sftp_handle);
3780 return 0;
3781}
3782EOF
3783 # libssh2_cflags/libssh2_libs defined in previous test.
3784 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3785 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3786 fi
3787fi
3788
3789##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003790# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003791
3792if test "$linux_aio" != "no" ; then
3793 cat > $TMPC <<EOF
3794#include <libaio.h>
3795#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003796#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003797int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3798EOF
3799 if compile_prog "" "-laio" ; then
3800 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003801 else
3802 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003803 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003804 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003805 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003806 fi
3807fi
3808
3809##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003810# TPM passthrough is only on x86 Linux
3811
3812if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3813 tpm_passthrough=$tpm
3814else
3815 tpm_passthrough=no
3816fi
3817
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003818# TPM emulator is for all posix systems
3819if test "$mingw32" != "yes"; then
3820 tpm_emulator=$tpm
3821else
3822 tpm_emulator=no
3823fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003824##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003825# attr probe
3826
3827if test "$attr" != "no" ; then
3828 cat > $TMPC <<EOF
3829#include <stdio.h>
3830#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003831#ifdef CONFIG_LIBATTR
3832#include <attr/xattr.h>
3833#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003834#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003835#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003836int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3837EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003838 if compile_prog "" "" ; then
3839 attr=yes
3840 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003841 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003842 attr=yes
3843 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003844 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003845 else
3846 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003847 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003848 fi
3849 attr=no
3850 fi
3851fi
3852
3853##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003854# iovec probe
3855cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003856#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003857#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003858#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003859int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003860EOF
3861iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003862if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003863 iovec=yes
3864fi
3865
aurel32f652e6a2008-12-16 10:43:48 +00003866##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003867# preadv probe
3868cat > $TMPC <<EOF
3869#include <sys/types.h>
3870#include <sys/uio.h>
3871#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003872int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003873EOF
3874preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003875if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003876 preadv=yes
3877fi
3878
3879##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003880# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003881# fdt support is mandatory for at least some target architectures,
3882# so insist on it if we're building those system emulators.
3883fdt_required=no
3884for target in $target_list; do
3885 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003886 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003887 fdt_required=yes
3888 ;;
3889 esac
3890done
3891
3892if test "$fdt_required" = "yes"; then
3893 if test "$fdt" = "no"; then
3894 error_exit "fdt disabled but some requested targets require it." \
3895 "You can turn off fdt only if you also disable all the system emulation" \
3896 "targets which need it (by specifying a cut down --target-list)."
3897 fi
3898 fdt=yes
3899fi
3900
Juan Quintela2df87df2009-08-12 18:29:54 +02003901if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003902 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003903 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003904 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003905 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003906#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003907#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003908int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003909EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003910 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003911 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003912 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003913 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003914 # have GIT checkout, so activate dtc submodule
3915 if test -e "${source_path}/.git" ; then
3916 git_submodules="${git_submodules} dtc"
3917 fi
3918 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003919 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003920 mkdir -p dtc
3921 if [ "$pwd_is_source_path" != "y" ] ; then
3922 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3923 symlink "$source_path/dtc/scripts" "dtc/scripts"
3924 fi
3925 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003926 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3927 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003928 elif test "$fdt" = "yes" ; then
3929 # Not a git build & no libfdt found, prompt for system install
3930 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3931 "Please install the DTC (libfdt) devel package"
3932 else
3933 # don't have and don't want
3934 fdt_libs=
3935 fdt=no
3936 fi
aurel32f652e6a2008-12-16 10:43:48 +00003937 fi
3938fi
3939
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003940libs_softmmu="$libs_softmmu $fdt_libs"
3941
Michael Walle20ff0752011-03-07 23:32:39 +01003942##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003943# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003944
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003945if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003946 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003947 if $pkg_config $opengl_pkgs; then
3948 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3949 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003950 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003951 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3952 gtk_gl="yes"
3953 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003954 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003955 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003956 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003957 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003958 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003959 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003960 opengl_libs=""
3961 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003962 fi
3963fi
3964
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003965if test "$opengl" = "yes"; then
3966 cat > $TMPC << EOF
3967#include <epoxy/egl.h>
3968#ifndef EGL_MESA_image_dma_buf_export
3969# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3970#endif
3971int main(void) { return 0; }
3972EOF
3973 if compile_prog "" "" ; then
3974 opengl_dmabuf=yes
3975 fi
3976fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003977
Klim Kireeved279a02018-01-12 12:01:19 +03003978##########################################
3979# libxml2 probe
3980if test "$libxml2" != "no" ; then
3981 if $pkg_config --exists libxml-2.0; then
3982 libxml2="yes"
3983 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3984 libxml2_libs=$($pkg_config --libs libxml-2.0)
3985 else
3986 if test "$libxml2" = "yes"; then
3987 feature_not_found "libxml2" "Install libxml2 devel"
3988 fi
3989 libxml2="no"
3990 fi
3991fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003992
Bharata B Raoeb100392012-09-24 14:42:45 +05303993##########################################
3994# glusterfs probe
3995if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003996 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303997 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003998 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3999 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004000 if $pkg_config --atleast-version=4 glusterfs-api; then
4001 glusterfs_xlator_opt="yes"
4002 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004003 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304004 glusterfs_discard="yes"
4005 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304006 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304007 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304008 glusterfs_zerofill="yes"
4009 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304010 else
4011 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004012 feature_not_found "GlusterFS backend support" \
4013 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304014 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304015 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304016 fi
4017fi
4018
aurel3239386ac2009-04-15 19:48:17 +00004019# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004020# emulator. This is done because older glibc versions don't
4021# have syscall stubs for these implemented. In that case we
4022# don't provide them even if kernel supports them.
4023#
4024inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004025cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004026#include <sys/inotify.h>
4027
4028int
4029main(void)
4030{
4031 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004032 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004033}
4034EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004035if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004036 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004037fi
4038
Riku Voipioc05c7a72010-03-26 15:25:11 +00004039inotify1=no
4040cat > $TMPC << EOF
4041#include <sys/inotify.h>
4042
4043int
4044main(void)
4045{
4046 /* try to start inotify */
4047 return inotify_init1(0);
4048}
4049EOF
4050if compile_prog "" "" ; then
4051 inotify1=yes
4052fi
4053
Riku Voipio099d6b02009-05-05 12:10:04 +03004054# check if pipe2 is there
4055pipe2=no
4056cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004057#include <unistd.h>
4058#include <fcntl.h>
4059
4060int main(void)
4061{
4062 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004063 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004064}
4065EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004066if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004067 pipe2=yes
4068fi
4069
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004070# check if accept4 is there
4071accept4=no
4072cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004073#include <sys/socket.h>
4074#include <stddef.h>
4075
4076int main(void)
4077{
4078 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4079 return 0;
4080}
4081EOF
4082if compile_prog "" "" ; then
4083 accept4=yes
4084fi
4085
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304086# check if tee/splice is there. vmsplice was added same time.
4087splice=no
4088cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304089#include <unistd.h>
4090#include <fcntl.h>
4091#include <limits.h>
4092
4093int main(void)
4094{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004095 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304096 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4097 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4098 return 0;
4099}
4100EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004101if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304102 splice=yes
4103fi
4104
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004105##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004106# libnuma probe
4107
4108if test "$numa" != "no" ; then
4109 cat > $TMPC << EOF
4110#include <numa.h>
4111int main(void) { return numa_available(); }
4112EOF
4113
4114 if compile_prog "" "-lnuma" ; then
4115 numa=yes
4116 libs_softmmu="-lnuma $libs_softmmu"
4117 else
4118 if test "$numa" = "yes" ; then
4119 feature_not_found "numa" "install numactl devel"
4120 fi
4121 numa=no
4122 fi
4123fi
4124
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004125if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4126 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4127 exit 1
4128fi
4129
Yang Zhong5a22ab72017-12-20 21:16:46 +08004130# Even if malloc_trim() is available, these non-libc memory allocators
4131# do not support it.
4132if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4133 if test "$malloc_trim" = "yes" ; then
4134 echo "Disabling malloc_trim with non-libc memory allocator"
4135 fi
4136 malloc_trim="no"
4137fi
4138
4139#######################################
4140# malloc_trim
4141
4142if test "$malloc_trim" != "no" ; then
4143 cat > $TMPC << EOF
4144#include <malloc.h>
4145int main(void) { malloc_trim(0); return 0; }
4146EOF
4147 if compile_prog "" "" ; then
4148 malloc_trim="yes"
4149 else
4150 malloc_trim="no"
4151 fi
4152fi
4153
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004154##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004155# tcmalloc probe
4156
4157if test "$tcmalloc" = "yes" ; then
4158 cat > $TMPC << EOF
4159#include <stdlib.h>
4160int main(void) { malloc(1); return 0; }
4161EOF
4162
4163 if compile_prog "" "-ltcmalloc" ; then
4164 LIBS="-ltcmalloc $LIBS"
4165 else
4166 feature_not_found "tcmalloc" "install gperftools devel"
4167 fi
4168fi
4169
4170##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004171# jemalloc probe
4172
4173if test "$jemalloc" = "yes" ; then
4174 cat > $TMPC << EOF
4175#include <stdlib.h>
4176int main(void) { malloc(1); return 0; }
4177EOF
4178
4179 if compile_prog "" "-ljemalloc" ; then
4180 LIBS="-ljemalloc $LIBS"
4181 else
4182 feature_not_found "jemalloc" "install jemalloc devel"
4183 fi
4184fi
4185
4186##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004187# signalfd probe
4188signalfd="no"
4189cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004190#include <unistd.h>
4191#include <sys/syscall.h>
4192#include <signal.h>
4193int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4194EOF
4195
4196if compile_prog "" "" ; then
4197 signalfd=yes
4198fi
4199
Riku Voipioc2882b92009-08-12 15:08:24 +03004200# check if eventfd is supported
4201eventfd=no
4202cat > $TMPC << EOF
4203#include <sys/eventfd.h>
4204
4205int main(void)
4206{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004207 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004208}
4209EOF
4210if compile_prog "" "" ; then
4211 eventfd=yes
4212fi
4213
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004214# check if memfd is supported
4215memfd=no
4216cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004217#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004218
4219int main(void)
4220{
4221 return memfd_create("foo", MFD_ALLOW_SEALING);
4222}
4223EOF
4224if compile_prog "" "" ; then
4225 memfd=yes
4226fi
4227
Cortland Tölva955727d2018-10-08 09:35:19 -07004228# check for usbfs
4229have_usbfs=no
4230if test "$linux_user" = "yes"; then
4231 if check_include linux/usbdevice_fs.h; then
4232 have_usbfs=yes
4233 fi
4234 have_usbfs=yes
4235fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004236
Ulrich Hechtd0927932009-09-17 20:22:14 +03004237# check for fallocate
4238fallocate=no
4239cat > $TMPC << EOF
4240#include <fcntl.h>
4241
4242int main(void)
4243{
4244 fallocate(0, 0, 0, 0);
4245 return 0;
4246}
4247EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004248if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004249 fallocate=yes
4250fi
4251
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004252# check for fallocate hole punching
4253fallocate_punch_hole=no
4254cat > $TMPC << EOF
4255#include <fcntl.h>
4256#include <linux/falloc.h>
4257
4258int main(void)
4259{
4260 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4261 return 0;
4262}
4263EOF
4264if compile_prog "" "" ; then
4265 fallocate_punch_hole=yes
4266fi
4267
Denis V. Lunevb953f072015-01-30 11:42:14 +03004268# check that fallocate supports range zeroing inside the file
4269fallocate_zero_range=no
4270cat > $TMPC << EOF
4271#include <fcntl.h>
4272#include <linux/falloc.h>
4273
4274int main(void)
4275{
4276 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4277 return 0;
4278}
4279EOF
4280if compile_prog "" "" ; then
4281 fallocate_zero_range=yes
4282fi
4283
Kevin Wolfed911432014-09-29 17:12:59 +02004284# check for posix_fallocate
4285posix_fallocate=no
4286cat > $TMPC << EOF
4287#include <fcntl.h>
4288
4289int main(void)
4290{
4291 posix_fallocate(0, 0, 0);
4292 return 0;
4293}
4294EOF
4295if compile_prog "" "" ; then
4296 posix_fallocate=yes
4297fi
4298
Peter Maydellc727f472011-01-06 11:05:10 +00004299# check for sync_file_range
4300sync_file_range=no
4301cat > $TMPC << EOF
4302#include <fcntl.h>
4303
4304int main(void)
4305{
4306 sync_file_range(0, 0, 0, 0);
4307 return 0;
4308}
4309EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004310if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004311 sync_file_range=yes
4312fi
4313
Peter Maydelldace20d2011-01-10 13:11:24 +00004314# check for linux/fiemap.h and FS_IOC_FIEMAP
4315fiemap=no
4316cat > $TMPC << EOF
4317#include <sys/ioctl.h>
4318#include <linux/fs.h>
4319#include <linux/fiemap.h>
4320
4321int main(void)
4322{
4323 ioctl(0, FS_IOC_FIEMAP, 0);
4324 return 0;
4325}
4326EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004327if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004328 fiemap=yes
4329fi
4330
Ulrich Hechtd0927932009-09-17 20:22:14 +03004331# check for dup3
4332dup3=no
4333cat > $TMPC << EOF
4334#include <unistd.h>
4335
4336int main(void)
4337{
4338 dup3(0, 0, 0);
4339 return 0;
4340}
4341EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004342if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004343 dup3=yes
4344fi
4345
Alex Bligh4e0c6522013-08-21 16:02:43 +01004346# check for ppoll support
4347ppoll=no
4348cat > $TMPC << EOF
4349#include <poll.h>
4350
4351int main(void)
4352{
4353 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4354 ppoll(&pfd, 1, 0, 0);
4355 return 0;
4356}
4357EOF
4358if compile_prog "" "" ; then
4359 ppoll=yes
4360fi
4361
Alex Blighcd758dd2013-08-21 16:02:44 +01004362# check for prctl(PR_SET_TIMERSLACK , ... ) support
4363prctl_pr_set_timerslack=no
4364cat > $TMPC << EOF
4365#include <sys/prctl.h>
4366
4367int main(void)
4368{
4369 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4370 return 0;
4371}
4372EOF
4373if compile_prog "" "" ; then
4374 prctl_pr_set_timerslack=yes
4375fi
4376
Peter Maydell3b6edd12011-02-15 18:35:05 +00004377# check for epoll support
4378epoll=no
4379cat > $TMPC << EOF
4380#include <sys/epoll.h>
4381
4382int main(void)
4383{
4384 epoll_create(0);
4385 return 0;
4386}
4387EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004388if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004389 epoll=yes
4390fi
4391
Peter Maydell227f0212016-06-06 19:58:11 +01004392# epoll_create1 is a later addition
4393# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004394epoll_create1=no
4395cat > $TMPC << EOF
4396#include <sys/epoll.h>
4397
4398int main(void)
4399{
Peter Maydell19e83f62011-04-26 16:56:40 +01004400 /* Note that we use epoll_create1 as a value, not as
4401 * a function being called. This is necessary so that on
4402 * old SPARC glibc versions where the function was present in
4403 * the library but not declared in the header file we will
4404 * fail the configure check. (Otherwise we will get a compiler
4405 * warning but not an error, and will proceed to fail the
4406 * qemu compile where we compile with -Werror.)
4407 */
Blue Swirlc075a722012-08-09 20:21:25 +00004408 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004409}
4410EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004411if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004412 epoll_create1=yes
4413fi
4414
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004415# check for sendfile support
4416sendfile=no
4417cat > $TMPC << EOF
4418#include <sys/sendfile.h>
4419
4420int main(void)
4421{
4422 return sendfile(0, 0, 0, 0);
4423}
4424EOF
4425if compile_prog "" "" ; then
4426 sendfile=yes
4427fi
4428
Riku Voipio51834342014-06-22 11:25:42 +01004429# check for timerfd support (glibc 2.8 and newer)
4430timerfd=no
4431cat > $TMPC << EOF
4432#include <sys/timerfd.h>
4433
4434int main(void)
4435{
4436 return(timerfd_create(CLOCK_REALTIME, 0));
4437}
4438EOF
4439if compile_prog "" "" ; then
4440 timerfd=yes
4441fi
4442
Riku Voipio9af5c902014-08-12 15:58:57 +03004443# check for setns and unshare support
4444setns=no
4445cat > $TMPC << EOF
4446#include <sched.h>
4447
4448int main(void)
4449{
4450 int ret;
4451 ret = setns(0, 0);
4452 ret = unshare(0);
4453 return ret;
4454}
4455EOF
4456if compile_prog "" "" ; then
4457 setns=yes
4458fi
4459
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004460# clock_adjtime probe
4461clock_adjtime=no
4462cat > $TMPC <<EOF
4463#include <time.h>
4464
4465int main(void)
4466{
4467 return clock_adjtime(0, 0);
4468}
4469EOF
4470clock_adjtime=no
4471if compile_prog "" "" ; then
4472 clock_adjtime=yes
4473fi
4474
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004475# syncfs probe
4476syncfs=no
4477cat > $TMPC <<EOF
4478#include <unistd.h>
4479
4480int main(void)
4481{
4482 return syncfs(0);
4483}
4484EOF
4485syncfs=no
4486if compile_prog "" "" ; then
4487 syncfs=yes
4488fi
4489
pbrookcc8ae6d2006-04-23 17:57:59 +00004490# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004491if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004492 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004493 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004494 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004495 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004496 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004497 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004498 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004499 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004500fi
4501
Stefan Weilf514f412009-10-11 12:44:07 +02004502# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004503byteswap_h=no
4504cat > $TMPC << EOF
4505#include <byteswap.h>
4506int main(void) { return bswap_32(0); }
4507EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004508if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004509 byteswap_h=yes
4510fi
4511
Stefan Weil75f13592013-01-05 12:17:38 +01004512# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004513bswap_h=no
4514cat > $TMPC << EOF
4515#include <sys/endian.h>
4516#include <sys/types.h>
4517#include <machine/bswap.h>
4518int main(void) { return bswap32(0); }
4519EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004520if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004521 bswap_h=yes
4522fi
4523
aliguorida93a1f2008-12-12 20:02:52 +00004524##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004525# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004526if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004527 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004528 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004529 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4530 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004531 else
4532 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004533 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004534 fi
4535 libiscsi="no"
4536 fi
4537fi
4538
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004539##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004540# Do we need libm
4541cat > $TMPC << EOF
4542#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004543int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004544EOF
4545if compile_prog "" "" ; then
4546 :
4547elif compile_prog "" "-lm" ; then
4548 LIBS="-lm $LIBS"
4549 libs_qga="-lm $libs_qga"
4550else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004551 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004552fi
4553
4554##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004555# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004556# uClibc provides 2 versions of clock_gettime(), one with realtime
4557# support and one without. This means that the clock_gettime() don't
4558# need -lrt. We still need it for timer_create() so we check for this
4559# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004560cat > $TMPC <<EOF
4561#include <signal.h>
4562#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004563int main(void) {
4564 timer_create(CLOCK_REALTIME, NULL, NULL);
4565 return clock_gettime(CLOCK_REALTIME, NULL);
4566}
aliguorida93a1f2008-12-12 20:02:52 +00004567EOF
4568
Juan Quintela52166aa2009-08-03 14:46:03 +02004569if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004570 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004571# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004572elif compile_prog "" "$pthread_lib -lrt" ; then
4573 LIBS="$LIBS -lrt"
4574 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004575fi
4576
Blue Swirl31ff5042009-09-12 12:33:07 +00004577if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004578 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004579 libs_softmmu="-lutil $libs_softmmu"
4580fi
4581
Blue Swirlde5071c2009-09-12 09:58:46 +00004582##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004583# spice probe
4584if test "$spice" != "no" ; then
4585 cat > $TMPC << EOF
4586#include <spice.h>
4587int main(void) { spice_server_new(); return 0; }
4588EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004589 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4590 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004591 if $pkg_config --atleast-version=0.12.0 spice-server && \
4592 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004593 compile_prog "$spice_cflags" "$spice_libs" ; then
4594 spice="yes"
4595 libs_softmmu="$libs_softmmu $spice_libs"
4596 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004597 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4598 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004599 else
4600 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004601 feature_not_found "spice" \
4602 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004603 fi
4604 spice="no"
4605 fi
4606fi
4607
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004608# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004609if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004610 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004611 libcacard_cflags=$($pkg_config --cflags libcacard)
4612 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004613 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004614 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004615 if test "$smartcard" = "yes"; then
4616 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004617 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004618 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004619 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004620fi
4621
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004622# check for libusb
4623if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004624 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004625 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004626 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4627 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004628 else
4629 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004630 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004631 fi
4632 libusb="no"
4633 fi
4634fi
4635
Hans de Goede69354a82011-07-19 11:04:10 +02004636# check for usbredirparser for usb network redirection support
4637if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004638 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004639 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004640 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4641 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004642 else
4643 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004644 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004645 fi
4646 usb_redir="no"
4647 fi
4648fi
4649
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004650##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004651# check if we have VSS SDK headers for win
4652
4653if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4654 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004655 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004656 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4657 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004658 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004659 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4660 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004661 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004662 esac
4663 cat > $TMPC << EOF
4664#define __MIDL_user_allocate_free_DEFINED__
4665#include <inc/win2003/vss.h>
4666int main(void) { return VSS_CTX_BACKUP; }
4667EOF
4668 if compile_prog "$vss_win32_include" "" ; then
4669 guest_agent_with_vss="yes"
4670 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004671 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004672 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004673 else
4674 if test "$vss_win32_sdk" != "" ; then
4675 echo "ERROR: Please download and install Microsoft VSS SDK:"
4676 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4677 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4678 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4679 echo "ERROR: The headers are extracted in the directory \`inc'."
4680 feature_not_found "VSS support"
4681 fi
4682 guest_agent_with_vss="no"
4683 fi
4684fi
4685
4686##########################################
4687# lookup Windows platform SDK (if not specified)
4688# The SDK is needed only to build .tlb (type library) file of guest agent
4689# VSS provider from the source. It is usually unnecessary because the
4690# pre-compiled .tlb file is included.
4691
4692if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4693 if test -z "$win_sdk"; then
4694 programfiles="$PROGRAMFILES"
4695 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4696 if test -n "$programfiles"; then
4697 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4698 else
4699 feature_not_found "Windows SDK"
4700 fi
4701 elif test "$win_sdk" = "no"; then
4702 win_sdk=""
4703 fi
4704fi
4705
4706##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004707# check if mingw environment provides a recent ntddscsi.h
4708if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4709 cat > $TMPC << EOF
4710#include <windows.h>
4711#include <ntddscsi.h>
4712int main(void) {
4713#if !defined(IOCTL_SCSI_GET_ADDRESS)
4714#error Missing required ioctl definitions
4715#endif
4716 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4717 return addr.Lun;
4718}
4719EOF
4720 if compile_prog "" "" ; then
4721 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004722 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004723 fi
4724fi
4725
4726##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004727# virgl renderer probe
4728
4729if test "$virglrenderer" != "no" ; then
4730 cat > $TMPC << EOF
4731#include <virglrenderer.h>
4732int main(void) { virgl_renderer_poll(); return 0; }
4733EOF
4734 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4735 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004736 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004737 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4738 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4739 virglrenderer="yes"
4740 else
4741 if test "$virglrenderer" = "yes" ; then
4742 feature_not_found "virglrenderer"
4743 fi
4744 virglrenderer="no"
4745 fi
4746fi
4747
4748##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004749# capstone
4750
Richard Hendersone219c492017-09-28 09:01:23 -07004751case "$capstone" in
4752 "" | yes)
4753 if $pkg_config capstone; then
4754 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004755 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004756 capstone=git
4757 elif test -e "${source_path}/capstone/Makefile" ; then
4758 capstone=internal
4759 elif test -z "$capstone" ; then
4760 capstone=no
4761 else
4762 feature_not_found "capstone" "Install capstone devel or git submodule"
4763 fi
4764 ;;
4765
4766 system)
4767 if ! $pkg_config capstone; then
4768 feature_not_found "capstone" "Install capstone devel"
4769 fi
4770 ;;
4771esac
4772
4773case "$capstone" in
4774 git | internal)
4775 if test "$capstone" = git; then
4776 git_submodules="${git_submodules} capstone"
4777 fi
4778 mkdir -p capstone
4779 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4780 if test "$mingw32" = "yes"; then
4781 LIBCAPSTONE=capstone.lib
4782 else
4783 LIBCAPSTONE=libcapstone.a
4784 fi
4785 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4786 ;;
4787
4788 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004789 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4790 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004791 ;;
4792
4793 no)
4794 ;;
4795 *)
4796 error_exit "Unknown state for capstone: $capstone"
4797 ;;
4798esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004799
4800##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004801# check if we have fdatasync
4802
4803fdatasync=no
4804cat > $TMPC << EOF
4805#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004806int main(void) {
4807#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4808return fdatasync(0);
4809#else
Stefan Weile172fe12012-04-06 21:33:20 +02004810#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004811#endif
4812}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004813EOF
4814if compile_prog "" "" ; then
4815 fdatasync=yes
4816fi
4817
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004818##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004819# check if we have madvise
4820
4821madvise=no
4822cat > $TMPC << EOF
4823#include <sys/types.h>
4824#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004825#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004826int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4827EOF
4828if compile_prog "" "" ; then
4829 madvise=yes
4830fi
4831
4832##########################################
4833# check if we have posix_madvise
4834
4835posix_madvise=no
4836cat > $TMPC << EOF
4837#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004838#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004839int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4840EOF
4841if compile_prog "" "" ; then
4842 posix_madvise=yes
4843fi
4844
4845##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004846# check if we have posix_memalign()
4847
4848posix_memalign=no
4849cat > $TMPC << EOF
4850#include <stdlib.h>
4851int main(void) {
4852 void *p;
4853 return posix_memalign(&p, 8, 8);
4854}
4855EOF
4856if compile_prog "" "" ; then
4857 posix_memalign=yes
4858fi
4859
4860##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004861# check if we have posix_syslog
4862
4863posix_syslog=no
4864cat > $TMPC << EOF
4865#include <syslog.h>
4866int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4867EOF
4868if compile_prog "" "" ; then
4869 posix_syslog=yes
4870fi
4871
4872##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004873# check if we have sem_timedwait
4874
4875sem_timedwait=no
4876cat > $TMPC << EOF
4877#include <semaphore.h>
4878int main(void) { return sem_timedwait(0, 0); }
4879EOF
4880if compile_prog "" "" ; then
4881 sem_timedwait=yes
4882fi
4883
4884##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004885# check if we have strchrnul
4886
4887strchrnul=no
4888cat > $TMPC << EOF
4889#include <string.h>
4890int main(void);
4891// Use a haystack that the compiler shouldn't be able to constant fold
4892char *haystack = (char*)&main;
4893int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4894EOF
4895if compile_prog "" "" ; then
4896 strchrnul=yes
4897fi
4898
4899##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004900# check if trace backend exists
4901
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004902$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004903if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004904 error_exit "invalid trace backends" \
4905 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004906fi
4907
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004908##########################################
4909# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004910if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004911 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004912#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004913int main(void) { return 0; }
4914EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004915 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004916 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004917 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004918 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004919 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004920 fi
4921 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004922 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004923 else
4924 urcu_bp_libs="-lurcu-bp"
4925 fi
4926
4927 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4928 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004929 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004930 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004931 fi
4932fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004933
4934##########################################
4935# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004936if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004937 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004938 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004939 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004940 trace_backend_stap="no"
4941 if has 'stap' ; then
4942 trace_backend_stap="yes"
4943 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004944fi
4945
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004946##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004947# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304948
Peter Maydell7c2acc72013-04-08 12:11:27 +01004949# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004950# is sigcontext. On Windows the only valid backend is the Windows
4951# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004952
4953ucontext_works=no
4954if test "$darwin" != "yes"; then
4955 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304956#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004957#ifdef __stub_makecontext
4958#error Ignoring glibc stub makecontext which will always fail
4959#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004960int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304961EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004962 if compile_prog "" "" ; then
4963 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304964 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004965fi
4966
4967if test "$coroutine" = ""; then
4968 if test "$mingw32" = "yes"; then
4969 coroutine=win32
4970 elif test "$ucontext_works" = "yes"; then
4971 coroutine=ucontext
4972 else
4973 coroutine=sigaltstack
4974 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004975else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004976 case $coroutine in
4977 windows)
4978 if test "$mingw32" != "yes"; then
4979 error_exit "'windows' coroutine backend only valid for Windows"
4980 fi
4981 # Unfortunately the user visible backend name doesn't match the
4982 # coroutine-*.c filename for this case, so we have to adjust it here.
4983 coroutine=win32
4984 ;;
4985 ucontext)
4986 if test "$ucontext_works" != "yes"; then
4987 feature_not_found "ucontext"
4988 fi
4989 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004990 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004991 if test "$mingw32" = "yes"; then
4992 error_exit "only the 'windows' coroutine backend is valid for Windows"
4993 fi
4994 ;;
4995 *)
4996 error_exit "unknown coroutine backend $coroutine"
4997 ;;
4998 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304999fi
5000
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005001if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005002 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005003fi
5004
Peter Lieven7d992e42016-09-27 11:58:45 +02005005if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005006 if test "$coroutine_pool" = "yes"; then
5007 echo "WARN: disabling coroutine pool for stack usage debugging"
5008 coroutine_pool=no
5009 fi
5010fi
5011
5012
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305013##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305014# check if we have open_by_handle_at
5015
Stefan Weil4e1797f2012-06-18 22:11:06 +02005016open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305017cat > $TMPC << EOF
5018#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005019#if !defined(AT_EMPTY_PATH)
5020# error missing definition
5021#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005022int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005023#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305024EOF
5025if compile_prog "" "" ; then
5026 open_by_handle_at=yes
5027fi
5028
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305029########################################
5030# check if we have linux/magic.h
5031
5032linux_magic_h=no
5033cat > $TMPC << EOF
5034#include <linux/magic.h>
5035int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005036 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305037}
5038EOF
5039if compile_prog "" "" ; then
5040 linux_magic_h=yes
5041fi
5042
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005043########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005044# check whether we can disable warning option with a pragma (this is needed
5045# to silence warnings in the headers of some versions of external libraries).
5046# This test has to be compiled with -Werror as otherwise an unknown pragma is
5047# only a warning.
5048#
5049# If we can't selectively disable warning in the code, disable -Werror so that
5050# the build doesn't fail anyway.
5051
Peter Maydell06d71fa2012-07-30 16:13:07 +01005052pragma_disable_unused_but_set=no
5053cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005054#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005055#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005056#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005057
Peter Maydell06d71fa2012-07-30 16:13:07 +01005058int main(void) {
5059 return 0;
5060}
5061EOF
5062if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005063 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005064else
5065 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005066fi
5067
5068########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005069# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005070
5071valgrind_h=no
5072cat > $TMPC << EOF
5073#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005074int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005075 return 0;
5076}
5077EOF
5078if compile_prog "" "" ; then
5079 valgrind_h=yes
5080fi
5081
5082########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005083# check if environ is declared
5084
5085has_environ=no
5086cat > $TMPC << EOF
5087#include <unistd.h>
5088int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005089 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005090 return 0;
5091}
5092EOF
5093if compile_prog "" "" ; then
5094 has_environ=yes
5095fi
5096
Richard Henderson76a347e2012-12-28 14:17:02 -08005097########################################
5098# check if cpuid.h is usable.
5099
Richard Henderson76a347e2012-12-28 14:17:02 -08005100cat > $TMPC << EOF
5101#include <cpuid.h>
5102int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005103 unsigned a, b, c, d;
5104 int max = __get_cpuid_max(0, 0);
5105
5106 if (max >= 1) {
5107 __cpuid(1, a, b, c, d);
5108 }
5109
5110 if (max >= 7) {
5111 __cpuid_count(7, 0, a, b, c, d);
5112 }
5113
5114 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005115}
5116EOF
5117if compile_prog "" "" ; then
5118 cpuid_h=yes
5119fi
5120
Richard Henderson5dd89902017-07-18 18:40:18 -10005121##########################################
5122# avx2 optimization requirement check
5123#
5124# There is no point enabling this if cpuid.h is not usable,
5125# since we won't be able to select the new routines.
5126
Liam Merwick86583a02018-10-19 21:38:59 +01005127if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005128 cat > $TMPC << EOF
5129#pragma GCC push_options
5130#pragma GCC target("avx2")
5131#include <cpuid.h>
5132#include <immintrin.h>
5133static int bar(void *a) {
5134 __m256i x = *(__m256i *)a;
5135 return _mm256_testz_si256(x, x);
5136}
5137int main(int argc, char *argv[]) { return bar(argv[0]); }
5138EOF
5139 if compile_object "" ; then
5140 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005141 else
5142 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005143 fi
5144fi
5145
Richard Hendersonf5401662013-02-16 12:46:59 -08005146########################################
5147# check if __[u]int128_t is usable.
5148
5149int128=no
5150cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01005151#if defined(__clang_major__) && defined(__clang_minor__)
5152# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5153# error __int128_t does not work in CLANG before 3.2
5154# endif
5155#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08005156__int128_t a;
5157__uint128_t b;
5158int main (void) {
5159 a = a + b;
5160 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005161 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005162 return 0;
5163}
5164EOF
5165if compile_prog "" "" ; then
5166 int128=yes
5167fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005168
Richard Henderson7ebee432016-06-29 21:10:59 -07005169#########################################
5170# See if 128-bit atomic operations are supported.
5171
5172atomic128=no
5173if test "$int128" = "yes"; then
5174 cat > $TMPC << EOF
5175int main(void)
5176{
5177 unsigned __int128 x = 0, y = 0;
5178 y = __atomic_load_16(&x, 0);
5179 __atomic_store_16(&x, y, 0);
5180 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5181 return 0;
5182}
5183EOF
5184 if compile_prog "" "" ; then
5185 atomic128=yes
5186 fi
5187fi
5188
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005189cmpxchg128=no
5190if test "$int128" = yes -a "$atomic128" = no; then
5191 cat > $TMPC << EOF
5192int main(void)
5193{
5194 unsigned __int128 x = 0, y = 0;
5195 __sync_val_compare_and_swap_16(&x, y, x);
5196 return 0;
5197}
5198EOF
5199 if compile_prog "" "" ; then
5200 cmpxchg128=yes
5201 fi
5202fi
5203
Richard Hendersondf79b992016-09-02 12:23:57 -07005204#########################################
5205# See if 64-bit atomic operations are supported.
5206# Note that without __atomic builtins, we can only
5207# assume atomic loads/stores max at pointer size.
5208
5209cat > $TMPC << EOF
5210#include <stdint.h>
5211int main(void)
5212{
5213 uint64_t x = 0, y = 0;
5214#ifdef __ATOMIC_RELAXED
5215 y = __atomic_load_8(&x, 0);
5216 __atomic_store_8(&x, y, 0);
5217 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5218 __atomic_exchange_8(&x, y, 0);
5219 __atomic_fetch_add_8(&x, y, 0);
5220#else
5221 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5222 __sync_lock_test_and_set(&x, y);
5223 __sync_val_compare_and_swap(&x, y, 0);
5224 __sync_fetch_and_add(&x, y);
5225#endif
5226 return 0;
5227}
5228EOF
5229if compile_prog "" "" ; then
5230 atomic64=yes
5231fi
5232
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005233########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005234# See if 16-byte vector operations are supported.
5235# Even without a vector unit the compiler may expand these.
5236# There is a bug in old GCC for PPC that crashes here.
5237# Unfortunately it's the system compiler for Centos 7.
5238
5239cat > $TMPC << EOF
5240typedef unsigned char U1 __attribute__((vector_size(16)));
5241typedef unsigned short U2 __attribute__((vector_size(16)));
5242typedef unsigned int U4 __attribute__((vector_size(16)));
5243typedef unsigned long long U8 __attribute__((vector_size(16)));
5244typedef signed char S1 __attribute__((vector_size(16)));
5245typedef signed short S2 __attribute__((vector_size(16)));
5246typedef signed int S4 __attribute__((vector_size(16)));
5247typedef signed long long S8 __attribute__((vector_size(16)));
5248static U1 a1, b1;
5249static U2 a2, b2;
5250static U4 a4, b4;
5251static U8 a8, b8;
5252static S1 c1;
5253static S2 c2;
5254static S4 c4;
5255static S8 c8;
5256static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005257void helper(void *d, void *a, int shift, int i);
5258void helper(void *d, void *a, int shift, int i)
5259{
5260 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5261 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5262 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5263 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5264}
Richard Hendersondb432672017-09-15 14:11:45 -07005265int main(void)
5266{
5267 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5268 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5269 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5270 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5271 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5272 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5273 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5274 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5275 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5276 return 0;
5277}
5278EOF
5279
5280vector16=no
5281if compile_prog "" "" ; then
5282 vector16=yes
5283fi
5284
5285########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005286# check if getauxval is available.
5287
5288getauxval=no
5289cat > $TMPC << EOF
5290#include <sys/auxv.h>
5291int main(void) {
5292 return getauxval(AT_HWCAP) == 0;
5293}
5294EOF
5295if compile_prog "" "" ; then
5296 getauxval=yes
5297fi
5298
John Snowfd0e6052015-03-25 18:57:39 -04005299########################################
5300# check if ccache is interfering with
5301# semantic analysis of macros
5302
John Snow5e4dfd32015-10-28 13:56:40 -04005303unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005304ccache_cpp2=no
5305cat > $TMPC << EOF
5306static const int Z = 1;
5307#define fn() ({ Z; })
5308#define TAUT(X) ((X) == Z)
5309#define PAREN(X, Y) (X == Y)
5310#define ID(X) (X)
5311int main(int argc, char *argv[])
5312{
5313 int x = 0, y = 0;
5314 x = ID(x);
5315 x = fn();
5316 fn();
5317 if (PAREN(x, y)) return 0;
5318 if (TAUT(Z)) return 0;
5319 return 0;
5320}
5321EOF
5322
5323if ! compile_object "-Werror"; then
5324 ccache_cpp2=yes
5325fi
5326
John Snowb553a042015-11-03 15:43:42 -05005327#################################################
5328# clang does not support glibc + FORTIFY_SOURCE.
5329
5330if test "$fortify_source" != "no"; then
5331 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5332 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005333 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005334 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005335 fortify_source="no";
5336 else
5337 fortify_source="yes"
5338 fi
5339fi
5340
Fam Zheng1efad062018-06-01 17:26:43 +08005341###############################################
5342# Check if copy_file_range is provided by glibc
5343have_copy_file_range=no
5344cat > $TMPC << EOF
5345#include <unistd.h>
5346int main(void) {
5347 copy_file_range(0, NULL, 0, NULL, 0, 0);
5348 return 0;
5349}
5350EOF
5351if compile_prog "" "" ; then
5352 have_copy_file_range=yes
5353fi
5354
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305355##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005356# check if struct fsxattr is available via linux/fs.h
5357
5358have_fsxattr=no
5359cat > $TMPC << EOF
5360#include <linux/fs.h>
5361struct fsxattr foo;
5362int main(void) {
5363 return 0;
5364}
5365EOF
5366if compile_prog "" "" ; then
5367 have_fsxattr=yes
5368fi
5369
Peter Maydellb66e10e2016-06-08 18:34:32 +01005370##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005371# check for usable membarrier system call
5372if test "$membarrier" = "yes"; then
5373 have_membarrier=no
5374 if test "$mingw32" = "yes" ; then
5375 have_membarrier=yes
5376 elif test "$linux" = "yes" ; then
5377 cat > $TMPC << EOF
5378 #include <linux/membarrier.h>
5379 #include <sys/syscall.h>
5380 #include <unistd.h>
5381 #include <stdlib.h>
5382 int main(void) {
5383 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5384 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5385 exit(0);
5386 }
5387EOF
5388 if compile_prog "" "" ; then
5389 have_membarrier=yes
5390 fi
5391 fi
5392 if test "$have_membarrier" = "no"; then
5393 feature_not_found "membarrier" "membarrier system call not available"
5394 fi
5395else
5396 # Do not enable it by default even for Mingw32, because it doesn't
5397 # work on Wine.
5398 membarrier=no
5399fi
5400
5401##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005402# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005403have_rtnetlink=no
5404cat > $TMPC << EOF
5405#include <linux/rtnetlink.h>
5406int main(void) {
5407 return IFLA_PROTO_DOWN;
5408}
5409EOF
5410if compile_prog "" "" ; then
5411 have_rtnetlink=yes
5412fi
5413
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005414##########################################
5415# check for usable AF_VSOCK environment
5416have_af_vsock=no
5417cat > $TMPC << EOF
5418#include <errno.h>
5419#include <sys/types.h>
5420#include <sys/socket.h>
5421#if !defined(AF_VSOCK)
5422# error missing AF_VSOCK flag
5423#endif
5424#include <linux/vm_sockets.h>
5425int main(void) {
5426 int sock, ret;
5427 struct sockaddr_vm svm;
5428 socklen_t len = sizeof(svm);
5429 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5430 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5431 if ((ret == -1) && (errno == ENOTCONN)) {
5432 return 0;
5433 }
5434 return -1;
5435}
5436EOF
5437if compile_prog "" "" ; then
5438 have_af_vsock=yes
5439fi
5440
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005441##########################################
5442# check for usable AF_ALG environment
5443hava_afalg=no
5444cat > $TMPC << EOF
5445#include <errno.h>
5446#include <sys/types.h>
5447#include <sys/socket.h>
5448#include <linux/if_alg.h>
5449int main(void) {
5450 int sock;
5451 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5452 return sock;
5453}
5454EOF
5455if compile_prog "" "" ; then
5456 have_afalg=yes
5457fi
5458if test "$crypto_afalg" = "yes"
5459then
5460 if test "$have_afalg" != "yes"
5461 then
5462 error_exit "AF_ALG requested but could not be detected"
5463 fi
5464fi
5465
5466
James Clarke6969ec62016-06-06 12:02:50 +01005467#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005468# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005469if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005470 cat > $TMPC << EOF
5471#include <Hypervisor/hv.h>
5472int main() { return 0;}
5473EOF
5474 if ! compile_object ""; then
5475 hvf='no'
5476 else
5477 hvf='yes'
5478 LDFLAGS="-framework Hypervisor $LDFLAGS"
5479 fi
5480fi
5481
5482#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005483# Sparc implicitly links with --relax, which is
5484# incompatible with -r, so --no-relax should be
5485# given. It does no harm to give it on other
5486# platforms too.
5487
5488# Note: the prototype is needed since QEMU_CFLAGS
5489# contains -Wmissing-prototypes
5490cat > $TMPC << EOF
5491extern int foo(void);
5492int foo(void) { return 0; }
5493EOF
5494if ! compile_object ""; then
5495 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5496fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005497for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5498 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5499 LD_REL_FLAGS=$i
5500 break
5501 fi
5502done
5503if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5504 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005505fi
5506
Jan Vesely277abf12016-04-29 13:15:23 -04005507##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005508# check for sysmacros.h
5509
5510have_sysmacros=no
5511cat > $TMPC << EOF
5512#include <sys/sysmacros.h>
5513int main(void) {
5514 return makedev(0, 0);
5515}
5516EOF
5517if compile_prog "" "" ; then
5518 have_sysmacros=yes
5519fi
5520
5521##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005522# Veritas HyperScale block driver VxHS
5523# Check if libvxhs is installed
5524
5525if test "$vxhs" != "no" ; then
5526 cat > $TMPC <<EOF
5527#include <stdint.h>
5528#include <qnio/qnio_api.h>
5529
5530void *vxhs_callback;
5531
5532int main(void) {
5533 iio_init(QNIO_VERSION, vxhs_callback);
5534 return 0;
5535}
5536EOF
5537 vxhs_libs="-lvxhs -lssl"
5538 if compile_prog "" "$vxhs_libs" ; then
5539 vxhs=yes
5540 else
5541 if test "$vxhs" = "yes" ; then
5542 feature_not_found "vxhs block device" "Install libvxhs See github"
5543 fi
5544 vxhs=no
5545 fi
5546fi
5547
5548##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005549# check for _Static_assert()
5550
5551have_static_assert=no
5552cat > $TMPC << EOF
5553_Static_assert(1, "success");
5554int main(void) {
5555 return 0;
5556}
5557EOF
5558if compile_prog "" "" ; then
5559 have_static_assert=yes
5560fi
5561
5562##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005563# check for utmpx.h, it is missing e.g. on OpenBSD
5564
5565have_utmpx=no
5566cat > $TMPC << EOF
5567#include <utmpx.h>
5568struct utmpx user_info;
5569int main(void) {
5570 return 0;
5571}
5572EOF
5573if compile_prog "" "" ; then
5574 have_utmpx=yes
5575fi
5576
5577##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005578# checks for sanitizers
5579
Marc-André Lureau247724c2018-01-16 16:11:51 +01005580have_asan=no
5581have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005582have_asan_iface_h=no
5583have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005584
5585if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005586 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005587 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5588 have_asan=yes
5589 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005590
5591 # we could use a simple skeleton for flags checks, but this also
5592 # detect the static linking issue of ubsan, see also:
5593 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5594 cat > $TMPC << EOF
5595#include <stdlib.h>
5596int main(void) {
5597 void *tmp = malloc(10);
5598 return *(int *)(tmp + 2);
5599}
5600EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005601 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5602 have_ubsan=yes
5603 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005604
5605 if check_include "sanitizer/asan_interface.h" ; then
5606 have_asan_iface_h=yes
5607 fi
5608
5609 cat > $TMPC << EOF
5610#include <sanitizer/asan_interface.h>
5611int main(void) {
5612 __sanitizer_start_switch_fiber(0, 0, 0);
5613 return 0;
5614}
5615EOF
5616 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5617 have_asan_iface_fiber=yes
5618 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005619fi
5620
5621##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005622# Docker and cross-compiler support
5623#
5624# This is specifically for building test
5625# cases for foreign architectures, not
5626# cross-compiling QEMU itself.
5627
5628if has "docker"; then
5629 docker=$($python $source_path/tests/docker/docker.py probe)
5630fi
5631
5632##########################################
Junyan He17824402018-07-18 15:47:59 +08005633# check for libpmem
5634
5635if test "$libpmem" != "no"; then
5636 if $pkg_config --exists "libpmem"; then
5637 libpmem="yes"
5638 libpmem_libs=$($pkg_config --libs libpmem)
5639 libpmem_cflags=$($pkg_config --cflags libpmem)
5640 libs_softmmu="$libs_softmmu $libpmem_libs"
5641 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5642 else
5643 if test "$libpmem" = "yes" ; then
5644 feature_not_found "libpmem" "Install nvml or pmdk"
5645 fi
5646 libpmem="no"
5647 fi
5648fi
5649
5650##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005651# End of CC checks
5652# After here, no more $cc or $ld runs
5653
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005654write_c_skeleton
5655
Blue Swirl1d728c32012-05-01 18:45:39 +00005656if test "$gcov" = "yes" ; then
5657 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5658 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005659elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005660 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005661elif test "$debug" = "no"; then
5662 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005663fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005664
Marc-André Lureau247724c2018-01-16 16:11:51 +01005665if test "$have_asan" = "yes"; then
5666 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005667 if test "$have_asan_iface_h" = "no" ; then
5668 echo "ASAN build enabled, but ASAN header missing." \
5669 "Without code annotation, the report may be inferior."
5670 elif test "$have_asan_iface_fiber" = "no" ; then
5671 echo "ASAN build enabled, but ASAN header is too old." \
5672 "Without code annotation, the report may be inferior."
5673 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005674fi
5675if test "$have_ubsan" = "yes"; then
5676 CFLAGS="-fsanitize=undefined $CFLAGS"
5677fi
5678
Peter Lieven6542aa92014-02-03 10:26:13 +01005679##########################################
5680# Do we have libnfs
5681if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005682 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005683 libnfs="yes"
5684 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005685 else
5686 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005687 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005688 fi
5689 libnfs="no"
5690 fi
5691fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005692
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005693##########################################
5694# Do we have libudev
5695if test "$libudev" != "no" ; then
5696 if $pkg_config libudev && test "$static" != "yes"; then
5697 libudev="yes"
5698 libudev_libs=$($pkg_config --libs libudev)
5699 else
5700 libudev="no"
5701 fi
5702fi
5703
Peter Maydell6ca026c2012-07-18 15:10:18 +01005704# Now we've finished running tests it's OK to add -Werror to the compiler flags
5705if test "$werror" = "yes"; then
5706 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5707fi
5708
Juan Quintelae86ecd42009-08-03 14:45:59 +02005709if test "$solaris" = "no" ; then
5710 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005711 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005712 fi
5713fi
5714
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005715# test if pod2man has --utf8 option
5716if pod2man --help | grep -q utf8; then
5717 POD2MAN="pod2man --utf8"
5718else
5719 POD2MAN="pod2man"
5720fi
5721
Blue Swirl952afb72010-09-19 08:36:34 +00005722# Use ASLR, no-SEH and DEP if available
5723if test "$mingw32" = "yes" ; then
5724 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005725 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005726 LDFLAGS="-Wl,$flag $LDFLAGS"
5727 fi
5728 done
5729fi
5730
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005731qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005732qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005733qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005734qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005735
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005736# We can only support ivshmem if we have eventfd
5737if [ "$eventfd" = "yes" ]; then
5738 ivshmem=yes
5739fi
5740
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005741tools=""
5742if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005743 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005744 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5745 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005746 fi
5747 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005748 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005749 fi
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005750 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5751 tools="elf2dmp $tools"
5752 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005753fi
5754if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005755 if test "$linux" = yes; then
5756 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005757 virtfs=yes
5758 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5759 else
5760 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005761 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305762 fi
Andreas Färber17500372012-05-01 01:12:03 +02005763 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005764 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005765 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5766 mpath=yes
5767 else
5768 if test "$mpath" = yes; then
5769 error_exit "Multipath requires libmpathpersist devel"
5770 fi
5771 mpath=no
5772 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005773 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5774 else
5775 if test "$virtfs" = yes; then
5776 error_exit "VirtFS is supported only on Linux"
5777 fi
5778 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005779 if test "$mpath" = yes; then
5780 error_exit "Multipath is supported only on Linux"
5781 fi
5782 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305783 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005784 if test "$xkbcommon" = "yes"; then
5785 tools="qemu-keymap\$(EXESUF) $tools"
5786 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005787fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005788
5789# Probe for guest agent support/options
5790
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005791if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005792 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005793 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005794 guest_agent=yes
5795 elif [ "$guest_agent" != yes ]; then
5796 guest_agent=no
5797 else
5798 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005799 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005800fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005801
Michael Roth9d6bc272015-08-26 10:49:13 -05005802# Guest agent Window MSI package
5803
5804if test "$guest_agent" != yes; then
5805 if test "$guest_agent_msi" = yes; then
5806 error_exit "MSI guest agent package requires guest agent enabled"
5807 fi
5808 guest_agent_msi=no
5809elif test "$mingw32" != "yes"; then
5810 if test "$guest_agent_msi" = "yes"; then
5811 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5812 fi
5813 guest_agent_msi=no
5814elif ! has wixl; then
5815 if test "$guest_agent_msi" = "yes"; then
5816 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5817 fi
5818 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005819else
5820 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5821 # disabled explicitly
5822 if test "$guest_agent_msi" != "no"; then
5823 guest_agent_msi=yes
5824 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005825fi
5826
Michael Roth1a349042015-08-26 11:14:31 -05005827if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005828 if test "$guest_agent_with_vss" = "yes"; then
5829 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5830 fi
5831
5832 if test "$QEMU_GA_MANUFACTURER" = ""; then
5833 QEMU_GA_MANUFACTURER=QEMU
5834 fi
5835
5836 if test "$QEMU_GA_DISTRO" = ""; then
5837 QEMU_GA_DISTRO=Linux
5838 fi
5839
5840 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005841 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005842 fi
5843
Stefan Weil89138852016-05-16 15:10:20 +02005844 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005845
5846 case "$cpu" in
5847 x86_64)
5848 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5849 ;;
5850 i386)
5851 QEMU_GA_MSI_ARCH="-D Arch=32"
5852 ;;
5853 *)
5854 error_exit "CPU $cpu not supported for building installation package"
5855 ;;
5856 esac
5857fi
5858
Paolo Bonzinica35f782010-05-26 16:08:29 +02005859# Mac OS X ships with a broken assembler
5860roms=
5861if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5862 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5863 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005864 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005865 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5866 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5867 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005868 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5869 ld_i386_emulation="$emu"
5870 roms="optionrom"
5871 break
5872 fi
5873 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005874fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005875if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005876 roms="$roms spapr-rtas"
5877fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005878
Christian Borntraeger9933c302013-04-23 01:23:03 +00005879if test "$cpu" = "s390x" ; then
5880 roms="$roms s390-ccw"
5881fi
5882
Richard Henderson964c6fa2013-06-21 19:10:16 -07005883# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005884if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005885 textseg_addr=
5886 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005887 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5888 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005889 textseg_addr=0x60000000
5890 ;;
5891 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005892 # A 256M aligned address, high in the address space, with enough
5893 # room for the code_gen_buffer above it before the stack.
5894 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005895 ;;
5896 esac
5897 if [ -n "$textseg_addr" ]; then
5898 cat > $TMPC <<EOF
5899 int main(void) { return 0; }
5900EOF
5901 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5902 if ! compile_prog "" "$textseg_ldflags"; then
5903 # In case ld does not support -Ttext-segment, edit the default linker
5904 # script via sed to set the .text start addr. This is needed on FreeBSD
5905 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005906 if ! $ld --verbose >/dev/null 2>&1; then
5907 error_exit \
5908 "We need to link the QEMU user mode binaries at a" \
5909 "specific text address. Unfortunately your linker" \
5910 "doesn't support either the -Ttext-segment option or" \
5911 "printing the default linker script with --verbose." \
5912 "If you don't want the user mode binaries, pass the" \
5913 "--disable-user option to configure."
5914 fi
5915
Richard Henderson964c6fa2013-06-21 19:10:16 -07005916 $ld --verbose | sed \
5917 -e '1,/==================================================/d' \
5918 -e '/==================================================/,$d' \
5919 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5920 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5921 textseg_ldflags="-Wl,-T../config-host.ld"
5922 fi
5923 fi
5924fi
5925
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005926# Check that the C++ compiler exists and works with the C compiler.
5927# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5928if has $cxx; then
5929 cat > $TMPC <<EOF
5930int c_function(void);
5931int main(void) { return c_function(); }
5932EOF
5933
5934 compile_object
5935
5936 cat > $TMPCXX <<EOF
5937extern "C" {
5938 int c_function(void);
5939}
5940int c_function(void) { return 42; }
5941EOF
5942
5943 update_cxxflags
5944
5945 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5946 # C++ compiler $cxx works ok with C compiler $cc
5947 :
5948 else
5949 echo "C++ compiler $cxx does not work with C compiler $cc"
5950 echo "Disabling C++ specific optional code"
5951 cxx=
5952 fi
5953else
5954 echo "No C++ compiler available; disabling C++ specific optional code"
5955 cxx=
5956fi
5957
Cole Robinson02d34f62016-05-06 14:03:09 -04005958echo_version() {
5959 if test "$1" = "yes" ; then
5960 echo "($2)"
5961 fi
5962}
5963
Jan Kiszka50e12062014-10-02 10:03:55 +02005964# prepend pixman and ftd flags after all config tests are done
5965QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005966QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005967libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005968
bellard43ce4df2003-06-09 19:53:12 +00005969echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005970echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005971echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005972echo "binary directory $(eval echo $bindir)"
5973echo "library directory $(eval echo $libdir)"
5974echo "module directory $(eval echo $qemu_moddir)"
5975echo "libexec directory $(eval echo $libexecdir)"
5976echo "include directory $(eval echo $includedir)"
5977echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005978if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005979echo "local state directory $(eval echo $local_statedir)"
5980echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005981echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005982else
5983echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005984echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005985fi
bellard5a671352003-10-01 00:13:48 +00005986echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005987echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005988echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005989echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005990echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005991echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005992echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005993echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005994echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005995echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005996echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005997echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005998echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005999echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00006000echo "python $python"
Brade2d88302011-09-02 16:53:28 -04006001if test "$slirp" = "yes" ; then
6002 echo "smbd $smbd"
6003fi
Fam Zheng17969262014-02-10 14:48:56 +08006004echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006005echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006006echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006007echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006008echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006009echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006010echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006011echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006012echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006013if test "$darwin" = "yes" ; then
6014 echo "Cocoa support $cocoa"
6015fi
Stefan Weil89138852016-05-16 15:10:20 +02006016echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6017echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006018echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006019echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006020echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006021echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006022echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006023echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006024echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006025echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006026echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006027echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006028echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006029echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006030echo "Block whitelist (rw) $block_drv_rw_whitelist"
6031echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306032echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006033echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006034echo "VNC support $vnc"
6035if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006036 echo "VNC SASL support $vnc_sasl"
6037 echo "VNC JPEG support $vnc_jpeg"
6038 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006039fi
blueswir131422552007-04-16 18:27:06 +00006040if test -n "$sparc_cpu"; then
6041 echo "Target Sparc Arch $sparc_cpu"
6042fi
aliguorie37630c2009-04-22 15:19:10 +00006043echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006044if test "$xen" = "yes" ; then
6045 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00006046 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00006047fi
aurel322e4d9fb2008-04-08 06:01:02 +00006048echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006049echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006050echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006051echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006052echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006053echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006054echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006055echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006056echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006057echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006058echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006059echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006060echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006061echo "TCG support $tcg"
6062if test "$tcg" = "yes" ; then
6063 echo "TCG debug enabled $debug_tcg"
6064 echo "TCG interpreter $tcg_interpreter"
6065fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006066echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006067echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006068echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006069echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006070echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006071echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006072echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006073echo "madvise $madvise"
6074echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006075echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006076echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006077echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006078echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006079echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006080echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006081echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006082echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006083if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006084echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006085fi
Stefan Weil89138852016-05-16 15:10:20 +02006086echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006087echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006088echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006089echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006090echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006091echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006092echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006093echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006094echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006095echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006096echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006097echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006098echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006099echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006100echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006101echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006102echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006103echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006104echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006105echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306106echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006107echo "gcov $gcov_tool"
6108echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006109echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006110echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006111echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006112echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006113echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006114echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006115echo "lzo support $lzo"
6116echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006117echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006118echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006119echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006120echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006121echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006122echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006123echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006124echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006125echo "bochs support $bochs"
6126echo "cloop support $cloop"
6127echo "dmg support $dmg"
6128echo "qcow v1 support $qcow1"
6129echo "vdi support $vdi"
6130echo "vvfat support $vvfat"
6131echo "qed support $qed"
6132echo "parallels support $parallels"
6133echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006134echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006135echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006136echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006137echo "libudev $libudev"
bellard67b915a2004-03-31 23:37:16 +00006138
Stefan Weil1ba16962011-07-29 22:40:45 +02006139if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006140echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006141fi
bellard97a847b2003-08-10 21:36:04 +00006142
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006143if test "$sdlabi" = "1.2"; then
6144 echo
6145 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6146 echo "WARNING: future releases. Please switch to using SDL 2.0"
6147fi
6148
Peter Maydell898be3e2017-03-21 14:31:57 +00006149if test "$supported_cpu" = "no"; then
6150 echo
6151 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6152 echo
6153 echo "CPU host architecture $cpu support is not currently maintained."
6154 echo "The QEMU project intends to remove support for this host CPU in"
6155 echo "a future release if nobody volunteers to maintain it and to"
6156 echo "provide a build host for our continuous integration setup."
6157 echo "configure has succeeded and you can continue to build, but"
6158 echo "if you care about QEMU on this platform you should contact"
6159 echo "us upstream at qemu-devel@nongnu.org."
6160fi
6161
6162if test "$supported_os" = "no"; then
6163 echo
6164 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6165 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006166 echo "Host OS $targetos support is not currently maintained."
6167 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006168 echo "a future release if nobody volunteers to maintain it and to"
6169 echo "provide a build host for our continuous integration setup."
6170 echo "configure has succeeded and you can continue to build, but"
6171 echo "if you care about QEMU on this platform you should contact"
6172 echo "us upstream at qemu-devel@nongnu.org."
6173fi
6174
Juan Quintela98ec69a2009-07-16 18:34:18 +02006175config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006176
Stefan Weildbd99ae2013-01-01 18:33:44 +01006177echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6178
Juan Quintela98ec69a2009-07-16 18:34:18 +02006179echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006180echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006181
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006182echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006183echo "prefix=$prefix" >> $config_host_mak
6184echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006185echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006186echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006187echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006188echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006189echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006190echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006191echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006192echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006193echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006194echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006195if test "$mingw32" = "no" ; then
6196 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6197fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006198echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006199echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006200echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006201echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006202echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006203echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006204
Juan Quintela98ec69a2009-07-16 18:34:18 +02006205echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006206
aurel32f8393942009-04-13 18:45:38 +00006207if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006208 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006209fi
aliguori1625af82009-04-05 17:41:02 +00006210if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006211 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006212fi
bellard7d132992003-03-06 23:23:54 +00006213if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006214 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006215fi
bellard67b915a2004-03-31 23:37:16 +00006216if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006217 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006218 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006219 version_major=${rc_version%%.*}
6220 rc_version=${rc_version#*.}
6221 version_minor=${rc_version%%.*}
6222 rc_version=${rc_version#*.}
6223 version_subminor=${rc_version%%.*}
6224 version_micro=0
6225 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6226 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006227 if test "$guest_agent_with_vss" = "yes" ; then
6228 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006229 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006230 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6231 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006232 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006233 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006234 fi
Michael Roth1a349042015-08-26 11:14:31 -05006235 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006236 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006237 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6238 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6239 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6240 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6241 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6242 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6243 fi
pbrook210fa552007-02-27 21:04:49 +00006244else
Juan Quintela35f4df22009-07-27 16:13:07 +02006245 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006246fi
blueswir1128ab2f2008-08-15 18:33:42 +00006247
Mark McLoughlindffcb712009-10-22 17:49:11 +01006248if test "$linux" = "yes" ; then
6249 echo "CONFIG_LINUX=y" >> $config_host_mak
6250fi
6251
bellard83fb7ad2004-07-05 21:25:26 +00006252if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006253 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006254fi
malcb29fe3e2008-11-18 01:42:22 +00006255
bellardec530c82006-04-25 22:36:06 +00006256if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006257 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006258fi
Andreas Färber179cf402010-09-20 00:50:43 +02006259if test "$haiku" = "yes" ; then
6260 echo "CONFIG_HAIKU=y" >> $config_host_mak
6261fi
bellard97a847b2003-08-10 21:36:04 +00006262if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006263 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006264fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006265if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006266 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006267fi
bellardc20709a2004-04-21 23:27:19 +00006268if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006269 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006270 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006271fi
ths8a16d272008-07-19 09:56:24 +00006272if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006273 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006274 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006275fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006276if test "$netmap" = "yes" ; then
6277 echo "CONFIG_NETMAP=y" >> $config_host_mak
6278fi
Gonglei015a33b2014-07-01 20:58:08 +08006279if test "$l2tpv3" = "yes" ; then
6280 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6281fi
Corey Bryant47e98652012-01-26 09:42:26 -05006282if test "$cap_ng" = "yes" ; then
6283 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6284fi
Juan Quintela2358a492009-07-27 16:13:25 +02006285echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006286for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006287 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006288 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006289 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006290 echo "$def=m" >> $config_host_mak ;;
6291 *)
6292 echo "$def=y" >> $config_host_mak ;;
6293 esac
malc0c58ac12008-06-25 21:04:05 +00006294done
Fam Zhengb1149912017-09-07 16:29:13 +08006295echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6296echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6297echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6298echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6299echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006300if test "$audio_pt_int" = "yes" ; then
6301 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6302fi
malcd5631632009-10-10 01:13:41 +04006303if test "$audio_win_int" = "yes" ; then
6304 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6305fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006306echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6307echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006308if test "$vnc" = "yes" ; then
6309 echo "CONFIG_VNC=y" >> $config_host_mak
6310fi
aliguori2f9606b2009-03-06 20:27:28 +00006311if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006312 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006313fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006314if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006315 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006316fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006317if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006318 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006319fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006320if test "$xkbcommon" = "yes" ; then
6321 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6322 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6323fi
aliguori76655d62009-03-06 20:27:37 +00006324if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006325 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006326fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006327if test "$xfs" = "yes" ; then
6328 echo "CONFIG_XFS=y" >> $config_host_mak
6329fi
Stefan Weil89138852016-05-16 15:10:20 +02006330qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006331echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006332echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006333echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006334echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006335if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006336 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006337fi
Fam Zheng17969262014-02-10 14:48:56 +08006338if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006339 # $shacmd can generate a hash started with digit, which the compiler doesn't
6340 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006341 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006342 echo "CONFIG_MODULES=y" >> $config_host_mak
6343fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006344if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6345 echo "CONFIG_X11=y" >> $config_host_mak
6346 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6347 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6348fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006349if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006350 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006351 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006352 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006353 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006354fi
6355if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006356 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006357fi
6358if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006359 echo "CONFIG_CURSES=m" >> $config_host_mak
6360 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6361 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006362fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006363if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006364 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006365fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006366if test "$accept4" = "yes" ; then
6367 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6368fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306369if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006370 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306371fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006372if test "$eventfd" = "yes" ; then
6373 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6374fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006375if test "$memfd" = "yes" ; then
6376 echo "CONFIG_MEMFD=y" >> $config_host_mak
6377fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006378if test "$have_usbfs" = "yes" ; then
6379 echo "CONFIG_USBFS=y" >> $config_host_mak
6380fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006381if test "$fallocate" = "yes" ; then
6382 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6383fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006384if test "$fallocate_punch_hole" = "yes" ; then
6385 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6386fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006387if test "$fallocate_zero_range" = "yes" ; then
6388 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6389fi
Kevin Wolfed911432014-09-29 17:12:59 +02006390if test "$posix_fallocate" = "yes" ; then
6391 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6392fi
Peter Maydellc727f472011-01-06 11:05:10 +00006393if test "$sync_file_range" = "yes" ; then
6394 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6395fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006396if test "$fiemap" = "yes" ; then
6397 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6398fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006399if test "$dup3" = "yes" ; then
6400 echo "CONFIG_DUP3=y" >> $config_host_mak
6401fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006402if test "$ppoll" = "yes" ; then
6403 echo "CONFIG_PPOLL=y" >> $config_host_mak
6404fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006405if test "$prctl_pr_set_timerslack" = "yes" ; then
6406 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6407fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006408if test "$epoll" = "yes" ; then
6409 echo "CONFIG_EPOLL=y" >> $config_host_mak
6410fi
6411if test "$epoll_create1" = "yes" ; then
6412 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6413fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006414if test "$sendfile" = "yes" ; then
6415 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6416fi
Riku Voipio51834342014-06-22 11:25:42 +01006417if test "$timerfd" = "yes" ; then
6418 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6419fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006420if test "$setns" = "yes" ; then
6421 echo "CONFIG_SETNS=y" >> $config_host_mak
6422fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006423if test "$clock_adjtime" = "yes" ; then
6424 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6425fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006426if test "$syncfs" = "yes" ; then
6427 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6428fi
aurel323b3f24a2009-04-15 16:12:13 +00006429if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006430 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006431fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006432if test "$inotify1" = "yes" ; then
6433 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6434fi
Peter Maydell401bc052017-09-05 13:19:32 +01006435if test "$sem_timedwait" = "yes" ; then
6436 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6437fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006438if test "$strchrnul" = "yes" ; then
6439 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6440fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006441if test "$byteswap_h" = "yes" ; then
6442 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6443fi
6444if test "$bswap_h" = "yes" ; then
6445 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6446fi
Alexander Graf769ce762009-05-11 17:41:42 +02006447if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006448 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006449 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006450 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006451fi
aurel322e4d9fb2008-04-08 06:01:02 +00006452if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006453 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006454 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006455fi
balrogfb599c92008-09-28 23:49:55 +00006456if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006457 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006458 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006459fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006460if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006461 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006462 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006463 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006464 if test "$gtk_gl" = "yes" ; then
6465 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6466 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006467fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006468echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006469if test "$gnutls" = "yes" ; then
6470 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6471fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006472if test "$gcrypt" = "yes" ; then
6473 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006474 if test "$gcrypt_hmac" = "yes" ; then
6475 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6476 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006477fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006478if test "$nettle" = "yes" ; then
6479 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006480 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006481fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006482if test "$tasn1" = "yes" ; then
6483 echo "CONFIG_TASN1=y" >> $config_host_mak
6484fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006485if test "$have_ifaddrs_h" = "yes" ; then
6486 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6487fi
Eric Blake6b39b062016-10-11 10:46:23 -05006488if test "$have_broken_size_max" = "yes" ; then
6489 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6490fi
Jan Vesely277abf12016-04-29 13:15:23 -04006491
6492# Work around a system header bug with some kernel/XFS header
6493# versions where they both try to define 'struct fsxattr':
6494# xfs headers will not try to redefine structs from linux headers
6495# if this macro is set.
6496if test "$have_fsxattr" = "yes" ; then
6497 echo "HAVE_FSXATTR=y" >> $config_host_mak
6498fi
Fam Zheng1efad062018-06-01 17:26:43 +08006499if test "$have_copy_file_range" = "yes" ; then
6500 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6501fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006502if test "$vte" = "yes" ; then
6503 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006504 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006505 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006506fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006507if test "$virglrenderer" = "yes" ; then
6508 echo "CONFIG_VIRGL=y" >> $config_host_mak
6509 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6510 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6511fi
aliguorie37630c2009-04-22 15:19:10 +00006512if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006513 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006514 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006515 if test "$xen_pv_domain_build" = "yes" ; then
6516 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6517 fi
aliguorie37630c2009-04-22 15:19:10 +00006518fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006519if test "$linux_aio" = "yes" ; then
6520 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6521fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006522if test "$attr" = "yes" ; then
6523 echo "CONFIG_ATTR=y" >> $config_host_mak
6524fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006525if test "$libattr" = "yes" ; then
6526 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6527fi
Meador Inge983eef52012-02-24 14:00:42 +05306528if test "$virtfs" = "yes" ; then
6529 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006530fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006531if test "$mpath" = "yes" ; then
6532 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006533 if test "$mpathpersist_new_api" = "yes"; then
6534 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6535 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006536fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006537if test "$vhost_scsi" = "yes" ; then
6538 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6539fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006540if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006541 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6542fi
Gonglei042cea22018-03-01 21:46:28 +08006543if test "$vhost_crypto" = "yes" ; then
6544 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6545fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006546if test "$vhost_vsock" = "yes" ; then
6547 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6548fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006549if test "$vhost_user" = "yes" ; then
6550 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6551fi
ths77755342008-11-27 15:45:16 +00006552if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006553 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006554fi
aliguoribf9298b2008-12-05 20:05:26 +00006555if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006556 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006557fi
aliguoriceb42de2009-04-07 18:43:28 +00006558if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006559 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006560fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006561if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006562 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006563fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006564if test "$membarrier" = "yes" ; then
6565 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6566fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006567if test "$signalfd" = "yes" ; then
6568 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6569fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006570if test "$tcg" = "yes"; then
6571 echo "CONFIG_TCG=y" >> $config_host_mak
6572 if test "$tcg_interpreter" = "yes" ; then
6573 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6574 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006575fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006576if test "$fdatasync" = "yes" ; then
6577 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6578fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006579if test "$madvise" = "yes" ; then
6580 echo "CONFIG_MADVISE=y" >> $config_host_mak
6581fi
6582if test "$posix_madvise" = "yes" ; then
6583 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6584fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006585if test "$posix_memalign" = "yes" ; then
6586 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6587fi
bellard97a847b2003-08-10 21:36:04 +00006588
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006589if test "$spice" = "yes" ; then
6590 echo "CONFIG_SPICE=y" >> $config_host_mak
6591fi
6592
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006593if test "$smartcard" = "yes" ; then
6594 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006595 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6596 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006597fi
6598
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006599if test "$libusb" = "yes" ; then
6600 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006601 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6602 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006603fi
6604
Hans de Goede69354a82011-07-19 11:04:10 +02006605if test "$usb_redir" = "yes" ; then
6606 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006607 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6608 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006609fi
6610
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006611if test "$opengl" = "yes" ; then
6612 echo "CONFIG_OPENGL=y" >> $config_host_mak
6613 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006614 if test "$opengl_dmabuf" = "yes" ; then
6615 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6616 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006617fi
6618
Yang Zhong5a22ab72017-12-20 21:16:46 +08006619if test "$malloc_trim" = "yes" ; then
6620 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6621fi
6622
Liang Li99f2dbd2016-03-08 13:53:16 +08006623if test "$avx2_opt" = "yes" ; then
6624 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6625fi
6626
qiaonuohan607dacd2014-02-18 14:11:30 +08006627if test "$lzo" = "yes" ; then
6628 echo "CONFIG_LZO=y" >> $config_host_mak
6629fi
6630
6631if test "$snappy" = "yes" ; then
6632 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6633fi
6634
Peter Wu6b383c02015-01-06 18:48:14 +01006635if test "$bzip2" = "yes" ; then
6636 echo "CONFIG_BZIP2=y" >> $config_host_mak
6637 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6638fi
6639
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006640if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006641 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006642 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6643 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006644fi
6645
Peter Lieven6542aa92014-02-03 10:26:13 +01006646if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006647 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6648 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006649fi
6650
Eduardo Otubof7945732012-08-14 18:44:05 -03006651if test "$seccomp" = "yes"; then
6652 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006653 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6654 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006655fi
6656
bellard83fb7ad2004-07-05 21:25:26 +00006657# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006658if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006659 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006660fi
6661
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006662if test "$localtime_r" = "yes" ; then
6663 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6664fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006665if test "$qom_cast_debug" = "yes" ; then
6666 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6667fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006668if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006669 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006670 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6671 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006672fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006673
Peter Maydell7c2acc72013-04-08 12:11:27 +01006674echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006675if test "$coroutine_pool" = "yes" ; then
6676 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6677else
6678 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6679fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306680
Peter Lieven7d992e42016-09-27 11:58:45 +02006681if test "$debug_stack_usage" = "yes" ; then
6682 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6683fi
6684
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006685if test "$crypto_afalg" = "yes" ; then
6686 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6687fi
6688
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306689if test "$open_by_handle_at" = "yes" ; then
6690 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6691fi
6692
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306693if test "$linux_magic_h" = "yes" ; then
6694 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6695fi
6696
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006697if test "$pragma_diagnostic_available" = "yes" ; then
6698 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006699fi
6700
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006701if test "$valgrind_h" = "yes" ; then
6702 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6703fi
6704
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006705if test "$have_asan_iface_fiber" = "yes" ; then
6706 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6707fi
6708
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006709if test "$has_environ" = "yes" ; then
6710 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6711fi
6712
Richard Henderson76a347e2012-12-28 14:17:02 -08006713if test "$cpuid_h" = "yes" ; then
6714 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6715fi
6716
Richard Hendersonf5401662013-02-16 12:46:59 -08006717if test "$int128" = "yes" ; then
6718 echo "CONFIG_INT128=y" >> $config_host_mak
6719fi
6720
Richard Henderson7ebee432016-06-29 21:10:59 -07006721if test "$atomic128" = "yes" ; then
6722 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6723fi
6724
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006725if test "$cmpxchg128" = "yes" ; then
6726 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6727fi
6728
Richard Hendersondf79b992016-09-02 12:23:57 -07006729if test "$atomic64" = "yes" ; then
6730 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6731fi
6732
Richard Hendersondb432672017-09-15 14:11:45 -07006733if test "$vector16" = "yes" ; then
6734 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6735fi
6736
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006737if test "$getauxval" = "yes" ; then
6738 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6739fi
6740
Bharata B Raoeb100392012-09-24 14:42:45 +05306741if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006742 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006743 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6744 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306745fi
6746
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006747if test "$glusterfs_xlator_opt" = "yes" ; then
6748 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6749fi
6750
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306751if test "$glusterfs_discard" = "yes" ; then
6752 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6753fi
6754
Niels de Vosdf3a4292017-05-28 12:01:14 +05306755if test "$glusterfs_fallocate" = "yes" ; then
6756 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6757fi
6758
Bharata B Rao7c815372013-12-21 14:51:25 +05306759if test "$glusterfs_zerofill" = "yes" ; then
6760 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6761fi
6762
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006763if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006764 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006765 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6766 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006767fi
6768
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006769if test "$live_block_migration" = "yes" ; then
6770 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6771fi
6772
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006773if test "$tpm" = "yes"; then
6774 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006775 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006776 if test "$tpm_passthrough" = "yes"; then
6777 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6778 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006779 # TPM emulator support?
6780 if test "$tpm_emulator" = "yes"; then
6781 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6782 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006783fi
6784
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006785echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6786if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006787 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306788fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006789if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006790 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6791 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006792 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006793fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006794if have_backend "log"; then
6795 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02006796fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006797if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006798 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6799fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006800if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006801 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6802 if test "$trace_backend_stap" = "yes" ; then
6803 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6804 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006805fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006806if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006807 if test "$linux" = "yes" ; then
6808 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006809 else
Stewart Smith21684af2014-01-24 12:39:10 +11006810 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006811 fi
6812fi
Paul Durrant0a852412016-08-04 14:44:14 +01006813if have_backend "syslog"; then
6814 if test "$posix_syslog" = "yes" ; then
6815 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6816 else
6817 feature_not_found "syslog(trace backend)" "syslog not available"
6818 fi
6819fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006820echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6821
Michael R. Hines2da776d2013-07-22 10:01:54 -04006822if test "$rdma" = "yes" ; then
6823 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006824 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006825fi
6826
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006827if test "$pvrdma" = "yes" ; then
6828 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6829fi
6830
Laurent Vivier575b22b2016-06-02 22:14:15 +02006831if test "$have_rtnetlink" = "yes" ; then
6832 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6833fi
6834
Klim Kireeved279a02018-01-12 12:01:19 +03006835if test "$libxml2" = "yes" ; then
6836 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6837 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6838 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6839fi
6840
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006841if test "$replication" = "yes" ; then
6842 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6843fi
6844
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006845if test "$have_af_vsock" = "yes" ; then
6846 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6847fi
6848
Christopher Covington4d043512016-12-28 15:04:33 -05006849if test "$have_sysmacros" = "yes" ; then
6850 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6851fi
6852
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006853if test "$have_static_assert" = "yes" ; then
6854 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6855fi
6856
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006857if test "$have_utmpx" = "yes" ; then
6858 echo "HAVE_UTMPX=y" >> $config_host_mak
6859fi
6860
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006861if test "$ivshmem" = "yes" ; then
6862 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6863fi
Richard Hendersone219c492017-09-28 09:01:23 -07006864if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006865 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6866fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006867if test "$debug_mutex" = "yes" ; then
6868 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6869fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006870
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006871# Hold two types of flag:
6872# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6873# a thread we have a handle to
6874# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6875# platform
6876if test "$pthread_setname_np" = "yes" ; then
6877 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6878 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6879fi
6880
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006881if test "$vxhs" = "yes" ; then
6882 echo "CONFIG_VXHS=y" >> $config_host_mak
6883 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6884fi
6885
Junyan He17824402018-07-18 15:47:59 +08006886if test "$libpmem" = "yes" ; then
6887 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6888fi
6889
Jeff Cody2f740132018-11-07 07:36:44 +01006890if test "$bochs" = "yes" ; then
6891 echo "CONFIG_BOCHS=y" >> $config_host_mak
6892fi
6893if test "$cloop" = "yes" ; then
6894 echo "CONFIG_CLOOP=y" >> $config_host_mak
6895fi
6896if test "$dmg" = "yes" ; then
6897 echo "CONFIG_DMG=y" >> $config_host_mak
6898fi
6899if test "$qcow1" = "yes" ; then
6900 echo "CONFIG_QCOW1=y" >> $config_host_mak
6901fi
6902if test "$vdi" = "yes" ; then
6903 echo "CONFIG_VDI=y" >> $config_host_mak
6904fi
6905if test "$vvfat" = "yes" ; then
6906 echo "CONFIG_VVFAT=y" >> $config_host_mak
6907fi
6908if test "$qed" = "yes" ; then
6909 echo "CONFIG_QED=y" >> $config_host_mak
6910fi
6911if test "$parallels" = "yes" ; then
6912 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6913fi
6914if test "$sheepdog" = "yes" ; then
6915 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6916fi
6917
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006918if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006919 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006920elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006921 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006922elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006923 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006924elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006925 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006926elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006927 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006928else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006929 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006930fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006931QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006932
Juan Quintela98ec69a2009-07-16 18:34:18 +02006933echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006934echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006935echo "MAKE=$make" >> $config_host_mak
6936echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006937echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6938echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006939echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6940echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006941echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006942echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006943if $iasl -h > /dev/null 2>&1; then
6944 echo "IASL=$iasl" >> $config_host_mak
6945fi
Juan Quintela804edf22009-07-27 16:12:49 +02006946echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006947echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006948echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006949echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006950echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006951echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006952echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006953echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006954echo "OBJCOPY=$objcopy" >> $config_host_mak
6955echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006956echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006957echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006958echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006959echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006960echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006961echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006962echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006963echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006964if test "$sparse" = "yes" ; then
6965 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006966 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006967 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006968 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6969 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6970fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006971if test "$cross_prefix" != ""; then
6972 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6973else
6974 echo "AUTOCONF_HOST := " >> $config_host_mak
6975fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006976echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006977echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006978echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006979echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006980echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006981echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006982echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006983echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006984echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006985echo "DSOSUF=$DSOSUF" >> $config_host_mak
6986echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006987echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006988echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6989echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006990echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006991echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006992if test "$gcov" = "yes" ; then
6993 echo "CONFIG_GCOV=y" >> $config_host_mak
6994 echo "GCOV=$gcov_tool" >> $config_host_mak
6995fi
Juan Quintela804edf22009-07-27 16:12:49 +02006996
Alex Bennée51a12b52018-04-04 14:24:39 +01006997if test "$docker" != "no"; then
6998 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6999fi
7000
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007001if test "$libudev" != "no"; then
7002 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7003 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7004fi
7005
Peter Maydell6efd7512011-11-30 11:59:04 +00007006# use included Linux headers
7007if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007008 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007009 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007010 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007011 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007012 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02007013 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01007014 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007015 ;;
7016 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007017 linux_arch=s390
7018 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007019 aarch64)
7020 linux_arch=arm64
7021 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007022 mips64)
7023 linux_arch=mips
7024 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007025 *)
7026 # For most CPUs the kernel architecture name and QEMU CPU name match.
7027 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007028 ;;
7029 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007030 # For non-KVM architectures we will not have asm headers
7031 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7032 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7033 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007034fi
7035
bellard1d14ffa2005-10-30 18:58:22 +00007036for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007037target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007038config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007039target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00007040target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02007041
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007042case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007043 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 +02007044 target_bigendian=yes
7045 ;;
7046esac
bellard97a847b2003-08-10 21:36:04 +00007047target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007048target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007049target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007050target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007051case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007052 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007053 target_softmmu="yes"
7054 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007055 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007056 target_user_only="yes"
7057 target_linux_user="yes"
7058 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007059 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007060 target_user_only="yes"
7061 target_bsd_user="yes"
7062 ;;
pbrook9e407a82007-05-26 16:38:53 +00007063 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007064 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007065 exit 1
7066 ;;
7067esac
ths831b7822007-01-18 20:06:33 +00007068
Alex Bennéed75402b2018-04-04 20:27:05 +01007069target_compiler=""
7070target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007071target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007072
bellard97a847b2003-08-10 21:36:04 +00007073mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007074echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007075
pbrooke5fe0c52006-06-11 13:32:59 +00007076bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007077mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007078interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007079gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007080
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007081TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007082TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007083TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007084
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007085case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007086 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007087 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007088 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007089 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007090 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007091 ;;
7092 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007093 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007094 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007095 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007096 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007097 ;;
7098 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007099 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007100 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007101 ;;
7102 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007103 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007104 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007105 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007106 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007107 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007108 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007109 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007110 aarch64|aarch64_be)
7111 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007112 TARGET_BASE_ARCH=arm
7113 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007114 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007115 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 +01007116 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007117 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007118 ;;
aurel322408a522008-04-20 20:19:44 +00007119 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007120 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007121 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007122 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007123 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007124 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007125 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007126 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007127 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007128 ;;
aurel322408a522008-04-20 20:19:44 +00007129 m68k)
aurel322408a522008-04-20 20:19:44 +00007130 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007131 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007132 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007133 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007134 microblaze|microblazeel)
7135 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007136 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007137 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007138 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007139 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007140 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007141 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007142 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007143 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007144 ;;
7145 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007146 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007147 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007148 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007149 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007150 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007151 ;;
7152 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007153 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007154 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007155 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007156 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007157 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007158 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007159 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007160 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007161 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007162 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007163 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007164 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007165 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007166 TARGET_ARCH=openrisc
7167 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007168 ;;
aurel322408a522008-04-20 20:19:44 +00007169 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007170 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007171 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007172 ;;
aurel322408a522008-04-20 20:19:44 +00007173 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007174 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007175 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307176 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007177 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 +01007178 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007179 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007180 ppc64le)
7181 TARGET_ARCH=ppc64
7182 TARGET_BASE_ARCH=ppc
7183 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307184 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007185 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 +01007186 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007187 ;;
aurel322408a522008-04-20 20:19:44 +00007188 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007189 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007190 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007191 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007192 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007193 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 +01007194 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007195 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007196 riscv32)
7197 TARGET_BASE_ARCH=riscv
7198 TARGET_ABI_DIR=riscv
7199 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007200 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007201 ;;
7202 riscv64)
7203 TARGET_BASE_ARCH=riscv
7204 TARGET_ABI_DIR=riscv
7205 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007206 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007207 ;;
aurel322408a522008-04-20 20:19:44 +00007208 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007209 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007210 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007211 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007212 ;;
7213 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007214 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007215 ;;
7216 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007217 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007218 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007219 ;;
7220 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007221 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007222 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007223 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007224 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007225 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007226 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007227 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007228 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007229 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 +01007230 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007231 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007232 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007233 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007234 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007235 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007236 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007237 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007238 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007239 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007240 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007241 xtensa|xtensaeb)
7242 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007243 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007244 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007245 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007246 ;;
aurel322408a522008-04-20 20:19:44 +00007247 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007248 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007249 ;;
7250esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007251# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7252if [ "$TARGET_BASE_ARCH" = "" ]; then
7253 TARGET_BASE_ARCH=$TARGET_ARCH
7254fi
7255
Alex Bennéed75402b2018-04-04 20:27:05 +01007256# Do we have a cross compiler for this target?
7257if has $target_compiler; then
7258
7259 write_c_skeleton
7260
Alex Bennée716a5072018-04-10 12:19:40 +01007261 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007262 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007263 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007264 target_compiler=""
7265 else
7266 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7267 target_compiler_static="n"
7268 fi
7269 else
7270 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7271 target_compiler_static="y"
7272 fi
7273else
7274 target_compiler=""
7275fi
7276
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007277symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7278
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007279upper() {
7280 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7281}
7282
Stefan Weil89138852016-05-16 15:10:20 +02007283target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007284echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007285echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007286echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007287if [ "$TARGET_ABI_DIR" = "" ]; then
7288 TARGET_ABI_DIR=$TARGET_ARCH
7289fi
Juan Quintela25be2102009-10-07 02:41:00 +02007290echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007291if [ "$HOST_VARIANT_DIR" != "" ]; then
7292 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7293fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007294
7295if supported_xen_target $target; then
7296 echo "CONFIG_XEN=y" >> $config_target_mak
7297 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007298 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007299 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007300fi
7301if supported_kvm_target $target; then
7302 echo "CONFIG_KVM=y" >> $config_target_mak
7303 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007304 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007305 if test "$vhost_user" = "yes" ; then
7306 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7307 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007308 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007309fi
7310if supported_hax_target $target; then
7311 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007312fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007313if supported_hvf_target $target; then
7314 echo "CONFIG_HVF=y" >> $config_target_mak
7315fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007316if supported_whpx_target $target; then
7317 echo "CONFIG_WHPX=y" >> $config_target_mak
7318fi
bellardde83cd02003-06-15 20:25:43 +00007319if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007320 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007321fi
7322if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007323 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007324 if test "$mttcg" = "yes" ; then
7325 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7326 fi
bellardde83cd02003-06-15 20:25:43 +00007327fi
bellard997344f2003-10-27 21:10:39 +00007328if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007329 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007330 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007331fi
ths831b7822007-01-18 20:06:33 +00007332if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007333 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007334fi
pbrook56aebc82008-10-11 17:55:29 +00007335list=""
7336if test ! -z "$gdb_xml_files" ; then
7337 for x in $gdb_xml_files; do
7338 list="$list $source_path/gdb-xml/$x"
7339 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007340 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007341fi
bellardde83cd02003-06-15 20:25:43 +00007342
pbrooke5fe0c52006-06-11 13:32:59 +00007343if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007344 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007345fi
blueswir184778502008-10-26 20:33:16 +00007346if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007347 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007348fi
bellard5b0753e2005-03-01 21:37:28 +00007349
Alex Bennéed75402b2018-04-04 20:27:05 +01007350if test -n "$target_compiler"; then
7351 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7352
7353 if test -n "$target_compiler_static"; then
7354 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7355 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007356
7357 if test -n "$target_compiler_cflags"; then
7358 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7359 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007360fi
7361
Alex Bennée716a5072018-04-10 12:19:40 +01007362
Juan Quintela4afddb52009-08-03 14:46:45 +02007363# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007364
Juan Quintela4afddb52009-08-03 14:46:45 +02007365cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007366ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007367
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007368disas_config() {
7369 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7370 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7371}
7372
Juan Quintela64656022009-08-03 14:46:53 +02007373for i in $ARCH $TARGET_BASE_ARCH ; do
7374 case "$i" in
7375 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007376 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007377 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007378 aarch64)
7379 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007380 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007381 fi
7382 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007383 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007384 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007385 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007386 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007387 fi
Juan Quintela64656022009-08-03 14:46:53 +02007388 ;;
7389 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007390 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007391 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007392 hppa)
7393 disas_config "HPPA"
7394 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007395 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007396 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007397 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007398 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007399 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007400 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007401 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007402 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007403 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007404 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007405 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007406 ;;
7407 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007408 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007409 if test -n "${cxx}"; then
7410 disas_config "NANOMIPS"
7411 fi
Juan Quintela64656022009-08-03 14:46:53 +02007412 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007413 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007414 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007415 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007416 nios2)
7417 disas_config "NIOS2"
7418 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007419 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007420 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007421 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007422 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007423 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007424 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007425 riscv)
7426 disas_config "RISCV"
7427 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007428 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007429 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007430 ;;
7431 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007432 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007433 ;;
7434 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007435 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007436 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007437 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007438 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007439 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007440 esac
7441done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007442if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007443 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007444fi
Juan Quintela64656022009-08-03 14:46:53 +02007445
Juan Quintela6ee71262009-08-03 14:46:47 +02007446case "$ARCH" in
7447alpha)
7448 # Ensure there's only a single GP
7449 cflags="-msmall-data $cflags"
7450;;
7451esac
7452
Juan Quintelad02c1db2009-08-03 14:46:50 +02007453if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007454 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007455 if test "$target_linux_user" = "yes" ; then
7456 cflags="-p $cflags"
7457 ldflags="-p $ldflags"
7458 fi
7459 if test "$target_softmmu" = "yes" ; then
7460 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007461 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007462 fi
7463fi
7464
Juan Quintela9b8e1112009-08-03 14:46:46 +02007465if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007466 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007467fi
Juan Quintelafa282482009-07-22 22:37:39 +02007468
Christian Borntraegere9a35912017-08-23 12:16:23 +02007469# Newer kernels on s390 check for an S390_PGSTE program header and
7470# enable the pgste page table extensions in that case. This makes
7471# the vm.allocate_pgste sysctl unnecessary. We enable this program
7472# header if
7473# - we build on s390x
7474# - we build the system emulation for s390x (qemu-system-s390x)
7475# - KVM is enabled
7476# - the linker supports --s390-pgste
7477if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7478 if ld_has --s390-pgste ; then
7479 ldflags="-Wl,--s390-pgste $ldflags"
7480 fi
7481fi
7482
Juan Quintela25be2102009-10-07 02:41:00 +02007483echo "LDFLAGS+=$ldflags" >> $config_target_mak
7484echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007485
bellard97a847b2003-08-10 21:36:04 +00007486done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007487
Alex Bennéed75402b2018-04-04 20:27:05 +01007488if test -n "$enabled_cross_compilers"; then
7489 echo
7490 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7491fi
7492
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007493if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007494 echo "config-host.h: subdir-dtc" >> $config_host_mak
7495fi
Richard Hendersone219c492017-09-28 09:01:23 -07007496if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7497 echo "config-host.h: subdir-capstone" >> $config_host_mak
7498fi
7499if test -n "$LIBCAPSTONE"; then
7500 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7501fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007502
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007503if test "$numa" = "yes"; then
7504 echo "CONFIG_NUMA=y" >> $config_host_mak
7505fi
7506
John Snowfd0e6052015-03-25 18:57:39 -04007507if test "$ccache_cpp2" = "yes"; then
7508 echo "export CCACHE_CPP2=y" >> $config_host_mak
7509fi
7510
Peter Maydelle29e5c62018-11-02 11:52:38 +00007511# If we're using a separate build tree, set it up now.
7512# DIRS are directories which we simply mkdir in the build tree;
7513# LINKS are things to symlink back into the source tree
7514# (these can be both files and directories).
7515# Caution: do not add files or directories here using wildcards. This
7516# will result in problems later if a new file matching the wildcard is
7517# added to the source tree -- nothing will cause configure to be rerun
7518# so the build tree will be missing the link back to the new file, and
7519# tests might fail. Prefer to keep the relevant files in their own
7520# directory and symlink the directory instead.
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007521DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -05007522DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007523DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007524DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007525DIRS="$DIRS roms/seabios roms/vgabios"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007526LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7527LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7528LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7529LINKS="$LINKS tests/fp/Makefile"
7530LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7531LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7532LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7533LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7534LINKS="$LINKS pc-bios/qemu-icon.bmp"
7535LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007536LINKS="$LINKS tests/acceptance tests/data"
7537LINKS="$LINKS tests/qemu-iotests/check"
Richard Henderson753d11f2011-06-24 11:58:37 -07007538for bios_file in \
7539 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007540 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007541 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007542 $source_path/pc-bios/*.rom \
7543 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007544 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007545 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007546 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007547 $source_path/pc-bios/palcode-*
7548do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007549 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007550done
7551mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007552for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007553 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007554 symlink "$source_path/$f" "$f"
7555 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007556done
Paul Brook1ad21342009-05-19 16:17:58 +01007557
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007558# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007559for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007560 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007561 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007562 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007563 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007564 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007565 echo "CC=$cc" >> $config_mak
7566 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007567 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007568 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007569 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007570 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007571 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007572done
7573
Max Reitz76c75602014-05-24 23:24:56 +02007574# set up qemu-iotests in this build directory
7575iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007576
7577echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7578echo >> "$iotests_common_env"
7579echo "export PYTHON='$python'" >> "$iotests_common_env"
7580
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007581# Save the configure command line for later reuse.
7582cat <<EOD >config.status
7583#!/bin/sh
7584# Generated by configure.
7585# Run this file to recreate the current configuration.
7586# Compiler output produced by configure, useful for debugging
7587# configure, is in config.log if it exists.
7588EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007589
7590preserve_env() {
7591 envname=$1
7592
7593 eval envval=\$$envname
7594
7595 if test -n "$envval"
7596 then
7597 echo "$envname='$envval'" >> config.status
7598 echo "export $envname" >> config.status
7599 else
7600 echo "unset $envname" >> config.status
7601 fi
7602}
7603
7604# Preserve various env variables that influence what
7605# features/build target configure will detect
7606preserve_env AR
7607preserve_env AS
7608preserve_env CC
7609preserve_env CPP
7610preserve_env CXX
7611preserve_env INSTALL
7612preserve_env LD
7613preserve_env LD_LIBRARY_PATH
7614preserve_env LIBTOOL
7615preserve_env MAKE
7616preserve_env NM
7617preserve_env OBJCOPY
7618preserve_env PATH
7619preserve_env PKG_CONFIG
7620preserve_env PKG_CONFIG_LIBDIR
7621preserve_env PKG_CONFIG_PATH
7622preserve_env PYTHON
7623preserve_env SDL_CONFIG
7624preserve_env SDL2_CONFIG
7625preserve_env SMBD
7626preserve_env STRIP
7627preserve_env WINDRES
7628
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007629printf "exec" >>config.status
7630printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007631echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007632chmod +x config.status
7633
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007634rm -r "$TMPDIR1"