blob: 5a508206e1ed3aee7016213140edb3550dc78f2b [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"
Liang Li99f2dbd2016-03-08 13:53:16 +0800431avx2_opt="no"
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=""
Klim Kireeved279a02018-01-12 12:01:19 +0300473libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100474docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200475debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800476libpmem=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100477
Alex Bennéed75402b2018-04-04 20:27:05 +0100478# cross compilers defaults, can be overridden with --cross-cc-ARCH
479cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100480cross_cc_aarch64_be="$cross_cc_aarch64"
481cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100482cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100483cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100484cross_cc_i386="i386-pc-linux-gnu-gcc"
485cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100486cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100487cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100488
489enabled_cross_compilers=""
490
Peter Maydell898be3e2017-03-21 14:31:57 +0000491supported_cpu="no"
492supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100493bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800494malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000495
aliguoriac0df512008-12-29 17:14:15 +0000496# parse CC options first
497for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200498 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000499 case "$opt" in
500 --cross-prefix=*) cross_prefix="$optarg"
501 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100502 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000503 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400504 --cxx=*) CXX="$optarg"
505 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100506 --source-path=*) source_path="$optarg"
507 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200508 --cpu=*) cpu="$optarg"
509 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100510 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200511 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100512 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100513 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100514 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100515 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200516 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100517 --enable-debug-info) debug_info="yes"
518 ;;
519 --disable-debug-info) debug_info="no"
520 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100521 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
522 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100523 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
524 eval "cross_cc_cflags_${cc_arch}=\$optarg"
525 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100526 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
527 eval "cross_cc_${cc_arch}=\$optarg"
528 ;;
aliguoriac0df512008-12-29 17:14:15 +0000529 esac
530done
aliguoriac0df512008-12-29 17:14:15 +0000531# OS specific
532# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100533# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000534
Peter Maydelle49d0212012-12-07 15:39:13 +0000535# Preferred compiler:
536# ${CC} (if set)
537# ${cross_prefix}gcc (if cross-prefix specified)
538# system compiler
539if test -z "${CC}${cross_prefix}"; then
540 cc="$host_cc"
541else
542 cc="${CC-${cross_prefix}gcc}"
543fi
544
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400545if test -z "${CXX}${cross_prefix}"; then
546 cxx="c++"
547else
548 cxx="${CXX-${cross_prefix}g++}"
549fi
550
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500551ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700552as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700553ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000554cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500555objcopy="${OBJCOPY-${cross_prefix}objcopy}"
556ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800557ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200558nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500559strip="${STRIP-${cross_prefix}strip}"
560windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300561pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
562query_pkg_config() {
563 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
564}
565pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500566sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000567sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000568
Peter Maydell45d285a2013-10-21 21:03:06 +0100569# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
570ARFLAGS="${ARFLAGS-rv}"
571
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200572# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100573# We use -fwrapv to tell the compiler that we require a C dialect where
574# left shift of signed integers is well defined and has the expected
575# 2s-complement style results. (Both clang and gcc agree that it
576# provides these semantics.)
577QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400578QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100579QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200580QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200581QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100582if test "$debug_info" = "yes"; then
583 CFLAGS="-g $CFLAGS"
584 LDFLAGS="-g $LDFLAGS"
585fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200586
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100587# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200588source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100589
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300590# running configure in the source tree?
591# we know that's the case if configure is there.
592if test -f "./configure"; then
593 pwd_is_source_path="y"
594else
595 pwd_is_source_path="n"
596fi
597
aliguoriac0df512008-12-29 17:14:15 +0000598check_define() {
599cat > $TMPC <<EOF
600#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000601#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000602#endif
603int main(void) { return 0; }
604EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200605 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000606}
607
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200608check_include() {
609cat > $TMPC <<EOF
610#include <$1>
611int main(void) { return 0; }
612EOF
613 compile_object
614}
615
John Snow93b25862015-03-25 18:57:37 -0400616write_c_skeleton() {
617 cat > $TMPC <<EOF
618int main(void) { return 0; }
619EOF
620}
621
Peter Maydellbbea4052012-08-14 15:35:34 +0100622if check_define __linux__ ; then
623 targetos="Linux"
624elif check_define _WIN32 ; then
625 targetos='MINGW32'
626elif check_define __OpenBSD__ ; then
627 targetos='OpenBSD'
628elif check_define __sun__ ; then
629 targetos='SunOS'
630elif check_define __HAIKU__ ; then
631 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100632elif check_define __FreeBSD__ ; then
633 targetos='FreeBSD'
634elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
635 targetos='GNU/kFreeBSD'
636elif check_define __DragonFly__ ; then
637 targetos='DragonFly'
638elif check_define __NetBSD__; then
639 targetos='NetBSD'
640elif check_define __APPLE__; then
641 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100642else
Peter Maydell951fedf2017-07-13 16:15:32 +0100643 # This is a fatal error, but don't report it yet, because we
644 # might be going to just print the --help text, or it might
645 # be the result of a missing compiler.
646 targetos='bogus'
647 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100648fi
649
650# Some host OSes need non-standard checks for which CPU to use.
651# Note that these checks are broken for cross-compilation: if you're
652# cross-compiling to one of these OSes then you'll need to specify
653# the correct CPU with the --cpu option.
654case $targetos in
655Darwin)
656 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
657 # run 64-bit userspace code.
658 # If the user didn't specify a CPU explicitly and the kernel says this is
659 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
660 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
661 cpu="x86_64"
662 fi
663 ;;
664SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200665 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100666 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
667 cpu="x86_64"
668 fi
669esac
670
Juan Quintela2ff6b912009-08-03 14:45:55 +0200671if test ! -z "$cpu" ; then
672 # command line argument
673 :
674elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000675 cpu="i386"
676elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700677 if check_define __ILP32__ ; then
678 cpu="x32"
679 else
680 cpu="x86_64"
681 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000682elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000683 if check_define __arch64__ ; then
684 cpu="sparc64"
685 else
686 cpu="sparc"
687 fi
malcfdf7ed92009-01-14 18:39:52 +0000688elif check_define _ARCH_PPC ; then
689 if check_define _ARCH_PPC64 ; then
690 cpu="ppc64"
691 else
692 cpu="ppc"
693 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200694elif check_define __mips__ ; then
695 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200696elif check_define __s390__ ; then
697 if check_define __s390x__ ; then
698 cpu="s390x"
699 else
700 cpu="s390"
701 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100702elif check_define __arm__ ; then
703 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100704elif check_define __aarch64__ ; then
705 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000706else
Stefan Weil89138852016-05-16 15:10:20 +0200707 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000708fi
709
Peter Maydell359bc952011-12-24 13:07:25 +0000710ARCH=
711# Normalise host CPU name and set ARCH.
712# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000713case "$cpu" in
Peter Maydell6499fd12017-03-28 11:58:38 +0100714 ppc|ppc64|s390|s390x|sparc64|x32)
Peter Maydell898be3e2017-03-21 14:31:57 +0000715 cpu="$cpu"
716 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100717 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000718 ;;
bellard7d132992003-03-06 23:23:54 +0000719 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000720 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000721 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100722 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000723 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000724 x86_64|amd64)
725 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000726 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100727 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000728 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100729 armv*b|armv*l|arm)
730 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000731 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100732 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000733 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100734 aarch64)
735 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000736 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100737 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100738 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200739 mips*)
740 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000741 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100742 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200743 ;;
blueswir131422552007-04-16 18:27:06 +0000744 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000745 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100746 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100747 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000748 ;;
bellard7d132992003-03-06 23:23:54 +0000749 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000750 # This will result in either an error or falling back to TCI later
751 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000752 ;;
753esac
Peter Maydell359bc952011-12-24 13:07:25 +0000754if test -z "$ARCH"; then
755 ARCH="$cpu"
756fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200757
bellard7d132992003-03-06 23:23:54 +0000758# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200759
Stacey Sonadfc3e92014-06-08 09:57:22 -0700760# host *BSD for user mode
761HOST_VARIANT_DIR=""
762
bellard7d132992003-03-06 23:23:54 +0000763case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000764MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200765 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100766 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200767 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200768 if check_include dsound.h; then
769 audio_drv_list="dsound"
770 else
771 audio_drv_list=""
772 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000773 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000774;;
ths5c40d2b2007-06-23 16:03:36 +0000775GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100776 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200777 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200778 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000779;;
bellard7d3505c2004-05-12 19:32:15 +0000780FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200781 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100782 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200783 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200784 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100785 # needed for kinfo_getvmmap(3) in libutil.h
786 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500787 # needed for kinfo_getproc
788 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100789 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700790 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000791 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000792;;
blueswir1c5e97232009-03-07 20:06:23 +0000793DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200794 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100795 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200796 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200797 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700798 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000799;;
bellard7d3505c2004-05-12 19:32:15 +0000800NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200801 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100802 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200803 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200804 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200805 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700806 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200807 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000808;;
809OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200810 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100811 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400812 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200813 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700814 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500815 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000816;;
bellard83fb7ad2004-07-05 21:25:26 +0000817Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200818 bsd="yes"
819 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100820 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500821 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800822 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200823 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200824 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200825 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200826 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200827 cocoa="yes"
828 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200829 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200830 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200831 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100832 # Disable attempts to use ObjectiveC features in os/object.h since they
833 # won't work when we're compiling with gcc as a C compiler.
834 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700835 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000836 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000837;;
bellardec530c82006-04-25 22:36:06 +0000838SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200839 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100840 make="${MAKE-gmake}"
841 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400842 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200843 if test -f /usr/include/sys/soundcard.h ; then
844 audio_drv_list="oss"
845 fi
846 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000847# needed for CMSG_ macros in sys/socket.h
848 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
849# needed for TIOCWIN* defines in termios.h
850 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200851 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200852 solarisnetlibs="-lsocket -lnsl -lresolv"
853 LIBS="$solarisnetlibs $LIBS"
854 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000855;;
Andreas Färber179cf402010-09-20 00:50:43 +0200856Haiku)
857 haiku="yes"
858 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
859 LIBS="-lposix_error_mapper -lnetwork $LIBS"
860;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000861Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200862 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200863 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200864 linux="yes"
865 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200866 kvm="yes"
867 vhost_net="yes"
Gonglei042cea22018-03-01 21:46:28 +0800868 vhost_crypto="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000869 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100870 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000871 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000872 supported_os="yes"
873;;
bellard7d132992003-03-06 23:23:54 +0000874esac
875
bellard7d3505c2004-05-12 19:32:15 +0000876if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000877 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200878 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000879 fi
bellard7d3505c2004-05-12 19:32:15 +0000880fi
881
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100882: ${make=${MAKE-make}}
883: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100884: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400885: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100886
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100887# Default objcc to clang if available, otherwise use CC
888if has clang; then
889 objcc=clang
890else
891 objcc="$cc"
892fi
893
Juan Quintela3457a3f2009-08-03 14:46:07 +0200894if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200895 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800896 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200897 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100898 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
899 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100900 # MinGW needs -mthreads for TLS and macro _MT.
901 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100902 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400903 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100904 if compile_prog "" "-liberty" ; then
905 LIBS="-liberty $LIBS"
906 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200907 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200908 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300909 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300910 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200911 bindir="\${prefix}"
912 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200913 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200914 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300915 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200916fi
917
Anthony Liguori487fefd2009-06-11 13:28:25 -0500918werror=""
bellard85aa5182007-11-11 20:17:03 +0000919
bellard7d132992003-03-06 23:23:54 +0000920for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200921 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000922 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000923 --help|-h) show_help=yes
924 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400925 --version|-V) exec cat $source_path/VERSION
926 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000927 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000928 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000929 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000930 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100931 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000932 ;;
aliguoriac0df512008-12-29 17:14:15 +0000933 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000934 ;;
aliguoriac0df512008-12-29 17:14:15 +0000935 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000936 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000937 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000938 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400939 --cxx=*)
940 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200941 --iasl=*) iasl="$optarg"
942 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100943 --objcc=*) objcc="$optarg"
944 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000945 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000946 ;;
pbrook6a882642006-04-17 13:57:12 +0000947 --install=*) install="$optarg"
948 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000949 --python=*) python="$optarg"
950 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000951 --gcov=*) gcov_tool="$optarg"
952 ;;
Brade2d88302011-09-02 16:53:28 -0400953 --smbd=*) smbd="$optarg"
954 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200955 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000956 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100957 --extra-cxxflags=*)
958 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200959 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000960 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100961 --enable-debug-info)
962 ;;
963 --disable-debug-info)
964 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100965 --cross-cc-*)
966 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800967 --enable-modules)
968 modules="yes"
969 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000970 --disable-modules)
971 modules="no"
972 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200973 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000974 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000975 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000976 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200977 --enable-trace-backends=*) trace_backends="$optarg"
978 ;;
979 # XXX: backwards compatibility
980 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100981 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100982 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100983 ;;
bellard7d132992003-03-06 23:23:54 +0000984 --enable-gprof) gprof="yes"
985 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000986 --enable-gcov) gcov="yes"
987 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100988 --static)
989 static="yes"
990 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300991 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000992 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200993 --mandir=*) mandir="$optarg"
994 ;;
995 --bindir=*) bindir="$optarg"
996 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300997 --libdir=*) libdir="$optarg"
998 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400999 --libexecdir=*) libexecdir="$optarg"
1000 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001001 --includedir=*) includedir="$optarg"
1002 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001003 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001004 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001005 --with-confsuffix=*) confsuffix="$optarg"
1006 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001007 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001008 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001009 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001010 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001011 --localstatedir=*) local_statedir="$optarg"
1012 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001013 --firmwarepath=*) firmwarepath="$optarg"
1014 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001015 --host=*|--build=*|\
1016 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001017 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001018 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1019 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1020 # These switches are silently ignored, for compatibility with
1021 # autoconf-generated configure scripts. This allows QEMU's
1022 # configure to be used by RPM and similar macros that set
1023 # lots of directory switches by default.
1024 ;;
bellard97a847b2003-08-10 21:36:04 +00001025 --disable-sdl) sdl="no"
1026 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001027 --enable-sdl) sdl="yes"
1028 ;;
Dave Airlie47c03742013-12-10 14:05:51 +10001029 --with-sdlabi=*) sdlabi="$optarg"
1030 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001031 --disable-qom-cast-debug) qom_cast_debug="no"
1032 ;;
1033 --enable-qom-cast-debug) qom_cast_debug="yes"
1034 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301035 --disable-virtfs) virtfs="no"
1036 ;;
1037 --enable-virtfs) virtfs="yes"
1038 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001039 --disable-mpath) mpath="no"
1040 ;;
1041 --enable-mpath) mpath="yes"
1042 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001043 --disable-vnc) vnc="no"
1044 ;;
1045 --enable-vnc) vnc="yes"
1046 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001047 --oss-lib=*) oss_lib="$optarg"
1048 ;;
malc0c58ac12008-06-25 21:04:05 +00001049 --audio-drv-list=*) audio_drv_list="$optarg"
1050 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001051 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001052 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001053 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001054 ;;
aurel32f8393942009-04-13 18:45:38 +00001055 --enable-debug-tcg) debug_tcg="yes"
1056 ;;
1057 --disable-debug-tcg) debug_tcg="no"
1058 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001059 --enable-debug)
1060 # Enable debugging options that aren't excessively noisy
1061 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001062 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001063 debug="yes"
1064 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001065 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001066 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001067 --enable-sanitizers) sanitizers="yes"
1068 ;;
1069 --disable-sanitizers) sanitizers="no"
1070 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001071 --enable-sparse) sparse="yes"
1072 ;;
1073 --disable-sparse) sparse="no"
1074 ;;
aliguori1625af82009-04-05 17:41:02 +00001075 --disable-strip) strip_opt="no"
1076 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001077 --disable-vnc-sasl) vnc_sasl="no"
1078 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001079 --enable-vnc-sasl) vnc_sasl="yes"
1080 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001081 --disable-vnc-jpeg) vnc_jpeg="no"
1082 ;;
1083 --enable-vnc-jpeg) vnc_jpeg="yes"
1084 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001085 --disable-vnc-png) vnc_png="no"
1086 ;;
1087 --enable-vnc-png) vnc_png="yes"
1088 ;;
bellard443f1372004-06-04 11:13:20 +00001089 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001090 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001091 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001092 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001093 --enable-vde) vde="yes"
1094 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001095 --disable-netmap) netmap="no"
1096 ;;
1097 --enable-netmap) netmap="yes"
1098 ;;
aliguorie37630c2009-04-22 15:19:10 +00001099 --disable-xen) xen="no"
1100 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001101 --enable-xen) xen="yes"
1102 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001103 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1104 ;;
1105 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1106 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001107 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1108 ;;
1109 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1110 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001111 --disable-brlapi) brlapi="no"
1112 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001113 --enable-brlapi) brlapi="yes"
1114 ;;
balrogfb599c92008-09-28 23:49:55 +00001115 --disable-bluez) bluez="no"
1116 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001117 --enable-bluez) bluez="yes"
1118 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001119 --disable-kvm) kvm="no"
1120 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001121 --enable-kvm) kvm="yes"
1122 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001123 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001124 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001125 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001126 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001127 --disable-hvf) hvf="no"
1128 ;;
1129 --enable-hvf) hvf="yes"
1130 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001131 --disable-whpx) whpx="no"
1132 ;;
1133 --enable-whpx) whpx="yes"
1134 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001135 --disable-tcg-interpreter) tcg_interpreter="no"
1136 ;;
1137 --enable-tcg-interpreter) tcg_interpreter="yes"
1138 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001139 --disable-cap-ng) cap_ng="no"
1140 ;;
1141 --enable-cap-ng) cap_ng="yes"
1142 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001143 --disable-tcg) tcg="no"
1144 ;;
1145 --enable-tcg) tcg="yes"
1146 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001147 --disable-malloc-trim) malloc_trim="no"
1148 ;;
1149 --enable-malloc-trim) malloc_trim="yes"
1150 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001151 --disable-spice) spice="no"
1152 ;;
1153 --enable-spice) spice="yes"
1154 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001155 --disable-libiscsi) libiscsi="no"
1156 ;;
1157 --enable-libiscsi) libiscsi="yes"
1158 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001159 --disable-libnfs) libnfs="no"
1160 ;;
1161 --enable-libnfs) libnfs="yes"
1162 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001163 --enable-profiler) profiler="yes"
1164 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001165 --disable-cocoa) cocoa="no"
1166 ;;
malcc2de5c92008-06-28 19:13:06 +00001167 --enable-cocoa)
1168 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001169 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001170 ;;
pbrookcad25d62006-03-19 16:31:11 +00001171 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001172 ;;
pbrookcad25d62006-03-19 16:31:11 +00001173 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001174 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001175 --disable-user)
1176 linux_user="no" ;
1177 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001178 ;;
1179 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001180 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001181 ;;
ths831b7822007-01-18 20:06:33 +00001182 --enable-linux-user) linux_user="yes"
1183 ;;
blueswir184778502008-10-26 20:33:16 +00001184 --disable-bsd-user) bsd_user="no"
1185 ;;
1186 --enable-bsd-user) bsd_user="yes"
1187 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001188 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001189 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001190 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001191 ;;
bellard85aa5182007-11-11 20:17:03 +00001192 --enable-werror) werror="yes"
1193 ;;
1194 --disable-werror) werror="no"
1195 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001196 --enable-stack-protector) stack_protector="yes"
1197 ;;
1198 --disable-stack-protector) stack_protector="no"
1199 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001200 --disable-curses) curses="no"
1201 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001202 --enable-curses) curses="yes"
1203 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001204 --disable-curl) curl="no"
1205 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001206 --enable-curl) curl="yes"
1207 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001208 --disable-fdt) fdt="no"
1209 ;;
1210 --enable-fdt) fdt="yes"
1211 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001212 --disable-linux-aio) linux_aio="no"
1213 ;;
1214 --enable-linux-aio) linux_aio="yes"
1215 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001216 --disable-attr) attr="no"
1217 ;;
1218 --enable-attr) attr="yes"
1219 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001220 --disable-membarrier) membarrier="no"
1221 ;;
1222 --enable-membarrier) membarrier="yes"
1223 ;;
ths77755342008-11-27 15:45:16 +00001224 --disable-blobs) blobs="no"
1225 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001226 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001227 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001228 --with-coroutine=*) coroutine="$optarg"
1229 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001230 --disable-coroutine-pool) coroutine_pool="no"
1231 ;;
1232 --enable-coroutine-pool) coroutine_pool="yes"
1233 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001234 --enable-debug-stack-usage) debug_stack_usage="yes"
1235 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001236 --enable-crypto-afalg) crypto_afalg="yes"
1237 ;;
1238 --disable-crypto-afalg) crypto_afalg="no"
1239 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001240 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001241 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001242 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001243 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001244 --disable-vhost-net) vhost_net="no"
1245 ;;
1246 --enable-vhost-net) vhost_net="yes"
1247 ;;
Gonglei042cea22018-03-01 21:46:28 +08001248 --disable-vhost-crypto) vhost_crypto="no"
1249 ;;
1250 --enable-vhost-crypto)
1251 vhost_crypto="yes"
1252 if test "$mingw32" = "yes"; then
1253 error_exit "vhost-crypto isn't available on win32"
1254 fi
1255 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001256 --disable-vhost-scsi) vhost_scsi="no"
1257 ;;
1258 --enable-vhost-scsi) vhost_scsi="yes"
1259 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001260 --disable-vhost-vsock) vhost_vsock="no"
1261 ;;
1262 --enable-vhost-vsock) vhost_vsock="yes"
1263 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001264 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001265 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001266 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001267 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001268 --disable-rbd) rbd="no"
1269 ;;
1270 --enable-rbd) rbd="yes"
1271 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001272 --disable-xfsctl) xfs="no"
1273 ;;
1274 --enable-xfsctl) xfs="yes"
1275 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001276 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001277 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001278 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001279 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001280 --disable-libusb) libusb="no"
1281 ;;
1282 --enable-libusb) libusb="yes"
1283 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001284 --disable-usb-redir) usb_redir="no"
1285 ;;
1286 --enable-usb-redir) usb_redir="yes"
1287 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001288 --disable-zlib-test) zlib="no"
1289 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001290 --disable-lzo) lzo="no"
1291 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001292 --enable-lzo) lzo="yes"
1293 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001294 --disable-snappy) snappy="no"
1295 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001296 --enable-snappy) snappy="yes"
1297 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001298 --disable-bzip2) bzip2="no"
1299 ;;
1300 --enable-bzip2) bzip2="yes"
1301 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001302 --enable-guest-agent) guest_agent="yes"
1303 ;;
1304 --disable-guest-agent) guest_agent="no"
1305 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001306 --enable-guest-agent-msi) guest_agent_msi="yes"
1307 ;;
1308 --disable-guest-agent-msi) guest_agent_msi="no"
1309 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001310 --with-vss-sdk) vss_win32_sdk=""
1311 ;;
1312 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1313 ;;
1314 --without-vss-sdk) vss_win32_sdk="no"
1315 ;;
1316 --with-win-sdk) win_sdk=""
1317 ;;
1318 --with-win-sdk=*) win_sdk="$optarg"
1319 ;;
1320 --without-win-sdk) win_sdk="no"
1321 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001322 --enable-tools) want_tools="yes"
1323 ;;
1324 --disable-tools) want_tools="no"
1325 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001326 --enable-seccomp) seccomp="yes"
1327 ;;
1328 --disable-seccomp) seccomp="no"
1329 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301330 --disable-glusterfs) glusterfs="no"
1331 ;;
1332 --enable-glusterfs) glusterfs="yes"
1333 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001334 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1335 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001336 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001337 --enable-vhdx|--disable-vhdx)
1338 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1339 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001340 --enable-uuid|--disable-uuid)
1341 echo "$0: $opt is obsolete, UUID support is always built" >&2
1342 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001343 --disable-gtk) gtk="no"
1344 ;;
1345 --enable-gtk) gtk="yes"
1346 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001347 --tls-priority=*) tls_priority="$optarg"
1348 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001349 --disable-gnutls) gnutls="no"
1350 ;;
1351 --enable-gnutls) gnutls="yes"
1352 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001353 --disable-nettle) nettle="no"
1354 ;;
1355 --enable-nettle) nettle="yes"
1356 ;;
1357 --disable-gcrypt) gcrypt="no"
1358 ;;
1359 --enable-gcrypt) gcrypt="yes"
1360 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001361 --enable-rdma) rdma="yes"
1362 ;;
1363 --disable-rdma) rdma="no"
1364 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001365 --enable-pvrdma) pvrdma="yes"
1366 ;;
1367 --disable-pvrdma) pvrdma="no"
1368 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001369 --disable-vte) vte="no"
1370 ;;
1371 --enable-vte) vte="yes"
1372 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001373 --disable-virglrenderer) virglrenderer="no"
1374 ;;
1375 --enable-virglrenderer) virglrenderer="yes"
1376 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001377 --disable-tpm) tpm="no"
1378 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001379 --enable-tpm) tpm="yes"
1380 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001381 --disable-libssh2) libssh2="no"
1382 ;;
1383 --enable-libssh2) libssh2="yes"
1384 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001385 --disable-live-block-migration) live_block_migration="no"
1386 ;;
1387 --enable-live-block-migration) live_block_migration="yes"
1388 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001389 --disable-numa) numa="no"
1390 ;;
1391 --enable-numa) numa="yes"
1392 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001393 --disable-libxml2) libxml2="no"
1394 ;;
1395 --enable-libxml2) libxml2="yes"
1396 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001397 --disable-tcmalloc) tcmalloc="no"
1398 ;;
1399 --enable-tcmalloc) tcmalloc="yes"
1400 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001401 --disable-jemalloc) jemalloc="no"
1402 ;;
1403 --enable-jemalloc) jemalloc="yes"
1404 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001405 --disable-replication) replication="no"
1406 ;;
1407 --enable-replication) replication="yes"
1408 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001409 --disable-vxhs) vxhs="no"
1410 ;;
1411 --enable-vxhs) vxhs="yes"
1412 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001413 --disable-vhost-user) vhost_user="no"
1414 ;;
1415 --enable-vhost-user)
1416 vhost_user="yes"
1417 if test "$mingw32" = "yes"; then
1418 error_exit "vhost-user isn't available on win32"
1419 fi
1420 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001421 --disable-capstone) capstone="no"
1422 ;;
1423 --enable-capstone) capstone="yes"
1424 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001425 --enable-capstone=git) capstone="git"
1426 ;;
1427 --enable-capstone=system) capstone="system"
1428 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001429 --with-git=*) git="$optarg"
1430 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001431 --enable-git-update) git_update=yes
1432 ;;
1433 --disable-git-update) git_update=no
1434 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001435 --enable-debug-mutex) debug_mutex=yes
1436 ;;
1437 --disable-debug-mutex) debug_mutex=no
1438 ;;
Junyan He17824402018-07-18 15:47:59 +08001439 --enable-libpmem) libpmem=yes
1440 ;;
1441 --disable-libpmem) libpmem=no
1442 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001443 *)
1444 echo "ERROR: unknown option $opt"
1445 echo "Try '$0 --help' for more information"
1446 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001447 ;;
bellard7d132992003-03-06 23:23:54 +00001448 esac
1449done
1450
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001451if test "$vhost_user" = ""; then
1452 if test "$mingw32" = "yes"; then
1453 vhost_user="no"
1454 else
1455 vhost_user="yes"
1456 fi
1457fi
1458
bellard40293e52008-01-31 11:32:10 +00001459case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001460 ppc)
1461 CPU_CFLAGS="-m32"
1462 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001463 cross_cc_powerpc=$cc
1464 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001465 ;;
1466 ppc64)
1467 CPU_CFLAGS="-m64"
1468 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001469 cross_cc_ppc64=$cc
1470 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001471 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001472 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001473 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1474 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001475 cross_cc_sparc=$cc
1476 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001477 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001478 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001479 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001480 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001481 cross_cc_sparc64=$cc
1482 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001483 ;;
ths76d83bd2007-11-18 21:22:10 +00001484 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001485 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001486 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001487 cross_cc_s390=$cc
1488 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001489 ;;
1490 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001491 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001492 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001493 cross_cc_s390x=$cc
1494 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001495 ;;
bellard40293e52008-01-31 11:32:10 +00001496 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001497 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001498 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001499 cross_cc_i386=$cc
1500 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001501 ;;
1502 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001503 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1504 # If we truly care, we should simply detect this case at
1505 # runtime and generate the fallback to serial emulation.
1506 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001507 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001508 cross_cc_x86_64=$cc
1509 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001510 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001511 x32)
1512 CPU_CFLAGS="-mx32"
1513 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001514 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001515 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001516 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001517 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001518esac
1519
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001520QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001521
Peter Maydellaffc88c2016-06-13 11:32:24 +01001522# For user-mode emulation the host arch has to be one we explicitly
1523# support, even if we're using TCI.
1524if [ "$ARCH" = "unknown" ]; then
1525 bsd_user="no"
1526 linux_user="no"
1527fi
1528
Peter Maydell60e0df22011-05-03 14:50:13 +01001529default_target_list=""
1530
Peter Maydell6e92f822013-05-20 16:16:15 +01001531mak_wilds=""
1532
1533if [ "$softmmu" = "yes" ]; then
1534 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001535fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001536if [ "$linux_user" = "yes" ]; then
1537 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001538fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001539if [ "$bsd_user" = "yes" ]; then
1540 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001541fi
1542
Peter Maydell6e92f822013-05-20 16:16:15 +01001543for config in $mak_wilds; do
1544 default_target_list="${default_target_list} $(basename "$config" .mak)"
1545done
1546
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001547# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001548trace_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 +01001549
pbrookaf5db582006-04-08 14:26:41 +00001550if test x"$show_help" = x"yes" ; then
1551cat << EOF
1552
1553Usage: configure [options]
1554Options: [defaults in brackets after descriptions]
1555
Stefan Weil08fb77e2013-12-18 22:09:39 +01001556Standard options:
1557 --help print this message
1558 --prefix=PREFIX install in PREFIX [$prefix]
1559 --interp-prefix=PREFIX where to find shared libraries, etc.
1560 use %M for cpu name [$interp_prefix]
1561 --target-list=LIST set target list (default: build everything)
1562$(echo Available targets: $default_target_list | \
1563 fold -s -w 53 | sed -e 's/^/ /')
1564
1565Advanced options (experts only):
1566 --source-path=PATH path of source code [$source_path]
1567 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1568 --cc=CC use C compiler CC [$cc]
1569 --iasl=IASL use ACPI compiler IASL [$iasl]
1570 --host-cc=CC use C compiler CC [$host_cc] for code run at
1571 build time
1572 --cxx=CXX use C++ compiler CXX [$cxx]
1573 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1574 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001575 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001576 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001577 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001578 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001579 --make=MAKE use specified make [$make]
1580 --install=INSTALL use specified install [$install]
1581 --python=PYTHON use specified python [$python]
1582 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001583 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001584 --static enable static build [$static]
1585 --mandir=PATH install man pages in PATH
1586 --datadir=PATH install firmware in PATH$confsuffix
1587 --docdir=PATH install documentation in PATH$confsuffix
1588 --bindir=PATH install binaries in PATH
1589 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001590 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001591 --sysconfdir=PATH install config in PATH$confsuffix
1592 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001593 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001594 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001595 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001596 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001597 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001598 --disable-strip disable stripping binaries
1599 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001600 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001601 --audio-drv-list=LIST set audio drivers list:
1602 Available drivers: $audio_possible_drivers
1603 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1604 --block-drv-rw-whitelist=L
1605 set block driver read-write whitelist
1606 (affects only QEMU, not qemu-img)
1607 --block-drv-ro-whitelist=L
1608 set block driver read-only whitelist
1609 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001610 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001611 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001612 --with-trace-file=NAME Full PATH,NAME of file to store traces
1613 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001614 --disable-slirp disable SLIRP userspace network connectivity
1615 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001616 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001617 --oss-lib path to OSS library
1618 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001619 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001620 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001621 --enable-gcov enable test coverage analysis with gcov
1622 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001623 --disable-blobs disable installing provided firmware blobs
1624 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1625 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001626 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001627 --enable-gprof QEMU profiling with gprof
1628 --enable-profiler profiler support
1629 --enable-xen-pv-domain-build
1630 xen pv domain builder
1631 --enable-debug-stack-usage
1632 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001633
1634Optional features, enabled with --enable-FEATURE and
1635disabled with --disable-FEATURE, default is enabled if available:
1636
1637 system all system emulation targets
1638 user supported user emulation targets
1639 linux-user all linux usermode emulation targets
1640 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001641 docs build documentation
1642 guest-agent build the QEMU Guest Agent
1643 guest-agent-msi build guest agent Windows MSI installation package
1644 pie Position Independent Executables
1645 modules modules support
1646 debug-tcg TCG debugging (default is disabled)
1647 debug-info debugging information
1648 sparse sparse checker
1649
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001650 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001651 nettle nettle cryptography support
1652 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001653 sdl SDL UI
1654 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1655 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001656 vte vte support for the gtk UI
1657 curses curses UI
1658 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001659 vnc-sasl SASL encryption for VNC server
1660 vnc-jpeg JPEG lossy compression for VNC server
1661 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001662 cocoa Cocoa UI (Mac OS X only)
1663 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001664 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001665 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001666 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001667 brlapi BrlAPI (Braile)
1668 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001669 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001670 fdt fdt device tree
1671 bluez bluez stack connectivity
1672 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001673 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001674 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001675 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001676 rdma Enable RDMA-based migration
1677 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001678 vde support for vde network
1679 netmap support for netmap network
1680 linux-aio Linux AIO support
1681 cap-ng libcap-ng support
1682 attr attr and xattr support
1683 vhost-net vhost-net acceleration support
Gonglei042cea22018-03-01 21:46:28 +08001684 vhost-crypto vhost-crypto acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001685 spice spice
1686 rbd rados block device (rbd)
1687 libiscsi iscsi support
1688 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001689 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001690 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001691 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001692 usb-redir usb network redirection support
1693 lzo support of lzo compression library
1694 snappy support of snappy compression library
1695 bzip2 support of bzip2 compression library
1696 (for reading bzip2-compressed dmg images)
1697 seccomp seccomp support
1698 coroutine-pool coroutine freelist (better performance)
1699 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001700 tpm TPM support
1701 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001702 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001703 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001704 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001705 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001706 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001707 vhost-vsock virtio sockets device support
1708 opengl opengl support
1709 virglrenderer virgl rendering support
1710 xfsctl xfsctl support
1711 qom-cast-debug cast debugging support
1712 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001713 vxhs Veritas HyperScale vDisk backend support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001714 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001715 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001716 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001717 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001718 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001719
1720NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001721EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001722exit 0
pbrookaf5db582006-04-08 14:26:41 +00001723fi
1724
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001725if ! has $python; then
1726 error_exit "Python not found. Use --python=/path/to/python"
1727fi
1728
1729# Note that if the Python conditional here evaluates True we will exit
1730# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001731if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1732 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001733 "Use --python=/path/to/python to specify a supported Python."
1734fi
1735
1736# Suppress writing compiled files
1737python="$python -B"
1738
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001739# Check that the C compiler works. Doing this here before testing
1740# the host CPU ensures that we had a valid CC to autodetect the
1741# $cpu var (and we should bail right here if that's not the case).
1742# It also allows the help message to be printed without a CC.
1743write_c_skeleton;
1744if compile_object ; then
1745 : C compiler works ok
1746else
1747 error_exit "\"$cc\" either does not exist or does not work"
1748fi
1749if ! compile_prog ; then
1750 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1751fi
1752
Peter Maydell359bc952011-12-24 13:07:25 +00001753# Now we have handled --enable-tcg-interpreter and know we're not just
1754# printing the help message, bail out if the host CPU isn't supported.
1755if test "$ARCH" = "unknown"; then
1756 if test "$tcg_interpreter" = "yes" ; then
1757 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001758 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001759 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001760 fi
1761fi
1762
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001763# Consult white-list to determine whether to enable werror
1764# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001765if test -z "$werror" ; then
1766 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001767 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001768 werror="yes"
1769 else
1770 werror="no"
1771 fi
1772fi
1773
Peter Maydellfb59dab2017-03-28 14:01:52 +01001774if test "$bogus_os" = "yes"; then
1775 # Now that we know that we're not printing the help and that
1776 # the compiler works (so the results of the check_defines we used
1777 # to identify the OS are reliable), if we didn't recognize the
1778 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001779 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001780fi
1781
Paolo Bonzini8d050952010-12-23 11:43:52 +01001782gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1783gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001784gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001785gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001786gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001787gcc_flags="-Wno-string-plus-int $gcc_flags"
Gerd Hoffmann0e39c4a2018-03-09 14:59:45 +01001788gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001789# Note that we do not add -Werror to gcc_flags here, because that would
1790# enable it for all configure tests. If a configure test failed due
1791# to -Werror this would just silently disable some features,
1792# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001793
1794cc_has_warning_flag() {
1795 write_c_skeleton;
1796
Peter Maydella1d29d62012-10-27 22:19:07 +01001797 # Use the positive sense of the flag when testing for -Wno-wombat
1798 # support (gcc will happily accept the -Wno- form of unknown
1799 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001800 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1801 compile_prog "-Werror $optflag" ""
1802}
1803
1804for flag in $gcc_flags; do
1805 if cc_has_warning_flag $flag ; then
1806 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001807 fi
1808done
1809
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001810if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001811 cat > $TMPC << EOF
1812int main(int argc, char *argv[])
1813{
1814 char arr[64], *p = arr, *c = argv[0];
1815 while (*c) {
1816 *p++ = *c++;
1817 }
1818 return 0;
1819}
1820EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001821 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001822 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001823 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001824 # We need to check both a compile and a link, since some compiler
1825 # setups fail only on a .c->.o compile and some only at link time
1826 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1827 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001828 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001829 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001830 break
1831 fi
1832 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001833 if test "$stack_protector" = yes; then
1834 if test $sp_on = 0; then
1835 error_exit "Stack protector not supported"
1836 fi
1837 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001838fi
1839
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001840# Disable -Wmissing-braces on older compilers that warn even for
1841# the "universal" C zero initializer {0}.
1842cat > $TMPC << EOF
1843struct {
1844 int a[2];
1845} x = {0};
1846EOF
1847if compile_object "-Werror" "" ; then
1848 :
1849else
1850 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1851fi
1852
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001853# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1854# large functions that use global variables. The bug is in all releases of
1855# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1856# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1857cat > $TMPC << EOF
1858#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1859int main(void) { return 0; }
1860#else
1861#error No bug in this compiler.
1862#endif
1863EOF
1864if compile_prog "-Werror -fno-gcse" "" ; then
1865 TRANSLATE_OPT_CFLAGS=-fno-gcse
1866fi
1867
Avi Kivity40d64442011-11-15 20:12:17 +02001868if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001869 if test "$modules" = "yes" ; then
1870 error_exit "static and modules are mutually incompatible"
1871 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001872 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001873 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001874 else
1875 pie="no"
1876 fi
1877fi
1878
Emilio G. Cota768b7852015-04-29 13:09:02 +02001879# Unconditional check for compiler __thread support
1880 cat > $TMPC << EOF
1881static __thread int tls_var;
1882int main(void) { return tls_var; }
1883EOF
1884
1885if ! compile_prog "-Werror" "" ; then
1886 error_exit "Your compiler does not support the __thread specifier for " \
1887 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1888fi
1889
Avi Kivity40d64442011-11-15 20:12:17 +02001890if test "$pie" = ""; then
1891 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001892 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001893 ;;
1894 *)
1895 pie="no"
1896 ;;
1897 esac
1898fi
1899
1900if test "$pie" != "no" ; then
1901 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001902
1903#ifdef __linux__
1904# define THREAD __thread
1905#else
1906# define THREAD
1907#endif
1908
1909static THREAD int tls_var;
1910
1911int main(void) { return tls_var; }
1912
Avi Kivity40d64442011-11-15 20:12:17 +02001913EOF
1914 if compile_prog "-fPIE -DPIE" "-pie"; then
1915 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1916 LDFLAGS="-pie $LDFLAGS"
1917 pie="yes"
1918 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1919 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1920 fi
1921 else
1922 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001923 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001924 else
1925 echo "Disabling PIE due to missing toolchain support"
1926 pie="no"
1927 fi
1928 fi
Brad46eef332013-12-10 19:49:08 -05001929
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001930 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001931 CFLAGS_NOPIE="-fno-pie"
1932 LDFLAGS_NOPIE="-nopie"
1933 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001934fi
1935
Paolo Bonzini09dada42013-04-17 16:26:47 +02001936##########################################
1937# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1938# use i686 as default anyway, but for those that don't, an explicit
1939# specification is necessary
1940
1941if test "$cpu" = "i386"; then
1942 cat > $TMPC << EOF
1943static int sfaa(int *ptr)
1944{
1945 return __sync_fetch_and_and(ptr, 0);
1946}
1947
1948int main(void)
1949{
1950 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001951 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001952 sfaa(&val);
1953 return val;
1954}
1955EOF
1956 if ! compile_prog "" "" ; then
1957 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1958 fi
1959fi
1960
1961#########################################
bellardec530c82006-04-25 22:36:06 +00001962# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001963
bellardec530c82006-04-25 22:36:06 +00001964if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001965 if has $install; then
1966 :
1967 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001968 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1969 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1970 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001971 fi
Stefan Weil89138852016-05-16 15:10:20 +02001972 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001973 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1974 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1975 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001976 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001977 if has ar; then
1978 :
1979 else
bellardec530c82006-04-25 22:36:06 +00001980 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001981 error_exit "No path includes ar" \
1982 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001983 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001984 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001985 fi
ths5fafdf22007-09-16 21:08:06 +00001986fi
bellardec530c82006-04-25 22:36:06 +00001987
Stefan Weilafb63eb2012-09-26 22:04:38 +02001988if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001989 for target in $default_target_list; do
1990 supported_target $target 2>/dev/null && \
1991 target_list="$target_list $target"
1992 done
1993 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05001994else
Stefan Weil89138852016-05-16 15:10:20 +02001995 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001996 for target in $target_list; do
1997 # Check that we recognised the target name; this allows a more
1998 # friendly error message than if we let it fall through.
1999 case " $default_target_list " in
2000 *" $target "*)
2001 ;;
2002 *)
2003 error_exit "Unknown target name '$target'"
2004 ;;
2005 esac
2006 supported_target $target || exit 1
2007 done
bellard5327cf42005-01-10 23:18:50 +00002008fi
Peter Maydell25b48332013-05-20 16:16:16 +01002009
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002010# see if system emulation was really requested
2011case " $target_list " in
2012 *"-softmmu "*) softmmu=yes
2013 ;;
2014 *) softmmu=no
2015 ;;
2016esac
bellard5327cf42005-01-10 23:18:50 +00002017
Juan Quintela249247c2009-08-12 18:20:25 +02002018feature_not_found() {
2019 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002020 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002021
Peter Maydell76ad07a2013-04-08 12:11:26 +01002022 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002023 "configure was not able to find it." \
2024 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002025}
2026
bellard7d132992003-03-06 23:23:54 +00002027# ---
2028# big/little endian test
2029cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002030short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2031short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2032extern int foo(short *, short *);
2033int main(int argc, char *argv[]) {
2034 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002035}
2036EOF
2037
Mike Frysinger61cc9192013-06-30 23:30:18 -04002038if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002039 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002040 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002041 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002042 bigendian="no"
2043 else
2044 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002045 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002046else
2047 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002048fi
2049
Juan Quintelab0a47e72009-08-12 18:29:49 +02002050##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002051# cocoa implies not SDL or GTK
2052# (the cocoa UI code currently assumes it is always the active UI
2053# and doesn't interact well with other UI frontend code)
2054if test "$cocoa" = "yes"; then
2055 if test "$sdl" = "yes"; then
2056 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2057 fi
2058 if test "$gtk" = "yes"; then
2059 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2060 fi
2061 gtk=no
2062 sdl=no
2063fi
2064
Eric Blake6b39b062016-10-11 10:46:23 -05002065# Some versions of Mac OS X incorrectly define SIZE_MAX
2066cat > $TMPC << EOF
2067#include <stdint.h>
2068#include <stdio.h>
2069int main(int argc, char *argv[]) {
2070 return printf("%zu", SIZE_MAX);
2071}
2072EOF
2073have_broken_size_max=no
2074if ! compile_object -Werror ; then
2075 have_broken_size_max=yes
2076fi
2077
Peter Maydella30878e2015-08-14 16:10:52 +01002078##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002079# L2TPV3 probe
2080
2081cat > $TMPC <<EOF
2082#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002083#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002084int main(void) { return sizeof(struct mmsghdr); }
2085EOF
2086if compile_prog "" "" ; then
2087 l2tpv3=yes
2088else
2089 l2tpv3=no
2090fi
2091
2092##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002093# MinGW / Mingw-w64 localtime_r/gmtime_r check
2094
2095if test "$mingw32" = "yes"; then
2096 # Some versions of MinGW / Mingw-w64 lack localtime_r
2097 # and gmtime_r entirely.
2098 #
2099 # Some versions of Mingw-w64 define a macro for
2100 # localtime_r/gmtime_r.
2101 #
2102 # Some versions of Mingw-w64 will define functions
2103 # for localtime_r/gmtime_r, but only if you have
2104 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2105 # though, unistd.h and pthread.h both define
2106 # that for you.
2107 #
2108 # So this #undef localtime_r and #include <unistd.h>
2109 # are not in fact redundant.
2110cat > $TMPC << EOF
2111#include <unistd.h>
2112#include <time.h>
2113#undef localtime_r
2114int main(void) { localtime_r(NULL, NULL); return 0; }
2115EOF
2116 if compile_prog "" "" ; then
2117 localtime_r="yes"
2118 else
2119 localtime_r="no"
2120 fi
2121fi
2122
2123##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002124# pkg-config probe
2125
2126if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002127 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002128fi
2129
2130##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002131# NPTL probe
2132
Peter Maydell24cb36a2013-07-16 18:45:00 +01002133if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002134 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002135#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002136#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002137int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002138#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2139#error bork
2140#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002141 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002142}
2143EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002144 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002145 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002146 fi
pbrookbd0c5662008-05-29 14:34:11 +00002147fi
2148
Liang Li99f2dbd2016-03-08 13:53:16 +08002149#########################################
balrogac629222008-10-11 09:56:04 +00002150# zlib check
2151
Alon Levy1ece9902011-07-26 12:30:40 +03002152if test "$zlib" != "no" ; then
2153 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00002154#include <zlib.h>
2155int main(void) { zlibVersion(); return 0; }
2156EOF
Alon Levy1ece9902011-07-26 12:30:40 +03002157 if compile_prog "" "-lz" ; then
2158 :
2159 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002160 error_exit "zlib check failed" \
2161 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03002162 fi
balrogac629222008-10-11 09:56:04 +00002163fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00002164LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00002165
2166##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002167# lzo check
2168
2169if test "$lzo" != "no" ; then
2170 cat > $TMPC << EOF
2171#include <lzo/lzo1x.h>
2172int main(void) { lzo_version(); return 0; }
2173EOF
2174 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002175 libs_softmmu="$libs_softmmu -llzo2"
2176 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002177 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002178 if test "$lzo" = "yes"; then
2179 feature_not_found "liblzo2" "Install liblzo2 devel"
2180 fi
2181 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002182 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002183fi
2184
2185##########################################
2186# snappy check
2187
2188if test "$snappy" != "no" ; then
2189 cat > $TMPC << EOF
2190#include <snappy-c.h>
2191int main(void) { snappy_max_compressed_length(4096); return 0; }
2192EOF
2193 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002194 libs_softmmu="$libs_softmmu -lsnappy"
2195 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002196 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002197 if test "$snappy" = "yes"; then
2198 feature_not_found "libsnappy" "Install libsnappy devel"
2199 fi
2200 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002201 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002202fi
2203
2204##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002205# bzip2 check
2206
2207if test "$bzip2" != "no" ; then
2208 cat > $TMPC << EOF
2209#include <bzlib.h>
2210int main(void) { BZ2_bzlibVersion(); return 0; }
2211EOF
2212 if compile_prog "" "-lbz2" ; then
2213 bzip2="yes"
2214 else
2215 if test "$bzip2" = "yes"; then
2216 feature_not_found "libbzip2" "Install libbzip2 devel"
2217 fi
2218 bzip2="no"
2219 fi
2220fi
2221
2222##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002223# libseccomp check
2224
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002225libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002226if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002227 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002228 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002229 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002230 arm|aarch64)
2231 libseccomp_minver="2.2.3"
2232 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002233 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002234 libseccomp_minver="2.3.0"
2235 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002236 *)
2237 libseccomp_minver=""
2238 ;;
2239 esac
2240
2241 if test "$libseccomp_minver" != "" &&
2242 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002243 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2244 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002245 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002246 else
Andrew Jones693e5912015-09-30 11:59:18 -04002247 if test "$seccomp" = "yes" ; then
2248 if test "$libseccomp_minver" != "" ; then
2249 feature_not_found "libseccomp" \
2250 "Install libseccomp devel >= $libseccomp_minver"
2251 else
2252 feature_not_found "libseccomp" \
2253 "libseccomp is not supported for host cpu $cpu"
2254 fi
2255 fi
2256 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002257 fi
2258fi
2259##########################################
aliguorie37630c2009-04-22 15:19:10 +00002260# xen probe
2261
Juan Quintelafc321b42009-08-12 18:29:55 +02002262if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002263 # Check whether Xen library path is specified via --extra-ldflags to avoid
2264 # overriding this setting with pkg-config output. If not, try pkg-config
2265 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002266
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002267 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2268 $pkg_config --exists xencontrol ; then
2269 xen_ctrl_version="$(printf '%d%02d%02d' \
2270 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2271 xen=yes
2272 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2273 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002274 if $pkg_config --exists xentoolcore; then
2275 xen_pc="$xen_pc xentoolcore"
2276 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002277 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2278 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2279 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2280 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002281
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002282 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002283 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002284
2285 # First we test whether Xen headers and libraries are available.
2286 # If no, we are done and there is no Xen support.
2287 # If yes, more tests are run to detect the Xen version.
2288
2289 # Xen (any)
2290 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002291#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002292int main(void) {
2293 return 0;
2294}
2295EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002296 if ! compile_prog "" "$xen_libs" ; then
2297 # Xen not found
2298 if test "$xen" = "yes" ; then
2299 feature_not_found "xen" "Install xen devel"
2300 fi
2301 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002302
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002303 # Xen unstable
2304 elif
2305 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002306#undef XC_WANT_COMPAT_DEVICEMODEL_API
2307#define __XEN_TOOLS__
2308#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002309#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002310int main(void) {
2311 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002312 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002313
2314 xd = xendevicemodel_open(0, 0);
2315 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2316
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002317 xfmem = xenforeignmemory_open(0, 0);
2318 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2319
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002320 return 0;
2321}
2322EOF
2323 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2324 then
2325 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2326 xen_ctrl_version=41100
2327 xen=yes
2328 elif
2329 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002330#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2331#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002332#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002333int main(void) {
2334 xenforeignmemory_handle *xfmem;
2335
2336 xfmem = xenforeignmemory_open(0, 0);
2337 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002338 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002339
2340 return 0;
2341}
2342EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002343 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002344 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002345 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002346 xen_ctrl_version=41000
2347 xen=yes
2348 elif
2349 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002350#undef XC_WANT_COMPAT_DEVICEMODEL_API
2351#define __XEN_TOOLS__
2352#include <xendevicemodel.h>
2353int main(void) {
2354 xendevicemodel_handle *xd;
2355
2356 xd = xendevicemodel_open(0, 0);
2357 xendevicemodel_close(xd);
2358
2359 return 0;
2360}
2361EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002362 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2363 then
2364 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2365 xen_ctrl_version=40900
2366 xen=yes
2367 elif
2368 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002369/*
2370 * If we have stable libs the we don't want the libxc compat
2371 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002372 *
2373 * Also, check if xengnttab_grant_copy_segment_t is defined and
2374 * grant copy operation is implemented.
2375 */
2376#undef XC_WANT_COMPAT_EVTCHN_API
2377#undef XC_WANT_COMPAT_GNTTAB_API
2378#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2379#include <xenctrl.h>
2380#include <xenstore.h>
2381#include <xenevtchn.h>
2382#include <xengnttab.h>
2383#include <xenforeignmemory.h>
2384#include <stdint.h>
2385#include <xen/hvm/hvm_info_table.h>
2386#if !defined(HVM_MAX_VCPUS)
2387# error HVM_MAX_VCPUS not defined
2388#endif
2389int main(void) {
2390 xc_interface *xc = NULL;
2391 xenforeignmemory_handle *xfmem;
2392 xenevtchn_handle *xe;
2393 xengnttab_handle *xg;
2394 xen_domain_handle_t handle;
2395 xengnttab_grant_copy_segment_t* seg = NULL;
2396
2397 xs_daemon_open();
2398
2399 xc = xc_interface_open(0, 0, 0);
2400 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2401 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2402 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2403 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2404 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2405
2406 xfmem = xenforeignmemory_open(0, 0);
2407 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2408
2409 xe = xenevtchn_open(0, 0);
2410 xenevtchn_fd(xe);
2411
2412 xg = xengnttab_open(0, 0);
2413 xengnttab_grant_copy(xg, 0, seg);
2414
2415 return 0;
2416}
2417EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002418 compile_prog "" "$xen_libs $xen_stable_libs"
2419 then
2420 xen_ctrl_version=40800
2421 xen=yes
2422 elif
2423 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002424/*
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.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002427 */
2428#undef XC_WANT_COMPAT_EVTCHN_API
2429#undef XC_WANT_COMPAT_GNTTAB_API
2430#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2431#include <xenctrl.h>
2432#include <xenstore.h>
2433#include <xenevtchn.h>
2434#include <xengnttab.h>
2435#include <xenforeignmemory.h>
2436#include <stdint.h>
2437#include <xen/hvm/hvm_info_table.h>
2438#if !defined(HVM_MAX_VCPUS)
2439# error HVM_MAX_VCPUS not defined
2440#endif
2441int main(void) {
2442 xc_interface *xc = NULL;
2443 xenforeignmemory_handle *xfmem;
2444 xenevtchn_handle *xe;
2445 xengnttab_handle *xg;
2446 xen_domain_handle_t handle;
2447
2448 xs_daemon_open();
2449
2450 xc = xc_interface_open(0, 0, 0);
2451 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2452 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2453 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2454 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2455 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2456
2457 xfmem = xenforeignmemory_open(0, 0);
2458 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2459
2460 xe = xenevtchn_open(0, 0);
2461 xenevtchn_fd(xe);
2462
2463 xg = xengnttab_open(0, 0);
2464 xengnttab_map_grant_ref(xg, 0, 0, 0);
2465
2466 return 0;
2467}
2468EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002469 compile_prog "" "$xen_libs $xen_stable_libs"
2470 then
2471 xen_ctrl_version=40701
2472 xen=yes
2473 elif
2474 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002475#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002476#include <stdint.h>
2477int main(void) {
2478 xc_interface *xc = NULL;
2479 xen_domain_handle_t handle;
2480 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2481 return 0;
2482}
2483EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002484 compile_prog "" "$xen_libs"
2485 then
2486 xen_ctrl_version=40700
2487 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002488
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002489 # Xen 4.6
2490 elif
2491 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002492#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002493#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002494#include <stdint.h>
2495#include <xen/hvm/hvm_info_table.h>
2496#if !defined(HVM_MAX_VCPUS)
2497# error HVM_MAX_VCPUS not defined
2498#endif
2499int main(void) {
2500 xc_interface *xc;
2501 xs_daemon_open();
2502 xc = xc_interface_open(0, 0, 0);
2503 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2504 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002505 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002506 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002507 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002508 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002509 return 0;
2510}
2511EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002512 compile_prog "" "$xen_libs"
2513 then
2514 xen_ctrl_version=40600
2515 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002516
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002517 # Xen 4.5
2518 elif
2519 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002520#include <xenctrl.h>
2521#include <xenstore.h>
2522#include <stdint.h>
2523#include <xen/hvm/hvm_info_table.h>
2524#if !defined(HVM_MAX_VCPUS)
2525# error HVM_MAX_VCPUS not defined
2526#endif
2527int main(void) {
2528 xc_interface *xc;
2529 xs_daemon_open();
2530 xc = xc_interface_open(0, 0, 0);
2531 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2532 xc_gnttab_open(NULL, 0);
2533 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2534 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002535 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2536 return 0;
2537}
2538EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002539 compile_prog "" "$xen_libs"
2540 then
2541 xen_ctrl_version=40500
2542 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002543
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002544 elif
2545 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002546#include <xenctrl.h>
2547#include <xenstore.h>
2548#include <stdint.h>
2549#include <xen/hvm/hvm_info_table.h>
2550#if !defined(HVM_MAX_VCPUS)
2551# error HVM_MAX_VCPUS not defined
2552#endif
2553int main(void) {
2554 xc_interface *xc;
2555 xs_daemon_open();
2556 xc = xc_interface_open(0, 0, 0);
2557 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2558 xc_gnttab_open(NULL, 0);
2559 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2560 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002561 return 0;
2562}
2563EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002564 compile_prog "" "$xen_libs"
2565 then
2566 xen_ctrl_version=40200
2567 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002568
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002569 else
2570 if test "$xen" = "yes" ; then
2571 feature_not_found "xen (unsupported version)" \
2572 "Install a supported xen (xen 4.2 or newer)"
2573 fi
2574 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002575 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002576
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002577 if test "$xen" = yes; then
2578 if test $xen_ctrl_version -ge 40701 ; then
2579 libs_softmmu="$xen_stable_libs $libs_softmmu"
2580 fi
2581 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002582 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002583 fi
aliguorie37630c2009-04-22 15:19:10 +00002584fi
2585
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002586if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002587 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002588 xen_pci_passthrough=yes
2589 else
2590 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002591 error_exit "User requested feature Xen PCI Passthrough" \
2592 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002593 fi
2594 xen_pci_passthrough=no
2595 fi
2596fi
2597
Ian Campbell64a7ad62016-01-15 13:23:44 +00002598if test "$xen_pv_domain_build" = "yes" &&
2599 test "$xen" != "yes"; then
2600 error_exit "User requested Xen PV domain builder support" \
2601 "which requires Xen support."
2602fi
2603
aliguorie37630c2009-04-22 15:19:10 +00002604##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002605# Windows Hypervisor Platform accelerator (WHPX) check
2606if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002607 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002608 whpx="yes"
2609 else
2610 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002611 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002612 fi
2613 whpx="no"
2614 fi
2615fi
2616
2617##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002618# Sparse probe
2619if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002620 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002621 sparse=yes
2622 else
2623 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002624 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002625 fi
2626 sparse=no
2627 fi
2628fi
2629
2630##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002631# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002632if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002633 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002634 x11_cflags=$($pkg_config --cflags x11)
2635 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002636fi
2637
2638##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002639# GTK probe
2640
2641if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002642 gtkpackage="gtk+-3.0"
2643 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002644 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002645 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002646 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2647 gtk_libs=$($pkg_config --libs $gtkpackage)
2648 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002649 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002650 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002651 gtk_cflags="$gtk_cflags $x11_cflags"
2652 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002653 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002654 gtk="yes"
2655 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002656 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002657 else
2658 gtk="no"
2659 fi
2660fi
2661
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002662
2663##########################################
2664# GNUTLS probe
2665
2666if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002667 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002668 gnutls_cflags=$($pkg_config --cflags gnutls)
2669 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002670 libs_softmmu="$gnutls_libs $libs_softmmu"
2671 libs_tools="$gnutls_libs $libs_tools"
2672 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2673 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002674 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002675 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002676 else
2677 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002678 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002679fi
2680
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002681
2682# If user didn't give a --disable/enable-gcrypt flag,
2683# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002684# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002685if test -z "$gcrypt"
2686then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002687 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002688 then
2689 gcrypt="no"
2690 fi
2691fi
2692
2693# If user didn't give a --disable/enable-nettle flag,
2694# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002695# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002696if test -z "$nettle"
2697then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002698 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002699 then
2700 nettle="no"
2701 fi
2702fi
2703
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002704has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002705 if ! has "libgcrypt-config"
2706 then
2707 return 1
2708 fi
2709
2710 if test -n "$cross_prefix"
2711 then
Stefan Weil89138852016-05-16 15:10:20 +02002712 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002713 if test "$host-" != $cross_prefix
2714 then
2715 return 1
2716 fi
2717 fi
2718
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002719 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2720 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2721
2722 if test $maj != 1 || test $min -lt 5
2723 then
2724 return 1
2725 fi
2726
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002727 return 0
2728}
2729
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002730
2731if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002732 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002733 nettle_cflags=$($pkg_config --cflags nettle)
2734 nettle_libs=$($pkg_config --libs nettle)
2735 nettle_version=$($pkg_config --modversion nettle)
2736 libs_softmmu="$nettle_libs $libs_softmmu"
2737 libs_tools="$nettle_libs $libs_tools"
2738 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2739 nettle="yes"
2740
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002741 if test -z "$gcrypt"; then
2742 gcrypt="no"
2743 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002744 else
2745 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002746 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002747 else
2748 nettle="no"
2749 fi
2750 fi
2751fi
2752
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002753if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002754 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002755 gcrypt_cflags=$(libgcrypt-config --cflags)
2756 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002757 # Debian has remove -lgpg-error from libgcrypt-config
2758 # as it "spreads unnecessary dependencies" which in
2759 # turn breaks static builds...
2760 if test "$static" = "yes"
2761 then
2762 gcrypt_libs="$gcrypt_libs -lgpg-error"
2763 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002764 libs_softmmu="$gcrypt_libs $libs_softmmu"
2765 libs_tools="$gcrypt_libs $libs_tools"
2766 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002767 gcrypt="yes"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002768
2769 cat > $TMPC << EOF
2770#include <gcrypt.h>
2771int main(void) {
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002772 gcry_mac_hd_t handle;
2773 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2774 GCRY_MAC_FLAG_SECURE, NULL);
2775 return 0;
2776}
2777EOF
2778 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2779 gcrypt_hmac=yes
2780 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002781 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002782 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002783 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002784 else
2785 gcrypt="no"
2786 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002787 fi
2788fi
2789
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002790
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002791if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2792then
2793 error_exit "Only one of gcrypt & nettle can be enabled"
2794fi
2795
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002796##########################################
2797# libtasn1 - only for the TLS creds/session test suite
2798
2799tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002800tasn1_cflags=""
2801tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002802if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002803 tasn1_cflags=$($pkg_config --cflags libtasn1)
2804 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002805else
2806 tasn1=no
2807fi
2808
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002809
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002810##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002811# getifaddrs (for tests/test-io-channel-socket )
2812
2813have_ifaddrs_h=yes
2814if ! check_include "ifaddrs.h" ; then
2815 have_ifaddrs_h=no
2816fi
2817
2818##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002819# VTE probe
2820
2821if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002822 vteminversion="0.32.0"
2823 if $pkg_config --exists "vte-2.91"; then
2824 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002825 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002826 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002827 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002828 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002829 vte_cflags=$($pkg_config --cflags $vtepackage)
2830 vte_libs=$($pkg_config --libs $vtepackage)
2831 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002832 vte="yes"
2833 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002834 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002835 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002836 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002837 fi
2838fi
2839
2840##########################################
bellard11d9f692004-04-02 20:55:59 +00002841# SDL probe
2842
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002843# Look for sdl configuration program (pkg-config or sdl-config). Try
2844# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002845
Peter Xuc6093a02018-04-10 13:40:34 +08002846sdl_probe ()
2847{
2848 sdl_too_old=no
2849 if test "$sdlabi" = ""; then
2850 if $pkg_config --exists "sdl2"; then
2851 sdlabi=2.0
2852 elif $pkg_config --exists "sdl"; then
2853 sdlabi=1.2
2854 else
2855 sdlabi=2.0
2856 fi
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002857 fi
bellard11d9f692004-04-02 20:55:59 +00002858
Peter Xuc6093a02018-04-10 13:40:34 +08002859 if test $sdlabi = "2.0"; then
2860 sdl_config=$sdl2_config
2861 sdlname=sdl2
2862 sdlconfigname=sdl2_config
2863 elif test $sdlabi = "1.2"; then
2864 sdlname=sdl
2865 sdlconfigname=sdl_config
2866 else
2867 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2868 fi
2869
2870 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2871 sdl_config=$sdlconfigname
2872 fi
2873
2874 if $pkg_config $sdlname --exists; then
2875 sdlconfig="$pkg_config $sdlname"
2876 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2877 elif has ${sdl_config}; then
2878 sdlconfig="$sdl_config"
2879 sdlversion=$($sdlconfig --version)
2880 else
2881 if test "$sdl" = "yes" ; then
2882 feature_not_found "sdl" "Install SDL2-devel"
2883 fi
2884 sdl=no
2885 # no need to do the rest
2886 return
2887 fi
2888 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2889 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2890 fi
2891
Juan Quintelaac119f92009-07-27 16:13:15 +02002892 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002893#include <SDL.h>
2894#undef main /* We don't want SDL to override our main() */
2895int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2896EOF
Stefan Weil89138852016-05-16 15:10:20 +02002897 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002898 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002899 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002900 if $pkg_config $sdlname --exists; then
2901 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2902 else
2903 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2904 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002905 else
Stefan Weil89138852016-05-16 15:10:20 +02002906 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002907 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002908 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002909 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002910 sdl_too_old=yes
2911 else
Peter Maydella30878e2015-08-14 16:10:52 +01002912 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002913 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002914
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002915 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002916 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002917 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002918 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2919 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002920 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002921 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002922 :
2923 else
2924 sdl=no
2925 fi
2926 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002927 else # sdl not found
2928 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002929 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002930 fi
2931 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002932 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08002933}
2934
2935if test "$sdl" != "no" ; then
2936 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02002937fi
bellard11d9f692004-04-02 20:55:59 +00002938
aliguori5368a422009-03-03 17:37:21 +00002939if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002940 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002941#include <SDL.h>
2942#if defined(SDL_VIDEO_DRIVER_X11)
2943#include <X11/XKBlib.h>
2944#else
2945#error No x11 support
2946#endif
2947int main(void) { return 0; }
2948EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002949 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002950 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002951 sdl_cflags="$sdl_cflags $x11_cflags"
2952 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002953 fi
aliguori5368a422009-03-03 17:37:21 +00002954fi
2955
ths8f28f3f2007-01-05 21:25:54 +00002956##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002957# RDMA needs OpenFabrics libraries
2958if test "$rdma" != "no" ; then
2959 cat > $TMPC <<EOF
2960#include <rdma/rdma_cma.h>
2961int main(void) { return 0; }
2962EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002963 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04002964 if compile_prog "" "$rdma_libs" ; then
2965 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002966 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04002967 else
2968 if test "$rdma" = "yes" ; then
2969 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002970 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04002971 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002972 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04002973 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2974 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2975 fi
2976 rdma="no"
2977 fi
2978fi
2979
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03002980##########################################
2981# PVRDMA detection
2982
2983cat > $TMPC <<EOF &&
2984#include <sys/mman.h>
2985
2986int
2987main(void)
2988{
2989 char buf = 0;
2990 void *addr = &buf;
2991 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2992
2993 return 0;
2994}
2995EOF
2996
2997if test "$rdma" = "yes" ; then
2998 case "$pvrdma" in
2999 "")
3000 if compile_prog "" ""; then
3001 pvrdma="yes"
3002 else
3003 pvrdma="no"
3004 fi
3005 ;;
3006 "yes")
3007 if ! compile_prog "" ""; then
3008 error_exit "PVRDMA is not supported since mremap is not implemented"
3009 fi
3010 pvrdma="yes"
3011 ;;
3012 "no")
3013 pvrdma="no"
3014 ;;
3015 esac
3016else
3017 if test "$pvrdma" = "yes" ; then
3018 error_exit "PVRDMA requires rdma suppport"
3019 fi
3020 pvrdma="no"
3021fi
ths8d5d2d42007-08-25 01:37:51 +00003022
3023##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003024# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003025if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003026 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003027#include <sasl/sasl.h>
3028#include <stdio.h>
3029int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3030EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003031 # Assuming Cyrus-SASL installed in /usr prefix
3032 vnc_sasl_cflags=""
3033 vnc_sasl_libs="-lsasl2"
3034 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3035 vnc_sasl=yes
3036 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003037 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003038 else
3039 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003040 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003041 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003042 vnc_sasl=no
3043 fi
aliguori2f9606b2009-03-06 20:27:28 +00003044fi
3045
3046##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003047# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003048if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003049cat > $TMPC <<EOF
3050#include <stdio.h>
3051#include <jpeglib.h>
3052int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3053EOF
3054 vnc_jpeg_cflags=""
3055 vnc_jpeg_libs="-ljpeg"
3056 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3057 vnc_jpeg=yes
3058 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003059 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003060 else
3061 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003062 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003063 fi
3064 vnc_jpeg=no
3065 fi
3066fi
3067
3068##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003069# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003070if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003071cat > $TMPC <<EOF
3072//#include <stdio.h>
3073#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003074#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003075int main(void) {
3076 png_structp png_ptr;
3077 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003078 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003079}
3080EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003081 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003082 vnc_png_cflags=$($pkg_config libpng --cflags)
3083 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003084 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003085 vnc_png_cflags=""
3086 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003087 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003088 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3089 vnc_png=yes
3090 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003091 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003092 else
3093 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003094 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003095 fi
3096 vnc_png=no
3097 fi
3098fi
3099
3100##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003101# xkbcommon probe
3102if test "$xkbcommon" != "no" ; then
3103 if $pkg_config xkbcommon --exists; then
3104 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3105 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3106 xkbcommon=yes
3107 else
3108 if test "$xkbcommon" = "yes" ; then
3109 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3110 fi
3111 xkbcommon=no
3112 fi
3113fi
3114
3115##########################################
aliguori76655d62009-03-06 20:27:37 +00003116# fnmatch() probe, used for ACL routines
3117fnmatch="no"
3118cat > $TMPC << EOF
3119#include <fnmatch.h>
3120int main(void)
3121{
3122 fnmatch("foo", "foo", 0);
3123 return 0;
3124}
3125EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003126if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003127 fnmatch="yes"
3128fi
3129
3130##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003131# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003132if test "$xfs" != "no" ; then
3133 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003134#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003135#include <xfs/xfs.h>
3136int main(void)
3137{
3138 xfsctl(NULL, 0, 0, NULL);
3139 return 0;
3140}
3141EOF
3142 if compile_prog "" "" ; then
3143 xfs="yes"
3144 else
3145 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003146 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003147 fi
3148 xfs=no
3149 fi
3150fi
3151
3152##########################################
ths8a16d272008-07-19 09:56:24 +00003153# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003154if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003155 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003156 cat > $TMPC << EOF
3157#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003158int main(void)
3159{
3160 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003161 char s[] = "";
3162 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003163 return 0;
3164}
ths8a16d272008-07-19 09:56:24 +00003165EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003166 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003167 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003168 else
3169 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003170 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003171 fi
3172 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003173 fi
ths8a16d272008-07-19 09:56:24 +00003174fi
3175
3176##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003177# netmap support probe
3178# Apart from looking for netmap headers, we make sure that the host API version
3179# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3180# a minor/major version number. Minor new features will be marked with values up
3181# to 15, and if something happens that requires a change to the backend we will
3182# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003183if test "$netmap" != "no" ; then
3184 cat > $TMPC << EOF
3185#include <inttypes.h>
3186#include <net/if.h>
3187#include <net/netmap.h>
3188#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003189#if (NETMAP_API < 11) || (NETMAP_API > 15)
3190#error
3191#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003192int main(void) { return 0; }
3193EOF
3194 if compile_prog "" "" ; then
3195 netmap=yes
3196 else
3197 if test "$netmap" = "yes" ; then
3198 feature_not_found "netmap"
3199 fi
3200 netmap=no
3201 fi
3202fi
3203
3204##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003205# libcap-ng library probe
3206if test "$cap_ng" != "no" ; then
3207 cap_libs="-lcap-ng"
3208 cat > $TMPC << EOF
3209#include <cap-ng.h>
3210int main(void)
3211{
3212 capng_capability_to_name(CAPNG_EFFECTIVE);
3213 return 0;
3214}
3215EOF
3216 if compile_prog "" "$cap_libs" ; then
3217 cap_ng=yes
3218 libs_tools="$cap_libs $libs_tools"
3219 else
3220 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003221 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003222 fi
3223 cap_ng=no
3224 fi
3225fi
3226
3227##########################################
malcc2de5c92008-06-28 19:13:06 +00003228# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003229
malcc2de5c92008-06-28 19:13:06 +00003230audio_drv_probe()
3231{
3232 drv=$1
3233 hdr=$2
3234 lib=$3
3235 exp=$4
3236 cfl=$5
3237 cat > $TMPC << EOF
3238#include <$hdr>
3239int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003240EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003241 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003242 :
3243 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003244 error_exit "$drv check failed" \
3245 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003246 fi
3247}
3248
Stefan Weil89138852016-05-16 15:10:20 +02003249audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003250for drv in $audio_drv_list; do
3251 case $drv in
3252 alsa)
3253 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003254 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003255 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003256 ;;
3257
malcb8e59f12008-07-02 21:03:08 +00003258 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003259 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3260 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003261 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003262 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003263 ;;
3264
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003265 sdl)
3266 if test "$sdl" = "no"; then
3267 error_exit "sdl not found or disabled, can not use sdl audio driver"
3268 fi
3269 ;;
3270
Juan Quintela997e6902009-08-03 14:46:29 +02003271 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003272 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003273 ;;
3274
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003275 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003276 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003277 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003278 ;;
3279
3280 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003281 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003282 ;;
3283
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003284 wav)
3285 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003286 ;;
3287
malce4c63a62008-07-19 16:15:16 +00003288 *)
malc1c9b2a52008-07-19 16:57:30 +00003289 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003290 error_exit "Unknown driver '$drv' selected" \
3291 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003292 }
3293 ;;
malcc2de5c92008-06-28 19:13:06 +00003294 esac
3295done
ths8f28f3f2007-01-05 21:25:54 +00003296
balrog4d3b6f62008-02-10 16:33:14 +00003297##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003298# BrlAPI probe
3299
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003300if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003301 brlapi_libs="-lbrlapi"
3302 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003303#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003304#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003305int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3306EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003307 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003308 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003309 else
3310 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003311 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003312 fi
3313 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003314 fi
3315fi
aurel322e4d9fb2008-04-08 06:01:02 +00003316
3317##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003318# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003319if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003320 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003321 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3322 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003323 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003324 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003325 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003326 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003327 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003328 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003329#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003330#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003331#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003332int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003333 wchar_t wch = L'w';
3334 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003335 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003336 addwstr(L"wide chars\n");
3337 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003338 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003339 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003340}
balrog4d3b6f62008-02-10 16:33:14 +00003341EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003342 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003343 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003344 # Make sure we get the wide character prototypes
3345 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003346 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003347 for curses_lib in $curses_lib_list; do
3348 unset IFS
3349 if compile_prog "$curses_inc" "$curses_lib" ; then
3350 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003351 break
3352 fi
3353 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003354 if test "$curses_found" = yes ; then
3355 break
3356 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003357 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003358 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003359 if test "$curses_found" = "yes" ; then
3360 curses=yes
3361 else
3362 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003363 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003364 fi
3365 curses=no
3366 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003367fi
balrog4d3b6f62008-02-10 16:33:14 +00003368
blueswir1414f0da2008-08-15 18:20:52 +00003369##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003370# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003371if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003372 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003373 curlconfig="$pkg_config libcurl"
3374 else
3375 curlconfig=curl-config
3376 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003377 cat > $TMPC << EOF
3378#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003379int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003380EOF
Stefan Weil89138852016-05-16 15:10:20 +02003381 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3382 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003383 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003384 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003385 else
3386 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003387 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003388 fi
3389 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003390 fi
3391fi # test "$curl"
3392
3393##########################################
balrogfb599c92008-09-28 23:49:55 +00003394# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003395if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003396 cat > $TMPC << EOF
3397#include <bluetooth/bluetooth.h>
3398int main(void) { return bt_error(0); }
3399EOF
Stefan Weil89138852016-05-16 15:10:20 +02003400 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3401 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003402 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003403 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003404 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003405 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003406 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003407 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003408 fi
balroge820e3f2008-09-30 02:27:44 +00003409 bluez="no"
3410 fi
balrogfb599c92008-09-28 23:49:55 +00003411fi
3412
3413##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003414# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003415
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003416glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003417glib_modules=gthread-2.0
3418if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003419 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003420fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003421
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003422# This workaround is required due to a bug in pkg-config file for glib as it
3423# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3424
3425if test "$static" = yes -a "$mingw32" = yes; then
3426 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3427fi
3428
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003429for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003430 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003431 glib_cflags=$($pkg_config --cflags $i)
3432 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003433 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003434 LIBS="$glib_libs $LIBS"
3435 libs_qga="$glib_libs $libs_qga"
3436 else
3437 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3438 fi
3439done
3440
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003441# Sanity check that the current size_t matches the
3442# size that glib thinks it should be. This catches
3443# problems on multi-arch where people try to build
3444# 32-bit QEMU while pointing at 64-bit glib headers
3445cat > $TMPC <<EOF
3446#include <glib.h>
3447#include <unistd.h>
3448
3449#define QEMU_BUILD_BUG_ON(x) \
3450 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3451
3452int main(void) {
3453 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3454 return 0;
3455}
3456EOF
3457
Stefan Weil5919e032016-04-28 23:33:41 +02003458if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003459 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3460 "You probably need to set PKG_CONFIG_LIBDIR"\
3461 "to point to the right pkg-config files for your"\
3462 "build target"
3463fi
3464
John Snowbbbf2e02015-03-25 18:57:38 -04003465# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3466cat > $TMPC << EOF
3467#include <glib.h>
3468int main(void) { return 0; }
3469EOF
3470if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3471 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3472 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3473 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3474 fi
3475fi
3476
Fam Zhenge26110c2014-02-10 14:48:57 +08003477##########################################
3478# SHA command probe for modules
3479if test "$modules" = yes; then
3480 shacmd_probe="sha1sum sha1 shasum"
3481 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003482 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003483 shacmd="$c"
3484 break
3485 fi
3486 done
3487 if test "$shacmd" = ""; then
3488 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3489 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003490fi
3491
3492##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003493# pixman support probe
3494
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003495if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003496 pixman_cflags=
3497 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003498elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003499 pixman_cflags=$($pkg_config --cflags pixman-1)
3500 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003501else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003502 error_exit "pixman >= 0.21.8 not present." \
3503 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003504fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003505
3506##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003507# libmpathpersist probe
3508
3509if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003510 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003511 cat > $TMPC <<EOF
3512#include <libudev.h>
3513#include <mpath_persist.h>
3514unsigned mpath_mx_alloc_len = 1024;
3515int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003516static struct config *multipath_conf;
3517extern struct udev *udev;
3518extern struct config *get_multipath_config(void);
3519extern void put_multipath_config(struct config *conf);
3520struct udev *udev;
3521struct config *get_multipath_config(void) { return multipath_conf; }
3522void put_multipath_config(struct config *conf) { }
3523
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003524int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003525 udev = udev_new();
3526 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003527 return 0;
3528}
3529EOF
3530 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3531 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003532 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003533 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003534 # probe for the old API
3535 cat > $TMPC <<EOF
3536#include <libudev.h>
3537#include <mpath_persist.h>
3538unsigned mpath_mx_alloc_len = 1024;
3539int logsink;
3540int main(void) {
3541 struct udev *udev = udev_new();
3542 mpath_lib_init(udev);
3543 return 0;
3544}
3545EOF
3546 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3547 mpathpersist=yes
3548 mpathpersist_new_api=no
3549 else
3550 mpathpersist=no
3551 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003552 fi
3553else
3554 mpathpersist=no
3555fi
3556
3557##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303558# libcap probe
3559
3560if test "$cap" != "no" ; then
3561 cat > $TMPC <<EOF
3562#include <stdio.h>
3563#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003564int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303565EOF
3566 if compile_prog "" "-lcap" ; then
3567 cap=yes
3568 else
3569 cap=no
3570 fi
3571fi
3572
3573##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003574# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003575PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003576
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003577pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003578cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003579#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003580static void *f(void *p) { return NULL; }
3581int main(void) {
3582 pthread_t thread;
3583 pthread_create(&thread, 0, f, 0);
3584 return 0;
3585}
blueswir1414f0da2008-08-15 18:20:52 +00003586EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003587if compile_prog "" "" ; then
3588 pthread=yes
3589else
3590 for pthread_lib in $PTHREADLIBS_LIST; do
3591 if compile_prog "" "$pthread_lib" ; then
3592 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003593 found=no
3594 for lib_entry in $LIBS; do
3595 if test "$lib_entry" = "$pthread_lib"; then
3596 found=yes
3597 break
3598 fi
3599 done
3600 if test "$found" = "no"; then
3601 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003602 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003603 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003604 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003605 break
3606 fi
3607 done
3608fi
blueswir1414f0da2008-08-15 18:20:52 +00003609
Anthony Liguori4617e592009-08-25 17:21:56 -05003610if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003611 error_exit "pthread check failed" \
3612 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003613fi
3614
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003615# check for pthread_setname_np
3616pthread_setname_np=no
3617cat > $TMPC << EOF
3618#include <pthread.h>
3619
3620static void *f(void *p) { return NULL; }
3621int main(void)
3622{
3623 pthread_t thread;
3624 pthread_create(&thread, 0, f, 0);
3625 pthread_setname_np(thread, "QEMU");
3626 return 0;
3627}
3628EOF
3629if compile_prog "" "$pthread_lib" ; then
3630 pthread_setname_np=yes
3631fi
3632
aliguoribf9298b2008-12-05 20:05:26 +00003633##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003634# rbd probe
3635if test "$rbd" != "no" ; then
3636 cat > $TMPC <<EOF
3637#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003638#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003639int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003640 rados_t cluster;
3641 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003642 return 0;
3643}
3644EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003645 rbd_libs="-lrbd -lrados"
3646 if compile_prog "" "$rbd_libs" ; then
3647 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003648 else
3649 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003650 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003651 fi
3652 rbd=no
3653 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003654fi
3655
3656##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003657# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003658min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003659if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003660 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003661 libssh2_cflags=$($pkg_config libssh2 --cflags)
3662 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003663 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003664 else
3665 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003666 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003667 fi
3668 libssh2=no
3669 fi
3670fi
3671
3672##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003673# libssh2_sftp_fsync probe
3674
3675if test "$libssh2" = "yes"; then
3676 cat > $TMPC <<EOF
3677#include <stdio.h>
3678#include <libssh2.h>
3679#include <libssh2_sftp.h>
3680int main(void) {
3681 LIBSSH2_SESSION *session;
3682 LIBSSH2_SFTP *sftp;
3683 LIBSSH2_SFTP_HANDLE *sftp_handle;
3684 session = libssh2_session_init ();
3685 sftp = libssh2_sftp_init (session);
3686 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3687 libssh2_sftp_fsync (sftp_handle);
3688 return 0;
3689}
3690EOF
3691 # libssh2_cflags/libssh2_libs defined in previous test.
3692 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3693 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3694 fi
3695fi
3696
3697##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003698# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003699
3700if test "$linux_aio" != "no" ; then
3701 cat > $TMPC <<EOF
3702#include <libaio.h>
3703#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003704#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003705int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3706EOF
3707 if compile_prog "" "-laio" ; then
3708 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003709 else
3710 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003711 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003712 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003713 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003714 fi
3715fi
3716
3717##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003718# TPM passthrough is only on x86 Linux
3719
3720if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3721 tpm_passthrough=$tpm
3722else
3723 tpm_passthrough=no
3724fi
3725
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003726# TPM emulator is for all posix systems
3727if test "$mingw32" != "yes"; then
3728 tpm_emulator=$tpm
3729else
3730 tpm_emulator=no
3731fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003732##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003733# attr probe
3734
3735if test "$attr" != "no" ; then
3736 cat > $TMPC <<EOF
3737#include <stdio.h>
3738#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003739#ifdef CONFIG_LIBATTR
3740#include <attr/xattr.h>
3741#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003742#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003743#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003744int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3745EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003746 if compile_prog "" "" ; then
3747 attr=yes
3748 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003749 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003750 attr=yes
3751 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003752 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003753 else
3754 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003755 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003756 fi
3757 attr=no
3758 fi
3759fi
3760
3761##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003762# iovec probe
3763cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003764#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003765#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003766#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003767int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003768EOF
3769iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003770if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003771 iovec=yes
3772fi
3773
aurel32f652e6a2008-12-16 10:43:48 +00003774##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003775# preadv probe
3776cat > $TMPC <<EOF
3777#include <sys/types.h>
3778#include <sys/uio.h>
3779#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003780int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003781EOF
3782preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003783if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003784 preadv=yes
3785fi
3786
3787##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003788# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003789# fdt support is mandatory for at least some target architectures,
3790# so insist on it if we're building those system emulators.
3791fdt_required=no
3792for target in $target_list; do
3793 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003794 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003795 fdt_required=yes
3796 ;;
3797 esac
3798done
3799
3800if test "$fdt_required" = "yes"; then
3801 if test "$fdt" = "no"; then
3802 error_exit "fdt disabled but some requested targets require it." \
3803 "You can turn off fdt only if you also disable all the system emulation" \
3804 "targets which need it (by specifying a cut down --target-list)."
3805 fi
3806 fdt=yes
3807fi
3808
Juan Quintela2df87df2009-08-12 18:29:54 +02003809if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003810 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003811 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003812 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003813 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003814#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003815#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003816int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003817EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003818 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003819 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003820 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003821 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003822 # have GIT checkout, so activate dtc submodule
3823 if test -e "${source_path}/.git" ; then
3824 git_submodules="${git_submodules} dtc"
3825 fi
3826 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003827 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003828 mkdir -p dtc
3829 if [ "$pwd_is_source_path" != "y" ] ; then
3830 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3831 symlink "$source_path/dtc/scripts" "dtc/scripts"
3832 fi
3833 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003834 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3835 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003836 elif test "$fdt" = "yes" ; then
3837 # Not a git build & no libfdt found, prompt for system install
3838 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3839 "Please install the DTC (libfdt) devel package"
3840 else
3841 # don't have and don't want
3842 fdt_libs=
3843 fdt=no
3844 fi
aurel32f652e6a2008-12-16 10:43:48 +00003845 fi
3846fi
3847
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003848libs_softmmu="$libs_softmmu $fdt_libs"
3849
Michael Walle20ff0752011-03-07 23:32:39 +01003850##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003851# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003852
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003853if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003854 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003855 if $pkg_config $opengl_pkgs; then
3856 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3857 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003858 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003859 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3860 gtk_gl="yes"
3861 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003862 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003863 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003864 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003865 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003866 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003867 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003868 opengl_libs=""
3869 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003870 fi
3871fi
3872
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003873if test "$opengl" = "yes"; then
3874 cat > $TMPC << EOF
3875#include <epoxy/egl.h>
3876#ifndef EGL_MESA_image_dma_buf_export
3877# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3878#endif
3879int main(void) { return 0; }
3880EOF
3881 if compile_prog "" "" ; then
3882 opengl_dmabuf=yes
3883 fi
3884fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003885
Klim Kireeved279a02018-01-12 12:01:19 +03003886##########################################
3887# libxml2 probe
3888if test "$libxml2" != "no" ; then
3889 if $pkg_config --exists libxml-2.0; then
3890 libxml2="yes"
3891 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3892 libxml2_libs=$($pkg_config --libs libxml-2.0)
3893 else
3894 if test "$libxml2" = "yes"; then
3895 feature_not_found "libxml2" "Install libxml2 devel"
3896 fi
3897 libxml2="no"
3898 fi
3899fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003900
Bharata B Raoeb100392012-09-24 14:42:45 +05303901##########################################
3902# glusterfs probe
3903if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003904 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303905 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003906 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3907 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003908 if $pkg_config --atleast-version=4 glusterfs-api; then
3909 glusterfs_xlator_opt="yes"
3910 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003911 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303912 glusterfs_discard="yes"
3913 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303914 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05303915 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05303916 glusterfs_zerofill="yes"
3917 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303918 else
3919 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003920 feature_not_found "GlusterFS backend support" \
3921 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303922 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303923 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303924 fi
3925fi
3926
aurel3239386ac2009-04-15 19:48:17 +00003927# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003928# emulator. This is done because older glibc versions don't
3929# have syscall stubs for these implemented. In that case we
3930# don't provide them even if kernel supports them.
3931#
3932inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003933cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003934#include <sys/inotify.h>
3935
3936int
3937main(void)
3938{
3939 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003940 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003941}
3942EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003943if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003944 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003945fi
3946
Riku Voipioc05c7a72010-03-26 15:25:11 +00003947inotify1=no
3948cat > $TMPC << EOF
3949#include <sys/inotify.h>
3950
3951int
3952main(void)
3953{
3954 /* try to start inotify */
3955 return inotify_init1(0);
3956}
3957EOF
3958if compile_prog "" "" ; then
3959 inotify1=yes
3960fi
3961
Riku Voipio099d6b02009-05-05 12:10:04 +03003962# check if pipe2 is there
3963pipe2=no
3964cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003965#include <unistd.h>
3966#include <fcntl.h>
3967
3968int main(void)
3969{
3970 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003971 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003972}
3973EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003974if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003975 pipe2=yes
3976fi
3977
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003978# check if accept4 is there
3979accept4=no
3980cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003981#include <sys/socket.h>
3982#include <stddef.h>
3983
3984int main(void)
3985{
3986 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3987 return 0;
3988}
3989EOF
3990if compile_prog "" "" ; then
3991 accept4=yes
3992fi
3993
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303994# check if tee/splice is there. vmsplice was added same time.
3995splice=no
3996cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303997#include <unistd.h>
3998#include <fcntl.h>
3999#include <limits.h>
4000
4001int main(void)
4002{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004003 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304004 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4005 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4006 return 0;
4007}
4008EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004009if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304010 splice=yes
4011fi
4012
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004013##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004014# libnuma probe
4015
4016if test "$numa" != "no" ; then
4017 cat > $TMPC << EOF
4018#include <numa.h>
4019int main(void) { return numa_available(); }
4020EOF
4021
4022 if compile_prog "" "-lnuma" ; then
4023 numa=yes
4024 libs_softmmu="-lnuma $libs_softmmu"
4025 else
4026 if test "$numa" = "yes" ; then
4027 feature_not_found "numa" "install numactl devel"
4028 fi
4029 numa=no
4030 fi
4031fi
4032
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004033if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4034 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4035 exit 1
4036fi
4037
Yang Zhong5a22ab72017-12-20 21:16:46 +08004038# Even if malloc_trim() is available, these non-libc memory allocators
4039# do not support it.
4040if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4041 if test "$malloc_trim" = "yes" ; then
4042 echo "Disabling malloc_trim with non-libc memory allocator"
4043 fi
4044 malloc_trim="no"
4045fi
4046
4047#######################################
4048# malloc_trim
4049
4050if test "$malloc_trim" != "no" ; then
4051 cat > $TMPC << EOF
4052#include <malloc.h>
4053int main(void) { malloc_trim(0); return 0; }
4054EOF
4055 if compile_prog "" "" ; then
4056 malloc_trim="yes"
4057 else
4058 malloc_trim="no"
4059 fi
4060fi
4061
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004062##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004063# tcmalloc probe
4064
4065if test "$tcmalloc" = "yes" ; then
4066 cat > $TMPC << EOF
4067#include <stdlib.h>
4068int main(void) { malloc(1); return 0; }
4069EOF
4070
4071 if compile_prog "" "-ltcmalloc" ; then
4072 LIBS="-ltcmalloc $LIBS"
4073 else
4074 feature_not_found "tcmalloc" "install gperftools devel"
4075 fi
4076fi
4077
4078##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004079# jemalloc probe
4080
4081if test "$jemalloc" = "yes" ; then
4082 cat > $TMPC << EOF
4083#include <stdlib.h>
4084int main(void) { malloc(1); return 0; }
4085EOF
4086
4087 if compile_prog "" "-ljemalloc" ; then
4088 LIBS="-ljemalloc $LIBS"
4089 else
4090 feature_not_found "jemalloc" "install jemalloc devel"
4091 fi
4092fi
4093
4094##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004095# signalfd probe
4096signalfd="no"
4097cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004098#include <unistd.h>
4099#include <sys/syscall.h>
4100#include <signal.h>
4101int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4102EOF
4103
4104if compile_prog "" "" ; then
4105 signalfd=yes
4106fi
4107
Riku Voipioc2882b92009-08-12 15:08:24 +03004108# check if eventfd is supported
4109eventfd=no
4110cat > $TMPC << EOF
4111#include <sys/eventfd.h>
4112
4113int main(void)
4114{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004115 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004116}
4117EOF
4118if compile_prog "" "" ; then
4119 eventfd=yes
4120fi
4121
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004122# check if memfd is supported
4123memfd=no
4124cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004125#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004126
4127int main(void)
4128{
4129 return memfd_create("foo", MFD_ALLOW_SEALING);
4130}
4131EOF
4132if compile_prog "" "" ; then
4133 memfd=yes
4134fi
4135
4136
4137
Ulrich Hechtd0927932009-09-17 20:22:14 +03004138# check for fallocate
4139fallocate=no
4140cat > $TMPC << EOF
4141#include <fcntl.h>
4142
4143int main(void)
4144{
4145 fallocate(0, 0, 0, 0);
4146 return 0;
4147}
4148EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004149if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004150 fallocate=yes
4151fi
4152
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004153# check for fallocate hole punching
4154fallocate_punch_hole=no
4155cat > $TMPC << EOF
4156#include <fcntl.h>
4157#include <linux/falloc.h>
4158
4159int main(void)
4160{
4161 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4162 return 0;
4163}
4164EOF
4165if compile_prog "" "" ; then
4166 fallocate_punch_hole=yes
4167fi
4168
Denis V. Lunevb953f072015-01-30 11:42:14 +03004169# check that fallocate supports range zeroing inside the file
4170fallocate_zero_range=no
4171cat > $TMPC << EOF
4172#include <fcntl.h>
4173#include <linux/falloc.h>
4174
4175int main(void)
4176{
4177 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4178 return 0;
4179}
4180EOF
4181if compile_prog "" "" ; then
4182 fallocate_zero_range=yes
4183fi
4184
Kevin Wolfed911432014-09-29 17:12:59 +02004185# check for posix_fallocate
4186posix_fallocate=no
4187cat > $TMPC << EOF
4188#include <fcntl.h>
4189
4190int main(void)
4191{
4192 posix_fallocate(0, 0, 0);
4193 return 0;
4194}
4195EOF
4196if compile_prog "" "" ; then
4197 posix_fallocate=yes
4198fi
4199
Peter Maydellc727f472011-01-06 11:05:10 +00004200# check for sync_file_range
4201sync_file_range=no
4202cat > $TMPC << EOF
4203#include <fcntl.h>
4204
4205int main(void)
4206{
4207 sync_file_range(0, 0, 0, 0);
4208 return 0;
4209}
4210EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004211if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004212 sync_file_range=yes
4213fi
4214
Peter Maydelldace20d2011-01-10 13:11:24 +00004215# check for linux/fiemap.h and FS_IOC_FIEMAP
4216fiemap=no
4217cat > $TMPC << EOF
4218#include <sys/ioctl.h>
4219#include <linux/fs.h>
4220#include <linux/fiemap.h>
4221
4222int main(void)
4223{
4224 ioctl(0, FS_IOC_FIEMAP, 0);
4225 return 0;
4226}
4227EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004228if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004229 fiemap=yes
4230fi
4231
Ulrich Hechtd0927932009-09-17 20:22:14 +03004232# check for dup3
4233dup3=no
4234cat > $TMPC << EOF
4235#include <unistd.h>
4236
4237int main(void)
4238{
4239 dup3(0, 0, 0);
4240 return 0;
4241}
4242EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004243if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004244 dup3=yes
4245fi
4246
Alex Bligh4e0c6522013-08-21 16:02:43 +01004247# check for ppoll support
4248ppoll=no
4249cat > $TMPC << EOF
4250#include <poll.h>
4251
4252int main(void)
4253{
4254 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4255 ppoll(&pfd, 1, 0, 0);
4256 return 0;
4257}
4258EOF
4259if compile_prog "" "" ; then
4260 ppoll=yes
4261fi
4262
Alex Blighcd758dd2013-08-21 16:02:44 +01004263# check for prctl(PR_SET_TIMERSLACK , ... ) support
4264prctl_pr_set_timerslack=no
4265cat > $TMPC << EOF
4266#include <sys/prctl.h>
4267
4268int main(void)
4269{
4270 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4271 return 0;
4272}
4273EOF
4274if compile_prog "" "" ; then
4275 prctl_pr_set_timerslack=yes
4276fi
4277
Peter Maydell3b6edd12011-02-15 18:35:05 +00004278# check for epoll support
4279epoll=no
4280cat > $TMPC << EOF
4281#include <sys/epoll.h>
4282
4283int main(void)
4284{
4285 epoll_create(0);
4286 return 0;
4287}
4288EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004289if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004290 epoll=yes
4291fi
4292
Peter Maydell227f0212016-06-06 19:58:11 +01004293# epoll_create1 is a later addition
4294# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004295epoll_create1=no
4296cat > $TMPC << EOF
4297#include <sys/epoll.h>
4298
4299int main(void)
4300{
Peter Maydell19e83f62011-04-26 16:56:40 +01004301 /* Note that we use epoll_create1 as a value, not as
4302 * a function being called. This is necessary so that on
4303 * old SPARC glibc versions where the function was present in
4304 * the library but not declared in the header file we will
4305 * fail the configure check. (Otherwise we will get a compiler
4306 * warning but not an error, and will proceed to fail the
4307 * qemu compile where we compile with -Werror.)
4308 */
Blue Swirlc075a722012-08-09 20:21:25 +00004309 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004310}
4311EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004312if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004313 epoll_create1=yes
4314fi
4315
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004316# check for sendfile support
4317sendfile=no
4318cat > $TMPC << EOF
4319#include <sys/sendfile.h>
4320
4321int main(void)
4322{
4323 return sendfile(0, 0, 0, 0);
4324}
4325EOF
4326if compile_prog "" "" ; then
4327 sendfile=yes
4328fi
4329
Riku Voipio51834342014-06-22 11:25:42 +01004330# check for timerfd support (glibc 2.8 and newer)
4331timerfd=no
4332cat > $TMPC << EOF
4333#include <sys/timerfd.h>
4334
4335int main(void)
4336{
4337 return(timerfd_create(CLOCK_REALTIME, 0));
4338}
4339EOF
4340if compile_prog "" "" ; then
4341 timerfd=yes
4342fi
4343
Riku Voipio9af5c902014-08-12 15:58:57 +03004344# check for setns and unshare support
4345setns=no
4346cat > $TMPC << EOF
4347#include <sched.h>
4348
4349int main(void)
4350{
4351 int ret;
4352 ret = setns(0, 0);
4353 ret = unshare(0);
4354 return ret;
4355}
4356EOF
4357if compile_prog "" "" ; then
4358 setns=yes
4359fi
4360
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004361# clock_adjtime probe
4362clock_adjtime=no
4363cat > $TMPC <<EOF
4364#include <time.h>
4365
4366int main(void)
4367{
4368 return clock_adjtime(0, 0);
4369}
4370EOF
4371clock_adjtime=no
4372if compile_prog "" "" ; then
4373 clock_adjtime=yes
4374fi
4375
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004376# syncfs probe
4377syncfs=no
4378cat > $TMPC <<EOF
4379#include <unistd.h>
4380
4381int main(void)
4382{
4383 return syncfs(0);
4384}
4385EOF
4386syncfs=no
4387if compile_prog "" "" ; then
4388 syncfs=yes
4389fi
4390
pbrookcc8ae6d2006-04-23 17:57:59 +00004391# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004392if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004393 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004394 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004395 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004396 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004397 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004398 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004399 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004400 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004401fi
4402
Stefan Weilf514f412009-10-11 12:44:07 +02004403# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004404byteswap_h=no
4405cat > $TMPC << EOF
4406#include <byteswap.h>
4407int main(void) { return bswap_32(0); }
4408EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004409if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004410 byteswap_h=yes
4411fi
4412
Stefan Weil75f13592013-01-05 12:17:38 +01004413# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004414bswap_h=no
4415cat > $TMPC << EOF
4416#include <sys/endian.h>
4417#include <sys/types.h>
4418#include <machine/bswap.h>
4419int main(void) { return bswap32(0); }
4420EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004421if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004422 bswap_h=yes
4423fi
4424
aliguorida93a1f2008-12-12 20:02:52 +00004425##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004426# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004427if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004428 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004429 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004430 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4431 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004432 else
4433 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004434 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004435 fi
4436 libiscsi="no"
4437 fi
4438fi
4439
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004440##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004441# Do we need libm
4442cat > $TMPC << EOF
4443#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004444int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004445EOF
4446if compile_prog "" "" ; then
4447 :
4448elif compile_prog "" "-lm" ; then
4449 LIBS="-lm $LIBS"
4450 libs_qga="-lm $libs_qga"
4451else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004452 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004453fi
4454
4455##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004456# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004457# uClibc provides 2 versions of clock_gettime(), one with realtime
4458# support and one without. This means that the clock_gettime() don't
4459# need -lrt. We still need it for timer_create() so we check for this
4460# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004461cat > $TMPC <<EOF
4462#include <signal.h>
4463#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004464int main(void) {
4465 timer_create(CLOCK_REALTIME, NULL, NULL);
4466 return clock_gettime(CLOCK_REALTIME, NULL);
4467}
aliguorida93a1f2008-12-12 20:02:52 +00004468EOF
4469
Juan Quintela52166aa2009-08-03 14:46:03 +02004470if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004471 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004472# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004473elif compile_prog "" "$pthread_lib -lrt" ; then
4474 LIBS="$LIBS -lrt"
4475 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004476fi
4477
Blue Swirl31ff5042009-09-12 12:33:07 +00004478if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004479 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004480 libs_softmmu="-lutil $libs_softmmu"
4481fi
4482
Blue Swirlde5071c2009-09-12 09:58:46 +00004483##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004484# spice probe
4485if test "$spice" != "no" ; then
4486 cat > $TMPC << EOF
4487#include <spice.h>
4488int main(void) { spice_server_new(); return 0; }
4489EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004490 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4491 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004492 if $pkg_config --atleast-version=0.12.0 spice-server && \
4493 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004494 compile_prog "$spice_cflags" "$spice_libs" ; then
4495 spice="yes"
4496 libs_softmmu="$libs_softmmu $spice_libs"
4497 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004498 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4499 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004500 else
4501 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004502 feature_not_found "spice" \
4503 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004504 fi
4505 spice="no"
4506 fi
4507fi
4508
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004509# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004510if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004511 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004512 libcacard_cflags=$($pkg_config --cflags libcacard)
4513 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004514 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004515 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004516 if test "$smartcard" = "yes"; then
4517 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004518 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004519 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004520 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004521fi
4522
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004523# check for libusb
4524if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004525 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004526 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004527 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4528 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004529 else
4530 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004531 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004532 fi
4533 libusb="no"
4534 fi
4535fi
4536
Hans de Goede69354a82011-07-19 11:04:10 +02004537# check for usbredirparser for usb network redirection support
4538if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004539 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004540 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004541 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4542 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004543 else
4544 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004545 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004546 fi
4547 usb_redir="no"
4548 fi
4549fi
4550
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004551##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004552# check if we have VSS SDK headers for win
4553
4554if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4555 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004556 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004557 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4558 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004559 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004560 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4561 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004562 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004563 esac
4564 cat > $TMPC << EOF
4565#define __MIDL_user_allocate_free_DEFINED__
4566#include <inc/win2003/vss.h>
4567int main(void) { return VSS_CTX_BACKUP; }
4568EOF
4569 if compile_prog "$vss_win32_include" "" ; then
4570 guest_agent_with_vss="yes"
4571 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004572 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004573 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004574 else
4575 if test "$vss_win32_sdk" != "" ; then
4576 echo "ERROR: Please download and install Microsoft VSS SDK:"
4577 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4578 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4579 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4580 echo "ERROR: The headers are extracted in the directory \`inc'."
4581 feature_not_found "VSS support"
4582 fi
4583 guest_agent_with_vss="no"
4584 fi
4585fi
4586
4587##########################################
4588# lookup Windows platform SDK (if not specified)
4589# The SDK is needed only to build .tlb (type library) file of guest agent
4590# VSS provider from the source. It is usually unnecessary because the
4591# pre-compiled .tlb file is included.
4592
4593if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4594 if test -z "$win_sdk"; then
4595 programfiles="$PROGRAMFILES"
4596 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4597 if test -n "$programfiles"; then
4598 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4599 else
4600 feature_not_found "Windows SDK"
4601 fi
4602 elif test "$win_sdk" = "no"; then
4603 win_sdk=""
4604 fi
4605fi
4606
4607##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004608# check if mingw environment provides a recent ntddscsi.h
4609if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4610 cat > $TMPC << EOF
4611#include <windows.h>
4612#include <ntddscsi.h>
4613int main(void) {
4614#if !defined(IOCTL_SCSI_GET_ADDRESS)
4615#error Missing required ioctl definitions
4616#endif
4617 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4618 return addr.Lun;
4619}
4620EOF
4621 if compile_prog "" "" ; then
4622 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004623 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004624 fi
4625fi
4626
4627##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004628# virgl renderer probe
4629
4630if test "$virglrenderer" != "no" ; then
4631 cat > $TMPC << EOF
4632#include <virglrenderer.h>
4633int main(void) { virgl_renderer_poll(); return 0; }
4634EOF
4635 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4636 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004637 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004638 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4639 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4640 virglrenderer="yes"
4641 else
4642 if test "$virglrenderer" = "yes" ; then
4643 feature_not_found "virglrenderer"
4644 fi
4645 virglrenderer="no"
4646 fi
4647fi
4648
4649##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004650# capstone
4651
Richard Hendersone219c492017-09-28 09:01:23 -07004652case "$capstone" in
4653 "" | yes)
4654 if $pkg_config capstone; then
4655 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004656 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004657 capstone=git
4658 elif test -e "${source_path}/capstone/Makefile" ; then
4659 capstone=internal
4660 elif test -z "$capstone" ; then
4661 capstone=no
4662 else
4663 feature_not_found "capstone" "Install capstone devel or git submodule"
4664 fi
4665 ;;
4666
4667 system)
4668 if ! $pkg_config capstone; then
4669 feature_not_found "capstone" "Install capstone devel"
4670 fi
4671 ;;
4672esac
4673
4674case "$capstone" in
4675 git | internal)
4676 if test "$capstone" = git; then
4677 git_submodules="${git_submodules} capstone"
4678 fi
4679 mkdir -p capstone
4680 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4681 if test "$mingw32" = "yes"; then
4682 LIBCAPSTONE=capstone.lib
4683 else
4684 LIBCAPSTONE=libcapstone.a
4685 fi
4686 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4687 ;;
4688
4689 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004690 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4691 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004692 ;;
4693
4694 no)
4695 ;;
4696 *)
4697 error_exit "Unknown state for capstone: $capstone"
4698 ;;
4699esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004700
4701##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004702# check if we have fdatasync
4703
4704fdatasync=no
4705cat > $TMPC << EOF
4706#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004707int main(void) {
4708#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4709return fdatasync(0);
4710#else
Stefan Weile172fe12012-04-06 21:33:20 +02004711#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004712#endif
4713}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004714EOF
4715if compile_prog "" "" ; then
4716 fdatasync=yes
4717fi
4718
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004719##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004720# check if we have madvise
4721
4722madvise=no
4723cat > $TMPC << EOF
4724#include <sys/types.h>
4725#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004726#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004727int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4728EOF
4729if compile_prog "" "" ; then
4730 madvise=yes
4731fi
4732
4733##########################################
4734# check if we have posix_madvise
4735
4736posix_madvise=no
4737cat > $TMPC << EOF
4738#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004739#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004740int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4741EOF
4742if compile_prog "" "" ; then
4743 posix_madvise=yes
4744fi
4745
4746##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004747# check if we have posix_memalign()
4748
4749posix_memalign=no
4750cat > $TMPC << EOF
4751#include <stdlib.h>
4752int main(void) {
4753 void *p;
4754 return posix_memalign(&p, 8, 8);
4755}
4756EOF
4757if compile_prog "" "" ; then
4758 posix_memalign=yes
4759fi
4760
4761##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004762# check if we have posix_syslog
4763
4764posix_syslog=no
4765cat > $TMPC << EOF
4766#include <syslog.h>
4767int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4768EOF
4769if compile_prog "" "" ; then
4770 posix_syslog=yes
4771fi
4772
4773##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004774# check if we have sem_timedwait
4775
4776sem_timedwait=no
4777cat > $TMPC << EOF
4778#include <semaphore.h>
4779int main(void) { return sem_timedwait(0, 0); }
4780EOF
4781if compile_prog "" "" ; then
4782 sem_timedwait=yes
4783fi
4784
4785##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004786# check if we have strchrnul
4787
4788strchrnul=no
4789cat > $TMPC << EOF
4790#include <string.h>
4791int main(void);
4792// Use a haystack that the compiler shouldn't be able to constant fold
4793char *haystack = (char*)&main;
4794int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4795EOF
4796if compile_prog "" "" ; then
4797 strchrnul=yes
4798fi
4799
4800##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004801# check if trace backend exists
4802
Lluís Vilanova5b808272014-05-27 15:02:14 +02004803$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004804if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004805 error_exit "invalid trace backends" \
4806 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004807fi
4808
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004809##########################################
4810# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004811if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004812 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004813#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004814int main(void) { return 0; }
4815EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004816 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004817 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004818 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004819 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004820 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004821 fi
4822 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004823 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004824 else
4825 urcu_bp_libs="-lurcu-bp"
4826 fi
4827
4828 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4829 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004830 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004831 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004832 fi
4833fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004834
4835##########################################
4836# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004837if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004838 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004839 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004840 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004841 trace_backend_stap="no"
4842 if has 'stap' ; then
4843 trace_backend_stap="yes"
4844 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004845fi
4846
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004847##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004848# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304849
Peter Maydell7c2acc72013-04-08 12:11:27 +01004850# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004851# is sigcontext. On Windows the only valid backend is the Windows
4852# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004853
4854ucontext_works=no
4855if test "$darwin" != "yes"; then
4856 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304857#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004858#ifdef __stub_makecontext
4859#error Ignoring glibc stub makecontext which will always fail
4860#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004861int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304862EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004863 if compile_prog "" "" ; then
4864 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304865 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004866fi
4867
4868if test "$coroutine" = ""; then
4869 if test "$mingw32" = "yes"; then
4870 coroutine=win32
4871 elif test "$ucontext_works" = "yes"; then
4872 coroutine=ucontext
4873 else
4874 coroutine=sigaltstack
4875 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004876else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004877 case $coroutine in
4878 windows)
4879 if test "$mingw32" != "yes"; then
4880 error_exit "'windows' coroutine backend only valid for Windows"
4881 fi
4882 # Unfortunately the user visible backend name doesn't match the
4883 # coroutine-*.c filename for this case, so we have to adjust it here.
4884 coroutine=win32
4885 ;;
4886 ucontext)
4887 if test "$ucontext_works" != "yes"; then
4888 feature_not_found "ucontext"
4889 fi
4890 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004891 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004892 if test "$mingw32" = "yes"; then
4893 error_exit "only the 'windows' coroutine backend is valid for Windows"
4894 fi
4895 ;;
4896 *)
4897 error_exit "unknown coroutine backend $coroutine"
4898 ;;
4899 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304900fi
4901
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004902if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004903 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004904fi
4905
Peter Lieven7d992e42016-09-27 11:58:45 +02004906if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02004907 if test "$coroutine_pool" = "yes"; then
4908 echo "WARN: disabling coroutine pool for stack usage debugging"
4909 coroutine_pool=no
4910 fi
4911fi
4912
4913
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304914##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304915# check if we have open_by_handle_at
4916
Stefan Weil4e1797f2012-06-18 22:11:06 +02004917open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304918cat > $TMPC << EOF
4919#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004920#if !defined(AT_EMPTY_PATH)
4921# error missing definition
4922#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004923int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004924#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304925EOF
4926if compile_prog "" "" ; then
4927 open_by_handle_at=yes
4928fi
4929
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304930########################################
4931# check if we have linux/magic.h
4932
4933linux_magic_h=no
4934cat > $TMPC << EOF
4935#include <linux/magic.h>
4936int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004937 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304938}
4939EOF
4940if compile_prog "" "" ; then
4941 linux_magic_h=yes
4942fi
4943
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004944########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004945# check whether we can disable warning option with a pragma (this is needed
4946# to silence warnings in the headers of some versions of external libraries).
4947# This test has to be compiled with -Werror as otherwise an unknown pragma is
4948# only a warning.
4949#
4950# If we can't selectively disable warning in the code, disable -Werror so that
4951# the build doesn't fail anyway.
4952
Peter Maydell06d71fa2012-07-30 16:13:07 +01004953pragma_disable_unused_but_set=no
4954cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004955#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01004956#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004957#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004958
Peter Maydell06d71fa2012-07-30 16:13:07 +01004959int main(void) {
4960 return 0;
4961}
4962EOF
4963if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004964 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004965else
4966 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004967fi
4968
4969########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004970# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004971
4972valgrind_h=no
4973cat > $TMPC << EOF
4974#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004975int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004976 return 0;
4977}
4978EOF
4979if compile_prog "" "" ; then
4980 valgrind_h=yes
4981fi
4982
4983########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004984# check if environ is declared
4985
4986has_environ=no
4987cat > $TMPC << EOF
4988#include <unistd.h>
4989int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00004990 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004991 return 0;
4992}
4993EOF
4994if compile_prog "" "" ; then
4995 has_environ=yes
4996fi
4997
Richard Henderson76a347e2012-12-28 14:17:02 -08004998########################################
4999# check if cpuid.h is usable.
5000
Richard Henderson76a347e2012-12-28 14:17:02 -08005001cat > $TMPC << EOF
5002#include <cpuid.h>
5003int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005004 unsigned a, b, c, d;
5005 int max = __get_cpuid_max(0, 0);
5006
5007 if (max >= 1) {
5008 __cpuid(1, a, b, c, d);
5009 }
5010
5011 if (max >= 7) {
5012 __cpuid_count(7, 0, a, b, c, d);
5013 }
5014
5015 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005016}
5017EOF
5018if compile_prog "" "" ; then
5019 cpuid_h=yes
5020fi
5021
Richard Henderson5dd89902017-07-18 18:40:18 -10005022##########################################
5023# avx2 optimization requirement check
5024#
5025# There is no point enabling this if cpuid.h is not usable,
5026# since we won't be able to select the new routines.
5027
5028if test $cpuid_h = yes; then
5029 cat > $TMPC << EOF
5030#pragma GCC push_options
5031#pragma GCC target("avx2")
5032#include <cpuid.h>
5033#include <immintrin.h>
5034static int bar(void *a) {
5035 __m256i x = *(__m256i *)a;
5036 return _mm256_testz_si256(x, x);
5037}
5038int main(int argc, char *argv[]) { return bar(argv[0]); }
5039EOF
5040 if compile_object "" ; then
5041 avx2_opt="yes"
5042 fi
5043fi
5044
Richard Hendersonf5401662013-02-16 12:46:59 -08005045########################################
5046# check if __[u]int128_t is usable.
5047
5048int128=no
5049cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01005050#if defined(__clang_major__) && defined(__clang_minor__)
5051# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5052# error __int128_t does not work in CLANG before 3.2
5053# endif
5054#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08005055__int128_t a;
5056__uint128_t b;
5057int main (void) {
5058 a = a + b;
5059 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005060 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005061 return 0;
5062}
5063EOF
5064if compile_prog "" "" ; then
5065 int128=yes
5066fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005067
Richard Henderson7ebee432016-06-29 21:10:59 -07005068#########################################
5069# See if 128-bit atomic operations are supported.
5070
5071atomic128=no
5072if test "$int128" = "yes"; then
5073 cat > $TMPC << EOF
5074int main(void)
5075{
5076 unsigned __int128 x = 0, y = 0;
5077 y = __atomic_load_16(&x, 0);
5078 __atomic_store_16(&x, y, 0);
5079 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5080 return 0;
5081}
5082EOF
5083 if compile_prog "" "" ; then
5084 atomic128=yes
5085 fi
5086fi
5087
Richard Hendersondf79b992016-09-02 12:23:57 -07005088#########################################
5089# See if 64-bit atomic operations are supported.
5090# Note that without __atomic builtins, we can only
5091# assume atomic loads/stores max at pointer size.
5092
5093cat > $TMPC << EOF
5094#include <stdint.h>
5095int main(void)
5096{
5097 uint64_t x = 0, y = 0;
5098#ifdef __ATOMIC_RELAXED
5099 y = __atomic_load_8(&x, 0);
5100 __atomic_store_8(&x, y, 0);
5101 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5102 __atomic_exchange_8(&x, y, 0);
5103 __atomic_fetch_add_8(&x, y, 0);
5104#else
5105 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5106 __sync_lock_test_and_set(&x, y);
5107 __sync_val_compare_and_swap(&x, y, 0);
5108 __sync_fetch_and_add(&x, y);
5109#endif
5110 return 0;
5111}
5112EOF
5113if compile_prog "" "" ; then
5114 atomic64=yes
5115fi
5116
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005117########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005118# See if 16-byte vector operations are supported.
5119# Even without a vector unit the compiler may expand these.
5120# There is a bug in old GCC for PPC that crashes here.
5121# Unfortunately it's the system compiler for Centos 7.
5122
5123cat > $TMPC << EOF
5124typedef unsigned char U1 __attribute__((vector_size(16)));
5125typedef unsigned short U2 __attribute__((vector_size(16)));
5126typedef unsigned int U4 __attribute__((vector_size(16)));
5127typedef unsigned long long U8 __attribute__((vector_size(16)));
5128typedef signed char S1 __attribute__((vector_size(16)));
5129typedef signed short S2 __attribute__((vector_size(16)));
5130typedef signed int S4 __attribute__((vector_size(16)));
5131typedef signed long long S8 __attribute__((vector_size(16)));
5132static U1 a1, b1;
5133static U2 a2, b2;
5134static U4 a4, b4;
5135static U8 a8, b8;
5136static S1 c1;
5137static S2 c2;
5138static S4 c4;
5139static S8 c8;
5140static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005141void helper(void *d, void *a, int shift, int i);
5142void helper(void *d, void *a, int shift, int i)
5143{
5144 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5145 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5146 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5147 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5148}
Richard Hendersondb432672017-09-15 14:11:45 -07005149int main(void)
5150{
5151 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5152 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5153 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5154 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5155 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5156 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5157 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5158 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5159 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5160 return 0;
5161}
5162EOF
5163
5164vector16=no
5165if compile_prog "" "" ; then
5166 vector16=yes
5167fi
5168
5169########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005170# check if getauxval is available.
5171
5172getauxval=no
5173cat > $TMPC << EOF
5174#include <sys/auxv.h>
5175int main(void) {
5176 return getauxval(AT_HWCAP) == 0;
5177}
5178EOF
5179if compile_prog "" "" ; then
5180 getauxval=yes
5181fi
5182
John Snowfd0e6052015-03-25 18:57:39 -04005183########################################
5184# check if ccache is interfering with
5185# semantic analysis of macros
5186
John Snow5e4dfd32015-10-28 13:56:40 -04005187unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005188ccache_cpp2=no
5189cat > $TMPC << EOF
5190static const int Z = 1;
5191#define fn() ({ Z; })
5192#define TAUT(X) ((X) == Z)
5193#define PAREN(X, Y) (X == Y)
5194#define ID(X) (X)
5195int main(int argc, char *argv[])
5196{
5197 int x = 0, y = 0;
5198 x = ID(x);
5199 x = fn();
5200 fn();
5201 if (PAREN(x, y)) return 0;
5202 if (TAUT(Z)) return 0;
5203 return 0;
5204}
5205EOF
5206
5207if ! compile_object "-Werror"; then
5208 ccache_cpp2=yes
5209fi
5210
John Snowb553a042015-11-03 15:43:42 -05005211#################################################
5212# clang does not support glibc + FORTIFY_SOURCE.
5213
5214if test "$fortify_source" != "no"; then
5215 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5216 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005217 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005218 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005219 fortify_source="no";
5220 else
5221 fortify_source="yes"
5222 fi
5223fi
5224
Fam Zheng1efad062018-06-01 17:26:43 +08005225###############################################
5226# Check if copy_file_range is provided by glibc
5227have_copy_file_range=no
5228cat > $TMPC << EOF
5229#include <unistd.h>
5230int main(void) {
5231 copy_file_range(0, NULL, 0, NULL, 0, 0);
5232 return 0;
5233}
5234EOF
5235if compile_prog "" "" ; then
5236 have_copy_file_range=yes
5237fi
5238
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305239##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005240# check if struct fsxattr is available via linux/fs.h
5241
5242have_fsxattr=no
5243cat > $TMPC << EOF
5244#include <linux/fs.h>
5245struct fsxattr foo;
5246int main(void) {
5247 return 0;
5248}
5249EOF
5250if compile_prog "" "" ; then
5251 have_fsxattr=yes
5252fi
5253
Peter Maydellb66e10e2016-06-08 18:34:32 +01005254##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005255# check for usable membarrier system call
5256if test "$membarrier" = "yes"; then
5257 have_membarrier=no
5258 if test "$mingw32" = "yes" ; then
5259 have_membarrier=yes
5260 elif test "$linux" = "yes" ; then
5261 cat > $TMPC << EOF
5262 #include <linux/membarrier.h>
5263 #include <sys/syscall.h>
5264 #include <unistd.h>
5265 #include <stdlib.h>
5266 int main(void) {
5267 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5268 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5269 exit(0);
5270 }
5271EOF
5272 if compile_prog "" "" ; then
5273 have_membarrier=yes
5274 fi
5275 fi
5276 if test "$have_membarrier" = "no"; then
5277 feature_not_found "membarrier" "membarrier system call not available"
5278 fi
5279else
5280 # Do not enable it by default even for Mingw32, because it doesn't
5281 # work on Wine.
5282 membarrier=no
5283fi
5284
5285##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005286# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005287have_rtnetlink=no
5288cat > $TMPC << EOF
5289#include <linux/rtnetlink.h>
5290int main(void) {
5291 return IFLA_PROTO_DOWN;
5292}
5293EOF
5294if compile_prog "" "" ; then
5295 have_rtnetlink=yes
5296fi
5297
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005298##########################################
5299# check for usable AF_VSOCK environment
5300have_af_vsock=no
5301cat > $TMPC << EOF
5302#include <errno.h>
5303#include <sys/types.h>
5304#include <sys/socket.h>
5305#if !defined(AF_VSOCK)
5306# error missing AF_VSOCK flag
5307#endif
5308#include <linux/vm_sockets.h>
5309int main(void) {
5310 int sock, ret;
5311 struct sockaddr_vm svm;
5312 socklen_t len = sizeof(svm);
5313 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5314 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5315 if ((ret == -1) && (errno == ENOTCONN)) {
5316 return 0;
5317 }
5318 return -1;
5319}
5320EOF
5321if compile_prog "" "" ; then
5322 have_af_vsock=yes
5323fi
5324
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005325##########################################
5326# check for usable AF_ALG environment
5327hava_afalg=no
5328cat > $TMPC << EOF
5329#include <errno.h>
5330#include <sys/types.h>
5331#include <sys/socket.h>
5332#include <linux/if_alg.h>
5333int main(void) {
5334 int sock;
5335 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5336 return sock;
5337}
5338EOF
5339if compile_prog "" "" ; then
5340 have_afalg=yes
5341fi
5342if test "$crypto_afalg" = "yes"
5343then
5344 if test "$have_afalg" != "yes"
5345 then
5346 error_exit "AF_ALG requested but could not be detected"
5347 fi
5348fi
5349
5350
James Clarke6969ec62016-06-06 12:02:50 +01005351#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005352# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005353if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005354 cat > $TMPC << EOF
5355#include <Hypervisor/hv.h>
5356int main() { return 0;}
5357EOF
5358 if ! compile_object ""; then
5359 hvf='no'
5360 else
5361 hvf='yes'
5362 LDFLAGS="-framework Hypervisor $LDFLAGS"
5363 fi
5364fi
5365
5366#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005367# Sparc implicitly links with --relax, which is
5368# incompatible with -r, so --no-relax should be
5369# given. It does no harm to give it on other
5370# platforms too.
5371
5372# Note: the prototype is needed since QEMU_CFLAGS
5373# contains -Wmissing-prototypes
5374cat > $TMPC << EOF
5375extern int foo(void);
5376int foo(void) { return 0; }
5377EOF
5378if ! compile_object ""; then
5379 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5380fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005381for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5382 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5383 LD_REL_FLAGS=$i
5384 break
5385 fi
5386done
5387if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5388 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005389fi
5390
Jan Vesely277abf12016-04-29 13:15:23 -04005391##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005392# check for sysmacros.h
5393
5394have_sysmacros=no
5395cat > $TMPC << EOF
5396#include <sys/sysmacros.h>
5397int main(void) {
5398 return makedev(0, 0);
5399}
5400EOF
5401if compile_prog "" "" ; then
5402 have_sysmacros=yes
5403fi
5404
5405##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005406# Veritas HyperScale block driver VxHS
5407# Check if libvxhs is installed
5408
5409if test "$vxhs" != "no" ; then
5410 cat > $TMPC <<EOF
5411#include <stdint.h>
5412#include <qnio/qnio_api.h>
5413
5414void *vxhs_callback;
5415
5416int main(void) {
5417 iio_init(QNIO_VERSION, vxhs_callback);
5418 return 0;
5419}
5420EOF
5421 vxhs_libs="-lvxhs -lssl"
5422 if compile_prog "" "$vxhs_libs" ; then
5423 vxhs=yes
5424 else
5425 if test "$vxhs" = "yes" ; then
5426 feature_not_found "vxhs block device" "Install libvxhs See github"
5427 fi
5428 vxhs=no
5429 fi
5430fi
5431
5432##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005433# check for _Static_assert()
5434
5435have_static_assert=no
5436cat > $TMPC << EOF
5437_Static_assert(1, "success");
5438int main(void) {
5439 return 0;
5440}
5441EOF
5442if compile_prog "" "" ; then
5443 have_static_assert=yes
5444fi
5445
5446##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005447# check for utmpx.h, it is missing e.g. on OpenBSD
5448
5449have_utmpx=no
5450cat > $TMPC << EOF
5451#include <utmpx.h>
5452struct utmpx user_info;
5453int main(void) {
5454 return 0;
5455}
5456EOF
5457if compile_prog "" "" ; then
5458 have_utmpx=yes
5459fi
5460
5461##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005462# checks for sanitizers
5463
Marc-André Lureau247724c2018-01-16 16:11:51 +01005464have_asan=no
5465have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005466have_asan_iface_h=no
5467have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005468
5469if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005470 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005471 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5472 have_asan=yes
5473 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005474
5475 # we could use a simple skeleton for flags checks, but this also
5476 # detect the static linking issue of ubsan, see also:
5477 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5478 cat > $TMPC << EOF
5479#include <stdlib.h>
5480int main(void) {
5481 void *tmp = malloc(10);
5482 return *(int *)(tmp + 2);
5483}
5484EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005485 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5486 have_ubsan=yes
5487 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005488
5489 if check_include "sanitizer/asan_interface.h" ; then
5490 have_asan_iface_h=yes
5491 fi
5492
5493 cat > $TMPC << EOF
5494#include <sanitizer/asan_interface.h>
5495int main(void) {
5496 __sanitizer_start_switch_fiber(0, 0, 0);
5497 return 0;
5498}
5499EOF
5500 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5501 have_asan_iface_fiber=yes
5502 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005503fi
5504
5505##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005506# Docker and cross-compiler support
5507#
5508# This is specifically for building test
5509# cases for foreign architectures, not
5510# cross-compiling QEMU itself.
5511
5512if has "docker"; then
5513 docker=$($python $source_path/tests/docker/docker.py probe)
5514fi
5515
5516##########################################
Junyan He17824402018-07-18 15:47:59 +08005517# check for libpmem
5518
5519if test "$libpmem" != "no"; then
5520 if $pkg_config --exists "libpmem"; then
5521 libpmem="yes"
5522 libpmem_libs=$($pkg_config --libs libpmem)
5523 libpmem_cflags=$($pkg_config --cflags libpmem)
5524 libs_softmmu="$libs_softmmu $libpmem_libs"
5525 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5526 else
5527 if test "$libpmem" = "yes" ; then
5528 feature_not_found "libpmem" "Install nvml or pmdk"
5529 fi
5530 libpmem="no"
5531 fi
5532fi
5533
5534##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005535# End of CC checks
5536# After here, no more $cc or $ld runs
5537
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005538write_c_skeleton
5539
Blue Swirl1d728c32012-05-01 18:45:39 +00005540if test "$gcov" = "yes" ; then
5541 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5542 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005543elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005544 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005545elif test "$debug" = "no"; then
5546 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005547fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005548
Marc-André Lureau247724c2018-01-16 16:11:51 +01005549if test "$have_asan" = "yes"; then
5550 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005551 if test "$have_asan_iface_h" = "no" ; then
5552 echo "ASAN build enabled, but ASAN header missing." \
5553 "Without code annotation, the report may be inferior."
5554 elif test "$have_asan_iface_fiber" = "no" ; then
5555 echo "ASAN build enabled, but ASAN header is too old." \
5556 "Without code annotation, the report may be inferior."
5557 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005558fi
5559if test "$have_ubsan" = "yes"; then
5560 CFLAGS="-fsanitize=undefined $CFLAGS"
5561fi
5562
Peter Lieven6542aa92014-02-03 10:26:13 +01005563##########################################
5564# Do we have libnfs
5565if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005566 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005567 libnfs="yes"
5568 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005569 else
5570 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005571 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005572 fi
5573 libnfs="no"
5574 fi
5575fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005576
Peter Maydell6ca026c2012-07-18 15:10:18 +01005577# Now we've finished running tests it's OK to add -Werror to the compiler flags
5578if test "$werror" = "yes"; then
5579 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5580fi
5581
Juan Quintelae86ecd42009-08-03 14:45:59 +02005582if test "$solaris" = "no" ; then
5583 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005584 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005585 fi
5586fi
5587
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005588# test if pod2man has --utf8 option
5589if pod2man --help | grep -q utf8; then
5590 POD2MAN="pod2man --utf8"
5591else
5592 POD2MAN="pod2man"
5593fi
5594
Blue Swirl952afb72010-09-19 08:36:34 +00005595# Use ASLR, no-SEH and DEP if available
5596if test "$mingw32" = "yes" ; then
5597 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005598 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005599 LDFLAGS="-Wl,$flag $LDFLAGS"
5600 fi
5601 done
5602fi
5603
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005604qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005605qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005606qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005607qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005608
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005609# We can only support ivshmem if we have eventfd
5610if [ "$eventfd" = "yes" ]; then
5611 ivshmem=yes
5612fi
5613
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005614tools=""
5615if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005616 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005617 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5618 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005619 fi
5620 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005621 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005622 fi
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005623 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5624 tools="elf2dmp $tools"
5625 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005626fi
5627if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005628 if test "$linux" = yes; then
5629 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005630 virtfs=yes
5631 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5632 else
5633 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005634 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305635 fi
Andreas Färber17500372012-05-01 01:12:03 +02005636 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005637 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005638 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5639 mpath=yes
5640 else
5641 if test "$mpath" = yes; then
5642 error_exit "Multipath requires libmpathpersist devel"
5643 fi
5644 mpath=no
5645 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005646 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5647 else
5648 if test "$virtfs" = yes; then
5649 error_exit "VirtFS is supported only on Linux"
5650 fi
5651 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005652 if test "$mpath" = yes; then
5653 error_exit "Multipath is supported only on Linux"
5654 fi
5655 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305656 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005657 if test "$xkbcommon" = "yes"; then
5658 tools="qemu-keymap\$(EXESUF) $tools"
5659 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005660fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005661
5662# Probe for guest agent support/options
5663
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005664if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005665 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005666 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005667 guest_agent=yes
5668 elif [ "$guest_agent" != yes ]; then
5669 guest_agent=no
5670 else
5671 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005672 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005673fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005674
Michael Roth9d6bc272015-08-26 10:49:13 -05005675# Guest agent Window MSI package
5676
5677if test "$guest_agent" != yes; then
5678 if test "$guest_agent_msi" = yes; then
5679 error_exit "MSI guest agent package requires guest agent enabled"
5680 fi
5681 guest_agent_msi=no
5682elif test "$mingw32" != "yes"; then
5683 if test "$guest_agent_msi" = "yes"; then
5684 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5685 fi
5686 guest_agent_msi=no
5687elif ! has wixl; then
5688 if test "$guest_agent_msi" = "yes"; then
5689 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5690 fi
5691 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005692else
5693 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5694 # disabled explicitly
5695 if test "$guest_agent_msi" != "no"; then
5696 guest_agent_msi=yes
5697 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005698fi
5699
Michael Roth1a349042015-08-26 11:14:31 -05005700if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005701 if test "$guest_agent_with_vss" = "yes"; then
5702 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5703 fi
5704
5705 if test "$QEMU_GA_MANUFACTURER" = ""; then
5706 QEMU_GA_MANUFACTURER=QEMU
5707 fi
5708
5709 if test "$QEMU_GA_DISTRO" = ""; then
5710 QEMU_GA_DISTRO=Linux
5711 fi
5712
5713 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005714 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005715 fi
5716
Stefan Weil89138852016-05-16 15:10:20 +02005717 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005718
5719 case "$cpu" in
5720 x86_64)
5721 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5722 ;;
5723 i386)
5724 QEMU_GA_MSI_ARCH="-D Arch=32"
5725 ;;
5726 *)
5727 error_exit "CPU $cpu not supported for building installation package"
5728 ;;
5729 esac
5730fi
5731
Paolo Bonzinica35f782010-05-26 16:08:29 +02005732# Mac OS X ships with a broken assembler
5733roms=
5734if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5735 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5736 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005737 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005738 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5739 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5740 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005741 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5742 ld_i386_emulation="$emu"
5743 roms="optionrom"
5744 break
5745 fi
5746 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005747fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005748if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005749 roms="$roms spapr-rtas"
5750fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005751
Christian Borntraeger9933c302013-04-23 01:23:03 +00005752if test "$cpu" = "s390x" ; then
5753 roms="$roms s390-ccw"
5754fi
5755
Richard Henderson964c6fa2013-06-21 19:10:16 -07005756# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005757if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005758 textseg_addr=
5759 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005760 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5761 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005762 textseg_addr=0x60000000
5763 ;;
5764 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005765 # A 256M aligned address, high in the address space, with enough
5766 # room for the code_gen_buffer above it before the stack.
5767 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005768 ;;
5769 esac
5770 if [ -n "$textseg_addr" ]; then
5771 cat > $TMPC <<EOF
5772 int main(void) { return 0; }
5773EOF
5774 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5775 if ! compile_prog "" "$textseg_ldflags"; then
5776 # In case ld does not support -Ttext-segment, edit the default linker
5777 # script via sed to set the .text start addr. This is needed on FreeBSD
5778 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005779 if ! $ld --verbose >/dev/null 2>&1; then
5780 error_exit \
5781 "We need to link the QEMU user mode binaries at a" \
5782 "specific text address. Unfortunately your linker" \
5783 "doesn't support either the -Ttext-segment option or" \
5784 "printing the default linker script with --verbose." \
5785 "If you don't want the user mode binaries, pass the" \
5786 "--disable-user option to configure."
5787 fi
5788
Richard Henderson964c6fa2013-06-21 19:10:16 -07005789 $ld --verbose | sed \
5790 -e '1,/==================================================/d' \
5791 -e '/==================================================/,$d' \
5792 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5793 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5794 textseg_ldflags="-Wl,-T../config-host.ld"
5795 fi
5796 fi
5797fi
5798
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005799# Check that the C++ compiler exists and works with the C compiler.
5800# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5801if has $cxx; then
5802 cat > $TMPC <<EOF
5803int c_function(void);
5804int main(void) { return c_function(); }
5805EOF
5806
5807 compile_object
5808
5809 cat > $TMPCXX <<EOF
5810extern "C" {
5811 int c_function(void);
5812}
5813int c_function(void) { return 42; }
5814EOF
5815
5816 update_cxxflags
5817
5818 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5819 # C++ compiler $cxx works ok with C compiler $cc
5820 :
5821 else
5822 echo "C++ compiler $cxx does not work with C compiler $cc"
5823 echo "Disabling C++ specific optional code"
5824 cxx=
5825 fi
5826else
5827 echo "No C++ compiler available; disabling C++ specific optional code"
5828 cxx=
5829fi
5830
Cole Robinson02d34f62016-05-06 14:03:09 -04005831echo_version() {
5832 if test "$1" = "yes" ; then
5833 echo "($2)"
5834 fi
5835}
5836
Jan Kiszka50e12062014-10-02 10:03:55 +02005837# prepend pixman and ftd flags after all config tests are done
5838QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005839QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005840libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005841
bellard43ce4df2003-06-09 19:53:12 +00005842echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005843echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005844echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005845echo "binary directory $(eval echo $bindir)"
5846echo "library directory $(eval echo $libdir)"
5847echo "module directory $(eval echo $qemu_moddir)"
5848echo "libexec directory $(eval echo $libexecdir)"
5849echo "include directory $(eval echo $includedir)"
5850echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005851if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005852echo "local state directory $(eval echo $local_statedir)"
5853echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005854echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005855else
5856echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005857echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005858fi
bellard5a671352003-10-01 00:13:48 +00005859echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005860echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005861echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005862echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005863echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005864echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005865echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005866echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005867echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005868echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005869echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005870echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005871echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005872echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005873echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005874if test "$slirp" = "yes" ; then
5875 echo "smbd $smbd"
5876fi
Fam Zheng17969262014-02-10 14:48:56 +08005877echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005878echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005879echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005880echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005881echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005882echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005883echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005884echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005885echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005886if test "$darwin" = "yes" ; then
5887 echo "Cocoa support $cocoa"
5888fi
Stefan Weil89138852016-05-16 15:10:20 +02005889echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5890echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005891echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005892echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005893echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005894echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005895echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02005896echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005897echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005898echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02005899echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02005900echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005901echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005902echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005903echo "Block whitelist (rw) $block_drv_rw_whitelist"
5904echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305905echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005906echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01005907echo "VNC support $vnc"
5908if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005909 echo "VNC SASL support $vnc_sasl"
5910 echo "VNC JPEG support $vnc_jpeg"
5911 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005912fi
blueswir131422552007-04-16 18:27:06 +00005913if test -n "$sparc_cpu"; then
5914 echo "Target Sparc Arch $sparc_cpu"
5915fi
aliguorie37630c2009-04-22 15:19:10 +00005916echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005917if test "$xen" = "yes" ; then
5918 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005919 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005920fi
aurel322e4d9fb2008-04-08 06:01:02 +00005921echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005922echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005923echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005924echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005925echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005926echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005927echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005928echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005929echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005930echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01005931echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005932echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08005933echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005934echo "TCG support $tcg"
5935if test "$tcg" = "yes" ; then
5936 echo "TCG debug enabled $debug_tcg"
5937 echo "TCG interpreter $tcg_interpreter"
5938fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08005939echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04005940echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03005941echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00005942echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005943echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00005944echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005945echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005946echo "madvise $madvise"
5947echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005948echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05005949echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005950echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08005951echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005952echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005953echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005954echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005955echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005956if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005957echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005958fi
Stefan Weil89138852016-05-16 15:10:20 +02005959echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005960echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005961echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005962echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005963echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005964echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005965echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005966echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005967echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005968echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005969echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005970echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05005971echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05005972echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03005973echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01005974echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005975echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02005976echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02005977echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005978echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05305979echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00005980echo "gcov $gcov_tool"
5981echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05005982echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005983echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005984echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03005985echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02005986echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01005987echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08005988echo "lzo support $lzo"
5989echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01005990echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08005991echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03005992echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08005993echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02005994echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08005995echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005996echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005997echo "VxHS block device $vxhs"
Richard Henderson8ca80762017-09-14 09:41:12 -07005998echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01005999echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006000echo "libpmem support $libpmem"
bellard67b915a2004-03-31 23:37:16 +00006001
Stefan Weil1ba16962011-07-29 22:40:45 +02006002if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006003echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006004fi
bellard97a847b2003-08-10 21:36:04 +00006005
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006006if test "$sdlabi" = "1.2"; then
6007 echo
6008 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6009 echo "WARNING: future releases. Please switch to using SDL 2.0"
6010fi
6011
Peter Maydell898be3e2017-03-21 14:31:57 +00006012if test "$supported_cpu" = "no"; then
6013 echo
6014 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6015 echo
6016 echo "CPU host architecture $cpu support is not currently maintained."
6017 echo "The QEMU project intends to remove support for this host CPU in"
6018 echo "a future release if nobody volunteers to maintain it and to"
6019 echo "provide a build host for our continuous integration setup."
6020 echo "configure has succeeded and you can continue to build, but"
6021 echo "if you care about QEMU on this platform you should contact"
6022 echo "us upstream at qemu-devel@nongnu.org."
6023fi
6024
6025if test "$supported_os" = "no"; then
6026 echo
6027 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6028 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006029 echo "Host OS $targetos support is not currently maintained."
6030 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006031 echo "a future release if nobody volunteers to maintain it and to"
6032 echo "provide a build host for our continuous integration setup."
6033 echo "configure has succeeded and you can continue to build, but"
6034 echo "if you care about QEMU on this platform you should contact"
6035 echo "us upstream at qemu-devel@nongnu.org."
6036fi
6037
Juan Quintela98ec69a2009-07-16 18:34:18 +02006038config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006039
Stefan Weildbd99ae2013-01-01 18:33:44 +01006040echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6041
Juan Quintela98ec69a2009-07-16 18:34:18 +02006042echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006043echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006044
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006045echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006046echo "prefix=$prefix" >> $config_host_mak
6047echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006048echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006049echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006050echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006051echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006052echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006053echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006054echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006055echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006056echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006057echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006058if test "$mingw32" = "no" ; then
6059 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6060fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006061echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006062echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006063echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006064echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006065echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006066echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006067
Juan Quintela98ec69a2009-07-16 18:34:18 +02006068echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006069
aurel32f8393942009-04-13 18:45:38 +00006070if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006071 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006072fi
aliguori1625af82009-04-05 17:41:02 +00006073if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006074 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006075fi
bellard7d132992003-03-06 23:23:54 +00006076if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006077 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006078fi
bellard67b915a2004-03-31 23:37:16 +00006079if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006080 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006081 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006082 version_major=${rc_version%%.*}
6083 rc_version=${rc_version#*.}
6084 version_minor=${rc_version%%.*}
6085 rc_version=${rc_version#*.}
6086 version_subminor=${rc_version%%.*}
6087 version_micro=0
6088 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6089 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006090 if test "$guest_agent_with_vss" = "yes" ; then
6091 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006092 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006093 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6094 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006095 if test "$guest_agent_ntddscsi" = "yes" ; then
6096 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6097 fi
Michael Roth1a349042015-08-26 11:14:31 -05006098 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006099 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006100 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6101 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6102 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6103 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6104 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6105 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6106 fi
pbrook210fa552007-02-27 21:04:49 +00006107else
Juan Quintela35f4df22009-07-27 16:13:07 +02006108 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006109fi
blueswir1128ab2f2008-08-15 18:33:42 +00006110
Mark McLoughlindffcb712009-10-22 17:49:11 +01006111if test "$linux" = "yes" ; then
6112 echo "CONFIG_LINUX=y" >> $config_host_mak
6113fi
6114
bellard83fb7ad2004-07-05 21:25:26 +00006115if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006116 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006117fi
malcb29fe3e2008-11-18 01:42:22 +00006118
bellardec530c82006-04-25 22:36:06 +00006119if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006120 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006121fi
Andreas Färber179cf402010-09-20 00:50:43 +02006122if test "$haiku" = "yes" ; then
6123 echo "CONFIG_HAIKU=y" >> $config_host_mak
6124fi
bellard97a847b2003-08-10 21:36:04 +00006125if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006126 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006127fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006128if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006129 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006130fi
bellardc20709a2004-04-21 23:27:19 +00006131if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006132 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006133 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006134fi
ths8a16d272008-07-19 09:56:24 +00006135if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006136 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006137 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006138fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006139if test "$netmap" = "yes" ; then
6140 echo "CONFIG_NETMAP=y" >> $config_host_mak
6141fi
Gonglei015a33b2014-07-01 20:58:08 +08006142if test "$l2tpv3" = "yes" ; then
6143 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6144fi
Corey Bryant47e98652012-01-26 09:42:26 -05006145if test "$cap_ng" = "yes" ; then
6146 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6147fi
Juan Quintela2358a492009-07-27 16:13:25 +02006148echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006149for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006150 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006151 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006152 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006153 echo "$def=m" >> $config_host_mak ;;
6154 *)
6155 echo "$def=y" >> $config_host_mak ;;
6156 esac
malc0c58ac12008-06-25 21:04:05 +00006157done
Fam Zhengb1149912017-09-07 16:29:13 +08006158echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6159echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6160echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6161echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6162echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006163if test "$audio_pt_int" = "yes" ; then
6164 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6165fi
malcd5631632009-10-10 01:13:41 +04006166if test "$audio_win_int" = "yes" ; then
6167 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6168fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006169echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6170echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006171if test "$vnc" = "yes" ; then
6172 echo "CONFIG_VNC=y" >> $config_host_mak
6173fi
aliguori2f9606b2009-03-06 20:27:28 +00006174if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006175 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006176fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006177if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006178 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006179fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006180if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006181 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006182fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006183if test "$xkbcommon" = "yes" ; then
6184 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6185 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6186fi
aliguori76655d62009-03-06 20:27:37 +00006187if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006188 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006189fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006190if test "$xfs" = "yes" ; then
6191 echo "CONFIG_XFS=y" >> $config_host_mak
6192fi
Stefan Weil89138852016-05-16 15:10:20 +02006193qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006194echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006195echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006196echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006197echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006198if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006199 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006200fi
Fam Zheng17969262014-02-10 14:48:56 +08006201if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006202 # $shacmd can generate a hash started with digit, which the compiler doesn't
6203 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006204 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006205 echo "CONFIG_MODULES=y" >> $config_host_mak
6206fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006207if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6208 echo "CONFIG_X11=y" >> $config_host_mak
6209 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6210 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6211fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006212if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006213 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006214 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006215 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006216 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006217fi
6218if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006219 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006220fi
6221if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006222 echo "CONFIG_CURSES=m" >> $config_host_mak
6223 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6224 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006225fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006226if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006227 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006228fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006229if test "$accept4" = "yes" ; then
6230 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6231fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306232if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006233 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306234fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006235if test "$eventfd" = "yes" ; then
6236 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6237fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006238if test "$memfd" = "yes" ; then
6239 echo "CONFIG_MEMFD=y" >> $config_host_mak
6240fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006241if test "$fallocate" = "yes" ; then
6242 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6243fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006244if test "$fallocate_punch_hole" = "yes" ; then
6245 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6246fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006247if test "$fallocate_zero_range" = "yes" ; then
6248 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6249fi
Kevin Wolfed911432014-09-29 17:12:59 +02006250if test "$posix_fallocate" = "yes" ; then
6251 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6252fi
Peter Maydellc727f472011-01-06 11:05:10 +00006253if test "$sync_file_range" = "yes" ; then
6254 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6255fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006256if test "$fiemap" = "yes" ; then
6257 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6258fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006259if test "$dup3" = "yes" ; then
6260 echo "CONFIG_DUP3=y" >> $config_host_mak
6261fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006262if test "$ppoll" = "yes" ; then
6263 echo "CONFIG_PPOLL=y" >> $config_host_mak
6264fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006265if test "$prctl_pr_set_timerslack" = "yes" ; then
6266 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6267fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006268if test "$epoll" = "yes" ; then
6269 echo "CONFIG_EPOLL=y" >> $config_host_mak
6270fi
6271if test "$epoll_create1" = "yes" ; then
6272 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6273fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006274if test "$sendfile" = "yes" ; then
6275 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6276fi
Riku Voipio51834342014-06-22 11:25:42 +01006277if test "$timerfd" = "yes" ; then
6278 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6279fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006280if test "$setns" = "yes" ; then
6281 echo "CONFIG_SETNS=y" >> $config_host_mak
6282fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006283if test "$clock_adjtime" = "yes" ; then
6284 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6285fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006286if test "$syncfs" = "yes" ; then
6287 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6288fi
aurel323b3f24a2009-04-15 16:12:13 +00006289if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006290 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006291fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006292if test "$inotify1" = "yes" ; then
6293 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6294fi
Peter Maydell401bc052017-09-05 13:19:32 +01006295if test "$sem_timedwait" = "yes" ; then
6296 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6297fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006298if test "$strchrnul" = "yes" ; then
6299 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6300fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006301if test "$byteswap_h" = "yes" ; then
6302 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6303fi
6304if test "$bswap_h" = "yes" ; then
6305 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6306fi
Alexander Graf769ce762009-05-11 17:41:42 +02006307if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006308 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006309 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006310 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006311fi
aurel322e4d9fb2008-04-08 06:01:02 +00006312if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006313 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006314 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006315fi
balrogfb599c92008-09-28 23:49:55 +00006316if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006317 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006318 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006319fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006320if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006321 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006322 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006323 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006324 if test "$gtk_gl" = "yes" ; then
6325 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6326 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006327fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006328echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006329if test "$gnutls" = "yes" ; then
6330 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6331fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006332if test "$gcrypt" = "yes" ; then
6333 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006334 if test "$gcrypt_hmac" = "yes" ; then
6335 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6336 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006337fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006338if test "$nettle" = "yes" ; then
6339 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006340 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006341fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006342if test "$tasn1" = "yes" ; then
6343 echo "CONFIG_TASN1=y" >> $config_host_mak
6344fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006345if test "$have_ifaddrs_h" = "yes" ; then
6346 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6347fi
Eric Blake6b39b062016-10-11 10:46:23 -05006348if test "$have_broken_size_max" = "yes" ; then
6349 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6350fi
Jan Vesely277abf12016-04-29 13:15:23 -04006351
6352# Work around a system header bug with some kernel/XFS header
6353# versions where they both try to define 'struct fsxattr':
6354# xfs headers will not try to redefine structs from linux headers
6355# if this macro is set.
6356if test "$have_fsxattr" = "yes" ; then
6357 echo "HAVE_FSXATTR=y" >> $config_host_mak
6358fi
Fam Zheng1efad062018-06-01 17:26:43 +08006359if test "$have_copy_file_range" = "yes" ; then
6360 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6361fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006362if test "$vte" = "yes" ; then
6363 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006364 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006365 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006366fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006367if test "$virglrenderer" = "yes" ; then
6368 echo "CONFIG_VIRGL=y" >> $config_host_mak
6369 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6370 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6371fi
aliguorie37630c2009-04-22 15:19:10 +00006372if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006373 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006374 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006375 if test "$xen_pv_domain_build" = "yes" ; then
6376 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6377 fi
aliguorie37630c2009-04-22 15:19:10 +00006378fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006379if test "$linux_aio" = "yes" ; then
6380 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6381fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006382if test "$attr" = "yes" ; then
6383 echo "CONFIG_ATTR=y" >> $config_host_mak
6384fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006385if test "$libattr" = "yes" ; then
6386 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6387fi
Meador Inge983eef52012-02-24 14:00:42 +05306388if test "$virtfs" = "yes" ; then
6389 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006390fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006391if test "$mpath" = "yes" ; then
6392 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006393 if test "$mpathpersist_new_api" = "yes"; then
6394 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6395 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006396fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006397if test "$vhost_scsi" = "yes" ; then
6398 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6399fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006400if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006401 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6402fi
Gonglei042cea22018-03-01 21:46:28 +08006403if test "$vhost_crypto" = "yes" ; then
6404 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6405fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006406if test "$vhost_vsock" = "yes" ; then
6407 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6408fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006409if test "$vhost_user" = "yes" ; then
6410 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6411fi
ths77755342008-11-27 15:45:16 +00006412if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006413 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006414fi
aliguoribf9298b2008-12-05 20:05:26 +00006415if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006416 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006417fi
aliguoriceb42de2009-04-07 18:43:28 +00006418if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006419 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006420fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006421if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006422 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006423fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006424if test "$membarrier" = "yes" ; then
6425 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6426fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006427if test "$signalfd" = "yes" ; then
6428 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6429fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006430if test "$tcg" = "yes"; then
6431 echo "CONFIG_TCG=y" >> $config_host_mak
6432 if test "$tcg_interpreter" = "yes" ; then
6433 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6434 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006435fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006436if test "$fdatasync" = "yes" ; then
6437 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6438fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006439if test "$madvise" = "yes" ; then
6440 echo "CONFIG_MADVISE=y" >> $config_host_mak
6441fi
6442if test "$posix_madvise" = "yes" ; then
6443 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6444fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006445if test "$posix_memalign" = "yes" ; then
6446 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6447fi
bellard97a847b2003-08-10 21:36:04 +00006448
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006449if test "$spice" = "yes" ; then
6450 echo "CONFIG_SPICE=y" >> $config_host_mak
6451fi
6452
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006453if test "$smartcard" = "yes" ; then
6454 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006455 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6456 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006457fi
6458
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006459if test "$libusb" = "yes" ; then
6460 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006461 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6462 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006463fi
6464
Hans de Goede69354a82011-07-19 11:04:10 +02006465if test "$usb_redir" = "yes" ; then
6466 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006467 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6468 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006469fi
6470
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006471if test "$opengl" = "yes" ; then
6472 echo "CONFIG_OPENGL=y" >> $config_host_mak
6473 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006474 if test "$opengl_dmabuf" = "yes" ; then
6475 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6476 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006477fi
6478
Yang Zhong5a22ab72017-12-20 21:16:46 +08006479if test "$malloc_trim" = "yes" ; then
6480 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6481fi
6482
Liang Li99f2dbd2016-03-08 13:53:16 +08006483if test "$avx2_opt" = "yes" ; then
6484 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6485fi
6486
qiaonuohan607dacd2014-02-18 14:11:30 +08006487if test "$lzo" = "yes" ; then
6488 echo "CONFIG_LZO=y" >> $config_host_mak
6489fi
6490
6491if test "$snappy" = "yes" ; then
6492 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6493fi
6494
Peter Wu6b383c02015-01-06 18:48:14 +01006495if test "$bzip2" = "yes" ; then
6496 echo "CONFIG_BZIP2=y" >> $config_host_mak
6497 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6498fi
6499
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006500if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006501 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006502 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6503 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006504fi
6505
Peter Lieven6542aa92014-02-03 10:26:13 +01006506if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006507 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6508 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006509fi
6510
Eduardo Otubof7945732012-08-14 18:44:05 -03006511if test "$seccomp" = "yes"; then
6512 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006513 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6514 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006515fi
6516
bellard83fb7ad2004-07-05 21:25:26 +00006517# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006518if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006519 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006520fi
6521
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006522if test "$localtime_r" = "yes" ; then
6523 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6524fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006525if test "$qom_cast_debug" = "yes" ; then
6526 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6527fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006528if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006529 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006530 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6531 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006532fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006533
Peter Maydell7c2acc72013-04-08 12:11:27 +01006534echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006535if test "$coroutine_pool" = "yes" ; then
6536 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6537else
6538 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6539fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306540
Peter Lieven7d992e42016-09-27 11:58:45 +02006541if test "$debug_stack_usage" = "yes" ; then
6542 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6543fi
6544
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006545if test "$crypto_afalg" = "yes" ; then
6546 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6547fi
6548
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306549if test "$open_by_handle_at" = "yes" ; then
6550 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6551fi
6552
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306553if test "$linux_magic_h" = "yes" ; then
6554 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6555fi
6556
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006557if test "$pragma_diagnostic_available" = "yes" ; then
6558 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006559fi
6560
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006561if test "$valgrind_h" = "yes" ; then
6562 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6563fi
6564
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006565if test "$have_asan_iface_fiber" = "yes" ; then
6566 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6567fi
6568
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006569if test "$has_environ" = "yes" ; then
6570 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6571fi
6572
Richard Henderson76a347e2012-12-28 14:17:02 -08006573if test "$cpuid_h" = "yes" ; then
6574 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6575fi
6576
Richard Hendersonf5401662013-02-16 12:46:59 -08006577if test "$int128" = "yes" ; then
6578 echo "CONFIG_INT128=y" >> $config_host_mak
6579fi
6580
Richard Henderson7ebee432016-06-29 21:10:59 -07006581if test "$atomic128" = "yes" ; then
6582 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6583fi
6584
Richard Hendersondf79b992016-09-02 12:23:57 -07006585if test "$atomic64" = "yes" ; then
6586 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6587fi
6588
Richard Hendersondb432672017-09-15 14:11:45 -07006589if test "$vector16" = "yes" ; then
6590 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6591fi
6592
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006593if test "$getauxval" = "yes" ; then
6594 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6595fi
6596
Bharata B Raoeb100392012-09-24 14:42:45 +05306597if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006598 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006599 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6600 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306601fi
6602
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006603if test "$glusterfs_xlator_opt" = "yes" ; then
6604 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6605fi
6606
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306607if test "$glusterfs_discard" = "yes" ; then
6608 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6609fi
6610
Niels de Vosdf3a4292017-05-28 12:01:14 +05306611if test "$glusterfs_fallocate" = "yes" ; then
6612 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6613fi
6614
Bharata B Rao7c815372013-12-21 14:51:25 +05306615if test "$glusterfs_zerofill" = "yes" ; then
6616 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6617fi
6618
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006619if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006620 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006621 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6622 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006623fi
6624
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006625if test "$live_block_migration" = "yes" ; then
6626 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6627fi
6628
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006629if test "$tpm" = "yes"; then
6630 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006631 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006632 if test "$tpm_passthrough" = "yes"; then
6633 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6634 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006635 # TPM emulator support?
6636 if test "$tpm_emulator" = "yes"; then
6637 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6638 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006639fi
6640
Lluís Vilanova5b808272014-05-27 15:02:14 +02006641echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6642if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006643 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306644fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006645if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006646 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6647 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006648 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006649fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006650if have_backend "log"; then
6651 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006652fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006653if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006654 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6655fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006656if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006657 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6658 if test "$trace_backend_stap" = "yes" ; then
6659 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6660 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006661fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006662if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006663 if test "$linux" = "yes" ; then
6664 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006665 else
Stewart Smith21684af2014-01-24 12:39:10 +11006666 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006667 fi
6668fi
Paul Durrant0a852412016-08-04 14:44:14 +01006669if have_backend "syslog"; then
6670 if test "$posix_syslog" = "yes" ; then
6671 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6672 else
6673 feature_not_found "syslog(trace backend)" "syslog not available"
6674 fi
6675fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006676echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6677
Michael R. Hines2da776d2013-07-22 10:01:54 -04006678if test "$rdma" = "yes" ; then
6679 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006680 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006681fi
6682
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006683if test "$pvrdma" = "yes" ; then
6684 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6685fi
6686
Laurent Vivier575b22b2016-06-02 22:14:15 +02006687if test "$have_rtnetlink" = "yes" ; then
6688 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6689fi
6690
Klim Kireeved279a02018-01-12 12:01:19 +03006691if test "$libxml2" = "yes" ; then
6692 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6693 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6694 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6695fi
6696
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006697if test "$replication" = "yes" ; then
6698 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6699fi
6700
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006701if test "$have_af_vsock" = "yes" ; then
6702 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6703fi
6704
Christopher Covington4d043512016-12-28 15:04:33 -05006705if test "$have_sysmacros" = "yes" ; then
6706 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6707fi
6708
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006709if test "$have_static_assert" = "yes" ; then
6710 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6711fi
6712
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006713if test "$have_utmpx" = "yes" ; then
6714 echo "HAVE_UTMPX=y" >> $config_host_mak
6715fi
6716
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006717if test "$ivshmem" = "yes" ; then
6718 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6719fi
Richard Hendersone219c492017-09-28 09:01:23 -07006720if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006721 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6722fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006723if test "$debug_mutex" = "yes" ; then
6724 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6725fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006726
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006727# Hold two types of flag:
6728# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6729# a thread we have a handle to
6730# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6731# platform
6732if test "$pthread_setname_np" = "yes" ; then
6733 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6734 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6735fi
6736
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006737if test "$vxhs" = "yes" ; then
6738 echo "CONFIG_VXHS=y" >> $config_host_mak
6739 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6740fi
6741
Junyan He17824402018-07-18 15:47:59 +08006742if test "$libpmem" = "yes" ; then
6743 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6744fi
6745
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006746if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006747 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006748elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006749 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006750elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006751 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006752elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006753 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006754elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006755 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006756else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006757 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006758fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006759QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006760
Juan Quintela98ec69a2009-07-16 18:34:18 +02006761echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006762echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006763echo "MAKE=$make" >> $config_host_mak
6764echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006765echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6766echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006767echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6768echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006769echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006770echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006771if $iasl -h > /dev/null 2>&1; then
6772 echo "IASL=$iasl" >> $config_host_mak
6773fi
Juan Quintela804edf22009-07-27 16:12:49 +02006774echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006775echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006776echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006777echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006778echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006779echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006780echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006781echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006782echo "OBJCOPY=$objcopy" >> $config_host_mak
6783echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006784echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006785echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006786echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006787echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006788echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006789echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006790echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006791echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006792if test "$sparse" = "yes" ; then
6793 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006794 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006795 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006796 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6797 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6798fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006799if test "$cross_prefix" != ""; then
6800 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6801else
6802 echo "AUTOCONF_HOST := " >> $config_host_mak
6803fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006804echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006805echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006806echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006807echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006808echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006809echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006810echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006811echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006812echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006813echo "DSOSUF=$DSOSUF" >> $config_host_mak
6814echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006815echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006816echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6817echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006818echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006819echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006820if test "$gcov" = "yes" ; then
6821 echo "CONFIG_GCOV=y" >> $config_host_mak
6822 echo "GCOV=$gcov_tool" >> $config_host_mak
6823fi
Juan Quintela804edf22009-07-27 16:12:49 +02006824
Alex Bennée51a12b52018-04-04 14:24:39 +01006825if test "$docker" != "no"; then
6826 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6827fi
6828
Peter Maydell6efd7512011-11-30 11:59:04 +00006829# use included Linux headers
6830if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006831 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006832 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006833 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006834 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006835 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02006836 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006837 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006838 ;;
6839 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006840 linux_arch=s390
6841 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006842 aarch64)
6843 linux_arch=arm64
6844 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006845 mips64)
6846 linux_arch=mips
6847 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006848 *)
6849 # For most CPUs the kernel architecture name and QEMU CPU name match.
6850 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006851 ;;
6852 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006853 # For non-KVM architectures we will not have asm headers
6854 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6855 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6856 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006857fi
6858
bellard1d14ffa2005-10-30 18:58:22 +00006859for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006860target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006861config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006862target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006863target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006864
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006865case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02006866 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 +02006867 target_bigendian=yes
6868 ;;
6869esac
bellard97a847b2003-08-10 21:36:04 +00006870target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006871target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006872target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006873target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006874case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006875 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006876 target_softmmu="yes"
6877 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006878 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006879 target_user_only="yes"
6880 target_linux_user="yes"
6881 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006882 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00006883 target_user_only="yes"
6884 target_bsd_user="yes"
6885 ;;
pbrook9e407a82007-05-26 16:38:53 +00006886 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006887 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006888 exit 1
6889 ;;
6890esac
ths831b7822007-01-18 20:06:33 +00006891
Alex Bennéed75402b2018-04-04 20:27:05 +01006892target_compiler=""
6893target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01006894target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01006895
bellard97a847b2003-08-10 21:36:04 +00006896mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006897echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006898
pbrooke5fe0c52006-06-11 13:32:59 +00006899bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00006900mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02006901interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00006902gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00006903
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006904TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02006905TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02006906TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02006907
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006908case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00006909 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04006910 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006911 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006912 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01006913 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00006914 ;;
6915 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006916 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04006917 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006918 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006919 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00006920 ;;
6921 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11006922 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01006923 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00006924 ;;
6925 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006926 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00006927 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006928 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00006929 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006930 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01006931 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00006932 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00006933 aarch64|aarch64_be)
6934 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01006935 TARGET_BASE_ARCH=arm
6936 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006937 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01006938 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 +01006939 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01006940 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01006941 ;;
aurel322408a522008-04-20 20:19:44 +00006942 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01006943 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00006944 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08006945 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08006946 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01006947 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08006948 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01006949 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01006950 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01006951 ;;
aurel322408a522008-04-20 20:19:44 +00006952 m68k)
aurel322408a522008-04-20 20:19:44 +00006953 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02006954 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006955 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00006956 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006957 microblaze|microblazeel)
6958 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006959 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02006960 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01006961 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006962 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02006963 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006964 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01006965 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02006966 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006967 ;;
6968 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08006969 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006970 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01006971 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02006972 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08006973 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006974 ;;
6975 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006976 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006977 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01006978 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02006979 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006980 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006981 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01006982 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04006983 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006984 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01006985 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01006986 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006987 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01006988 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08006989 TARGET_ARCH=openrisc
6990 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08006991 ;;
aurel322408a522008-04-20 20:19:44 +00006992 ppc)
aurel32c8b35322009-01-24 15:07:34 +00006993 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006994 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00006995 ;;
aurel322408a522008-04-20 20:19:44 +00006996 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006997 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006998 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306999 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007000 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 +01007001 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007002 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007003 ppc64le)
7004 TARGET_ARCH=ppc64
7005 TARGET_BASE_ARCH=ppc
7006 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307007 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007008 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 +01007009 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007010 ;;
aurel322408a522008-04-20 20:19:44 +00007011 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007012 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007013 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007014 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007015 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007016 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 +01007017 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007018 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007019 riscv32)
7020 TARGET_BASE_ARCH=riscv
7021 TARGET_ABI_DIR=riscv
7022 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007023 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007024 ;;
7025 riscv64)
7026 TARGET_BASE_ARCH=riscv
7027 TARGET_ABI_DIR=riscv
7028 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007029 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007030 ;;
aurel322408a522008-04-20 20:19:44 +00007031 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007032 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007033 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007034 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007035 ;;
7036 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007037 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007038 ;;
7039 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007040 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007041 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007042 ;;
7043 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007044 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007045 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007046 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007047 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007048 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007049 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007050 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007051 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007052 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 +01007053 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007054 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007055 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007056 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007057 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007058 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007059 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007060 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007061 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007062 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007063 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007064 xtensa|xtensaeb)
7065 TARGET_ARCH=xtensa
Max Filippov9fb40342017-03-06 17:17:43 -08007066 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007067 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007068 ;;
aurel322408a522008-04-20 20:19:44 +00007069 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007070 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007071 ;;
7072esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007073# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7074if [ "$TARGET_BASE_ARCH" = "" ]; then
7075 TARGET_BASE_ARCH=$TARGET_ARCH
7076fi
7077
Alex Bennéed75402b2018-04-04 20:27:05 +01007078# Do we have a cross compiler for this target?
7079if has $target_compiler; then
7080
7081 write_c_skeleton
7082
Alex Bennée716a5072018-04-10 12:19:40 +01007083 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007084 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007085 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007086 target_compiler=""
7087 else
7088 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7089 target_compiler_static="n"
7090 fi
7091 else
7092 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7093 target_compiler_static="y"
7094 fi
7095else
7096 target_compiler=""
7097fi
7098
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007099symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7100
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007101upper() {
7102 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7103}
7104
Stefan Weil89138852016-05-16 15:10:20 +02007105target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007106echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007107echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007108echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007109if [ "$TARGET_ABI_DIR" = "" ]; then
7110 TARGET_ABI_DIR=$TARGET_ARCH
7111fi
Juan Quintela25be2102009-10-07 02:41:00 +02007112echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007113if [ "$HOST_VARIANT_DIR" != "" ]; then
7114 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7115fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007116
7117if supported_xen_target $target; then
7118 echo "CONFIG_XEN=y" >> $config_target_mak
7119 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007120 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007121 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007122fi
7123if supported_kvm_target $target; then
7124 echo "CONFIG_KVM=y" >> $config_target_mak
7125 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007126 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007127 if test "$vhost_user" = "yes" ; then
7128 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7129 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007130 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007131fi
7132if supported_hax_target $target; then
7133 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007134fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007135if supported_hvf_target $target; then
7136 echo "CONFIG_HVF=y" >> $config_target_mak
7137fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007138if supported_whpx_target $target; then
7139 echo "CONFIG_WHPX=y" >> $config_target_mak
7140fi
bellardde83cd02003-06-15 20:25:43 +00007141if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007142 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007143fi
7144if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007145 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007146 if test "$mttcg" = "yes" ; then
7147 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7148 fi
bellardde83cd02003-06-15 20:25:43 +00007149fi
bellard997344f2003-10-27 21:10:39 +00007150if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007151 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007152 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007153fi
ths831b7822007-01-18 20:06:33 +00007154if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007155 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007156fi
pbrook56aebc82008-10-11 17:55:29 +00007157list=""
7158if test ! -z "$gdb_xml_files" ; then
7159 for x in $gdb_xml_files; do
7160 list="$list $source_path/gdb-xml/$x"
7161 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007162 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007163fi
bellardde83cd02003-06-15 20:25:43 +00007164
pbrooke5fe0c52006-06-11 13:32:59 +00007165if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007166 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007167fi
blueswir184778502008-10-26 20:33:16 +00007168if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007169 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007170fi
bellard5b0753e2005-03-01 21:37:28 +00007171
Alex Bennéed75402b2018-04-04 20:27:05 +01007172if test -n "$target_compiler"; then
7173 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7174
7175 if test -n "$target_compiler_static"; then
7176 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7177 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007178
7179 if test -n "$target_compiler_cflags"; then
7180 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7181 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007182fi
7183
Alex Bennée716a5072018-04-10 12:19:40 +01007184
Juan Quintela4afddb52009-08-03 14:46:45 +02007185# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007186
Juan Quintela4afddb52009-08-03 14:46:45 +02007187cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007188ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007189
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007190disas_config() {
7191 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7192 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7193}
7194
Juan Quintela64656022009-08-03 14:46:53 +02007195for i in $ARCH $TARGET_BASE_ARCH ; do
7196 case "$i" in
7197 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007198 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007199 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007200 aarch64)
7201 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007202 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007203 fi
7204 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007205 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007206 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007207 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007208 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007209 fi
Juan Quintela64656022009-08-03 14:46:53 +02007210 ;;
7211 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007212 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007213 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007214 hppa)
7215 disas_config "HPPA"
7216 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007217 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007218 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007219 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007220 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007221 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007222 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007223 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007224 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007225 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007226 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007227 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007228 ;;
7229 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007230 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02007231 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007232 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007233 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007234 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007235 nios2)
7236 disas_config "NIOS2"
7237 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007238 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007239 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007240 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007241 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007242 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007243 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007244 riscv)
7245 disas_config "RISCV"
7246 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007247 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007248 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007249 ;;
7250 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007251 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007252 ;;
7253 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007254 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007255 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007256 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007257 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007258 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007259 esac
7260done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007261if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007262 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007263fi
Juan Quintela64656022009-08-03 14:46:53 +02007264
Juan Quintela6ee71262009-08-03 14:46:47 +02007265case "$ARCH" in
7266alpha)
7267 # Ensure there's only a single GP
7268 cflags="-msmall-data $cflags"
7269;;
7270esac
7271
Juan Quintelad02c1db2009-08-03 14:46:50 +02007272if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007273 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007274 if test "$target_linux_user" = "yes" ; then
7275 cflags="-p $cflags"
7276 ldflags="-p $ldflags"
7277 fi
7278 if test "$target_softmmu" = "yes" ; then
7279 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007280 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007281 fi
7282fi
7283
Juan Quintela9b8e1112009-08-03 14:46:46 +02007284if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007285 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007286fi
Juan Quintelafa282482009-07-22 22:37:39 +02007287
Christian Borntraegere9a35912017-08-23 12:16:23 +02007288# Newer kernels on s390 check for an S390_PGSTE program header and
7289# enable the pgste page table extensions in that case. This makes
7290# the vm.allocate_pgste sysctl unnecessary. We enable this program
7291# header if
7292# - we build on s390x
7293# - we build the system emulation for s390x (qemu-system-s390x)
7294# - KVM is enabled
7295# - the linker supports --s390-pgste
7296if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7297 if ld_has --s390-pgste ; then
7298 ldflags="-Wl,--s390-pgste $ldflags"
7299 fi
7300fi
7301
Juan Quintela25be2102009-10-07 02:41:00 +02007302echo "LDFLAGS+=$ldflags" >> $config_target_mak
7303echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007304
bellard97a847b2003-08-10 21:36:04 +00007305done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007306
Alex Bennéed75402b2018-04-04 20:27:05 +01007307if test -n "$enabled_cross_compilers"; then
7308 echo
7309 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7310fi
7311
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007312if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007313 echo "config-host.h: subdir-dtc" >> $config_host_mak
7314fi
Richard Hendersone219c492017-09-28 09:01:23 -07007315if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7316 echo "config-host.h: subdir-capstone" >> $config_host_mak
7317fi
7318if test -n "$LIBCAPSTONE"; then
7319 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7320fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007321
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007322if test "$numa" = "yes"; then
7323 echo "CONFIG_NUMA=y" >> $config_host_mak
7324fi
7325
John Snowfd0e6052015-03-25 18:57:39 -04007326if test "$ccache_cpp2" = "yes"; then
7327 echo "export CCACHE_CPP2=y" >> $config_host_mak
7328fi
7329
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007330# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007331DIRS="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 -05007332DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007333DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007334DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007335DIRS="$DIRS roms/seabios roms/vgabios"
Anthony Liguoric09015d2012-01-10 13:10:42 -06007336FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7337FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02007338FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -05007339FILES="$FILES tests/fp/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007340FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02007341FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007342FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007343FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01007344FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01007345FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07007346for bios_file in \
7347 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007348 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007349 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007350 $source_path/pc-bios/*.rom \
7351 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007352 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007353 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007354 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007355 $source_path/pc-bios/palcode-*
7356do
Stefan Weil89138852016-05-16 15:10:20 +02007357 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007358done
Stefan Weil89138852016-05-16 15:10:20 +02007359for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007360do
Stefan Weil89138852016-05-16 15:10:20 +02007361 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007362done
Su Hang645d3cb2018-08-16 14:05:28 +01007363for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7364do
7365 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7366done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007367mkdir -p $DIRS
7368for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007369 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007370 symlink "$source_path/$f" "$f"
7371 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007372done
Paul Brook1ad21342009-05-19 16:17:58 +01007373
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007374# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007375for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007376 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007377 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007378 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007379 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007380 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007381 echo "CC=$cc" >> $config_mak
7382 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007383 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007384 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007385 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007386 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007387 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007388done
7389
Marc-André Lureaufe310172016-06-15 13:06:00 +02007390# set up tests data directory
Philippe Mathieu-Daudé1b145d52018-06-12 14:34:37 -03007391for tests_subdir in acceptance data; do
7392 if [ ! -e tests/$tests_subdir ]; then
7393 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7394 fi
7395done
Marc-André Lureaufe310172016-06-15 13:06:00 +02007396
Max Reitz76c75602014-05-24 23:24:56 +02007397# set up qemu-iotests in this build directory
7398iotests_common_env="tests/qemu-iotests/common.env"
7399iotests_check="tests/qemu-iotests/check"
7400
7401echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7402echo >> "$iotests_common_env"
7403echo "export PYTHON='$python'" >> "$iotests_common_env"
7404
7405if [ ! -e "$iotests_check" ]; then
7406 symlink "$source_path/$iotests_check" "$iotests_check"
7407fi
7408
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007409# Save the configure command line for later reuse.
7410cat <<EOD >config.status
7411#!/bin/sh
7412# Generated by configure.
7413# Run this file to recreate the current configuration.
7414# Compiler output produced by configure, useful for debugging
7415# configure, is in config.log if it exists.
7416EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007417
7418preserve_env() {
7419 envname=$1
7420
7421 eval envval=\$$envname
7422
7423 if test -n "$envval"
7424 then
7425 echo "$envname='$envval'" >> config.status
7426 echo "export $envname" >> config.status
7427 else
7428 echo "unset $envname" >> config.status
7429 fi
7430}
7431
7432# Preserve various env variables that influence what
7433# features/build target configure will detect
7434preserve_env AR
7435preserve_env AS
7436preserve_env CC
7437preserve_env CPP
7438preserve_env CXX
7439preserve_env INSTALL
7440preserve_env LD
7441preserve_env LD_LIBRARY_PATH
7442preserve_env LIBTOOL
7443preserve_env MAKE
7444preserve_env NM
7445preserve_env OBJCOPY
7446preserve_env PATH
7447preserve_env PKG_CONFIG
7448preserve_env PKG_CONFIG_LIBDIR
7449preserve_env PKG_CONFIG_PATH
7450preserve_env PYTHON
7451preserve_env SDL_CONFIG
7452preserve_env SDL2_CONFIG
7453preserve_env SMBD
7454preserve_env STRIP
7455preserve_env WINDRES
7456
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007457printf "exec" >>config.status
7458printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007459echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007460chmod +x config.status
7461
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007462rm -r "$TMPDIR1"