blob: 0886f45bf454aa465bb6646f7d5ddebaf6a46854 [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
Thomas Huthd376e9d2018-12-03 11:41:38 +01001939# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001940if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001941 if test "$modules" = "yes" ; then
1942 error_exit "static and modules are mutually incompatible"
1943 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001944 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001945 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001946 else
1947 pie="no"
1948 fi
1949fi
1950
Emilio G. Cota768b7852015-04-29 13:09:02 +02001951# Unconditional check for compiler __thread support
1952 cat > $TMPC << EOF
1953static __thread int tls_var;
1954int main(void) { return tls_var; }
1955EOF
1956
1957if ! compile_prog "-Werror" "" ; then
1958 error_exit "Your compiler does not support the __thread specifier for " \
1959 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1960fi
1961
Avi Kivity40d64442011-11-15 20:12:17 +02001962if test "$pie" = ""; then
1963 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001964 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001965 ;;
1966 *)
1967 pie="no"
1968 ;;
1969 esac
1970fi
1971
1972if test "$pie" != "no" ; then
1973 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001974
1975#ifdef __linux__
1976# define THREAD __thread
1977#else
1978# define THREAD
1979#endif
1980
1981static THREAD int tls_var;
1982
1983int main(void) { return tls_var; }
1984
Avi Kivity40d64442011-11-15 20:12:17 +02001985EOF
1986 if compile_prog "-fPIE -DPIE" "-pie"; then
1987 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1988 LDFLAGS="-pie $LDFLAGS"
1989 pie="yes"
1990 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1991 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1992 fi
1993 else
1994 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001995 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001996 else
1997 echo "Disabling PIE due to missing toolchain support"
1998 pie="no"
1999 fi
2000 fi
Brad46eef332013-12-10 19:49:08 -05002001
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04002002 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002003 CFLAGS_NOPIE="-fno-pie"
2004 LDFLAGS_NOPIE="-nopie"
2005 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002006fi
2007
Paolo Bonzini09dada42013-04-17 16:26:47 +02002008##########################################
2009# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2010# use i686 as default anyway, but for those that don't, an explicit
2011# specification is necessary
2012
2013if test "$cpu" = "i386"; then
2014 cat > $TMPC << EOF
2015static int sfaa(int *ptr)
2016{
2017 return __sync_fetch_and_and(ptr, 0);
2018}
2019
2020int main(void)
2021{
2022 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002023 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002024 sfaa(&val);
2025 return val;
2026}
2027EOF
2028 if ! compile_prog "" "" ; then
2029 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2030 fi
2031fi
2032
2033#########################################
bellardec530c82006-04-25 22:36:06 +00002034# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002035
bellardec530c82006-04-25 22:36:06 +00002036if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002037 if has $install; then
2038 :
2039 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002040 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2041 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2042 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002043 fi
Stefan Weil89138852016-05-16 15:10:20 +02002044 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002045 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2046 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2047 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002048 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002049 if has ar; then
2050 :
2051 else
bellardec530c82006-04-25 22:36:06 +00002052 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002053 error_exit "No path includes ar" \
2054 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002055 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002056 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002057 fi
ths5fafdf22007-09-16 21:08:06 +00002058fi
bellardec530c82006-04-25 22:36:06 +00002059
Stefan Weilafb63eb2012-09-26 22:04:38 +02002060if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002061 for target in $default_target_list; do
2062 supported_target $target 2>/dev/null && \
2063 target_list="$target_list $target"
2064 done
2065 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002066else
Stefan Weil89138852016-05-16 15:10:20 +02002067 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002068 for target in $target_list; do
2069 # Check that we recognised the target name; this allows a more
2070 # friendly error message than if we let it fall through.
2071 case " $default_target_list " in
2072 *" $target "*)
2073 ;;
2074 *)
2075 error_exit "Unknown target name '$target'"
2076 ;;
2077 esac
2078 supported_target $target || exit 1
2079 done
bellard5327cf42005-01-10 23:18:50 +00002080fi
Peter Maydell25b48332013-05-20 16:16:16 +01002081
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002082# see if system emulation was really requested
2083case " $target_list " in
2084 *"-softmmu "*) softmmu=yes
2085 ;;
2086 *) softmmu=no
2087 ;;
2088esac
bellard5327cf42005-01-10 23:18:50 +00002089
Juan Quintela249247c2009-08-12 18:20:25 +02002090feature_not_found() {
2091 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002092 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002093
Peter Maydell76ad07a2013-04-08 12:11:26 +01002094 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002095 "configure was not able to find it." \
2096 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002097}
2098
bellard7d132992003-03-06 23:23:54 +00002099# ---
2100# big/little endian test
2101cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002102short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2103short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2104extern int foo(short *, short *);
2105int main(int argc, char *argv[]) {
2106 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002107}
2108EOF
2109
Mike Frysinger61cc9192013-06-30 23:30:18 -04002110if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002111 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002112 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002113 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002114 bigendian="no"
2115 else
2116 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002117 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002118else
2119 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002120fi
2121
Juan Quintelab0a47e72009-08-12 18:29:49 +02002122##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002123# cocoa implies not SDL or GTK
2124# (the cocoa UI code currently assumes it is always the active UI
2125# and doesn't interact well with other UI frontend code)
2126if test "$cocoa" = "yes"; then
2127 if test "$sdl" = "yes"; then
2128 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2129 fi
2130 if test "$gtk" = "yes"; then
2131 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2132 fi
2133 gtk=no
2134 sdl=no
2135fi
2136
Eric Blake6b39b062016-10-11 10:46:23 -05002137# Some versions of Mac OS X incorrectly define SIZE_MAX
2138cat > $TMPC << EOF
2139#include <stdint.h>
2140#include <stdio.h>
2141int main(int argc, char *argv[]) {
2142 return printf("%zu", SIZE_MAX);
2143}
2144EOF
2145have_broken_size_max=no
2146if ! compile_object -Werror ; then
2147 have_broken_size_max=yes
2148fi
2149
Peter Maydella30878e2015-08-14 16:10:52 +01002150##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002151# L2TPV3 probe
2152
2153cat > $TMPC <<EOF
2154#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002155#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002156int main(void) { return sizeof(struct mmsghdr); }
2157EOF
2158if compile_prog "" "" ; then
2159 l2tpv3=yes
2160else
2161 l2tpv3=no
2162fi
2163
2164##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002165# MinGW / Mingw-w64 localtime_r/gmtime_r check
2166
2167if test "$mingw32" = "yes"; then
2168 # Some versions of MinGW / Mingw-w64 lack localtime_r
2169 # and gmtime_r entirely.
2170 #
2171 # Some versions of Mingw-w64 define a macro for
2172 # localtime_r/gmtime_r.
2173 #
2174 # Some versions of Mingw-w64 will define functions
2175 # for localtime_r/gmtime_r, but only if you have
2176 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2177 # though, unistd.h and pthread.h both define
2178 # that for you.
2179 #
2180 # So this #undef localtime_r and #include <unistd.h>
2181 # are not in fact redundant.
2182cat > $TMPC << EOF
2183#include <unistd.h>
2184#include <time.h>
2185#undef localtime_r
2186int main(void) { localtime_r(NULL, NULL); return 0; }
2187EOF
2188 if compile_prog "" "" ; then
2189 localtime_r="yes"
2190 else
2191 localtime_r="no"
2192 fi
2193fi
2194
2195##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002196# pkg-config probe
2197
2198if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002199 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002200fi
2201
2202##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002203# NPTL probe
2204
Peter Maydell24cb36a2013-07-16 18:45:00 +01002205if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002206 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002207#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002208#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002209int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002210#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2211#error bork
2212#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002213 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002214}
2215EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002216 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002217 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002218 fi
pbrookbd0c5662008-05-29 14:34:11 +00002219fi
2220
balrogac629222008-10-11 09:56:04 +00002221##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002222# lzo check
2223
2224if test "$lzo" != "no" ; then
2225 cat > $TMPC << EOF
2226#include <lzo/lzo1x.h>
2227int main(void) { lzo_version(); return 0; }
2228EOF
2229 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002230 libs_softmmu="$libs_softmmu -llzo2"
2231 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002232 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002233 if test "$lzo" = "yes"; then
2234 feature_not_found "liblzo2" "Install liblzo2 devel"
2235 fi
2236 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002237 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002238fi
2239
2240##########################################
2241# snappy check
2242
2243if test "$snappy" != "no" ; then
2244 cat > $TMPC << EOF
2245#include <snappy-c.h>
2246int main(void) { snappy_max_compressed_length(4096); return 0; }
2247EOF
2248 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002249 libs_softmmu="$libs_softmmu -lsnappy"
2250 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002251 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002252 if test "$snappy" = "yes"; then
2253 feature_not_found "libsnappy" "Install libsnappy devel"
2254 fi
2255 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002256 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002257fi
2258
2259##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002260# bzip2 check
2261
2262if test "$bzip2" != "no" ; then
2263 cat > $TMPC << EOF
2264#include <bzlib.h>
2265int main(void) { BZ2_bzlibVersion(); return 0; }
2266EOF
2267 if compile_prog "" "-lbz2" ; then
2268 bzip2="yes"
2269 else
2270 if test "$bzip2" = "yes"; then
2271 feature_not_found "libbzip2" "Install libbzip2 devel"
2272 fi
2273 bzip2="no"
2274 fi
2275fi
2276
2277##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002278# libseccomp check
2279
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002280libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002281if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002282 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002283 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002284 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002285 arm|aarch64)
2286 libseccomp_minver="2.2.3"
2287 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002288 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002289 libseccomp_minver="2.3.0"
2290 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002291 *)
2292 libseccomp_minver=""
2293 ;;
2294 esac
2295
2296 if test "$libseccomp_minver" != "" &&
2297 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002298 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2299 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002300 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002301 else
Andrew Jones693e5912015-09-30 11:59:18 -04002302 if test "$seccomp" = "yes" ; then
2303 if test "$libseccomp_minver" != "" ; then
2304 feature_not_found "libseccomp" \
2305 "Install libseccomp devel >= $libseccomp_minver"
2306 else
2307 feature_not_found "libseccomp" \
2308 "libseccomp is not supported for host cpu $cpu"
2309 fi
2310 fi
2311 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002312 fi
2313fi
2314##########################################
aliguorie37630c2009-04-22 15:19:10 +00002315# xen probe
2316
Juan Quintelafc321b42009-08-12 18:29:55 +02002317if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002318 # Check whether Xen library path is specified via --extra-ldflags to avoid
2319 # overriding this setting with pkg-config output. If not, try pkg-config
2320 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002321
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002322 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2323 $pkg_config --exists xencontrol ; then
2324 xen_ctrl_version="$(printf '%d%02d%02d' \
2325 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2326 xen=yes
2327 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2328 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002329 if $pkg_config --exists xentoolcore; then
2330 xen_pc="$xen_pc xentoolcore"
2331 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002332 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2333 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2334 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2335 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002336
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002337 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002338 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002339
2340 # First we test whether Xen headers and libraries are available.
2341 # If no, we are done and there is no Xen support.
2342 # If yes, more tests are run to detect the Xen version.
2343
2344 # Xen (any)
2345 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002346#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002347int main(void) {
2348 return 0;
2349}
2350EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002351 if ! compile_prog "" "$xen_libs" ; then
2352 # Xen not found
2353 if test "$xen" = "yes" ; then
2354 feature_not_found "xen" "Install xen devel"
2355 fi
2356 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002357
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002358 # Xen unstable
2359 elif
2360 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002361#undef XC_WANT_COMPAT_DEVICEMODEL_API
2362#define __XEN_TOOLS__
2363#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002364#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002365int main(void) {
2366 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002367 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002368
2369 xd = xendevicemodel_open(0, 0);
2370 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2371
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002372 xfmem = xenforeignmemory_open(0, 0);
2373 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2374
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002375 return 0;
2376}
2377EOF
2378 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2379 then
2380 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2381 xen_ctrl_version=41100
2382 xen=yes
2383 elif
2384 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002385#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2386#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002387#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002388int main(void) {
2389 xenforeignmemory_handle *xfmem;
2390
2391 xfmem = xenforeignmemory_open(0, 0);
2392 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002393 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002394
2395 return 0;
2396}
2397EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002398 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002399 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002400 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002401 xen_ctrl_version=41000
2402 xen=yes
2403 elif
2404 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002405#undef XC_WANT_COMPAT_DEVICEMODEL_API
2406#define __XEN_TOOLS__
2407#include <xendevicemodel.h>
2408int main(void) {
2409 xendevicemodel_handle *xd;
2410
2411 xd = xendevicemodel_open(0, 0);
2412 xendevicemodel_close(xd);
2413
2414 return 0;
2415}
2416EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002417 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2418 then
2419 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2420 xen_ctrl_version=40900
2421 xen=yes
2422 elif
2423 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002424/*
2425 * If we have stable libs the we don't want the libxc compat
2426 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002427 *
2428 * Also, check if xengnttab_grant_copy_segment_t is defined and
2429 * grant copy operation is implemented.
2430 */
2431#undef XC_WANT_COMPAT_EVTCHN_API
2432#undef XC_WANT_COMPAT_GNTTAB_API
2433#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2434#include <xenctrl.h>
2435#include <xenstore.h>
2436#include <xenevtchn.h>
2437#include <xengnttab.h>
2438#include <xenforeignmemory.h>
2439#include <stdint.h>
2440#include <xen/hvm/hvm_info_table.h>
2441#if !defined(HVM_MAX_VCPUS)
2442# error HVM_MAX_VCPUS not defined
2443#endif
2444int main(void) {
2445 xc_interface *xc = NULL;
2446 xenforeignmemory_handle *xfmem;
2447 xenevtchn_handle *xe;
2448 xengnttab_handle *xg;
2449 xen_domain_handle_t handle;
2450 xengnttab_grant_copy_segment_t* seg = NULL;
2451
2452 xs_daemon_open();
2453
2454 xc = xc_interface_open(0, 0, 0);
2455 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2456 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2457 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2458 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2459 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2460
2461 xfmem = xenforeignmemory_open(0, 0);
2462 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2463
2464 xe = xenevtchn_open(0, 0);
2465 xenevtchn_fd(xe);
2466
2467 xg = xengnttab_open(0, 0);
2468 xengnttab_grant_copy(xg, 0, seg);
2469
2470 return 0;
2471}
2472EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002473 compile_prog "" "$xen_libs $xen_stable_libs"
2474 then
2475 xen_ctrl_version=40800
2476 xen=yes
2477 elif
2478 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002479/*
2480 * If we have stable libs the we don't want the libxc compat
2481 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002482 */
2483#undef XC_WANT_COMPAT_EVTCHN_API
2484#undef XC_WANT_COMPAT_GNTTAB_API
2485#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2486#include <xenctrl.h>
2487#include <xenstore.h>
2488#include <xenevtchn.h>
2489#include <xengnttab.h>
2490#include <xenforeignmemory.h>
2491#include <stdint.h>
2492#include <xen/hvm/hvm_info_table.h>
2493#if !defined(HVM_MAX_VCPUS)
2494# error HVM_MAX_VCPUS not defined
2495#endif
2496int main(void) {
2497 xc_interface *xc = NULL;
2498 xenforeignmemory_handle *xfmem;
2499 xenevtchn_handle *xe;
2500 xengnttab_handle *xg;
2501 xen_domain_handle_t handle;
2502
2503 xs_daemon_open();
2504
2505 xc = xc_interface_open(0, 0, 0);
2506 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2507 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2508 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2509 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2510 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2511
2512 xfmem = xenforeignmemory_open(0, 0);
2513 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2514
2515 xe = xenevtchn_open(0, 0);
2516 xenevtchn_fd(xe);
2517
2518 xg = xengnttab_open(0, 0);
2519 xengnttab_map_grant_ref(xg, 0, 0, 0);
2520
2521 return 0;
2522}
2523EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002524 compile_prog "" "$xen_libs $xen_stable_libs"
2525 then
2526 xen_ctrl_version=40701
2527 xen=yes
2528 elif
2529 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002530#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002531#include <stdint.h>
2532int main(void) {
2533 xc_interface *xc = NULL;
2534 xen_domain_handle_t handle;
2535 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2536 return 0;
2537}
2538EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002539 compile_prog "" "$xen_libs"
2540 then
2541 xen_ctrl_version=40700
2542 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002543
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002544 # Xen 4.6
2545 elif
2546 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002547#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002548#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002549#include <stdint.h>
2550#include <xen/hvm/hvm_info_table.h>
2551#if !defined(HVM_MAX_VCPUS)
2552# error HVM_MAX_VCPUS not defined
2553#endif
2554int main(void) {
2555 xc_interface *xc;
2556 xs_daemon_open();
2557 xc = xc_interface_open(0, 0, 0);
2558 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2559 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002560 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002561 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002562 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002563 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002564 return 0;
2565}
2566EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002567 compile_prog "" "$xen_libs"
2568 then
2569 xen_ctrl_version=40600
2570 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002571
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002572 # Xen 4.5
2573 elif
2574 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002575#include <xenctrl.h>
2576#include <xenstore.h>
2577#include <stdint.h>
2578#include <xen/hvm/hvm_info_table.h>
2579#if !defined(HVM_MAX_VCPUS)
2580# error HVM_MAX_VCPUS not defined
2581#endif
2582int main(void) {
2583 xc_interface *xc;
2584 xs_daemon_open();
2585 xc = xc_interface_open(0, 0, 0);
2586 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2587 xc_gnttab_open(NULL, 0);
2588 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2589 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002590 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2591 return 0;
2592}
2593EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002594 compile_prog "" "$xen_libs"
2595 then
2596 xen_ctrl_version=40500
2597 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002598
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002599 elif
2600 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002601#include <xenctrl.h>
2602#include <xenstore.h>
2603#include <stdint.h>
2604#include <xen/hvm/hvm_info_table.h>
2605#if !defined(HVM_MAX_VCPUS)
2606# error HVM_MAX_VCPUS not defined
2607#endif
2608int main(void) {
2609 xc_interface *xc;
2610 xs_daemon_open();
2611 xc = xc_interface_open(0, 0, 0);
2612 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2613 xc_gnttab_open(NULL, 0);
2614 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2615 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002616 return 0;
2617}
2618EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002619 compile_prog "" "$xen_libs"
2620 then
2621 xen_ctrl_version=40200
2622 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002623
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002624 else
2625 if test "$xen" = "yes" ; then
2626 feature_not_found "xen (unsupported version)" \
2627 "Install a supported xen (xen 4.2 or newer)"
2628 fi
2629 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002630 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002631
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002632 if test "$xen" = yes; then
2633 if test $xen_ctrl_version -ge 40701 ; then
2634 libs_softmmu="$xen_stable_libs $libs_softmmu"
2635 fi
2636 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002637 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002638 fi
aliguorie37630c2009-04-22 15:19:10 +00002639fi
2640
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002641if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002642 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002643 xen_pci_passthrough=yes
2644 else
2645 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002646 error_exit "User requested feature Xen PCI Passthrough" \
2647 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002648 fi
2649 xen_pci_passthrough=no
2650 fi
2651fi
2652
Ian Campbell64a7ad62016-01-15 13:23:44 +00002653if test "$xen_pv_domain_build" = "yes" &&
2654 test "$xen" != "yes"; then
2655 error_exit "User requested Xen PV domain builder support" \
2656 "which requires Xen support."
2657fi
2658
aliguorie37630c2009-04-22 15:19:10 +00002659##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002660# Windows Hypervisor Platform accelerator (WHPX) check
2661if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002662 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002663 whpx="yes"
2664 else
2665 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002666 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002667 fi
2668 whpx="no"
2669 fi
2670fi
2671
2672##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002673# Sparse probe
2674if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002675 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002676 sparse=yes
2677 else
2678 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002679 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002680 fi
2681 sparse=no
2682 fi
2683fi
2684
2685##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002686# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002687if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002688 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002689 x11_cflags=$($pkg_config --cflags x11)
2690 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002691fi
2692
2693##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002694# GTK probe
2695
2696if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002697 gtkpackage="gtk+-3.0"
2698 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002699 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002700 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002701 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2702 gtk_libs=$($pkg_config --libs $gtkpackage)
2703 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002704 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002705 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002706 gtk_cflags="$gtk_cflags $x11_cflags"
2707 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002708 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002709 gtk="yes"
2710 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002711 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002712 else
2713 gtk="no"
2714 fi
2715fi
2716
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002717
2718##########################################
2719# GNUTLS probe
2720
2721if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002722 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002723 gnutls_cflags=$($pkg_config --cflags gnutls)
2724 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002725 libs_softmmu="$gnutls_libs $libs_softmmu"
2726 libs_tools="$gnutls_libs $libs_tools"
2727 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2728 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002729 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002730 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002731 else
2732 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002733 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002734fi
2735
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002736
2737# If user didn't give a --disable/enable-gcrypt flag,
2738# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002739# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002740if test -z "$gcrypt"
2741then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002742 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002743 then
2744 gcrypt="no"
2745 fi
2746fi
2747
2748# If user didn't give a --disable/enable-nettle flag,
2749# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002750# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002751if test -z "$nettle"
2752then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002753 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002754 then
2755 nettle="no"
2756 fi
2757fi
2758
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002759has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002760 if ! has "libgcrypt-config"
2761 then
2762 return 1
2763 fi
2764
2765 if test -n "$cross_prefix"
2766 then
Stefan Weil89138852016-05-16 15:10:20 +02002767 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002768 if test "$host-" != $cross_prefix
2769 then
2770 return 1
2771 fi
2772 fi
2773
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002774 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2775 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2776
2777 if test $maj != 1 || test $min -lt 5
2778 then
2779 return 1
2780 fi
2781
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002782 return 0
2783}
2784
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002785
2786if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002787 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002788 nettle_cflags=$($pkg_config --cflags nettle)
2789 nettle_libs=$($pkg_config --libs nettle)
2790 nettle_version=$($pkg_config --modversion nettle)
2791 libs_softmmu="$nettle_libs $libs_softmmu"
2792 libs_tools="$nettle_libs $libs_tools"
2793 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2794 nettle="yes"
2795
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002796 if test -z "$gcrypt"; then
2797 gcrypt="no"
2798 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002799 else
2800 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002801 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002802 else
2803 nettle="no"
2804 fi
2805 fi
2806fi
2807
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002808if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002809 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002810 gcrypt_cflags=$(libgcrypt-config --cflags)
2811 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002812 # Debian has remove -lgpg-error from libgcrypt-config
2813 # as it "spreads unnecessary dependencies" which in
2814 # turn breaks static builds...
2815 if test "$static" = "yes"
2816 then
2817 gcrypt_libs="$gcrypt_libs -lgpg-error"
2818 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002819 libs_softmmu="$gcrypt_libs $libs_softmmu"
2820 libs_tools="$gcrypt_libs $libs_tools"
2821 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002822 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002823
2824 cat > $TMPC << EOF
2825#include <gcrypt.h>
2826int main(void) {
2827 gcry_mac_hd_t handle;
2828 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2829 GCRY_MAC_FLAG_SECURE, NULL);
2830 return 0;
2831}
2832EOF
2833 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2834 gcrypt_hmac=yes
2835 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002836 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002837 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002838 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002839 else
2840 gcrypt="no"
2841 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002842 fi
2843fi
2844
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002845
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002846if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2847then
2848 error_exit "Only one of gcrypt & nettle can be enabled"
2849fi
2850
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002851##########################################
2852# libtasn1 - only for the TLS creds/session test suite
2853
2854tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002855tasn1_cflags=""
2856tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002857if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002858 tasn1_cflags=$($pkg_config --cflags libtasn1)
2859 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002860else
2861 tasn1=no
2862fi
2863
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002864
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002865##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002866# getifaddrs (for tests/test-io-channel-socket )
2867
2868have_ifaddrs_h=yes
2869if ! check_include "ifaddrs.h" ; then
2870 have_ifaddrs_h=no
2871fi
2872
2873##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002874# VTE probe
2875
2876if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002877 vteminversion="0.32.0"
2878 if $pkg_config --exists "vte-2.91"; then
2879 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002880 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002881 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002882 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002883 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002884 vte_cflags=$($pkg_config --cflags $vtepackage)
2885 vte_libs=$($pkg_config --libs $vtepackage)
2886 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002887 vte="yes"
2888 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002889 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002890 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002891 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002892 fi
2893fi
2894
2895##########################################
bellard11d9f692004-04-02 20:55:59 +00002896# SDL probe
2897
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002898# Look for sdl configuration program (pkg-config or sdl-config). Try
2899# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002900
Peter Xuc6093a02018-04-10 13:40:34 +08002901sdl_probe ()
2902{
2903 sdl_too_old=no
2904 if test "$sdlabi" = ""; then
2905 if $pkg_config --exists "sdl2"; then
2906 sdlabi=2.0
2907 elif $pkg_config --exists "sdl"; then
2908 sdlabi=1.2
2909 else
2910 sdlabi=2.0
2911 fi
LoĂŻc Miniera0dfd8a2010-01-28 21:15:18 +00002912 fi
bellard11d9f692004-04-02 20:55:59 +00002913
Peter Xuc6093a02018-04-10 13:40:34 +08002914 if test $sdlabi = "2.0"; then
2915 sdl_config=$sdl2_config
2916 sdlname=sdl2
2917 sdlconfigname=sdl2_config
2918 elif test $sdlabi = "1.2"; then
2919 sdlname=sdl
2920 sdlconfigname=sdl_config
2921 else
2922 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2923 fi
2924
2925 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2926 sdl_config=$sdlconfigname
2927 fi
2928
2929 if $pkg_config $sdlname --exists; then
2930 sdlconfig="$pkg_config $sdlname"
2931 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2932 elif has ${sdl_config}; then
2933 sdlconfig="$sdl_config"
2934 sdlversion=$($sdlconfig --version)
2935 else
2936 if test "$sdl" = "yes" ; then
2937 feature_not_found "sdl" "Install SDL2-devel"
2938 fi
2939 sdl=no
2940 # no need to do the rest
2941 return
2942 fi
2943 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2944 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2945 fi
2946
Juan Quintelaac119f92009-07-27 16:13:15 +02002947 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002948#include <SDL.h>
2949#undef main /* We don't want SDL to override our main() */
2950int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2951EOF
Stefan Weil89138852016-05-16 15:10:20 +02002952 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002953 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002954 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002955 if $pkg_config $sdlname --exists; then
2956 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2957 else
2958 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2959 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002960 else
Stefan Weil89138852016-05-16 15:10:20 +02002961 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002962 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002963 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002964 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002965 sdl_too_old=yes
2966 else
Peter Maydella30878e2015-08-14 16:10:52 +01002967 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002968 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002969
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002970 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002971 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002972 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002973 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2974 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002975 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002976 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002977 :
2978 else
2979 sdl=no
2980 fi
2981 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002982 else # sdl not found
2983 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002984 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002985 fi
2986 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002987 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08002988}
2989
2990if test "$sdl" != "no" ; then
2991 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02002992fi
bellard11d9f692004-04-02 20:55:59 +00002993
aliguori5368a422009-03-03 17:37:21 +00002994if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002995 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002996#include <SDL.h>
2997#if defined(SDL_VIDEO_DRIVER_X11)
2998#include <X11/XKBlib.h>
2999#else
3000#error No x11 support
3001#endif
3002int main(void) { return 0; }
3003EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003004 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003005 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003006 sdl_cflags="$sdl_cflags $x11_cflags"
3007 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003008 fi
aliguori5368a422009-03-03 17:37:21 +00003009fi
3010
ths8f28f3f2007-01-05 21:25:54 +00003011##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003012# RDMA needs OpenFabrics libraries
3013if test "$rdma" != "no" ; then
3014 cat > $TMPC <<EOF
3015#include <rdma/rdma_cma.h>
3016int main(void) { return 0; }
3017EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003018 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003019 if compile_prog "" "$rdma_libs" ; then
3020 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003021 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003022 else
3023 if test "$rdma" = "yes" ; then
3024 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003025 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003026 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003027 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003028 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3029 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3030 fi
3031 rdma="no"
3032 fi
3033fi
3034
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003035##########################################
3036# PVRDMA detection
3037
3038cat > $TMPC <<EOF &&
3039#include <sys/mman.h>
3040
3041int
3042main(void)
3043{
3044 char buf = 0;
3045 void *addr = &buf;
3046 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3047
3048 return 0;
3049}
3050EOF
3051
3052if test "$rdma" = "yes" ; then
3053 case "$pvrdma" in
3054 "")
3055 if compile_prog "" ""; then
3056 pvrdma="yes"
3057 else
3058 pvrdma="no"
3059 fi
3060 ;;
3061 "yes")
3062 if ! compile_prog "" ""; then
3063 error_exit "PVRDMA is not supported since mremap is not implemented"
3064 fi
3065 pvrdma="yes"
3066 ;;
3067 "no")
3068 pvrdma="no"
3069 ;;
3070 esac
3071else
3072 if test "$pvrdma" = "yes" ; then
3073 error_exit "PVRDMA requires rdma suppport"
3074 fi
3075 pvrdma="no"
3076fi
ths8d5d2d42007-08-25 01:37:51 +00003077
3078##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003079# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003080if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003081 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003082#include <sasl/sasl.h>
3083#include <stdio.h>
3084int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3085EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003086 # Assuming Cyrus-SASL installed in /usr prefix
3087 vnc_sasl_cflags=""
3088 vnc_sasl_libs="-lsasl2"
3089 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3090 vnc_sasl=yes
3091 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003092 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003093 else
3094 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003095 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003096 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003097 vnc_sasl=no
3098 fi
aliguori2f9606b2009-03-06 20:27:28 +00003099fi
3100
3101##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003102# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003103if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003104cat > $TMPC <<EOF
3105#include <stdio.h>
3106#include <jpeglib.h>
3107int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3108EOF
3109 vnc_jpeg_cflags=""
3110 vnc_jpeg_libs="-ljpeg"
3111 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3112 vnc_jpeg=yes
3113 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003114 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003115 else
3116 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003117 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003118 fi
3119 vnc_jpeg=no
3120 fi
3121fi
3122
3123##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003124# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003125if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003126cat > $TMPC <<EOF
3127//#include <stdio.h>
3128#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003129#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003130int main(void) {
3131 png_structp png_ptr;
3132 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003133 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003134}
3135EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003136 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003137 vnc_png_cflags=$($pkg_config libpng --cflags)
3138 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003139 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003140 vnc_png_cflags=""
3141 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003142 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003143 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3144 vnc_png=yes
3145 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003146 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003147 else
3148 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003149 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003150 fi
3151 vnc_png=no
3152 fi
3153fi
3154
3155##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003156# xkbcommon probe
3157if test "$xkbcommon" != "no" ; then
3158 if $pkg_config xkbcommon --exists; then
3159 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3160 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3161 xkbcommon=yes
3162 else
3163 if test "$xkbcommon" = "yes" ; then
3164 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3165 fi
3166 xkbcommon=no
3167 fi
3168fi
3169
3170##########################################
aliguori76655d62009-03-06 20:27:37 +00003171# fnmatch() probe, used for ACL routines
3172fnmatch="no"
3173cat > $TMPC << EOF
3174#include <fnmatch.h>
3175int main(void)
3176{
3177 fnmatch("foo", "foo", 0);
3178 return 0;
3179}
3180EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003181if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003182 fnmatch="yes"
3183fi
3184
3185##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003186# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003187if test "$xfs" != "no" ; then
3188 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003189#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003190#include <xfs/xfs.h>
3191int main(void)
3192{
3193 xfsctl(NULL, 0, 0, NULL);
3194 return 0;
3195}
3196EOF
3197 if compile_prog "" "" ; then
3198 xfs="yes"
3199 else
3200 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003201 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003202 fi
3203 xfs=no
3204 fi
3205fi
3206
3207##########################################
ths8a16d272008-07-19 09:56:24 +00003208# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003209if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003210 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003211 cat > $TMPC << EOF
3212#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003213int main(void)
3214{
3215 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003216 char s[] = "";
3217 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003218 return 0;
3219}
ths8a16d272008-07-19 09:56:24 +00003220EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003221 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003222 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003223 else
3224 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003225 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003226 fi
3227 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003228 fi
ths8a16d272008-07-19 09:56:24 +00003229fi
3230
3231##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003232# netmap support probe
3233# Apart from looking for netmap headers, we make sure that the host API version
3234# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3235# a minor/major version number. Minor new features will be marked with values up
3236# to 15, and if something happens that requires a change to the backend we will
3237# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003238if test "$netmap" != "no" ; then
3239 cat > $TMPC << EOF
3240#include <inttypes.h>
3241#include <net/if.h>
3242#include <net/netmap.h>
3243#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003244#if (NETMAP_API < 11) || (NETMAP_API > 15)
3245#error
3246#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003247int main(void) { return 0; }
3248EOF
3249 if compile_prog "" "" ; then
3250 netmap=yes
3251 else
3252 if test "$netmap" = "yes" ; then
3253 feature_not_found "netmap"
3254 fi
3255 netmap=no
3256 fi
3257fi
3258
3259##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003260# libcap-ng library probe
3261if test "$cap_ng" != "no" ; then
3262 cap_libs="-lcap-ng"
3263 cat > $TMPC << EOF
3264#include <cap-ng.h>
3265int main(void)
3266{
3267 capng_capability_to_name(CAPNG_EFFECTIVE);
3268 return 0;
3269}
3270EOF
3271 if compile_prog "" "$cap_libs" ; then
3272 cap_ng=yes
3273 libs_tools="$cap_libs $libs_tools"
3274 else
3275 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003276 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003277 fi
3278 cap_ng=no
3279 fi
3280fi
3281
3282##########################################
malcc2de5c92008-06-28 19:13:06 +00003283# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003284
malcc2de5c92008-06-28 19:13:06 +00003285audio_drv_probe()
3286{
3287 drv=$1
3288 hdr=$2
3289 lib=$3
3290 exp=$4
3291 cfl=$5
3292 cat > $TMPC << EOF
3293#include <$hdr>
3294int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003295EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003296 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003297 :
3298 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003299 error_exit "$drv check failed" \
3300 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003301 fi
3302}
3303
Stefan Weil89138852016-05-16 15:10:20 +02003304audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003305for drv in $audio_drv_list; do
3306 case $drv in
3307 alsa)
3308 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003309 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003310 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003311 ;;
3312
malcb8e59f12008-07-02 21:03:08 +00003313 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003314 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3315 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003316 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003317 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003318 ;;
3319
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003320 sdl)
3321 if test "$sdl" = "no"; then
3322 error_exit "sdl not found or disabled, can not use sdl audio driver"
3323 fi
3324 ;;
3325
Juan Quintela997e6902009-08-03 14:46:29 +02003326 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003327 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003328 ;;
3329
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003330 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003331 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003332 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003333 ;;
3334
3335 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003336 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003337 ;;
3338
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003339 wav)
3340 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003341 ;;
3342
malce4c63a62008-07-19 16:15:16 +00003343 *)
malc1c9b2a52008-07-19 16:57:30 +00003344 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003345 error_exit "Unknown driver '$drv' selected" \
3346 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003347 }
3348 ;;
malcc2de5c92008-06-28 19:13:06 +00003349 esac
3350done
ths8f28f3f2007-01-05 21:25:54 +00003351
balrog4d3b6f62008-02-10 16:33:14 +00003352##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003353# BrlAPI probe
3354
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003355if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003356 brlapi_libs="-lbrlapi"
3357 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003358#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003359#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003360int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3361EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003362 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003363 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003364 else
3365 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003366 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003367 fi
3368 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003369 fi
3370fi
aurel322e4d9fb2008-04-08 06:01:02 +00003371
3372##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003373# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003374if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003375 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003376 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3377 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003378 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003379 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003380 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003381 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003382 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003383 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003384#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003385#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003386#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003387int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003388 wchar_t wch = L'w';
3389 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003390 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003391 addwstr(L"wide chars\n");
3392 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003393 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003394 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003395}
balrog4d3b6f62008-02-10 16:33:14 +00003396EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003397 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003398 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003399 # Make sure we get the wide character prototypes
3400 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003401 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003402 for curses_lib in $curses_lib_list; do
3403 unset IFS
3404 if compile_prog "$curses_inc" "$curses_lib" ; then
3405 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003406 break
3407 fi
3408 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003409 if test "$curses_found" = yes ; then
3410 break
3411 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003412 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003413 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003414 if test "$curses_found" = "yes" ; then
3415 curses=yes
3416 else
3417 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003418 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003419 fi
3420 curses=no
3421 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003422fi
balrog4d3b6f62008-02-10 16:33:14 +00003423
blueswir1414f0da2008-08-15 18:20:52 +00003424##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003425# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003426if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003427 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003428 curlconfig="$pkg_config libcurl"
3429 else
3430 curlconfig=curl-config
3431 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003432 cat > $TMPC << EOF
3433#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003434int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003435EOF
Stefan Weil89138852016-05-16 15:10:20 +02003436 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3437 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003438 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003439 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003440 else
3441 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003442 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003443 fi
3444 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003445 fi
3446fi # test "$curl"
3447
3448##########################################
balrogfb599c92008-09-28 23:49:55 +00003449# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003450if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003451 cat > $TMPC << EOF
3452#include <bluetooth/bluetooth.h>
3453int main(void) { return bt_error(0); }
3454EOF
Stefan Weil89138852016-05-16 15:10:20 +02003455 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3456 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003457 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003458 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003459 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003460 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003461 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003462 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003463 fi
balroge820e3f2008-09-30 02:27:44 +00003464 bluez="no"
3465 fi
balrogfb599c92008-09-28 23:49:55 +00003466fi
3467
3468##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003469# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003470
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003471glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003472glib_modules=gthread-2.0
3473if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003474 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003475fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003476
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003477# This workaround is required due to a bug in pkg-config file for glib as it
3478# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3479
3480if test "$static" = yes -a "$mingw32" = yes; then
3481 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3482fi
3483
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003484for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003485 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003486 glib_cflags=$($pkg_config --cflags $i)
3487 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003488 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003489 LIBS="$glib_libs $LIBS"
3490 libs_qga="$glib_libs $libs_qga"
3491 else
3492 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3493 fi
3494done
3495
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003496# Sanity check that the current size_t matches the
3497# size that glib thinks it should be. This catches
3498# problems on multi-arch where people try to build
3499# 32-bit QEMU while pointing at 64-bit glib headers
3500cat > $TMPC <<EOF
3501#include <glib.h>
3502#include <unistd.h>
3503
3504#define QEMU_BUILD_BUG_ON(x) \
3505 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3506
3507int main(void) {
3508 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3509 return 0;
3510}
3511EOF
3512
Stefan Weil5919e032016-04-28 23:33:41 +02003513if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003514 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3515 "You probably need to set PKG_CONFIG_LIBDIR"\
3516 "to point to the right pkg-config files for your"\
3517 "build target"
3518fi
3519
John Snowbbbf2e02015-03-25 18:57:38 -04003520# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3521cat > $TMPC << EOF
3522#include <glib.h>
3523int main(void) { return 0; }
3524EOF
3525if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3526 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3527 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3528 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3529 fi
3530fi
3531
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003532#########################################
3533# zlib check
3534
3535if test "$zlib" != "no" ; then
3536 if $pkg_config --exists zlib; then
3537 zlib_cflags=$($pkg_config --cflags zlib)
3538 zlib_libs=$($pkg_config --libs zlib)
3539 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3540 LIBS="$zlib_libs $LIBS"
3541 else
3542 cat > $TMPC << EOF
3543#include <zlib.h>
3544int main(void) { zlibVersion(); return 0; }
3545EOF
3546 if compile_prog "" "-lz" ; then
3547 LIBS="$LIBS -lz"
3548 else
3549 error_exit "zlib check failed" \
3550 "Make sure to have the zlib libs and headers installed."
3551 fi
3552 fi
3553fi
3554
Fam Zhenge26110c2014-02-10 14:48:57 +08003555##########################################
3556# SHA command probe for modules
3557if test "$modules" = yes; then
3558 shacmd_probe="sha1sum sha1 shasum"
3559 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003560 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003561 shacmd="$c"
3562 break
3563 fi
3564 done
3565 if test "$shacmd" = ""; then
3566 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3567 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003568fi
3569
3570##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003571# pixman support probe
3572
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003573if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003574 pixman_cflags=
3575 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003576elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003577 pixman_cflags=$($pkg_config --cflags pixman-1)
3578 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003579else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003580 error_exit "pixman >= 0.21.8 not present." \
3581 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003582fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003583
3584##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003585# libmpathpersist probe
3586
3587if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003588 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003589 cat > $TMPC <<EOF
3590#include <libudev.h>
3591#include <mpath_persist.h>
3592unsigned mpath_mx_alloc_len = 1024;
3593int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003594static struct config *multipath_conf;
3595extern struct udev *udev;
3596extern struct config *get_multipath_config(void);
3597extern void put_multipath_config(struct config *conf);
3598struct udev *udev;
3599struct config *get_multipath_config(void) { return multipath_conf; }
3600void put_multipath_config(struct config *conf) { }
3601
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003602int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003603 udev = udev_new();
3604 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003605 return 0;
3606}
3607EOF
3608 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3609 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003610 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003611 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003612 # probe for the old API
3613 cat > $TMPC <<EOF
3614#include <libudev.h>
3615#include <mpath_persist.h>
3616unsigned mpath_mx_alloc_len = 1024;
3617int logsink;
3618int main(void) {
3619 struct udev *udev = udev_new();
3620 mpath_lib_init(udev);
3621 return 0;
3622}
3623EOF
3624 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3625 mpathpersist=yes
3626 mpathpersist_new_api=no
3627 else
3628 mpathpersist=no
3629 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003630 fi
3631else
3632 mpathpersist=no
3633fi
3634
3635##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303636# libcap probe
3637
3638if test "$cap" != "no" ; then
3639 cat > $TMPC <<EOF
3640#include <stdio.h>
3641#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003642int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303643EOF
3644 if compile_prog "" "-lcap" ; then
3645 cap=yes
3646 else
3647 cap=no
3648 fi
3649fi
3650
3651##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003652# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003653PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003654
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003655pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003656cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003657#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003658static void *f(void *p) { return NULL; }
3659int main(void) {
3660 pthread_t thread;
3661 pthread_create(&thread, 0, f, 0);
3662 return 0;
3663}
blueswir1414f0da2008-08-15 18:20:52 +00003664EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003665if compile_prog "" "" ; then
3666 pthread=yes
3667else
3668 for pthread_lib in $PTHREADLIBS_LIST; do
3669 if compile_prog "" "$pthread_lib" ; then
3670 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003671 found=no
3672 for lib_entry in $LIBS; do
3673 if test "$lib_entry" = "$pthread_lib"; then
3674 found=yes
3675 break
3676 fi
3677 done
3678 if test "$found" = "no"; then
3679 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003680 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003681 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003682 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003683 break
3684 fi
3685 done
3686fi
blueswir1414f0da2008-08-15 18:20:52 +00003687
Anthony Liguori4617e592009-08-25 17:21:56 -05003688if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003689 error_exit "pthread check failed" \
3690 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003691fi
3692
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003693# check for pthread_setname_np
3694pthread_setname_np=no
3695cat > $TMPC << EOF
3696#include <pthread.h>
3697
3698static void *f(void *p) { return NULL; }
3699int main(void)
3700{
3701 pthread_t thread;
3702 pthread_create(&thread, 0, f, 0);
3703 pthread_setname_np(thread, "QEMU");
3704 return 0;
3705}
3706EOF
3707if compile_prog "" "$pthread_lib" ; then
3708 pthread_setname_np=yes
3709fi
3710
aliguoribf9298b2008-12-05 20:05:26 +00003711##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003712# rbd probe
3713if test "$rbd" != "no" ; then
3714 cat > $TMPC <<EOF
3715#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003716#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003717int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003718 rados_t cluster;
3719 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003720 return 0;
3721}
3722EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003723 rbd_libs="-lrbd -lrados"
3724 if compile_prog "" "$rbd_libs" ; then
3725 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003726 else
3727 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003728 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003729 fi
3730 rbd=no
3731 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003732fi
3733
3734##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003735# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003736min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003737if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003738 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003739 libssh2_cflags=$($pkg_config libssh2 --cflags)
3740 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003741 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003742 else
3743 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003744 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003745 fi
3746 libssh2=no
3747 fi
3748fi
3749
3750##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003751# libssh2_sftp_fsync probe
3752
3753if test "$libssh2" = "yes"; then
3754 cat > $TMPC <<EOF
3755#include <stdio.h>
3756#include <libssh2.h>
3757#include <libssh2_sftp.h>
3758int main(void) {
3759 LIBSSH2_SESSION *session;
3760 LIBSSH2_SFTP *sftp;
3761 LIBSSH2_SFTP_HANDLE *sftp_handle;
3762 session = libssh2_session_init ();
3763 sftp = libssh2_sftp_init (session);
3764 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3765 libssh2_sftp_fsync (sftp_handle);
3766 return 0;
3767}
3768EOF
3769 # libssh2_cflags/libssh2_libs defined in previous test.
3770 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3771 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3772 fi
3773fi
3774
3775##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003776# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003777
3778if test "$linux_aio" != "no" ; then
3779 cat > $TMPC <<EOF
3780#include <libaio.h>
3781#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003782#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003783int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3784EOF
3785 if compile_prog "" "-laio" ; then
3786 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003787 else
3788 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003789 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003790 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003791 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003792 fi
3793fi
3794
3795##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003796# TPM passthrough is only on x86 Linux
3797
3798if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3799 tpm_passthrough=$tpm
3800else
3801 tpm_passthrough=no
3802fi
3803
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003804# TPM emulator is for all posix systems
3805if test "$mingw32" != "yes"; then
3806 tpm_emulator=$tpm
3807else
3808 tpm_emulator=no
3809fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003810##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003811# attr probe
3812
3813if test "$attr" != "no" ; then
3814 cat > $TMPC <<EOF
3815#include <stdio.h>
3816#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003817#ifdef CONFIG_LIBATTR
3818#include <attr/xattr.h>
3819#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003820#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003821#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003822int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3823EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003824 if compile_prog "" "" ; then
3825 attr=yes
3826 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003827 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003828 attr=yes
3829 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003830 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003831 else
3832 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003833 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003834 fi
3835 attr=no
3836 fi
3837fi
3838
3839##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003840# iovec probe
3841cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003842#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003843#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003844#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003845int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003846EOF
3847iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003848if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003849 iovec=yes
3850fi
3851
aurel32f652e6a2008-12-16 10:43:48 +00003852##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003853# preadv probe
3854cat > $TMPC <<EOF
3855#include <sys/types.h>
3856#include <sys/uio.h>
3857#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003858int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003859EOF
3860preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003861if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003862 preadv=yes
3863fi
3864
3865##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003866# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003867# fdt support is mandatory for at least some target architectures,
3868# so insist on it if we're building those system emulators.
3869fdt_required=no
3870for target in $target_list; do
3871 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003872 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003873 fdt_required=yes
3874 ;;
3875 esac
3876done
3877
3878if test "$fdt_required" = "yes"; then
3879 if test "$fdt" = "no"; then
3880 error_exit "fdt disabled but some requested targets require it." \
3881 "You can turn off fdt only if you also disable all the system emulation" \
3882 "targets which need it (by specifying a cut down --target-list)."
3883 fi
3884 fdt=yes
3885fi
3886
Juan Quintela2df87df2009-08-12 18:29:54 +02003887if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003888 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003889 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003890 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003891 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003892#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003893#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003894int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003895EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003896 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003897 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003898 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003899 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003900 # have GIT checkout, so activate dtc submodule
3901 if test -e "${source_path}/.git" ; then
3902 git_submodules="${git_submodules} dtc"
3903 fi
3904 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003905 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003906 mkdir -p dtc
3907 if [ "$pwd_is_source_path" != "y" ] ; then
3908 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3909 symlink "$source_path/dtc/scripts" "dtc/scripts"
3910 fi
3911 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003912 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3913 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003914 elif test "$fdt" = "yes" ; then
3915 # Not a git build & no libfdt found, prompt for system install
3916 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3917 "Please install the DTC (libfdt) devel package"
3918 else
3919 # don't have and don't want
3920 fdt_libs=
3921 fdt=no
3922 fi
aurel32f652e6a2008-12-16 10:43:48 +00003923 fi
3924fi
3925
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003926libs_softmmu="$libs_softmmu $fdt_libs"
3927
Michael Walle20ff0752011-03-07 23:32:39 +01003928##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003929# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003930
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003931if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003932 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003933 if $pkg_config $opengl_pkgs; then
3934 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3935 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003936 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003937 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3938 gtk_gl="yes"
3939 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003940 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003941 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003942 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003943 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003944 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003945 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003946 opengl_libs=""
3947 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003948 fi
3949fi
3950
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003951if test "$opengl" = "yes"; then
3952 cat > $TMPC << EOF
3953#include <epoxy/egl.h>
3954#ifndef EGL_MESA_image_dma_buf_export
3955# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3956#endif
3957int main(void) { return 0; }
3958EOF
3959 if compile_prog "" "" ; then
3960 opengl_dmabuf=yes
3961 fi
3962fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003963
Klim Kireeved279a02018-01-12 12:01:19 +03003964##########################################
3965# libxml2 probe
3966if test "$libxml2" != "no" ; then
3967 if $pkg_config --exists libxml-2.0; then
3968 libxml2="yes"
3969 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3970 libxml2_libs=$($pkg_config --libs libxml-2.0)
3971 else
3972 if test "$libxml2" = "yes"; then
3973 feature_not_found "libxml2" "Install libxml2 devel"
3974 fi
3975 libxml2="no"
3976 fi
3977fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003978
Bharata B Raoeb100392012-09-24 14:42:45 +05303979##########################################
3980# glusterfs probe
3981if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003982 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303983 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003984 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3985 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003986 if $pkg_config --atleast-version=4 glusterfs-api; then
3987 glusterfs_xlator_opt="yes"
3988 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003989 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303990 glusterfs_discard="yes"
3991 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303992 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05303993 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05303994 glusterfs_zerofill="yes"
3995 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303996 else
3997 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003998 feature_not_found "GlusterFS backend support" \
3999 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304000 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304001 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304002 fi
4003fi
4004
aurel3239386ac2009-04-15 19:48:17 +00004005# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004006# emulator. This is done because older glibc versions don't
4007# have syscall stubs for these implemented. In that case we
4008# don't provide them even if kernel supports them.
4009#
4010inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004011cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004012#include <sys/inotify.h>
4013
4014int
4015main(void)
4016{
4017 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004018 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004019}
4020EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004021if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004022 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004023fi
4024
Riku Voipioc05c7a72010-03-26 15:25:11 +00004025inotify1=no
4026cat > $TMPC << EOF
4027#include <sys/inotify.h>
4028
4029int
4030main(void)
4031{
4032 /* try to start inotify */
4033 return inotify_init1(0);
4034}
4035EOF
4036if compile_prog "" "" ; then
4037 inotify1=yes
4038fi
4039
Riku Voipio099d6b02009-05-05 12:10:04 +03004040# check if pipe2 is there
4041pipe2=no
4042cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004043#include <unistd.h>
4044#include <fcntl.h>
4045
4046int main(void)
4047{
4048 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004049 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004050}
4051EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004052if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004053 pipe2=yes
4054fi
4055
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004056# check if accept4 is there
4057accept4=no
4058cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004059#include <sys/socket.h>
4060#include <stddef.h>
4061
4062int main(void)
4063{
4064 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4065 return 0;
4066}
4067EOF
4068if compile_prog "" "" ; then
4069 accept4=yes
4070fi
4071
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304072# check if tee/splice is there. vmsplice was added same time.
4073splice=no
4074cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304075#include <unistd.h>
4076#include <fcntl.h>
4077#include <limits.h>
4078
4079int main(void)
4080{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004081 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304082 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4083 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4084 return 0;
4085}
4086EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004087if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304088 splice=yes
4089fi
4090
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004091##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004092# libnuma probe
4093
4094if test "$numa" != "no" ; then
4095 cat > $TMPC << EOF
4096#include <numa.h>
4097int main(void) { return numa_available(); }
4098EOF
4099
4100 if compile_prog "" "-lnuma" ; then
4101 numa=yes
4102 libs_softmmu="-lnuma $libs_softmmu"
4103 else
4104 if test "$numa" = "yes" ; then
4105 feature_not_found "numa" "install numactl devel"
4106 fi
4107 numa=no
4108 fi
4109fi
4110
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004111if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4112 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4113 exit 1
4114fi
4115
Yang Zhong5a22ab72017-12-20 21:16:46 +08004116# Even if malloc_trim() is available, these non-libc memory allocators
4117# do not support it.
4118if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4119 if test "$malloc_trim" = "yes" ; then
4120 echo "Disabling malloc_trim with non-libc memory allocator"
4121 fi
4122 malloc_trim="no"
4123fi
4124
4125#######################################
4126# malloc_trim
4127
4128if test "$malloc_trim" != "no" ; then
4129 cat > $TMPC << EOF
4130#include <malloc.h>
4131int main(void) { malloc_trim(0); return 0; }
4132EOF
4133 if compile_prog "" "" ; then
4134 malloc_trim="yes"
4135 else
4136 malloc_trim="no"
4137 fi
4138fi
4139
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004140##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004141# tcmalloc probe
4142
4143if test "$tcmalloc" = "yes" ; then
4144 cat > $TMPC << EOF
4145#include <stdlib.h>
4146int main(void) { malloc(1); return 0; }
4147EOF
4148
4149 if compile_prog "" "-ltcmalloc" ; then
4150 LIBS="-ltcmalloc $LIBS"
4151 else
4152 feature_not_found "tcmalloc" "install gperftools devel"
4153 fi
4154fi
4155
4156##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004157# jemalloc probe
4158
4159if test "$jemalloc" = "yes" ; then
4160 cat > $TMPC << EOF
4161#include <stdlib.h>
4162int main(void) { malloc(1); return 0; }
4163EOF
4164
4165 if compile_prog "" "-ljemalloc" ; then
4166 LIBS="-ljemalloc $LIBS"
4167 else
4168 feature_not_found "jemalloc" "install jemalloc devel"
4169 fi
4170fi
4171
4172##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004173# signalfd probe
4174signalfd="no"
4175cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004176#include <unistd.h>
4177#include <sys/syscall.h>
4178#include <signal.h>
4179int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4180EOF
4181
4182if compile_prog "" "" ; then
4183 signalfd=yes
4184fi
4185
Riku Voipioc2882b92009-08-12 15:08:24 +03004186# check if eventfd is supported
4187eventfd=no
4188cat > $TMPC << EOF
4189#include <sys/eventfd.h>
4190
4191int main(void)
4192{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004193 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004194}
4195EOF
4196if compile_prog "" "" ; then
4197 eventfd=yes
4198fi
4199
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004200# check if memfd is supported
4201memfd=no
4202cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004203#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004204
4205int main(void)
4206{
4207 return memfd_create("foo", MFD_ALLOW_SEALING);
4208}
4209EOF
4210if compile_prog "" "" ; then
4211 memfd=yes
4212fi
4213
Cortland Tölva955727d2018-10-08 09:35:19 -07004214# check for usbfs
4215have_usbfs=no
4216if test "$linux_user" = "yes"; then
4217 if check_include linux/usbdevice_fs.h; then
4218 have_usbfs=yes
4219 fi
4220 have_usbfs=yes
4221fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004222
Ulrich Hechtd0927932009-09-17 20:22:14 +03004223# check for fallocate
4224fallocate=no
4225cat > $TMPC << EOF
4226#include <fcntl.h>
4227
4228int main(void)
4229{
4230 fallocate(0, 0, 0, 0);
4231 return 0;
4232}
4233EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004234if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004235 fallocate=yes
4236fi
4237
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004238# check for fallocate hole punching
4239fallocate_punch_hole=no
4240cat > $TMPC << EOF
4241#include <fcntl.h>
4242#include <linux/falloc.h>
4243
4244int main(void)
4245{
4246 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4247 return 0;
4248}
4249EOF
4250if compile_prog "" "" ; then
4251 fallocate_punch_hole=yes
4252fi
4253
Denis V. Lunevb953f072015-01-30 11:42:14 +03004254# check that fallocate supports range zeroing inside the file
4255fallocate_zero_range=no
4256cat > $TMPC << EOF
4257#include <fcntl.h>
4258#include <linux/falloc.h>
4259
4260int main(void)
4261{
4262 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4263 return 0;
4264}
4265EOF
4266if compile_prog "" "" ; then
4267 fallocate_zero_range=yes
4268fi
4269
Kevin Wolfed911432014-09-29 17:12:59 +02004270# check for posix_fallocate
4271posix_fallocate=no
4272cat > $TMPC << EOF
4273#include <fcntl.h>
4274
4275int main(void)
4276{
4277 posix_fallocate(0, 0, 0);
4278 return 0;
4279}
4280EOF
4281if compile_prog "" "" ; then
4282 posix_fallocate=yes
4283fi
4284
Peter Maydellc727f472011-01-06 11:05:10 +00004285# check for sync_file_range
4286sync_file_range=no
4287cat > $TMPC << EOF
4288#include <fcntl.h>
4289
4290int main(void)
4291{
4292 sync_file_range(0, 0, 0, 0);
4293 return 0;
4294}
4295EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004296if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004297 sync_file_range=yes
4298fi
4299
Peter Maydelldace20d2011-01-10 13:11:24 +00004300# check for linux/fiemap.h and FS_IOC_FIEMAP
4301fiemap=no
4302cat > $TMPC << EOF
4303#include <sys/ioctl.h>
4304#include <linux/fs.h>
4305#include <linux/fiemap.h>
4306
4307int main(void)
4308{
4309 ioctl(0, FS_IOC_FIEMAP, 0);
4310 return 0;
4311}
4312EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004313if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004314 fiemap=yes
4315fi
4316
Ulrich Hechtd0927932009-09-17 20:22:14 +03004317# check for dup3
4318dup3=no
4319cat > $TMPC << EOF
4320#include <unistd.h>
4321
4322int main(void)
4323{
4324 dup3(0, 0, 0);
4325 return 0;
4326}
4327EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004328if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004329 dup3=yes
4330fi
4331
Alex Bligh4e0c6522013-08-21 16:02:43 +01004332# check for ppoll support
4333ppoll=no
4334cat > $TMPC << EOF
4335#include <poll.h>
4336
4337int main(void)
4338{
4339 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4340 ppoll(&pfd, 1, 0, 0);
4341 return 0;
4342}
4343EOF
4344if compile_prog "" "" ; then
4345 ppoll=yes
4346fi
4347
Alex Blighcd758dd2013-08-21 16:02:44 +01004348# check for prctl(PR_SET_TIMERSLACK , ... ) support
4349prctl_pr_set_timerslack=no
4350cat > $TMPC << EOF
4351#include <sys/prctl.h>
4352
4353int main(void)
4354{
4355 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4356 return 0;
4357}
4358EOF
4359if compile_prog "" "" ; then
4360 prctl_pr_set_timerslack=yes
4361fi
4362
Peter Maydell3b6edd12011-02-15 18:35:05 +00004363# check for epoll support
4364epoll=no
4365cat > $TMPC << EOF
4366#include <sys/epoll.h>
4367
4368int main(void)
4369{
4370 epoll_create(0);
4371 return 0;
4372}
4373EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004374if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004375 epoll=yes
4376fi
4377
Peter Maydell227f0212016-06-06 19:58:11 +01004378# epoll_create1 is a later addition
4379# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004380epoll_create1=no
4381cat > $TMPC << EOF
4382#include <sys/epoll.h>
4383
4384int main(void)
4385{
Peter Maydell19e83f62011-04-26 16:56:40 +01004386 /* Note that we use epoll_create1 as a value, not as
4387 * a function being called. This is necessary so that on
4388 * old SPARC glibc versions where the function was present in
4389 * the library but not declared in the header file we will
4390 * fail the configure check. (Otherwise we will get a compiler
4391 * warning but not an error, and will proceed to fail the
4392 * qemu compile where we compile with -Werror.)
4393 */
Blue Swirlc075a722012-08-09 20:21:25 +00004394 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004395}
4396EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004397if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004398 epoll_create1=yes
4399fi
4400
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004401# check for sendfile support
4402sendfile=no
4403cat > $TMPC << EOF
4404#include <sys/sendfile.h>
4405
4406int main(void)
4407{
4408 return sendfile(0, 0, 0, 0);
4409}
4410EOF
4411if compile_prog "" "" ; then
4412 sendfile=yes
4413fi
4414
Riku Voipio51834342014-06-22 11:25:42 +01004415# check for timerfd support (glibc 2.8 and newer)
4416timerfd=no
4417cat > $TMPC << EOF
4418#include <sys/timerfd.h>
4419
4420int main(void)
4421{
4422 return(timerfd_create(CLOCK_REALTIME, 0));
4423}
4424EOF
4425if compile_prog "" "" ; then
4426 timerfd=yes
4427fi
4428
Riku Voipio9af5c902014-08-12 15:58:57 +03004429# check for setns and unshare support
4430setns=no
4431cat > $TMPC << EOF
4432#include <sched.h>
4433
4434int main(void)
4435{
4436 int ret;
4437 ret = setns(0, 0);
4438 ret = unshare(0);
4439 return ret;
4440}
4441EOF
4442if compile_prog "" "" ; then
4443 setns=yes
4444fi
4445
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004446# clock_adjtime probe
4447clock_adjtime=no
4448cat > $TMPC <<EOF
4449#include <time.h>
4450
4451int main(void)
4452{
4453 return clock_adjtime(0, 0);
4454}
4455EOF
4456clock_adjtime=no
4457if compile_prog "" "" ; then
4458 clock_adjtime=yes
4459fi
4460
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004461# syncfs probe
4462syncfs=no
4463cat > $TMPC <<EOF
4464#include <unistd.h>
4465
4466int main(void)
4467{
4468 return syncfs(0);
4469}
4470EOF
4471syncfs=no
4472if compile_prog "" "" ; then
4473 syncfs=yes
4474fi
4475
pbrookcc8ae6d2006-04-23 17:57:59 +00004476# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004477if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004478 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004479 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004480 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004481 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004482 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004483 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004484 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004485 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004486fi
4487
Stefan Weilf514f412009-10-11 12:44:07 +02004488# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004489byteswap_h=no
4490cat > $TMPC << EOF
4491#include <byteswap.h>
4492int main(void) { return bswap_32(0); }
4493EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004494if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004495 byteswap_h=yes
4496fi
4497
Stefan Weil75f13592013-01-05 12:17:38 +01004498# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004499bswap_h=no
4500cat > $TMPC << EOF
4501#include <sys/endian.h>
4502#include <sys/types.h>
4503#include <machine/bswap.h>
4504int main(void) { return bswap32(0); }
4505EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004506if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004507 bswap_h=yes
4508fi
4509
aliguorida93a1f2008-12-12 20:02:52 +00004510##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004511# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004512if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004513 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004514 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004515 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4516 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004517 else
4518 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004519 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004520 fi
4521 libiscsi="no"
4522 fi
4523fi
4524
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004525##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004526# Do we need libm
4527cat > $TMPC << EOF
4528#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004529int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004530EOF
4531if compile_prog "" "" ; then
4532 :
4533elif compile_prog "" "-lm" ; then
4534 LIBS="-lm $LIBS"
4535 libs_qga="-lm $libs_qga"
4536else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004537 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004538fi
4539
4540##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004541# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004542# uClibc provides 2 versions of clock_gettime(), one with realtime
4543# support and one without. This means that the clock_gettime() don't
4544# need -lrt. We still need it for timer_create() so we check for this
4545# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004546cat > $TMPC <<EOF
4547#include <signal.h>
4548#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004549int main(void) {
4550 timer_create(CLOCK_REALTIME, NULL, NULL);
4551 return clock_gettime(CLOCK_REALTIME, NULL);
4552}
aliguorida93a1f2008-12-12 20:02:52 +00004553EOF
4554
Juan Quintela52166aa2009-08-03 14:46:03 +02004555if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004556 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004557# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004558elif compile_prog "" "$pthread_lib -lrt" ; then
4559 LIBS="$LIBS -lrt"
4560 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004561fi
4562
Blue Swirl31ff5042009-09-12 12:33:07 +00004563if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004564 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004565 libs_softmmu="-lutil $libs_softmmu"
4566fi
4567
Blue Swirlde5071c2009-09-12 09:58:46 +00004568##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004569# spice probe
4570if test "$spice" != "no" ; then
4571 cat > $TMPC << EOF
4572#include <spice.h>
4573int main(void) { spice_server_new(); return 0; }
4574EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004575 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4576 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004577 if $pkg_config --atleast-version=0.12.0 spice-server && \
4578 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004579 compile_prog "$spice_cflags" "$spice_libs" ; then
4580 spice="yes"
4581 libs_softmmu="$libs_softmmu $spice_libs"
4582 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004583 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4584 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004585 else
4586 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004587 feature_not_found "spice" \
4588 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004589 fi
4590 spice="no"
4591 fi
4592fi
4593
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004594# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004595if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004596 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004597 libcacard_cflags=$($pkg_config --cflags libcacard)
4598 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004599 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004600 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004601 if test "$smartcard" = "yes"; then
4602 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004603 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004604 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004605 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004606fi
4607
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004608# check for libusb
4609if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004610 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004611 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004612 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4613 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004614 else
4615 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004616 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004617 fi
4618 libusb="no"
4619 fi
4620fi
4621
Hans de Goede69354a82011-07-19 11:04:10 +02004622# check for usbredirparser for usb network redirection support
4623if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004624 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004625 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004626 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4627 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004628 else
4629 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004630 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004631 fi
4632 usb_redir="no"
4633 fi
4634fi
4635
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004636##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004637# check if we have VSS SDK headers for win
4638
4639if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4640 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004641 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004642 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4643 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004644 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004645 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4646 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004647 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004648 esac
4649 cat > $TMPC << EOF
4650#define __MIDL_user_allocate_free_DEFINED__
4651#include <inc/win2003/vss.h>
4652int main(void) { return VSS_CTX_BACKUP; }
4653EOF
4654 if compile_prog "$vss_win32_include" "" ; then
4655 guest_agent_with_vss="yes"
4656 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004657 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004658 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004659 else
4660 if test "$vss_win32_sdk" != "" ; then
4661 echo "ERROR: Please download and install Microsoft VSS SDK:"
4662 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4663 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4664 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4665 echo "ERROR: The headers are extracted in the directory \`inc'."
4666 feature_not_found "VSS support"
4667 fi
4668 guest_agent_with_vss="no"
4669 fi
4670fi
4671
4672##########################################
4673# lookup Windows platform SDK (if not specified)
4674# The SDK is needed only to build .tlb (type library) file of guest agent
4675# VSS provider from the source. It is usually unnecessary because the
4676# pre-compiled .tlb file is included.
4677
4678if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4679 if test -z "$win_sdk"; then
4680 programfiles="$PROGRAMFILES"
4681 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4682 if test -n "$programfiles"; then
4683 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4684 else
4685 feature_not_found "Windows SDK"
4686 fi
4687 elif test "$win_sdk" = "no"; then
4688 win_sdk=""
4689 fi
4690fi
4691
4692##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004693# check if mingw environment provides a recent ntddscsi.h
4694if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4695 cat > $TMPC << EOF
4696#include <windows.h>
4697#include <ntddscsi.h>
4698int main(void) {
4699#if !defined(IOCTL_SCSI_GET_ADDRESS)
4700#error Missing required ioctl definitions
4701#endif
4702 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4703 return addr.Lun;
4704}
4705EOF
4706 if compile_prog "" "" ; then
4707 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004708 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004709 fi
4710fi
4711
4712##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004713# virgl renderer probe
4714
4715if test "$virglrenderer" != "no" ; then
4716 cat > $TMPC << EOF
4717#include <virglrenderer.h>
4718int main(void) { virgl_renderer_poll(); return 0; }
4719EOF
4720 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4721 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004722 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004723 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4724 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4725 virglrenderer="yes"
4726 else
4727 if test "$virglrenderer" = "yes" ; then
4728 feature_not_found "virglrenderer"
4729 fi
4730 virglrenderer="no"
4731 fi
4732fi
4733
4734##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004735# capstone
4736
Richard Hendersone219c492017-09-28 09:01:23 -07004737case "$capstone" in
4738 "" | yes)
4739 if $pkg_config capstone; then
4740 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004741 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004742 capstone=git
4743 elif test -e "${source_path}/capstone/Makefile" ; then
4744 capstone=internal
4745 elif test -z "$capstone" ; then
4746 capstone=no
4747 else
4748 feature_not_found "capstone" "Install capstone devel or git submodule"
4749 fi
4750 ;;
4751
4752 system)
4753 if ! $pkg_config capstone; then
4754 feature_not_found "capstone" "Install capstone devel"
4755 fi
4756 ;;
4757esac
4758
4759case "$capstone" in
4760 git | internal)
4761 if test "$capstone" = git; then
4762 git_submodules="${git_submodules} capstone"
4763 fi
4764 mkdir -p capstone
4765 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4766 if test "$mingw32" = "yes"; then
4767 LIBCAPSTONE=capstone.lib
4768 else
4769 LIBCAPSTONE=libcapstone.a
4770 fi
4771 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4772 ;;
4773
4774 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004775 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4776 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004777 ;;
4778
4779 no)
4780 ;;
4781 *)
4782 error_exit "Unknown state for capstone: $capstone"
4783 ;;
4784esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004785
4786##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004787# check if we have fdatasync
4788
4789fdatasync=no
4790cat > $TMPC << EOF
4791#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004792int main(void) {
4793#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4794return fdatasync(0);
4795#else
Stefan Weile172fe12012-04-06 21:33:20 +02004796#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004797#endif
4798}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004799EOF
4800if compile_prog "" "" ; then
4801 fdatasync=yes
4802fi
4803
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004804##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004805# check if we have madvise
4806
4807madvise=no
4808cat > $TMPC << EOF
4809#include <sys/types.h>
4810#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004811#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004812int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4813EOF
4814if compile_prog "" "" ; then
4815 madvise=yes
4816fi
4817
4818##########################################
4819# check if we have posix_madvise
4820
4821posix_madvise=no
4822cat > $TMPC << EOF
4823#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004824#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004825int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4826EOF
4827if compile_prog "" "" ; then
4828 posix_madvise=yes
4829fi
4830
4831##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004832# check if we have posix_memalign()
4833
4834posix_memalign=no
4835cat > $TMPC << EOF
4836#include <stdlib.h>
4837int main(void) {
4838 void *p;
4839 return posix_memalign(&p, 8, 8);
4840}
4841EOF
4842if compile_prog "" "" ; then
4843 posix_memalign=yes
4844fi
4845
4846##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004847# check if we have posix_syslog
4848
4849posix_syslog=no
4850cat > $TMPC << EOF
4851#include <syslog.h>
4852int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4853EOF
4854if compile_prog "" "" ; then
4855 posix_syslog=yes
4856fi
4857
4858##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004859# check if we have sem_timedwait
4860
4861sem_timedwait=no
4862cat > $TMPC << EOF
4863#include <semaphore.h>
4864int main(void) { return sem_timedwait(0, 0); }
4865EOF
4866if compile_prog "" "" ; then
4867 sem_timedwait=yes
4868fi
4869
4870##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004871# check if we have strchrnul
4872
4873strchrnul=no
4874cat > $TMPC << EOF
4875#include <string.h>
4876int main(void);
4877// Use a haystack that the compiler shouldn't be able to constant fold
4878char *haystack = (char*)&main;
4879int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4880EOF
4881if compile_prog "" "" ; then
4882 strchrnul=yes
4883fi
4884
4885##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004886# check if trace backend exists
4887
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004888$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004889if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004890 error_exit "invalid trace backends" \
4891 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004892fi
4893
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004894##########################################
4895# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004896if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004897 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004898#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004899int main(void) { return 0; }
4900EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004901 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004902 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004903 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004904 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004905 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004906 fi
4907 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004908 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004909 else
4910 urcu_bp_libs="-lurcu-bp"
4911 fi
4912
4913 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4914 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004915 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004916 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004917 fi
4918fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004919
4920##########################################
4921# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004922if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004923 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004924 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004925 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004926 trace_backend_stap="no"
4927 if has 'stap' ; then
4928 trace_backend_stap="yes"
4929 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004930fi
4931
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004932##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004933# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304934
Peter Maydell7c2acc72013-04-08 12:11:27 +01004935# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004936# is sigcontext. On Windows the only valid backend is the Windows
4937# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004938
4939ucontext_works=no
4940if test "$darwin" != "yes"; then
4941 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304942#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004943#ifdef __stub_makecontext
4944#error Ignoring glibc stub makecontext which will always fail
4945#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004946int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304947EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004948 if compile_prog "" "" ; then
4949 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304950 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004951fi
4952
4953if test "$coroutine" = ""; then
4954 if test "$mingw32" = "yes"; then
4955 coroutine=win32
4956 elif test "$ucontext_works" = "yes"; then
4957 coroutine=ucontext
4958 else
4959 coroutine=sigaltstack
4960 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004961else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004962 case $coroutine in
4963 windows)
4964 if test "$mingw32" != "yes"; then
4965 error_exit "'windows' coroutine backend only valid for Windows"
4966 fi
4967 # Unfortunately the user visible backend name doesn't match the
4968 # coroutine-*.c filename for this case, so we have to adjust it here.
4969 coroutine=win32
4970 ;;
4971 ucontext)
4972 if test "$ucontext_works" != "yes"; then
4973 feature_not_found "ucontext"
4974 fi
4975 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004976 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004977 if test "$mingw32" = "yes"; then
4978 error_exit "only the 'windows' coroutine backend is valid for Windows"
4979 fi
4980 ;;
4981 *)
4982 error_exit "unknown coroutine backend $coroutine"
4983 ;;
4984 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304985fi
4986
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004987if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004988 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004989fi
4990
Peter Lieven7d992e42016-09-27 11:58:45 +02004991if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02004992 if test "$coroutine_pool" = "yes"; then
4993 echo "WARN: disabling coroutine pool for stack usage debugging"
4994 coroutine_pool=no
4995 fi
4996fi
4997
4998
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304999##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305000# check if we have open_by_handle_at
5001
Stefan Weil4e1797f2012-06-18 22:11:06 +02005002open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305003cat > $TMPC << EOF
5004#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005005#if !defined(AT_EMPTY_PATH)
5006# error missing definition
5007#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005008int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005009#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305010EOF
5011if compile_prog "" "" ; then
5012 open_by_handle_at=yes
5013fi
5014
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305015########################################
5016# check if we have linux/magic.h
5017
5018linux_magic_h=no
5019cat > $TMPC << EOF
5020#include <linux/magic.h>
5021int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005022 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305023}
5024EOF
5025if compile_prog "" "" ; then
5026 linux_magic_h=yes
5027fi
5028
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005029########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005030# check whether we can disable warning option with a pragma (this is needed
5031# to silence warnings in the headers of some versions of external libraries).
5032# This test has to be compiled with -Werror as otherwise an unknown pragma is
5033# only a warning.
5034#
5035# If we can't selectively disable warning in the code, disable -Werror so that
5036# the build doesn't fail anyway.
5037
Peter Maydell06d71fa2012-07-30 16:13:07 +01005038pragma_disable_unused_but_set=no
5039cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005040#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005041#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005042#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005043
Peter Maydell06d71fa2012-07-30 16:13:07 +01005044int main(void) {
5045 return 0;
5046}
5047EOF
5048if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005049 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005050else
5051 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005052fi
5053
5054########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005055# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005056
5057valgrind_h=no
5058cat > $TMPC << EOF
5059#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005060int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005061 return 0;
5062}
5063EOF
5064if compile_prog "" "" ; then
5065 valgrind_h=yes
5066fi
5067
5068########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005069# check if environ is declared
5070
5071has_environ=no
5072cat > $TMPC << EOF
5073#include <unistd.h>
5074int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005075 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005076 return 0;
5077}
5078EOF
5079if compile_prog "" "" ; then
5080 has_environ=yes
5081fi
5082
Richard Henderson76a347e2012-12-28 14:17:02 -08005083########################################
5084# check if cpuid.h is usable.
5085
Richard Henderson76a347e2012-12-28 14:17:02 -08005086cat > $TMPC << EOF
5087#include <cpuid.h>
5088int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005089 unsigned a, b, c, d;
5090 int max = __get_cpuid_max(0, 0);
5091
5092 if (max >= 1) {
5093 __cpuid(1, a, b, c, d);
5094 }
5095
5096 if (max >= 7) {
5097 __cpuid_count(7, 0, a, b, c, d);
5098 }
5099
5100 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005101}
5102EOF
5103if compile_prog "" "" ; then
5104 cpuid_h=yes
5105fi
5106
Richard Henderson5dd89902017-07-18 18:40:18 -10005107##########################################
5108# avx2 optimization requirement check
5109#
5110# There is no point enabling this if cpuid.h is not usable,
5111# since we won't be able to select the new routines.
5112
Liam Merwick86583a02018-10-19 21:38:59 +01005113if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005114 cat > $TMPC << EOF
5115#pragma GCC push_options
5116#pragma GCC target("avx2")
5117#include <cpuid.h>
5118#include <immintrin.h>
5119static int bar(void *a) {
5120 __m256i x = *(__m256i *)a;
5121 return _mm256_testz_si256(x, x);
5122}
5123int main(int argc, char *argv[]) { return bar(argv[0]); }
5124EOF
5125 if compile_object "" ; then
5126 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005127 else
5128 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005129 fi
5130fi
5131
Richard Hendersonf5401662013-02-16 12:46:59 -08005132########################################
5133# check if __[u]int128_t is usable.
5134
5135int128=no
5136cat > $TMPC << EOF
5137__int128_t a;
5138__uint128_t b;
5139int main (void) {
5140 a = a + b;
5141 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005142 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005143 return 0;
5144}
5145EOF
5146if compile_prog "" "" ; then
5147 int128=yes
5148fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005149
Richard Henderson7ebee432016-06-29 21:10:59 -07005150#########################################
5151# See if 128-bit atomic operations are supported.
5152
5153atomic128=no
5154if test "$int128" = "yes"; then
5155 cat > $TMPC << EOF
5156int main(void)
5157{
5158 unsigned __int128 x = 0, y = 0;
5159 y = __atomic_load_16(&x, 0);
5160 __atomic_store_16(&x, y, 0);
5161 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5162 return 0;
5163}
5164EOF
5165 if compile_prog "" "" ; then
5166 atomic128=yes
5167 fi
5168fi
5169
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005170cmpxchg128=no
5171if test "$int128" = yes -a "$atomic128" = no; then
5172 cat > $TMPC << EOF
5173int main(void)
5174{
5175 unsigned __int128 x = 0, y = 0;
5176 __sync_val_compare_and_swap_16(&x, y, x);
5177 return 0;
5178}
5179EOF
5180 if compile_prog "" "" ; then
5181 cmpxchg128=yes
5182 fi
5183fi
5184
Richard Hendersondf79b992016-09-02 12:23:57 -07005185#########################################
5186# See if 64-bit atomic operations are supported.
5187# Note that without __atomic builtins, we can only
5188# assume atomic loads/stores max at pointer size.
5189
5190cat > $TMPC << EOF
5191#include <stdint.h>
5192int main(void)
5193{
5194 uint64_t x = 0, y = 0;
5195#ifdef __ATOMIC_RELAXED
5196 y = __atomic_load_8(&x, 0);
5197 __atomic_store_8(&x, y, 0);
5198 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5199 __atomic_exchange_8(&x, y, 0);
5200 __atomic_fetch_add_8(&x, y, 0);
5201#else
5202 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5203 __sync_lock_test_and_set(&x, y);
5204 __sync_val_compare_and_swap(&x, y, 0);
5205 __sync_fetch_and_add(&x, y);
5206#endif
5207 return 0;
5208}
5209EOF
5210if compile_prog "" "" ; then
5211 atomic64=yes
5212fi
5213
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005214########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005215# See if 16-byte vector operations are supported.
5216# Even without a vector unit the compiler may expand these.
5217# There is a bug in old GCC for PPC that crashes here.
5218# Unfortunately it's the system compiler for Centos 7.
5219
5220cat > $TMPC << EOF
5221typedef unsigned char U1 __attribute__((vector_size(16)));
5222typedef unsigned short U2 __attribute__((vector_size(16)));
5223typedef unsigned int U4 __attribute__((vector_size(16)));
5224typedef unsigned long long U8 __attribute__((vector_size(16)));
5225typedef signed char S1 __attribute__((vector_size(16)));
5226typedef signed short S2 __attribute__((vector_size(16)));
5227typedef signed int S4 __attribute__((vector_size(16)));
5228typedef signed long long S8 __attribute__((vector_size(16)));
5229static U1 a1, b1;
5230static U2 a2, b2;
5231static U4 a4, b4;
5232static U8 a8, b8;
5233static S1 c1;
5234static S2 c2;
5235static S4 c4;
5236static S8 c8;
5237static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005238void helper(void *d, void *a, int shift, int i);
5239void helper(void *d, void *a, int shift, int i)
5240{
5241 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5242 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5243 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5244 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5245}
Richard Hendersondb432672017-09-15 14:11:45 -07005246int main(void)
5247{
5248 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5249 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5250 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5251 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5252 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5253 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5254 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5255 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5256 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5257 return 0;
5258}
5259EOF
5260
5261vector16=no
5262if compile_prog "" "" ; then
5263 vector16=yes
5264fi
5265
5266########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005267# check if getauxval is available.
5268
5269getauxval=no
5270cat > $TMPC << EOF
5271#include <sys/auxv.h>
5272int main(void) {
5273 return getauxval(AT_HWCAP) == 0;
5274}
5275EOF
5276if compile_prog "" "" ; then
5277 getauxval=yes
5278fi
5279
John Snowfd0e6052015-03-25 18:57:39 -04005280########################################
5281# check if ccache is interfering with
5282# semantic analysis of macros
5283
John Snow5e4dfd32015-10-28 13:56:40 -04005284unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005285ccache_cpp2=no
5286cat > $TMPC << EOF
5287static const int Z = 1;
5288#define fn() ({ Z; })
5289#define TAUT(X) ((X) == Z)
5290#define PAREN(X, Y) (X == Y)
5291#define ID(X) (X)
5292int main(int argc, char *argv[])
5293{
5294 int x = 0, y = 0;
5295 x = ID(x);
5296 x = fn();
5297 fn();
5298 if (PAREN(x, y)) return 0;
5299 if (TAUT(Z)) return 0;
5300 return 0;
5301}
5302EOF
5303
5304if ! compile_object "-Werror"; then
5305 ccache_cpp2=yes
5306fi
5307
John Snowb553a042015-11-03 15:43:42 -05005308#################################################
5309# clang does not support glibc + FORTIFY_SOURCE.
5310
5311if test "$fortify_source" != "no"; then
5312 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5313 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005314 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005315 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005316 fortify_source="no";
5317 else
5318 fortify_source="yes"
5319 fi
5320fi
5321
Fam Zheng1efad062018-06-01 17:26:43 +08005322###############################################
5323# Check if copy_file_range is provided by glibc
5324have_copy_file_range=no
5325cat > $TMPC << EOF
5326#include <unistd.h>
5327int main(void) {
5328 copy_file_range(0, NULL, 0, NULL, 0, 0);
5329 return 0;
5330}
5331EOF
5332if compile_prog "" "" ; then
5333 have_copy_file_range=yes
5334fi
5335
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305336##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005337# check if struct fsxattr is available via linux/fs.h
5338
5339have_fsxattr=no
5340cat > $TMPC << EOF
5341#include <linux/fs.h>
5342struct fsxattr foo;
5343int main(void) {
5344 return 0;
5345}
5346EOF
5347if compile_prog "" "" ; then
5348 have_fsxattr=yes
5349fi
5350
Peter Maydellb66e10e2016-06-08 18:34:32 +01005351##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005352# check for usable membarrier system call
5353if test "$membarrier" = "yes"; then
5354 have_membarrier=no
5355 if test "$mingw32" = "yes" ; then
5356 have_membarrier=yes
5357 elif test "$linux" = "yes" ; then
5358 cat > $TMPC << EOF
5359 #include <linux/membarrier.h>
5360 #include <sys/syscall.h>
5361 #include <unistd.h>
5362 #include <stdlib.h>
5363 int main(void) {
5364 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5365 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5366 exit(0);
5367 }
5368EOF
5369 if compile_prog "" "" ; then
5370 have_membarrier=yes
5371 fi
5372 fi
5373 if test "$have_membarrier" = "no"; then
5374 feature_not_found "membarrier" "membarrier system call not available"
5375 fi
5376else
5377 # Do not enable it by default even for Mingw32, because it doesn't
5378 # work on Wine.
5379 membarrier=no
5380fi
5381
5382##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005383# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005384have_rtnetlink=no
5385cat > $TMPC << EOF
5386#include <linux/rtnetlink.h>
5387int main(void) {
5388 return IFLA_PROTO_DOWN;
5389}
5390EOF
5391if compile_prog "" "" ; then
5392 have_rtnetlink=yes
5393fi
5394
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005395##########################################
5396# check for usable AF_VSOCK environment
5397have_af_vsock=no
5398cat > $TMPC << EOF
5399#include <errno.h>
5400#include <sys/types.h>
5401#include <sys/socket.h>
5402#if !defined(AF_VSOCK)
5403# error missing AF_VSOCK flag
5404#endif
5405#include <linux/vm_sockets.h>
5406int main(void) {
5407 int sock, ret;
5408 struct sockaddr_vm svm;
5409 socklen_t len = sizeof(svm);
5410 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5411 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5412 if ((ret == -1) && (errno == ENOTCONN)) {
5413 return 0;
5414 }
5415 return -1;
5416}
5417EOF
5418if compile_prog "" "" ; then
5419 have_af_vsock=yes
5420fi
5421
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005422##########################################
5423# check for usable AF_ALG environment
5424hava_afalg=no
5425cat > $TMPC << EOF
5426#include <errno.h>
5427#include <sys/types.h>
5428#include <sys/socket.h>
5429#include <linux/if_alg.h>
5430int main(void) {
5431 int sock;
5432 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5433 return sock;
5434}
5435EOF
5436if compile_prog "" "" ; then
5437 have_afalg=yes
5438fi
5439if test "$crypto_afalg" = "yes"
5440then
5441 if test "$have_afalg" != "yes"
5442 then
5443 error_exit "AF_ALG requested but could not be detected"
5444 fi
5445fi
5446
5447
James Clarke6969ec62016-06-06 12:02:50 +01005448#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005449# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005450if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005451 cat > $TMPC << EOF
5452#include <Hypervisor/hv.h>
5453int main() { return 0;}
5454EOF
5455 if ! compile_object ""; then
5456 hvf='no'
5457 else
5458 hvf='yes'
5459 LDFLAGS="-framework Hypervisor $LDFLAGS"
5460 fi
5461fi
5462
5463#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005464# Sparc implicitly links with --relax, which is
5465# incompatible with -r, so --no-relax should be
5466# given. It does no harm to give it on other
5467# platforms too.
5468
5469# Note: the prototype is needed since QEMU_CFLAGS
5470# contains -Wmissing-prototypes
5471cat > $TMPC << EOF
5472extern int foo(void);
5473int foo(void) { return 0; }
5474EOF
5475if ! compile_object ""; then
5476 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5477fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005478for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5479 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5480 LD_REL_FLAGS=$i
5481 break
5482 fi
5483done
5484if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5485 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005486fi
5487
Jan Vesely277abf12016-04-29 13:15:23 -04005488##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005489# check for sysmacros.h
5490
5491have_sysmacros=no
5492cat > $TMPC << EOF
5493#include <sys/sysmacros.h>
5494int main(void) {
5495 return makedev(0, 0);
5496}
5497EOF
5498if compile_prog "" "" ; then
5499 have_sysmacros=yes
5500fi
5501
5502##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005503# Veritas HyperScale block driver VxHS
5504# Check if libvxhs is installed
5505
5506if test "$vxhs" != "no" ; then
5507 cat > $TMPC <<EOF
5508#include <stdint.h>
5509#include <qnio/qnio_api.h>
5510
5511void *vxhs_callback;
5512
5513int main(void) {
5514 iio_init(QNIO_VERSION, vxhs_callback);
5515 return 0;
5516}
5517EOF
5518 vxhs_libs="-lvxhs -lssl"
5519 if compile_prog "" "$vxhs_libs" ; then
5520 vxhs=yes
5521 else
5522 if test "$vxhs" = "yes" ; then
5523 feature_not_found "vxhs block device" "Install libvxhs See github"
5524 fi
5525 vxhs=no
5526 fi
5527fi
5528
5529##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005530# check for _Static_assert()
5531
5532have_static_assert=no
5533cat > $TMPC << EOF
5534_Static_assert(1, "success");
5535int main(void) {
5536 return 0;
5537}
5538EOF
5539if compile_prog "" "" ; then
5540 have_static_assert=yes
5541fi
5542
5543##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005544# check for utmpx.h, it is missing e.g. on OpenBSD
5545
5546have_utmpx=no
5547cat > $TMPC << EOF
5548#include <utmpx.h>
5549struct utmpx user_info;
5550int main(void) {
5551 return 0;
5552}
5553EOF
5554if compile_prog "" "" ; then
5555 have_utmpx=yes
5556fi
5557
5558##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005559# checks for sanitizers
5560
Marc-André Lureau247724c2018-01-16 16:11:51 +01005561have_asan=no
5562have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005563have_asan_iface_h=no
5564have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005565
5566if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005567 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005568 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5569 have_asan=yes
5570 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005571
5572 # we could use a simple skeleton for flags checks, but this also
5573 # detect the static linking issue of ubsan, see also:
5574 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5575 cat > $TMPC << EOF
5576#include <stdlib.h>
5577int main(void) {
5578 void *tmp = malloc(10);
5579 return *(int *)(tmp + 2);
5580}
5581EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005582 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5583 have_ubsan=yes
5584 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005585
5586 if check_include "sanitizer/asan_interface.h" ; then
5587 have_asan_iface_h=yes
5588 fi
5589
5590 cat > $TMPC << EOF
5591#include <sanitizer/asan_interface.h>
5592int main(void) {
5593 __sanitizer_start_switch_fiber(0, 0, 0);
5594 return 0;
5595}
5596EOF
5597 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5598 have_asan_iface_fiber=yes
5599 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005600fi
5601
5602##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005603# Docker and cross-compiler support
5604#
5605# This is specifically for building test
5606# cases for foreign architectures, not
5607# cross-compiling QEMU itself.
5608
5609if has "docker"; then
5610 docker=$($python $source_path/tests/docker/docker.py probe)
5611fi
5612
5613##########################################
Junyan He17824402018-07-18 15:47:59 +08005614# check for libpmem
5615
5616if test "$libpmem" != "no"; then
5617 if $pkg_config --exists "libpmem"; then
5618 libpmem="yes"
5619 libpmem_libs=$($pkg_config --libs libpmem)
5620 libpmem_cflags=$($pkg_config --cflags libpmem)
5621 libs_softmmu="$libs_softmmu $libpmem_libs"
5622 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5623 else
5624 if test "$libpmem" = "yes" ; then
5625 feature_not_found "libpmem" "Install nvml or pmdk"
5626 fi
5627 libpmem="no"
5628 fi
5629fi
5630
5631##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005632# End of CC checks
5633# After here, no more $cc or $ld runs
5634
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005635write_c_skeleton
5636
Blue Swirl1d728c32012-05-01 18:45:39 +00005637if test "$gcov" = "yes" ; then
5638 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5639 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005640elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005641 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005642elif test "$debug" = "no"; then
5643 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005644fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005645
Marc-André Lureau247724c2018-01-16 16:11:51 +01005646if test "$have_asan" = "yes"; then
5647 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005648 if test "$have_asan_iface_h" = "no" ; then
5649 echo "ASAN build enabled, but ASAN header missing." \
5650 "Without code annotation, the report may be inferior."
5651 elif test "$have_asan_iface_fiber" = "no" ; then
5652 echo "ASAN build enabled, but ASAN header is too old." \
5653 "Without code annotation, the report may be inferior."
5654 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005655fi
5656if test "$have_ubsan" = "yes"; then
5657 CFLAGS="-fsanitize=undefined $CFLAGS"
5658fi
5659
Peter Lieven6542aa92014-02-03 10:26:13 +01005660##########################################
5661# Do we have libnfs
5662if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005663 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005664 libnfs="yes"
5665 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005666 else
5667 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005668 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005669 fi
5670 libnfs="no"
5671 fi
5672fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005673
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005674##########################################
5675# Do we have libudev
5676if test "$libudev" != "no" ; then
5677 if $pkg_config libudev && test "$static" != "yes"; then
5678 libudev="yes"
5679 libudev_libs=$($pkg_config --libs libudev)
5680 else
5681 libudev="no"
5682 fi
5683fi
5684
Peter Maydell6ca026c2012-07-18 15:10:18 +01005685# Now we've finished running tests it's OK to add -Werror to the compiler flags
5686if test "$werror" = "yes"; then
5687 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5688fi
5689
Juan Quintelae86ecd42009-08-03 14:45:59 +02005690if test "$solaris" = "no" ; then
5691 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005692 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005693 fi
5694fi
5695
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005696# test if pod2man has --utf8 option
5697if pod2man --help | grep -q utf8; then
5698 POD2MAN="pod2man --utf8"
5699else
5700 POD2MAN="pod2man"
5701fi
5702
Blue Swirl952afb72010-09-19 08:36:34 +00005703# Use ASLR, no-SEH and DEP if available
5704if test "$mingw32" = "yes" ; then
5705 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005706 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005707 LDFLAGS="-Wl,$flag $LDFLAGS"
5708 fi
5709 done
5710fi
5711
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005712qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005713qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005714qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005715qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005716
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005717# We can only support ivshmem if we have eventfd
5718if [ "$eventfd" = "yes" ]; then
5719 ivshmem=yes
5720fi
5721
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005722tools=""
5723if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005724 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005725 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5726 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005727 fi
5728 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005729 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005730 fi
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005731 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5732 tools="elf2dmp $tools"
5733 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005734fi
5735if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005736 if test "$linux" = yes; then
5737 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005738 virtfs=yes
5739 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5740 else
5741 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005742 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305743 fi
Andreas Färber17500372012-05-01 01:12:03 +02005744 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005745 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005746 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5747 mpath=yes
5748 else
5749 if test "$mpath" = yes; then
5750 error_exit "Multipath requires libmpathpersist devel"
5751 fi
5752 mpath=no
5753 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005754 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5755 else
5756 if test "$virtfs" = yes; then
5757 error_exit "VirtFS is supported only on Linux"
5758 fi
5759 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005760 if test "$mpath" = yes; then
5761 error_exit "Multipath is supported only on Linux"
5762 fi
5763 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305764 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005765 if test "$xkbcommon" = "yes"; then
5766 tools="qemu-keymap\$(EXESUF) $tools"
5767 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005768fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005769
5770# Probe for guest agent support/options
5771
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005772if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005773 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005774 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005775 guest_agent=yes
5776 elif [ "$guest_agent" != yes ]; then
5777 guest_agent=no
5778 else
5779 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005780 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005781fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005782
Michael Roth9d6bc272015-08-26 10:49:13 -05005783# Guest agent Window MSI package
5784
5785if test "$guest_agent" != yes; then
5786 if test "$guest_agent_msi" = yes; then
5787 error_exit "MSI guest agent package requires guest agent enabled"
5788 fi
5789 guest_agent_msi=no
5790elif test "$mingw32" != "yes"; then
5791 if test "$guest_agent_msi" = "yes"; then
5792 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5793 fi
5794 guest_agent_msi=no
5795elif ! has wixl; then
5796 if test "$guest_agent_msi" = "yes"; then
5797 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5798 fi
5799 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005800else
5801 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5802 # disabled explicitly
5803 if test "$guest_agent_msi" != "no"; then
5804 guest_agent_msi=yes
5805 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005806fi
5807
Michael Roth1a349042015-08-26 11:14:31 -05005808if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005809 if test "$guest_agent_with_vss" = "yes"; then
5810 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5811 fi
5812
5813 if test "$QEMU_GA_MANUFACTURER" = ""; then
5814 QEMU_GA_MANUFACTURER=QEMU
5815 fi
5816
5817 if test "$QEMU_GA_DISTRO" = ""; then
5818 QEMU_GA_DISTRO=Linux
5819 fi
5820
5821 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005822 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005823 fi
5824
Stefan Weil89138852016-05-16 15:10:20 +02005825 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005826
5827 case "$cpu" in
5828 x86_64)
5829 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5830 ;;
5831 i386)
5832 QEMU_GA_MSI_ARCH="-D Arch=32"
5833 ;;
5834 *)
5835 error_exit "CPU $cpu not supported for building installation package"
5836 ;;
5837 esac
5838fi
5839
Paolo Bonzinica35f782010-05-26 16:08:29 +02005840# Mac OS X ships with a broken assembler
5841roms=
5842if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5843 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5844 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005845 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005846 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5847 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5848 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005849 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5850 ld_i386_emulation="$emu"
5851 roms="optionrom"
5852 break
5853 fi
5854 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005855fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005856if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005857 roms="$roms spapr-rtas"
5858fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005859
Christian Borntraeger9933c302013-04-23 01:23:03 +00005860if test "$cpu" = "s390x" ; then
5861 roms="$roms s390-ccw"
5862fi
5863
Richard Henderson964c6fa2013-06-21 19:10:16 -07005864# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005865if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005866 textseg_addr=
5867 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005868 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5869 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005870 textseg_addr=0x60000000
5871 ;;
5872 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005873 # A 256M aligned address, high in the address space, with enough
5874 # room for the code_gen_buffer above it before the stack.
5875 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005876 ;;
5877 esac
5878 if [ -n "$textseg_addr" ]; then
5879 cat > $TMPC <<EOF
5880 int main(void) { return 0; }
5881EOF
5882 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5883 if ! compile_prog "" "$textseg_ldflags"; then
5884 # In case ld does not support -Ttext-segment, edit the default linker
5885 # script via sed to set the .text start addr. This is needed on FreeBSD
5886 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005887 if ! $ld --verbose >/dev/null 2>&1; then
5888 error_exit \
5889 "We need to link the QEMU user mode binaries at a" \
5890 "specific text address. Unfortunately your linker" \
5891 "doesn't support either the -Ttext-segment option or" \
5892 "printing the default linker script with --verbose." \
5893 "If you don't want the user mode binaries, pass the" \
5894 "--disable-user option to configure."
5895 fi
5896
Richard Henderson964c6fa2013-06-21 19:10:16 -07005897 $ld --verbose | sed \
5898 -e '1,/==================================================/d' \
5899 -e '/==================================================/,$d' \
5900 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5901 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5902 textseg_ldflags="-Wl,-T../config-host.ld"
5903 fi
5904 fi
5905fi
5906
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005907# Check that the C++ compiler exists and works with the C compiler.
5908# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5909if has $cxx; then
5910 cat > $TMPC <<EOF
5911int c_function(void);
5912int main(void) { return c_function(); }
5913EOF
5914
5915 compile_object
5916
5917 cat > $TMPCXX <<EOF
5918extern "C" {
5919 int c_function(void);
5920}
5921int c_function(void) { return 42; }
5922EOF
5923
5924 update_cxxflags
5925
5926 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5927 # C++ compiler $cxx works ok with C compiler $cc
5928 :
5929 else
5930 echo "C++ compiler $cxx does not work with C compiler $cc"
5931 echo "Disabling C++ specific optional code"
5932 cxx=
5933 fi
5934else
5935 echo "No C++ compiler available; disabling C++ specific optional code"
5936 cxx=
5937fi
5938
Cole Robinson02d34f62016-05-06 14:03:09 -04005939echo_version() {
5940 if test "$1" = "yes" ; then
5941 echo "($2)"
5942 fi
5943}
5944
Jan Kiszka50e12062014-10-02 10:03:55 +02005945# prepend pixman and ftd flags after all config tests are done
5946QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005947QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005948libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005949
bellard43ce4df2003-06-09 19:53:12 +00005950echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005951echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005952echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005953echo "binary directory $(eval echo $bindir)"
5954echo "library directory $(eval echo $libdir)"
5955echo "module directory $(eval echo $qemu_moddir)"
5956echo "libexec directory $(eval echo $libexecdir)"
5957echo "include directory $(eval echo $includedir)"
5958echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005959if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005960echo "local state directory $(eval echo $local_statedir)"
5961echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005962echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005963else
5964echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005965echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005966fi
bellard5a671352003-10-01 00:13:48 +00005967echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005968echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005969echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005970echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005971echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005972echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005973echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005974echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005975echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005976echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005977echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005978echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005979echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005980echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005981echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005982if test "$slirp" = "yes" ; then
5983 echo "smbd $smbd"
5984fi
Fam Zheng17969262014-02-10 14:48:56 +08005985echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005986echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005987echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005988echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005989echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005990echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005991echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005992echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005993echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005994if test "$darwin" = "yes" ; then
5995 echo "Cocoa support $cocoa"
5996fi
Stefan Weil89138852016-05-16 15:10:20 +02005997echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5998echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005999echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006000echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006001echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006002echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006003echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006004echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006005echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006006echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006007echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006008echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006009echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006010echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006011echo "Block whitelist (rw) $block_drv_rw_whitelist"
6012echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306013echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006014echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006015echo "VNC support $vnc"
6016if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006017 echo "VNC SASL support $vnc_sasl"
6018 echo "VNC JPEG support $vnc_jpeg"
6019 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006020fi
blueswir131422552007-04-16 18:27:06 +00006021if test -n "$sparc_cpu"; then
6022 echo "Target Sparc Arch $sparc_cpu"
6023fi
aliguorie37630c2009-04-22 15:19:10 +00006024echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006025if test "$xen" = "yes" ; then
6026 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00006027 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00006028fi
aurel322e4d9fb2008-04-08 06:01:02 +00006029echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006030echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006031echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006032echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006033echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006034echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006035echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006036echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006037echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006038echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006039echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006040echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006041echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006042echo "TCG support $tcg"
6043if test "$tcg" = "yes" ; then
6044 echo "TCG debug enabled $debug_tcg"
6045 echo "TCG interpreter $tcg_interpreter"
6046fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006047echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006048echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006049echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006050echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006051echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006052echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006053echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006054echo "madvise $madvise"
6055echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006056echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006057echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006058echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006059echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006060echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006061echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006062echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006063echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006064if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006065echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006066fi
Stefan Weil89138852016-05-16 15:10:20 +02006067echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006068echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006069echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006070echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006071echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006072echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006073echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006074echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006075echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006076echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006077echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006078echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006079echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006080echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006081echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006082echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006083echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006084echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006085echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006086echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306087echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006088echo "gcov $gcov_tool"
6089echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006090echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006091echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006092echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006093echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006094echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006095echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006096echo "lzo support $lzo"
6097echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006098echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006099echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006100echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006101echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006102echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006103echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006104echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006105echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006106echo "bochs support $bochs"
6107echo "cloop support $cloop"
6108echo "dmg support $dmg"
6109echo "qcow v1 support $qcow1"
6110echo "vdi support $vdi"
6111echo "vvfat support $vvfat"
6112echo "qed support $qed"
6113echo "parallels support $parallels"
6114echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006115echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006116echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006117echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006118echo "libudev $libudev"
bellard67b915a2004-03-31 23:37:16 +00006119
Stefan Weil1ba16962011-07-29 22:40:45 +02006120if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006121echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006122fi
bellard97a847b2003-08-10 21:36:04 +00006123
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006124if test "$sdlabi" = "1.2"; then
6125 echo
6126 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6127 echo "WARNING: future releases. Please switch to using SDL 2.0"
6128fi
6129
Peter Maydell898be3e2017-03-21 14:31:57 +00006130if test "$supported_cpu" = "no"; then
6131 echo
6132 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6133 echo
6134 echo "CPU host architecture $cpu support is not currently maintained."
6135 echo "The QEMU project intends to remove support for this host CPU in"
6136 echo "a future release if nobody volunteers to maintain it and to"
6137 echo "provide a build host for our continuous integration setup."
6138 echo "configure has succeeded and you can continue to build, but"
6139 echo "if you care about QEMU on this platform you should contact"
6140 echo "us upstream at qemu-devel@nongnu.org."
6141fi
6142
6143if test "$supported_os" = "no"; then
6144 echo
6145 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6146 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006147 echo "Host OS $targetos support is not currently maintained."
6148 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006149 echo "a future release if nobody volunteers to maintain it and to"
6150 echo "provide a build host for our continuous integration setup."
6151 echo "configure has succeeded and you can continue to build, but"
6152 echo "if you care about QEMU on this platform you should contact"
6153 echo "us upstream at qemu-devel@nongnu.org."
6154fi
6155
Juan Quintela98ec69a2009-07-16 18:34:18 +02006156config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006157
Stefan Weildbd99ae2013-01-01 18:33:44 +01006158echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6159
Juan Quintela98ec69a2009-07-16 18:34:18 +02006160echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006161echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006162
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006163echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006164echo "prefix=$prefix" >> $config_host_mak
6165echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006166echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006167echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006168echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006169echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006170echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006171echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006172echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006173echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006174echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006175echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006176if test "$mingw32" = "no" ; then
6177 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6178fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006179echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006180echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006181echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006182echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006183echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006184echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006185
Juan Quintela98ec69a2009-07-16 18:34:18 +02006186echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006187
aurel32f8393942009-04-13 18:45:38 +00006188if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006189 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006190fi
aliguori1625af82009-04-05 17:41:02 +00006191if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006192 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006193fi
bellard7d132992003-03-06 23:23:54 +00006194if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006195 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006196fi
bellard67b915a2004-03-31 23:37:16 +00006197if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006198 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006199 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006200 version_major=${rc_version%%.*}
6201 rc_version=${rc_version#*.}
6202 version_minor=${rc_version%%.*}
6203 rc_version=${rc_version#*.}
6204 version_subminor=${rc_version%%.*}
6205 version_micro=0
6206 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6207 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006208 if test "$guest_agent_with_vss" = "yes" ; then
6209 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006210 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006211 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6212 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006213 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006214 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006215 fi
Michael Roth1a349042015-08-26 11:14:31 -05006216 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006217 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006218 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6219 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6220 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6221 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6222 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6223 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6224 fi
pbrook210fa552007-02-27 21:04:49 +00006225else
Juan Quintela35f4df22009-07-27 16:13:07 +02006226 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006227fi
blueswir1128ab2f2008-08-15 18:33:42 +00006228
Mark McLoughlindffcb712009-10-22 17:49:11 +01006229if test "$linux" = "yes" ; then
6230 echo "CONFIG_LINUX=y" >> $config_host_mak
6231fi
6232
bellard83fb7ad2004-07-05 21:25:26 +00006233if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006234 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006235fi
malcb29fe3e2008-11-18 01:42:22 +00006236
bellardec530c82006-04-25 22:36:06 +00006237if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006238 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006239fi
Andreas Färber179cf402010-09-20 00:50:43 +02006240if test "$haiku" = "yes" ; then
6241 echo "CONFIG_HAIKU=y" >> $config_host_mak
6242fi
bellard97a847b2003-08-10 21:36:04 +00006243if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006244 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006245fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006246if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006247 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006248fi
bellardc20709a2004-04-21 23:27:19 +00006249if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006250 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006251 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006252fi
ths8a16d272008-07-19 09:56:24 +00006253if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006254 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006255 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006256fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006257if test "$netmap" = "yes" ; then
6258 echo "CONFIG_NETMAP=y" >> $config_host_mak
6259fi
Gonglei015a33b2014-07-01 20:58:08 +08006260if test "$l2tpv3" = "yes" ; then
6261 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6262fi
Corey Bryant47e98652012-01-26 09:42:26 -05006263if test "$cap_ng" = "yes" ; then
6264 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6265fi
Juan Quintela2358a492009-07-27 16:13:25 +02006266echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006267for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006268 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006269 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006270 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006271 echo "$def=m" >> $config_host_mak ;;
6272 *)
6273 echo "$def=y" >> $config_host_mak ;;
6274 esac
malc0c58ac12008-06-25 21:04:05 +00006275done
Fam Zhengb1149912017-09-07 16:29:13 +08006276echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6277echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6278echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6279echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6280echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006281if test "$audio_pt_int" = "yes" ; then
6282 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6283fi
malcd5631632009-10-10 01:13:41 +04006284if test "$audio_win_int" = "yes" ; then
6285 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6286fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006287echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6288echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006289if test "$vnc" = "yes" ; then
6290 echo "CONFIG_VNC=y" >> $config_host_mak
6291fi
aliguori2f9606b2009-03-06 20:27:28 +00006292if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006293 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006294fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006295if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006296 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006297fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006298if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006299 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006300fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006301if test "$xkbcommon" = "yes" ; then
6302 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6303 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6304fi
aliguori76655d62009-03-06 20:27:37 +00006305if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006306 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006307fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006308if test "$xfs" = "yes" ; then
6309 echo "CONFIG_XFS=y" >> $config_host_mak
6310fi
Stefan Weil89138852016-05-16 15:10:20 +02006311qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006312echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006313echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006314echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006315echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006316if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006317 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006318fi
Fam Zheng17969262014-02-10 14:48:56 +08006319if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006320 # $shacmd can generate a hash started with digit, which the compiler doesn't
6321 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006322 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006323 echo "CONFIG_MODULES=y" >> $config_host_mak
6324fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006325if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6326 echo "CONFIG_X11=y" >> $config_host_mak
6327 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6328 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6329fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006330if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006331 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006332 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006333 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006334 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006335fi
6336if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006337 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006338fi
6339if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006340 echo "CONFIG_CURSES=m" >> $config_host_mak
6341 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6342 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006343fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006344if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006345 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006346fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006347if test "$accept4" = "yes" ; then
6348 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6349fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306350if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006351 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306352fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006353if test "$eventfd" = "yes" ; then
6354 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6355fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006356if test "$memfd" = "yes" ; then
6357 echo "CONFIG_MEMFD=y" >> $config_host_mak
6358fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006359if test "$have_usbfs" = "yes" ; then
6360 echo "CONFIG_USBFS=y" >> $config_host_mak
6361fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006362if test "$fallocate" = "yes" ; then
6363 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6364fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006365if test "$fallocate_punch_hole" = "yes" ; then
6366 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6367fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006368if test "$fallocate_zero_range" = "yes" ; then
6369 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6370fi
Kevin Wolfed911432014-09-29 17:12:59 +02006371if test "$posix_fallocate" = "yes" ; then
6372 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6373fi
Peter Maydellc727f472011-01-06 11:05:10 +00006374if test "$sync_file_range" = "yes" ; then
6375 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6376fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006377if test "$fiemap" = "yes" ; then
6378 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6379fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006380if test "$dup3" = "yes" ; then
6381 echo "CONFIG_DUP3=y" >> $config_host_mak
6382fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006383if test "$ppoll" = "yes" ; then
6384 echo "CONFIG_PPOLL=y" >> $config_host_mak
6385fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006386if test "$prctl_pr_set_timerslack" = "yes" ; then
6387 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6388fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006389if test "$epoll" = "yes" ; then
6390 echo "CONFIG_EPOLL=y" >> $config_host_mak
6391fi
6392if test "$epoll_create1" = "yes" ; then
6393 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6394fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006395if test "$sendfile" = "yes" ; then
6396 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6397fi
Riku Voipio51834342014-06-22 11:25:42 +01006398if test "$timerfd" = "yes" ; then
6399 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6400fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006401if test "$setns" = "yes" ; then
6402 echo "CONFIG_SETNS=y" >> $config_host_mak
6403fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006404if test "$clock_adjtime" = "yes" ; then
6405 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6406fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006407if test "$syncfs" = "yes" ; then
6408 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6409fi
aurel323b3f24a2009-04-15 16:12:13 +00006410if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006411 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006412fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006413if test "$inotify1" = "yes" ; then
6414 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6415fi
Peter Maydell401bc052017-09-05 13:19:32 +01006416if test "$sem_timedwait" = "yes" ; then
6417 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6418fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006419if test "$strchrnul" = "yes" ; then
6420 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6421fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006422if test "$byteswap_h" = "yes" ; then
6423 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6424fi
6425if test "$bswap_h" = "yes" ; then
6426 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6427fi
Alexander Graf769ce762009-05-11 17:41:42 +02006428if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006429 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006430 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006431 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006432fi
aurel322e4d9fb2008-04-08 06:01:02 +00006433if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006434 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006435 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006436fi
balrogfb599c92008-09-28 23:49:55 +00006437if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006438 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006439 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006440fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006441if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006442 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006443 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006444 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006445 if test "$gtk_gl" = "yes" ; then
6446 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6447 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006448fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006449echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006450if test "$gnutls" = "yes" ; then
6451 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6452fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006453if test "$gcrypt" = "yes" ; then
6454 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006455 if test "$gcrypt_hmac" = "yes" ; then
6456 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6457 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006458fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006459if test "$nettle" = "yes" ; then
6460 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006461 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006462fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006463if test "$tasn1" = "yes" ; then
6464 echo "CONFIG_TASN1=y" >> $config_host_mak
6465fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006466if test "$have_ifaddrs_h" = "yes" ; then
6467 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6468fi
Eric Blake6b39b062016-10-11 10:46:23 -05006469if test "$have_broken_size_max" = "yes" ; then
6470 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6471fi
Jan Vesely277abf12016-04-29 13:15:23 -04006472
6473# Work around a system header bug with some kernel/XFS header
6474# versions where they both try to define 'struct fsxattr':
6475# xfs headers will not try to redefine structs from linux headers
6476# if this macro is set.
6477if test "$have_fsxattr" = "yes" ; then
6478 echo "HAVE_FSXATTR=y" >> $config_host_mak
6479fi
Fam Zheng1efad062018-06-01 17:26:43 +08006480if test "$have_copy_file_range" = "yes" ; then
6481 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6482fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006483if test "$vte" = "yes" ; then
6484 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006485 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006486 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006487fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006488if test "$virglrenderer" = "yes" ; then
6489 echo "CONFIG_VIRGL=y" >> $config_host_mak
6490 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6491 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6492fi
aliguorie37630c2009-04-22 15:19:10 +00006493if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006494 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006495 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006496 if test "$xen_pv_domain_build" = "yes" ; then
6497 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6498 fi
aliguorie37630c2009-04-22 15:19:10 +00006499fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006500if test "$linux_aio" = "yes" ; then
6501 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6502fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006503if test "$attr" = "yes" ; then
6504 echo "CONFIG_ATTR=y" >> $config_host_mak
6505fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006506if test "$libattr" = "yes" ; then
6507 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6508fi
Meador Inge983eef52012-02-24 14:00:42 +05306509if test "$virtfs" = "yes" ; then
6510 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006511fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006512if test "$mpath" = "yes" ; then
6513 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006514 if test "$mpathpersist_new_api" = "yes"; then
6515 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6516 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006517fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006518if test "$vhost_scsi" = "yes" ; then
6519 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6520fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006521if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006522 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6523fi
Gonglei042cea22018-03-01 21:46:28 +08006524if test "$vhost_crypto" = "yes" ; then
6525 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6526fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006527if test "$vhost_vsock" = "yes" ; then
6528 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6529fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006530if test "$vhost_user" = "yes" ; then
6531 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6532fi
ths77755342008-11-27 15:45:16 +00006533if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006534 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006535fi
aliguoribf9298b2008-12-05 20:05:26 +00006536if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006537 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006538fi
aliguoriceb42de2009-04-07 18:43:28 +00006539if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006540 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006541fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006542if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006543 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006544fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006545if test "$membarrier" = "yes" ; then
6546 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6547fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006548if test "$signalfd" = "yes" ; then
6549 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6550fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006551if test "$tcg" = "yes"; then
6552 echo "CONFIG_TCG=y" >> $config_host_mak
6553 if test "$tcg_interpreter" = "yes" ; then
6554 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6555 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006556fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006557if test "$fdatasync" = "yes" ; then
6558 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6559fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006560if test "$madvise" = "yes" ; then
6561 echo "CONFIG_MADVISE=y" >> $config_host_mak
6562fi
6563if test "$posix_madvise" = "yes" ; then
6564 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6565fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006566if test "$posix_memalign" = "yes" ; then
6567 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6568fi
bellard97a847b2003-08-10 21:36:04 +00006569
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006570if test "$spice" = "yes" ; then
6571 echo "CONFIG_SPICE=y" >> $config_host_mak
6572fi
6573
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006574if test "$smartcard" = "yes" ; then
6575 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006576 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6577 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006578fi
6579
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006580if test "$libusb" = "yes" ; then
6581 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006582 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6583 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006584fi
6585
Hans de Goede69354a82011-07-19 11:04:10 +02006586if test "$usb_redir" = "yes" ; then
6587 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006588 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6589 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006590fi
6591
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006592if test "$opengl" = "yes" ; then
6593 echo "CONFIG_OPENGL=y" >> $config_host_mak
6594 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006595 if test "$opengl_dmabuf" = "yes" ; then
6596 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6597 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006598fi
6599
Yang Zhong5a22ab72017-12-20 21:16:46 +08006600if test "$malloc_trim" = "yes" ; then
6601 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6602fi
6603
Liang Li99f2dbd2016-03-08 13:53:16 +08006604if test "$avx2_opt" = "yes" ; then
6605 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6606fi
6607
qiaonuohan607dacd2014-02-18 14:11:30 +08006608if test "$lzo" = "yes" ; then
6609 echo "CONFIG_LZO=y" >> $config_host_mak
6610fi
6611
6612if test "$snappy" = "yes" ; then
6613 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6614fi
6615
Peter Wu6b383c02015-01-06 18:48:14 +01006616if test "$bzip2" = "yes" ; then
6617 echo "CONFIG_BZIP2=y" >> $config_host_mak
6618 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6619fi
6620
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006621if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006622 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006623 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6624 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006625fi
6626
Peter Lieven6542aa92014-02-03 10:26:13 +01006627if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006628 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6629 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006630fi
6631
Eduardo Otubof7945732012-08-14 18:44:05 -03006632if test "$seccomp" = "yes"; then
6633 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006634 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6635 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006636fi
6637
bellard83fb7ad2004-07-05 21:25:26 +00006638# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006639if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006640 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006641fi
6642
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006643if test "$localtime_r" = "yes" ; then
6644 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6645fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006646if test "$qom_cast_debug" = "yes" ; then
6647 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6648fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006649if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006650 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006651 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6652 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006653fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006654
Peter Maydell7c2acc72013-04-08 12:11:27 +01006655echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006656if test "$coroutine_pool" = "yes" ; then
6657 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6658else
6659 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6660fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306661
Peter Lieven7d992e42016-09-27 11:58:45 +02006662if test "$debug_stack_usage" = "yes" ; then
6663 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6664fi
6665
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006666if test "$crypto_afalg" = "yes" ; then
6667 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6668fi
6669
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306670if test "$open_by_handle_at" = "yes" ; then
6671 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6672fi
6673
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306674if test "$linux_magic_h" = "yes" ; then
6675 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6676fi
6677
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006678if test "$pragma_diagnostic_available" = "yes" ; then
6679 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006680fi
6681
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006682if test "$valgrind_h" = "yes" ; then
6683 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6684fi
6685
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006686if test "$have_asan_iface_fiber" = "yes" ; then
6687 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6688fi
6689
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006690if test "$has_environ" = "yes" ; then
6691 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6692fi
6693
Richard Henderson76a347e2012-12-28 14:17:02 -08006694if test "$cpuid_h" = "yes" ; then
6695 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6696fi
6697
Richard Hendersonf5401662013-02-16 12:46:59 -08006698if test "$int128" = "yes" ; then
6699 echo "CONFIG_INT128=y" >> $config_host_mak
6700fi
6701
Richard Henderson7ebee432016-06-29 21:10:59 -07006702if test "$atomic128" = "yes" ; then
6703 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6704fi
6705
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006706if test "$cmpxchg128" = "yes" ; then
6707 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6708fi
6709
Richard Hendersondf79b992016-09-02 12:23:57 -07006710if test "$atomic64" = "yes" ; then
6711 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6712fi
6713
Richard Hendersondb432672017-09-15 14:11:45 -07006714if test "$vector16" = "yes" ; then
6715 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6716fi
6717
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006718if test "$getauxval" = "yes" ; then
6719 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6720fi
6721
Bharata B Raoeb100392012-09-24 14:42:45 +05306722if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006723 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006724 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6725 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306726fi
6727
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006728if test "$glusterfs_xlator_opt" = "yes" ; then
6729 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6730fi
6731
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306732if test "$glusterfs_discard" = "yes" ; then
6733 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6734fi
6735
Niels de Vosdf3a4292017-05-28 12:01:14 +05306736if test "$glusterfs_fallocate" = "yes" ; then
6737 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6738fi
6739
Bharata B Rao7c815372013-12-21 14:51:25 +05306740if test "$glusterfs_zerofill" = "yes" ; then
6741 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6742fi
6743
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006744if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006745 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006746 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6747 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006748fi
6749
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006750if test "$live_block_migration" = "yes" ; then
6751 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6752fi
6753
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006754if test "$tpm" = "yes"; then
6755 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006756 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006757 if test "$tpm_passthrough" = "yes"; then
6758 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6759 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006760 # TPM emulator support?
6761 if test "$tpm_emulator" = "yes"; then
6762 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6763 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006764fi
6765
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006766echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6767if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006768 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306769fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006770if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006771 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6772 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006773 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006774fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006775if have_backend "log"; then
6776 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02006777fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006778if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006779 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6780fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006781if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006782 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6783 if test "$trace_backend_stap" = "yes" ; then
6784 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6785 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006786fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006787if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006788 if test "$linux" = "yes" ; then
6789 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006790 else
Stewart Smith21684af2014-01-24 12:39:10 +11006791 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006792 fi
6793fi
Paul Durrant0a852412016-08-04 14:44:14 +01006794if have_backend "syslog"; then
6795 if test "$posix_syslog" = "yes" ; then
6796 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6797 else
6798 feature_not_found "syslog(trace backend)" "syslog not available"
6799 fi
6800fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006801echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6802
Michael R. Hines2da776d2013-07-22 10:01:54 -04006803if test "$rdma" = "yes" ; then
6804 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006805 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006806fi
6807
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006808if test "$pvrdma" = "yes" ; then
6809 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6810fi
6811
Laurent Vivier575b22b2016-06-02 22:14:15 +02006812if test "$have_rtnetlink" = "yes" ; then
6813 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6814fi
6815
Klim Kireeved279a02018-01-12 12:01:19 +03006816if test "$libxml2" = "yes" ; then
6817 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6818 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6819 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6820fi
6821
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006822if test "$replication" = "yes" ; then
6823 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6824fi
6825
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006826if test "$have_af_vsock" = "yes" ; then
6827 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6828fi
6829
Christopher Covington4d043512016-12-28 15:04:33 -05006830if test "$have_sysmacros" = "yes" ; then
6831 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6832fi
6833
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006834if test "$have_static_assert" = "yes" ; then
6835 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6836fi
6837
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006838if test "$have_utmpx" = "yes" ; then
6839 echo "HAVE_UTMPX=y" >> $config_host_mak
6840fi
6841
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006842if test "$ivshmem" = "yes" ; then
6843 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6844fi
Richard Hendersone219c492017-09-28 09:01:23 -07006845if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006846 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6847fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006848if test "$debug_mutex" = "yes" ; then
6849 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6850fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006851
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006852# Hold two types of flag:
6853# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6854# a thread we have a handle to
6855# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6856# platform
6857if test "$pthread_setname_np" = "yes" ; then
6858 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6859 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6860fi
6861
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006862if test "$vxhs" = "yes" ; then
6863 echo "CONFIG_VXHS=y" >> $config_host_mak
6864 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6865fi
6866
Junyan He17824402018-07-18 15:47:59 +08006867if test "$libpmem" = "yes" ; then
6868 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6869fi
6870
Jeff Cody2f740132018-11-07 07:36:44 +01006871if test "$bochs" = "yes" ; then
6872 echo "CONFIG_BOCHS=y" >> $config_host_mak
6873fi
6874if test "$cloop" = "yes" ; then
6875 echo "CONFIG_CLOOP=y" >> $config_host_mak
6876fi
6877if test "$dmg" = "yes" ; then
6878 echo "CONFIG_DMG=y" >> $config_host_mak
6879fi
6880if test "$qcow1" = "yes" ; then
6881 echo "CONFIG_QCOW1=y" >> $config_host_mak
6882fi
6883if test "$vdi" = "yes" ; then
6884 echo "CONFIG_VDI=y" >> $config_host_mak
6885fi
6886if test "$vvfat" = "yes" ; then
6887 echo "CONFIG_VVFAT=y" >> $config_host_mak
6888fi
6889if test "$qed" = "yes" ; then
6890 echo "CONFIG_QED=y" >> $config_host_mak
6891fi
6892if test "$parallels" = "yes" ; then
6893 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6894fi
6895if test "$sheepdog" = "yes" ; then
6896 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6897fi
6898
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006899if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006900 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006901elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006902 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006903elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006904 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006905elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006906 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006907elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006908 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006909else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006910 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006911fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006912QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006913
Juan Quintela98ec69a2009-07-16 18:34:18 +02006914echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006915echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006916echo "MAKE=$make" >> $config_host_mak
6917echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006918echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6919echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006920echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6921echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006922echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006923echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006924if $iasl -h > /dev/null 2>&1; then
6925 echo "IASL=$iasl" >> $config_host_mak
6926fi
Juan Quintela804edf22009-07-27 16:12:49 +02006927echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006928echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006929echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006930echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006931echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006932echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006933echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006934echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006935echo "OBJCOPY=$objcopy" >> $config_host_mak
6936echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006937echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006938echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006939echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006940echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006941echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006942echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006943echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006944echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006945if test "$sparse" = "yes" ; then
6946 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006947 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006948 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006949 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6950 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6951fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006952if test "$cross_prefix" != ""; then
6953 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6954else
6955 echo "AUTOCONF_HOST := " >> $config_host_mak
6956fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006957echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006958echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006959echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006960echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006961echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006962echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006963echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006964echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006965echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006966echo "DSOSUF=$DSOSUF" >> $config_host_mak
6967echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006968echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006969echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6970echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006971echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006972if test "$gcov" = "yes" ; then
6973 echo "CONFIG_GCOV=y" >> $config_host_mak
6974 echo "GCOV=$gcov_tool" >> $config_host_mak
6975fi
Juan Quintela804edf22009-07-27 16:12:49 +02006976
Alex Bennée51a12b52018-04-04 14:24:39 +01006977if test "$docker" != "no"; then
6978 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6979fi
6980
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006981if test "$libudev" != "no"; then
6982 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
6983 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
6984fi
6985
Peter Maydell6efd7512011-11-30 11:59:04 +00006986# use included Linux headers
6987if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006988 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006989 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006990 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006991 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006992 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02006993 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006994 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006995 ;;
6996 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006997 linux_arch=s390
6998 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006999 aarch64)
7000 linux_arch=arm64
7001 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007002 mips64)
7003 linux_arch=mips
7004 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007005 *)
7006 # For most CPUs the kernel architecture name and QEMU CPU name match.
7007 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007008 ;;
7009 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007010 # For non-KVM architectures we will not have asm headers
7011 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7012 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7013 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007014fi
7015
bellard1d14ffa2005-10-30 18:58:22 +00007016for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007017target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007018config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007019target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00007020target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02007021
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007022case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007023 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 +02007024 target_bigendian=yes
7025 ;;
7026esac
bellard97a847b2003-08-10 21:36:04 +00007027target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007028target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007029target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007030target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007031case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007032 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007033 target_softmmu="yes"
7034 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007035 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007036 target_user_only="yes"
7037 target_linux_user="yes"
7038 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007039 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007040 target_user_only="yes"
7041 target_bsd_user="yes"
7042 ;;
pbrook9e407a82007-05-26 16:38:53 +00007043 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007044 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007045 exit 1
7046 ;;
7047esac
ths831b7822007-01-18 20:06:33 +00007048
Alex Bennéed75402b2018-04-04 20:27:05 +01007049target_compiler=""
7050target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007051target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007052
bellard97a847b2003-08-10 21:36:04 +00007053mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007054echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007055
pbrooke5fe0c52006-06-11 13:32:59 +00007056bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007057mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007058interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007059gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007060
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007061TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007062TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007063TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007064
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007065case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007066 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007067 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007068 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007069 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007070 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007071 ;;
7072 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007073 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007074 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007075 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007076 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007077 ;;
7078 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007079 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007080 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007081 ;;
7082 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007083 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007084 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007085 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007086 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007087 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007088 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007089 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007090 aarch64|aarch64_be)
7091 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007092 TARGET_BASE_ARCH=arm
7093 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007094 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007095 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 +01007096 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007097 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007098 ;;
aurel322408a522008-04-20 20:19:44 +00007099 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007100 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007101 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007102 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007103 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007104 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007105 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007106 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007107 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007108 ;;
aurel322408a522008-04-20 20:19:44 +00007109 m68k)
aurel322408a522008-04-20 20:19:44 +00007110 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007111 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007112 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007113 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007114 microblaze|microblazeel)
7115 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007116 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007117 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007118 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007119 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007120 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007121 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007122 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007123 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007124 ;;
7125 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007126 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007127 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007128 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007129 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007130 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007131 ;;
7132 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007133 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007134 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007135 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007136 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007137 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007138 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007139 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007140 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007141 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007142 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007143 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007144 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007145 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007146 TARGET_ARCH=openrisc
7147 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007148 ;;
aurel322408a522008-04-20 20:19:44 +00007149 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007150 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007151 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007152 ;;
aurel322408a522008-04-20 20:19:44 +00007153 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007154 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007155 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307156 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007157 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 +01007158 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007159 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007160 ppc64le)
7161 TARGET_ARCH=ppc64
7162 TARGET_BASE_ARCH=ppc
7163 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307164 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007165 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 +01007166 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007167 ;;
aurel322408a522008-04-20 20:19:44 +00007168 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007169 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007170 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007171 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007172 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007173 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 +01007174 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007175 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007176 riscv32)
7177 TARGET_BASE_ARCH=riscv
7178 TARGET_ABI_DIR=riscv
7179 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007180 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007181 ;;
7182 riscv64)
7183 TARGET_BASE_ARCH=riscv
7184 TARGET_ABI_DIR=riscv
7185 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007186 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007187 ;;
aurel322408a522008-04-20 20:19:44 +00007188 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007189 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007190 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007191 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007192 ;;
7193 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007194 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007195 ;;
7196 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007197 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007198 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007199 ;;
7200 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007201 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007202 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007203 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007204 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007205 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007206 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007207 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007208 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007209 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 +01007210 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007211 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007212 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007213 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007214 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007215 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007216 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007217 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007218 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007219 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007220 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007221 xtensa|xtensaeb)
7222 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007223 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007224 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007225 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007226 ;;
aurel322408a522008-04-20 20:19:44 +00007227 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007228 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007229 ;;
7230esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007231# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7232if [ "$TARGET_BASE_ARCH" = "" ]; then
7233 TARGET_BASE_ARCH=$TARGET_ARCH
7234fi
7235
Alex Bennéed75402b2018-04-04 20:27:05 +01007236# Do we have a cross compiler for this target?
7237if has $target_compiler; then
7238
7239 write_c_skeleton
7240
Alex Bennée716a5072018-04-10 12:19:40 +01007241 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007242 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007243 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007244 target_compiler=""
7245 else
7246 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7247 target_compiler_static="n"
7248 fi
7249 else
7250 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7251 target_compiler_static="y"
7252 fi
7253else
7254 target_compiler=""
7255fi
7256
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007257symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7258
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007259upper() {
7260 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7261}
7262
Stefan Weil89138852016-05-16 15:10:20 +02007263target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007264echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007265echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007266echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007267if [ "$TARGET_ABI_DIR" = "" ]; then
7268 TARGET_ABI_DIR=$TARGET_ARCH
7269fi
Juan Quintela25be2102009-10-07 02:41:00 +02007270echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007271if [ "$HOST_VARIANT_DIR" != "" ]; then
7272 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7273fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007274
7275if supported_xen_target $target; then
7276 echo "CONFIG_XEN=y" >> $config_target_mak
7277 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007278 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007279 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007280fi
7281if supported_kvm_target $target; then
7282 echo "CONFIG_KVM=y" >> $config_target_mak
7283 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007284 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007285 if test "$vhost_user" = "yes" ; then
7286 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7287 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007288 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007289fi
7290if supported_hax_target $target; then
7291 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007292fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007293if supported_hvf_target $target; then
7294 echo "CONFIG_HVF=y" >> $config_target_mak
7295fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007296if supported_whpx_target $target; then
7297 echo "CONFIG_WHPX=y" >> $config_target_mak
7298fi
bellardde83cd02003-06-15 20:25:43 +00007299if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007300 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007301fi
7302if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007303 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007304 if test "$mttcg" = "yes" ; then
7305 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7306 fi
bellardde83cd02003-06-15 20:25:43 +00007307fi
bellard997344f2003-10-27 21:10:39 +00007308if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007309 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007310 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007311fi
ths831b7822007-01-18 20:06:33 +00007312if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007313 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007314fi
pbrook56aebc82008-10-11 17:55:29 +00007315list=""
7316if test ! -z "$gdb_xml_files" ; then
7317 for x in $gdb_xml_files; do
7318 list="$list $source_path/gdb-xml/$x"
7319 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007320 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007321fi
bellardde83cd02003-06-15 20:25:43 +00007322
pbrooke5fe0c52006-06-11 13:32:59 +00007323if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007324 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007325fi
blueswir184778502008-10-26 20:33:16 +00007326if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007327 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007328fi
bellard5b0753e2005-03-01 21:37:28 +00007329
Alex Bennéed75402b2018-04-04 20:27:05 +01007330if test -n "$target_compiler"; then
7331 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7332
7333 if test -n "$target_compiler_static"; then
7334 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7335 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007336
7337 if test -n "$target_compiler_cflags"; then
7338 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7339 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007340fi
7341
Alex Bennée716a5072018-04-10 12:19:40 +01007342
Juan Quintela4afddb52009-08-03 14:46:45 +02007343# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007344
Juan Quintela4afddb52009-08-03 14:46:45 +02007345cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007346ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007347
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007348disas_config() {
7349 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7350 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7351}
7352
Juan Quintela64656022009-08-03 14:46:53 +02007353for i in $ARCH $TARGET_BASE_ARCH ; do
7354 case "$i" in
7355 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007356 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007357 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007358 aarch64)
7359 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007360 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007361 fi
7362 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007363 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007364 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007365 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007366 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007367 fi
Juan Quintela64656022009-08-03 14:46:53 +02007368 ;;
7369 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007370 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007371 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007372 hppa)
7373 disas_config "HPPA"
7374 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007375 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007376 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007377 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007378 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007379 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007380 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007381 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007382 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007383 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007384 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007385 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007386 ;;
7387 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007388 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007389 if test -n "${cxx}"; then
7390 disas_config "NANOMIPS"
7391 fi
Juan Quintela64656022009-08-03 14:46:53 +02007392 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007393 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007394 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007395 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007396 nios2)
7397 disas_config "NIOS2"
7398 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007399 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007400 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007401 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007402 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007403 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007404 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007405 riscv)
7406 disas_config "RISCV"
7407 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007408 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007409 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007410 ;;
7411 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007412 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007413 ;;
7414 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007415 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007416 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007417 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007418 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007419 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007420 esac
7421done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007422if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007423 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007424fi
Juan Quintela64656022009-08-03 14:46:53 +02007425
Juan Quintela6ee71262009-08-03 14:46:47 +02007426case "$ARCH" in
7427alpha)
7428 # Ensure there's only a single GP
7429 cflags="-msmall-data $cflags"
7430;;
7431esac
7432
Juan Quintelad02c1db2009-08-03 14:46:50 +02007433if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007434 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007435 if test "$target_linux_user" = "yes" ; then
7436 cflags="-p $cflags"
7437 ldflags="-p $ldflags"
7438 fi
7439 if test "$target_softmmu" = "yes" ; then
7440 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007441 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007442 fi
7443fi
7444
Juan Quintela9b8e1112009-08-03 14:46:46 +02007445if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007446 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007447fi
Juan Quintelafa282482009-07-22 22:37:39 +02007448
Christian Borntraegere9a35912017-08-23 12:16:23 +02007449# Newer kernels on s390 check for an S390_PGSTE program header and
7450# enable the pgste page table extensions in that case. This makes
7451# the vm.allocate_pgste sysctl unnecessary. We enable this program
7452# header if
7453# - we build on s390x
7454# - we build the system emulation for s390x (qemu-system-s390x)
7455# - KVM is enabled
7456# - the linker supports --s390-pgste
7457if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7458 if ld_has --s390-pgste ; then
7459 ldflags="-Wl,--s390-pgste $ldflags"
7460 fi
7461fi
7462
Juan Quintela25be2102009-10-07 02:41:00 +02007463echo "LDFLAGS+=$ldflags" >> $config_target_mak
7464echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007465
bellard97a847b2003-08-10 21:36:04 +00007466done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007467
Alex Bennéed75402b2018-04-04 20:27:05 +01007468if test -n "$enabled_cross_compilers"; then
7469 echo
7470 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7471fi
7472
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007473if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007474 echo "config-host.h: subdir-dtc" >> $config_host_mak
7475fi
Richard Hendersone219c492017-09-28 09:01:23 -07007476if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7477 echo "config-host.h: subdir-capstone" >> $config_host_mak
7478fi
7479if test -n "$LIBCAPSTONE"; then
7480 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7481fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007482
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007483if test "$numa" = "yes"; then
7484 echo "CONFIG_NUMA=y" >> $config_host_mak
7485fi
7486
John Snowfd0e6052015-03-25 18:57:39 -04007487if test "$ccache_cpp2" = "yes"; then
7488 echo "export CCACHE_CPP2=y" >> $config_host_mak
7489fi
7490
Peter Maydelle29e5c62018-11-02 11:52:38 +00007491# If we're using a separate build tree, set it up now.
7492# DIRS are directories which we simply mkdir in the build tree;
7493# LINKS are things to symlink back into the source tree
7494# (these can be both files and directories).
7495# Caution: do not add files or directories here using wildcards. This
7496# will result in problems later if a new file matching the wildcard is
7497# added to the source tree -- nothing will cause configure to be rerun
7498# so the build tree will be missing the link back to the new file, and
7499# tests might fail. Prefer to keep the relevant files in their own
7500# directory and symlink the directory instead.
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007501DIRS="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 -05007502DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007503DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007504DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007505DIRS="$DIRS roms/seabios roms/vgabios"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007506LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7507LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7508LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7509LINKS="$LINKS tests/fp/Makefile"
7510LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7511LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7512LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7513LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7514LINKS="$LINKS pc-bios/qemu-icon.bmp"
7515LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007516LINKS="$LINKS tests/acceptance tests/data"
7517LINKS="$LINKS tests/qemu-iotests/check"
Richard Henderson753d11f2011-06-24 11:58:37 -07007518for bios_file in \
7519 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007520 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007521 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007522 $source_path/pc-bios/*.rom \
7523 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007524 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007525 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007526 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007527 $source_path/pc-bios/palcode-*
7528do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007529 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007530done
7531mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007532for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007533 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007534 symlink "$source_path/$f" "$f"
7535 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007536done
Paul Brook1ad21342009-05-19 16:17:58 +01007537
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007538# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007539for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007540 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007541 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007542 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007543 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007544 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007545 echo "CC=$cc" >> $config_mak
7546 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007547 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007548 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007549 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007550 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007551 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007552done
7553
Max Reitz76c75602014-05-24 23:24:56 +02007554# set up qemu-iotests in this build directory
7555iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007556
7557echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7558echo >> "$iotests_common_env"
7559echo "export PYTHON='$python'" >> "$iotests_common_env"
7560
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007561# Save the configure command line for later reuse.
7562cat <<EOD >config.status
7563#!/bin/sh
7564# Generated by configure.
7565# Run this file to recreate the current configuration.
7566# Compiler output produced by configure, useful for debugging
7567# configure, is in config.log if it exists.
7568EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007569
7570preserve_env() {
7571 envname=$1
7572
7573 eval envval=\$$envname
7574
7575 if test -n "$envval"
7576 then
7577 echo "$envname='$envval'" >> config.status
7578 echo "export $envname" >> config.status
7579 else
7580 echo "unset $envname" >> config.status
7581 fi
7582}
7583
7584# Preserve various env variables that influence what
7585# features/build target configure will detect
7586preserve_env AR
7587preserve_env AS
7588preserve_env CC
7589preserve_env CPP
7590preserve_env CXX
7591preserve_env INSTALL
7592preserve_env LD
7593preserve_env LD_LIBRARY_PATH
7594preserve_env LIBTOOL
7595preserve_env MAKE
7596preserve_env NM
7597preserve_env OBJCOPY
7598preserve_env PATH
7599preserve_env PKG_CONFIG
7600preserve_env PKG_CONFIG_LIBDIR
7601preserve_env PKG_CONFIG_PATH
7602preserve_env PYTHON
7603preserve_env SDL_CONFIG
7604preserve_env SDL2_CONFIG
7605preserve_env SMBD
7606preserve_env STRIP
7607preserve_env WINDRES
7608
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007609printf "exec" >>config.status
7610printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007611echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007612chmod +x config.status
7613
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007614rm -r "$TMPDIR1"