blob: a898e21c68741a1c17884ca31dd0d13a61ae3c79 [file] [log] [blame]
bellard7d132992003-03-06 23:23:54 +00001#!/bin/sh
2#
bellard3ef693a2003-03-23 20:17:16 +00003# qemu configure script (c) 2003 Fabrice Bellard
bellard7d132992003-03-06 23:23:54 +00004#
Peter Maydell8cd05ab2014-05-23 17:07:24 +01005
Cornelia Huck99519e62014-05-28 12:39:17 +02006# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
John Snow5e4dfd32015-10-28 13:56:40 -040011# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
Peter Maydell8cd05ab2014-05-23 17:07:24 +010014# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
bellard7d132992003-03-06 23:23:54 +000025fi
26
Peter Maydell8cd05ab2014-05-23 17:07:24 +010027TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
Don Slutz66518bf2014-01-02 21:12:46 -050029TMPO="${TMPDIR1}/${TMPB}.o"
Peter Maydell9c83ffd2014-02-25 18:27:49 +000030TMPCXX="${TMPDIR1}/${TMPB}.cxx"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010031TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010032TMPMO="${TMPDIR1}/${TMPB}.mo"
bellard7d132992003-03-06 23:23:54 +000033
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020034rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000035
Peter Maydellb48e3612011-11-23 17:26:44 +000036# Print a helpful header at the top of config.log
37echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000038printf "# Configured with:" >> config.log
39printf " '%s'" "$0" "$@" >> config.log
40echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000041echo "#" >> config.log
42
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020043print_error() {
44 (echo
Peter Maydell76ad07a2013-04-08 12:11:26 +010045 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020050 echo) >&2
51}
52
53error_exit() {
54 print_error "$@"
Peter Maydell76ad07a2013-04-08 12:11:26 +010055 exit 1
56}
57
Peter Maydell9c83ffd2014-02-25 18:27:49 +000058do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
Ian Jackson8bbe05d2017-09-25 16:41:03 +010063 if test -n "$BASH_VERSION"; then eval '
64 echo >>config.log "
65funcs: ${FUNCNAME[*]}
66lines: ${BASH_LINENO[*]}"
67 '; fi
Peter Maydell9c83ffd2014-02-25 18:27:49 +000068 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010070 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
75 return 0
76 fi
77 # Don't bother rerunning the compile if we were already using -Werror
78 case "$*" in
79 *-Werror*)
80 return 0
81 ;;
82 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000083 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010085 error_exit "configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010089}
90
Peter Maydell9c83ffd2014-02-25 18:27:49 +000091do_cc() {
92 do_compiler "$cc" "$@"
93}
94
95do_cxx() {
96 do_compiler "$cxx" "$@"
97}
98
99update_cxxflags() {
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
104
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000105 for arg in $QEMU_CFLAGS; do
106 case $arg in
107 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
109 ;;
110 *)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
112 ;;
113 esac
114 done
115}
116
Juan Quintela52166aa2009-08-03 14:46:03 +0200117compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400118 local_cflags="$1"
119 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200120}
121
122compile_prog() {
123 local_cflags="$1"
124 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100125 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200126}
127
Paolo Bonzini11568d62010-12-23 11:43:58 +0100128# symbolically link $1 to $2. Portable version of "ln -sf".
129symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100130 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800131 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100132 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100133}
134
Loïc Minier0dba6192010-01-28 21:26:51 +0000135# check whether a command is available to this shell (may be either an
136# executable or a builtin)
137has() {
138 type "$1" >/dev/null 2>&1
139}
140
141# search for an executable in PATH
142path_of() {
143 local_command="$1"
144 local_ifs="$IFS"
145 local_dir=""
146
147 # pathname has a dir component?
148 if [ "${local_command#*/}" != "$local_command" ]; then
149 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
150 echo "$local_command"
151 return 0
152 fi
153 fi
154 if [ -z "$local_command" ]; then
155 return 1
156 fi
157
158 IFS=:
159 for local_dir in $PATH; do
160 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
161 echo "$local_dir/$local_command"
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 0
164 fi
165 done
166 # not found
167 IFS="${local_ifs:-$(printf ' \t\n')}"
168 return 1
169}
170
Lluís Vilanova5b808272014-05-27 15:02:14 +0200171have_backend () {
172 echo "$trace_backends" | grep "$1" >/dev/null
173}
174
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200175glob() {
176 eval test -z '"${1#'"$2"'}"'
177}
178
179supported_hax_target() {
180 test "$hax" = "yes" || return 1
181 glob "$1" "*-softmmu" || return 1
182 case "${1%-softmmu}" in
183 i386|x86_64)
184 return 0
185 ;;
186 esac
187 return 1
188}
189
190supported_kvm_target() {
191 test "$kvm" = "yes" || return 1
192 glob "$1" "*-softmmu" || return 1
193 case "${1%-softmmu}:$cpu" in
194 arm:arm | aarch64:aarch64 | \
195 i386:i386 | i386:x86_64 | i386:x32 | \
196 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
197 mips:mips | mipsel:mips | \
Thomas Hutha69dc532018-08-21 13:27:48 +0200198 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200199 s390x:s390x)
200 return 0
201 ;;
202 esac
203 return 1
204}
205
206supported_xen_target() {
207 test "$xen" = "yes" || return 1
208 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200209 # Only i386 and x86_64 provide the xenpv machine.
210 case "${1%-softmmu}" in
211 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200212 return 0
213 ;;
214 esac
215 return 1
216}
217
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500218supported_hvf_target() {
219 test "$hvf" = "yes" || return 1
220 glob "$1" "*-softmmu" || return 1
221 case "${1%-softmmu}" in
222 x86_64)
223 return 0
224 ;;
225 esac
226 return 1
227}
228
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800229supported_whpx_target() {
230 test "$whpx" = "yes" || return 1
231 glob "$1" "*-softmmu" || return 1
232 case "${1%-softmmu}" in
233 i386|x86_64)
234 return 0
235 ;;
236 esac
237 return 1
238}
239
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200240supported_target() {
241 case "$1" in
242 *-softmmu)
243 ;;
244 *-linux-user)
245 if test "$linux" != "yes"; then
246 print_error "Target '$target' is only available on a Linux host"
247 return 1
248 fi
249 ;;
250 *-bsd-user)
251 if test "$bsd" != "yes"; then
252 print_error "Target '$target' is only available on a BSD host"
253 return 1
254 fi
255 ;;
256 *)
257 print_error "Invalid target name '$target'"
258 return 1
259 ;;
260 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200261 test "$tcg" = "yes" && return 0
262 supported_kvm_target "$1" && return 0
263 supported_xen_target "$1" && return 0
264 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500265 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800266 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200267 print_error "TCG disabled, but hardware accelerator not available for '$target'"
268 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200269}
270
Christian Borntraegere9a35912017-08-23 12:16:23 +0200271
272ld_has() {
273 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
274}
275
bellard7d132992003-03-06 23:23:54 +0000276# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200277source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200278cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300279iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000280interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000281static="no"
bellard7d132992003-03-06 23:23:54 +0000282cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000283audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800284block_drv_rw_whitelist=""
285block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000286host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200287libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200288libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200289audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400290audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500291libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100292debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100293stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000294
Daniel P. Berrange92712822017-09-29 11:11:58 +0100295if test -e "$source_path/.git"
296then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100297 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100298 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500299 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
300 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100301else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100302 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100303 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100304
305 if ! test -f "$source_path/ui/keycodemapdb/README"
306 then
307 echo
308 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
309 echo
310 echo "This is not a GIT checkout but module content appears to"
311 echo "be missing. Do not use 'git archive' or GitHub download links"
312 echo "to acquire QEMU source archives. Non-GIT builds are only"
313 echo "supported with source archives linked from:"
314 echo
315 echo " https://www.qemu.org/download/"
316 echo
317 echo "Developers working with GIT can use scripts/archive-source.sh"
318 echo "if they need to create valid source archives."
319 echo
320 exit 1
321 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100322fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100323git="git"
aliguoriac0df512008-12-29 17:14:15 +0000324
Stefan Weilafb63eb2012-09-26 22:04:38 +0200325# Don't accept a target_list environment variable.
326unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100327
328# Default value for a variable defining feature "foo".
329# * foo="no" feature will only be used if --enable-foo arg is given
330# * foo="" feature will be searched for, and if found, will be used
331# unless --disable-foo is given
332# * foo="yes" this value will only be set by --enable-foo flag.
333# feature will searched for,
334# if not found, configure exits with error
335#
336# Always add --enable-foo and --disable-foo command line args.
337# Distributions want to ensure that several features are compiled in, and it
338# is impossible without a --enable-foo that exits if a feature is not found.
339
340bluez=""
341brlapi=""
342curl=""
343curses=""
344docs=""
345fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100346netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100347sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400348sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530349virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200350mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100351vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100352sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100354vnc_sasl=""
355vnc_jpeg=""
356vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200357xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100358xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000359xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000360xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000361xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100362linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500363cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200365libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200367tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100368membarrier=""
Bradd41a75a2011-07-26 23:11:26 -0400369vhost_net="no"
Gonglei042cea22018-03-01 21:46:28 +0800370vhost_crypto="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000371vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100372vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200373vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400374kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100375hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500376hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800377whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400378rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300379pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100380gprof="no"
381debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100382debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100383sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500384fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100385strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200386tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100387bigendian="no"
388mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000389gcov="no"
390gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100391EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800392DSOSUF=".so"
393LDFLAGS_SHARED="-shared"
394modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100395prefix="/usr/local"
396mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300397datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200398firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300399qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100400bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300401libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400402libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200403includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100404sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300405local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100406confsuffix="/qemu"
407slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100408oss_lib=""
409bsd="no"
410linux="no"
411solaris="no"
412profiler="no"
413cocoa="no"
414softmmu="yes"
415linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100416bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100417blobs="yes"
418pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200419pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200420qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300421trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100422trace_file="trace"
423spice=""
424rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200425smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100426libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200427usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100428opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100429opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000430cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100431avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300432zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700433capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200434lzo=""
435snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100436bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400437guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400438guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500439guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300440guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400441vss_win32_sdk=""
442win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100443want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100444libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100445libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100446coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200447coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200448debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400449crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300450seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530451glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400452glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530453glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530454glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530455glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600456gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200457gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100458tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100459gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100460nettle=""
461gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800462gcrypt_hmac="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100463vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200464virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400465tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100466libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100467live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800468numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800469tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200470jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800471replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700472vxhs=""
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 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001332 --disable-avx2) avx2_opt="no"
1333 ;;
1334 --enable-avx2) avx2_opt="yes"
1335 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301336 --enable-glusterfs) glusterfs="yes"
1337 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001338 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1339 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001340 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001341 --enable-vhdx|--disable-vhdx)
1342 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1343 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001344 --enable-uuid|--disable-uuid)
1345 echo "$0: $opt is obsolete, UUID support is always built" >&2
1346 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001347 --disable-gtk) gtk="no"
1348 ;;
1349 --enable-gtk) gtk="yes"
1350 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001351 --tls-priority=*) tls_priority="$optarg"
1352 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001353 --disable-gnutls) gnutls="no"
1354 ;;
1355 --enable-gnutls) gnutls="yes"
1356 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001357 --disable-nettle) nettle="no"
1358 ;;
1359 --enable-nettle) nettle="yes"
1360 ;;
1361 --disable-gcrypt) gcrypt="no"
1362 ;;
1363 --enable-gcrypt) gcrypt="yes"
1364 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001365 --enable-rdma) rdma="yes"
1366 ;;
1367 --disable-rdma) rdma="no"
1368 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001369 --enable-pvrdma) pvrdma="yes"
1370 ;;
1371 --disable-pvrdma) pvrdma="no"
1372 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001373 --disable-vte) vte="no"
1374 ;;
1375 --enable-vte) vte="yes"
1376 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001377 --disable-virglrenderer) virglrenderer="no"
1378 ;;
1379 --enable-virglrenderer) virglrenderer="yes"
1380 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001381 --disable-tpm) tpm="no"
1382 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001383 --enable-tpm) tpm="yes"
1384 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001385 --disable-libssh2) libssh2="no"
1386 ;;
1387 --enable-libssh2) libssh2="yes"
1388 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001389 --disable-live-block-migration) live_block_migration="no"
1390 ;;
1391 --enable-live-block-migration) live_block_migration="yes"
1392 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001393 --disable-numa) numa="no"
1394 ;;
1395 --enable-numa) numa="yes"
1396 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001397 --disable-libxml2) libxml2="no"
1398 ;;
1399 --enable-libxml2) libxml2="yes"
1400 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001401 --disable-tcmalloc) tcmalloc="no"
1402 ;;
1403 --enable-tcmalloc) tcmalloc="yes"
1404 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001405 --disable-jemalloc) jemalloc="no"
1406 ;;
1407 --enable-jemalloc) jemalloc="yes"
1408 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001409 --disable-replication) replication="no"
1410 ;;
1411 --enable-replication) replication="yes"
1412 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001413 --disable-vxhs) vxhs="no"
1414 ;;
1415 --enable-vxhs) vxhs="yes"
1416 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001417 --disable-vhost-user) vhost_user="no"
1418 ;;
1419 --enable-vhost-user)
1420 vhost_user="yes"
1421 if test "$mingw32" = "yes"; then
1422 error_exit "vhost-user isn't available on win32"
1423 fi
1424 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001425 --disable-capstone) capstone="no"
1426 ;;
1427 --enable-capstone) capstone="yes"
1428 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001429 --enable-capstone=git) capstone="git"
1430 ;;
1431 --enable-capstone=system) capstone="system"
1432 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001433 --with-git=*) git="$optarg"
1434 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001435 --enable-git-update) git_update=yes
1436 ;;
1437 --disable-git-update) git_update=no
1438 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001439 --enable-debug-mutex) debug_mutex=yes
1440 ;;
1441 --disable-debug-mutex) debug_mutex=no
1442 ;;
Junyan He17824402018-07-18 15:47:59 +08001443 --enable-libpmem) libpmem=yes
1444 ;;
1445 --disable-libpmem) libpmem=no
1446 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001447 *)
1448 echo "ERROR: unknown option $opt"
1449 echo "Try '$0 --help' for more information"
1450 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001451 ;;
bellard7d132992003-03-06 23:23:54 +00001452 esac
1453done
1454
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001455if test "$vhost_user" = ""; then
1456 if test "$mingw32" = "yes"; then
1457 vhost_user="no"
1458 else
1459 vhost_user="yes"
1460 fi
1461fi
1462
bellard40293e52008-01-31 11:32:10 +00001463case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001464 ppc)
1465 CPU_CFLAGS="-m32"
1466 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001467 cross_cc_powerpc=$cc
1468 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001469 ;;
1470 ppc64)
1471 CPU_CFLAGS="-m64"
1472 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001473 cross_cc_ppc64=$cc
1474 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001475 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001476 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001477 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1478 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001479 cross_cc_sparc=$cc
1480 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001481 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001482 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001483 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001484 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001485 cross_cc_sparc64=$cc
1486 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001487 ;;
ths76d83bd2007-11-18 21:22:10 +00001488 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001489 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001490 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001491 cross_cc_s390=$cc
1492 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001493 ;;
1494 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001495 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001496 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001497 cross_cc_s390x=$cc
1498 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001499 ;;
bellard40293e52008-01-31 11:32:10 +00001500 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001501 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001502 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001503 cross_cc_i386=$cc
1504 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001505 ;;
1506 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001507 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1508 # If we truly care, we should simply detect this case at
1509 # runtime and generate the fallback to serial emulation.
1510 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001511 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001512 cross_cc_x86_64=$cc
1513 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001514 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001515 x32)
1516 CPU_CFLAGS="-mx32"
1517 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001518 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001519 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001520 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001521 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001522esac
1523
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001524QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001525
Peter Maydellaffc88c2016-06-13 11:32:24 +01001526# For user-mode emulation the host arch has to be one we explicitly
1527# support, even if we're using TCI.
1528if [ "$ARCH" = "unknown" ]; then
1529 bsd_user="no"
1530 linux_user="no"
1531fi
1532
Peter Maydell60e0df22011-05-03 14:50:13 +01001533default_target_list=""
1534
Peter Maydell6e92f822013-05-20 16:16:15 +01001535mak_wilds=""
1536
1537if [ "$softmmu" = "yes" ]; then
1538 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001539fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001540if [ "$linux_user" = "yes" ]; then
1541 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001542fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001543if [ "$bsd_user" = "yes" ]; then
1544 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001545fi
1546
Peter Maydell6e92f822013-05-20 16:16:15 +01001547for config in $mak_wilds; do
1548 default_target_list="${default_target_list} $(basename "$config" .mak)"
1549done
1550
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001551# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001552trace_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 +01001553
pbrookaf5db582006-04-08 14:26:41 +00001554if test x"$show_help" = x"yes" ; then
1555cat << EOF
1556
1557Usage: configure [options]
1558Options: [defaults in brackets after descriptions]
1559
Stefan Weil08fb77e2013-12-18 22:09:39 +01001560Standard options:
1561 --help print this message
1562 --prefix=PREFIX install in PREFIX [$prefix]
1563 --interp-prefix=PREFIX where to find shared libraries, etc.
1564 use %M for cpu name [$interp_prefix]
1565 --target-list=LIST set target list (default: build everything)
1566$(echo Available targets: $default_target_list | \
1567 fold -s -w 53 | sed -e 's/^/ /')
1568
1569Advanced options (experts only):
1570 --source-path=PATH path of source code [$source_path]
1571 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1572 --cc=CC use C compiler CC [$cc]
1573 --iasl=IASL use ACPI compiler IASL [$iasl]
1574 --host-cc=CC use C compiler CC [$host_cc] for code run at
1575 build time
1576 --cxx=CXX use C++ compiler CXX [$cxx]
1577 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1578 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001579 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001580 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001581 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001582 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001583 --make=MAKE use specified make [$make]
1584 --install=INSTALL use specified install [$install]
1585 --python=PYTHON use specified python [$python]
1586 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001587 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001588 --static enable static build [$static]
1589 --mandir=PATH install man pages in PATH
1590 --datadir=PATH install firmware in PATH$confsuffix
1591 --docdir=PATH install documentation in PATH$confsuffix
1592 --bindir=PATH install binaries in PATH
1593 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001594 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001595 --sysconfdir=PATH install config in PATH$confsuffix
1596 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001597 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001598 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001599 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001600 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001601 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001602 --disable-strip disable stripping binaries
1603 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001604 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001605 --audio-drv-list=LIST set audio drivers list:
1606 Available drivers: $audio_possible_drivers
1607 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1608 --block-drv-rw-whitelist=L
1609 set block driver read-write whitelist
1610 (affects only QEMU, not qemu-img)
1611 --block-drv-ro-whitelist=L
1612 set block driver read-only whitelist
1613 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001614 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001615 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001616 --with-trace-file=NAME Full PATH,NAME of file to store traces
1617 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001618 --disable-slirp disable SLIRP userspace network connectivity
1619 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001620 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001621 --oss-lib path to OSS library
1622 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001623 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001624 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001625 --enable-gcov enable test coverage analysis with gcov
1626 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001627 --disable-blobs disable installing provided firmware blobs
1628 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1629 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001630 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001631 --enable-gprof QEMU profiling with gprof
1632 --enable-profiler profiler support
1633 --enable-xen-pv-domain-build
1634 xen pv domain builder
1635 --enable-debug-stack-usage
1636 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001637
1638Optional features, enabled with --enable-FEATURE and
1639disabled with --disable-FEATURE, default is enabled if available:
1640
1641 system all system emulation targets
1642 user supported user emulation targets
1643 linux-user all linux usermode emulation targets
1644 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001645 docs build documentation
1646 guest-agent build the QEMU Guest Agent
1647 guest-agent-msi build guest agent Windows MSI installation package
1648 pie Position Independent Executables
1649 modules modules support
1650 debug-tcg TCG debugging (default is disabled)
1651 debug-info debugging information
1652 sparse sparse checker
1653
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001654 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001655 nettle nettle cryptography support
1656 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001657 sdl SDL UI
1658 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1659 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001660 vte vte support for the gtk UI
1661 curses curses UI
1662 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001663 vnc-sasl SASL encryption for VNC server
1664 vnc-jpeg JPEG lossy compression for VNC server
1665 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001666 cocoa Cocoa UI (Mac OS X only)
1667 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001668 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001669 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001670 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001671 brlapi BrlAPI (Braile)
1672 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001673 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001674 fdt fdt device tree
1675 bluez bluez stack connectivity
1676 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001677 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001678 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001679 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001680 rdma Enable RDMA-based migration
1681 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001682 vde support for vde network
1683 netmap support for netmap network
1684 linux-aio Linux AIO support
1685 cap-ng libcap-ng support
1686 attr attr and xattr support
1687 vhost-net vhost-net acceleration support
Gonglei042cea22018-03-01 21:46:28 +08001688 vhost-crypto vhost-crypto acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001689 spice spice
1690 rbd rados block device (rbd)
1691 libiscsi iscsi support
1692 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001693 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001694 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001695 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001696 usb-redir usb network redirection support
1697 lzo support of lzo compression library
1698 snappy support of snappy compression library
1699 bzip2 support of bzip2 compression library
1700 (for reading bzip2-compressed dmg images)
1701 seccomp seccomp support
1702 coroutine-pool coroutine freelist (better performance)
1703 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001704 tpm TPM support
1705 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001706 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001707 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001708 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001709 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001710 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001711 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001712 vhost-vsock virtio sockets device support
1713 opengl opengl support
1714 virglrenderer virgl rendering support
1715 xfsctl xfsctl support
1716 qom-cast-debug cast debugging support
1717 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001718 vxhs Veritas HyperScale vDisk backend support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001719 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001720 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001721 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001722 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001723 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001724
1725NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001726EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001727exit 0
pbrookaf5db582006-04-08 14:26:41 +00001728fi
1729
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001730if ! has $python; then
1731 error_exit "Python not found. Use --python=/path/to/python"
1732fi
1733
1734# Note that if the Python conditional here evaluates True we will exit
1735# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001736if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1737 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001738 "Use --python=/path/to/python to specify a supported Python."
1739fi
1740
1741# Suppress writing compiled files
1742python="$python -B"
1743
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001744# Check that the C compiler works. Doing this here before testing
1745# the host CPU ensures that we had a valid CC to autodetect the
1746# $cpu var (and we should bail right here if that's not the case).
1747# It also allows the help message to be printed without a CC.
1748write_c_skeleton;
1749if compile_object ; then
1750 : C compiler works ok
1751else
1752 error_exit "\"$cc\" either does not exist or does not work"
1753fi
1754if ! compile_prog ; then
1755 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1756fi
1757
Peter Maydell359bc952011-12-24 13:07:25 +00001758# Now we have handled --enable-tcg-interpreter and know we're not just
1759# printing the help message, bail out if the host CPU isn't supported.
1760if test "$ARCH" = "unknown"; then
1761 if test "$tcg_interpreter" = "yes" ; then
1762 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001763 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001764 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001765 fi
1766fi
1767
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001768# Consult white-list to determine whether to enable werror
1769# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001770if test -z "$werror" ; then
1771 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001772 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001773 werror="yes"
1774 else
1775 werror="no"
1776 fi
1777fi
1778
Peter Maydellfb59dab2017-03-28 14:01:52 +01001779if test "$bogus_os" = "yes"; then
1780 # Now that we know that we're not printing the help and that
1781 # the compiler works (so the results of the check_defines we used
1782 # to identify the OS are reliable), if we didn't recognize the
1783 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001784 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001785fi
1786
Paolo Bonzini8d050952010-12-23 11:43:52 +01001787gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1788gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001789gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001790gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001791gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001792gcc_flags="-Wno-string-plus-int $gcc_flags"
Gerd Hoffmann0e39c4a2018-03-09 14:59:45 +01001793gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001794# Note that we do not add -Werror to gcc_flags here, because that would
1795# enable it for all configure tests. If a configure test failed due
1796# to -Werror this would just silently disable some features,
1797# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001798
1799cc_has_warning_flag() {
1800 write_c_skeleton;
1801
Peter Maydella1d29d62012-10-27 22:19:07 +01001802 # Use the positive sense of the flag when testing for -Wno-wombat
1803 # support (gcc will happily accept the -Wno- form of unknown
1804 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001805 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1806 compile_prog "-Werror $optflag" ""
1807}
1808
1809for flag in $gcc_flags; do
1810 if cc_has_warning_flag $flag ; then
1811 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001812 fi
1813done
1814
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001815if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001816 cat > $TMPC << EOF
1817int main(int argc, char *argv[])
1818{
1819 char arr[64], *p = arr, *c = argv[0];
1820 while (*c) {
1821 *p++ = *c++;
1822 }
1823 return 0;
1824}
1825EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001826 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001827 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001828 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001829 # We need to check both a compile and a link, since some compiler
1830 # setups fail only on a .c->.o compile and some only at link time
1831 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1832 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001833 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001834 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001835 break
1836 fi
1837 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001838 if test "$stack_protector" = yes; then
1839 if test $sp_on = 0; then
1840 error_exit "Stack protector not supported"
1841 fi
1842 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001843fi
1844
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001845# Disable -Wmissing-braces on older compilers that warn even for
1846# the "universal" C zero initializer {0}.
1847cat > $TMPC << EOF
1848struct {
1849 int a[2];
1850} x = {0};
1851EOF
1852if compile_object "-Werror" "" ; then
1853 :
1854else
1855 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1856fi
1857
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001858# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1859# large functions that use global variables. The bug is in all releases of
1860# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1861# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1862cat > $TMPC << EOF
1863#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1864int main(void) { return 0; }
1865#else
1866#error No bug in this compiler.
1867#endif
1868EOF
1869if compile_prog "-Werror -fno-gcse" "" ; then
1870 TRANSLATE_OPT_CFLAGS=-fno-gcse
1871fi
1872
Avi Kivity40d64442011-11-15 20:12:17 +02001873if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001874 if test "$modules" = "yes" ; then
1875 error_exit "static and modules are mutually incompatible"
1876 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001877 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001878 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001879 else
1880 pie="no"
1881 fi
1882fi
1883
Emilio G. Cota768b7852015-04-29 13:09:02 +02001884# Unconditional check for compiler __thread support
1885 cat > $TMPC << EOF
1886static __thread int tls_var;
1887int main(void) { return tls_var; }
1888EOF
1889
1890if ! compile_prog "-Werror" "" ; then
1891 error_exit "Your compiler does not support the __thread specifier for " \
1892 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1893fi
1894
Avi Kivity40d64442011-11-15 20:12:17 +02001895if test "$pie" = ""; then
1896 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001897 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001898 ;;
1899 *)
1900 pie="no"
1901 ;;
1902 esac
1903fi
1904
1905if test "$pie" != "no" ; then
1906 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001907
1908#ifdef __linux__
1909# define THREAD __thread
1910#else
1911# define THREAD
1912#endif
1913
1914static THREAD int tls_var;
1915
1916int main(void) { return tls_var; }
1917
Avi Kivity40d64442011-11-15 20:12:17 +02001918EOF
1919 if compile_prog "-fPIE -DPIE" "-pie"; then
1920 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1921 LDFLAGS="-pie $LDFLAGS"
1922 pie="yes"
1923 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1924 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1925 fi
1926 else
1927 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001928 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001929 else
1930 echo "Disabling PIE due to missing toolchain support"
1931 pie="no"
1932 fi
1933 fi
Brad46eef332013-12-10 19:49:08 -05001934
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001935 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001936 CFLAGS_NOPIE="-fno-pie"
1937 LDFLAGS_NOPIE="-nopie"
1938 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001939fi
1940
Paolo Bonzini09dada42013-04-17 16:26:47 +02001941##########################################
1942# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1943# use i686 as default anyway, but for those that don't, an explicit
1944# specification is necessary
1945
1946if test "$cpu" = "i386"; then
1947 cat > $TMPC << EOF
1948static int sfaa(int *ptr)
1949{
1950 return __sync_fetch_and_and(ptr, 0);
1951}
1952
1953int main(void)
1954{
1955 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001956 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001957 sfaa(&val);
1958 return val;
1959}
1960EOF
1961 if ! compile_prog "" "" ; then
1962 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1963 fi
1964fi
1965
1966#########################################
bellardec530c82006-04-25 22:36:06 +00001967# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001968
bellardec530c82006-04-25 22:36:06 +00001969if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001970 if has $install; then
1971 :
1972 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001973 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1974 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1975 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001976 fi
Stefan Weil89138852016-05-16 15:10:20 +02001977 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001978 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1979 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1980 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001981 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001982 if has ar; then
1983 :
1984 else
bellardec530c82006-04-25 22:36:06 +00001985 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001986 error_exit "No path includes ar" \
1987 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001988 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001989 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001990 fi
ths5fafdf22007-09-16 21:08:06 +00001991fi
bellardec530c82006-04-25 22:36:06 +00001992
Stefan Weilafb63eb2012-09-26 22:04:38 +02001993if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001994 for target in $default_target_list; do
1995 supported_target $target 2>/dev/null && \
1996 target_list="$target_list $target"
1997 done
1998 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05001999else
Stefan Weil89138852016-05-16 15:10:20 +02002000 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002001 for target in $target_list; do
2002 # Check that we recognised the target name; this allows a more
2003 # friendly error message than if we let it fall through.
2004 case " $default_target_list " in
2005 *" $target "*)
2006 ;;
2007 *)
2008 error_exit "Unknown target name '$target'"
2009 ;;
2010 esac
2011 supported_target $target || exit 1
2012 done
bellard5327cf42005-01-10 23:18:50 +00002013fi
Peter Maydell25b48332013-05-20 16:16:16 +01002014
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002015# see if system emulation was really requested
2016case " $target_list " in
2017 *"-softmmu "*) softmmu=yes
2018 ;;
2019 *) softmmu=no
2020 ;;
2021esac
bellard5327cf42005-01-10 23:18:50 +00002022
Juan Quintela249247c2009-08-12 18:20:25 +02002023feature_not_found() {
2024 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002025 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002026
Peter Maydell76ad07a2013-04-08 12:11:26 +01002027 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002028 "configure was not able to find it." \
2029 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002030}
2031
bellard7d132992003-03-06 23:23:54 +00002032# ---
2033# big/little endian test
2034cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002035short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2036short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2037extern int foo(short *, short *);
2038int main(int argc, char *argv[]) {
2039 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002040}
2041EOF
2042
Mike Frysinger61cc9192013-06-30 23:30:18 -04002043if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002044 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002045 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002046 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002047 bigendian="no"
2048 else
2049 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002050 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002051else
2052 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002053fi
2054
Juan Quintelab0a47e72009-08-12 18:29:49 +02002055##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002056# cocoa implies not SDL or GTK
2057# (the cocoa UI code currently assumes it is always the active UI
2058# and doesn't interact well with other UI frontend code)
2059if test "$cocoa" = "yes"; then
2060 if test "$sdl" = "yes"; then
2061 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2062 fi
2063 if test "$gtk" = "yes"; then
2064 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2065 fi
2066 gtk=no
2067 sdl=no
2068fi
2069
Eric Blake6b39b062016-10-11 10:46:23 -05002070# Some versions of Mac OS X incorrectly define SIZE_MAX
2071cat > $TMPC << EOF
2072#include <stdint.h>
2073#include <stdio.h>
2074int main(int argc, char *argv[]) {
2075 return printf("%zu", SIZE_MAX);
2076}
2077EOF
2078have_broken_size_max=no
2079if ! compile_object -Werror ; then
2080 have_broken_size_max=yes
2081fi
2082
Peter Maydella30878e2015-08-14 16:10:52 +01002083##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002084# L2TPV3 probe
2085
2086cat > $TMPC <<EOF
2087#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002088#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002089int main(void) { return sizeof(struct mmsghdr); }
2090EOF
2091if compile_prog "" "" ; then
2092 l2tpv3=yes
2093else
2094 l2tpv3=no
2095fi
2096
2097##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002098# MinGW / Mingw-w64 localtime_r/gmtime_r check
2099
2100if test "$mingw32" = "yes"; then
2101 # Some versions of MinGW / Mingw-w64 lack localtime_r
2102 # and gmtime_r entirely.
2103 #
2104 # Some versions of Mingw-w64 define a macro for
2105 # localtime_r/gmtime_r.
2106 #
2107 # Some versions of Mingw-w64 will define functions
2108 # for localtime_r/gmtime_r, but only if you have
2109 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2110 # though, unistd.h and pthread.h both define
2111 # that for you.
2112 #
2113 # So this #undef localtime_r and #include <unistd.h>
2114 # are not in fact redundant.
2115cat > $TMPC << EOF
2116#include <unistd.h>
2117#include <time.h>
2118#undef localtime_r
2119int main(void) { localtime_r(NULL, NULL); return 0; }
2120EOF
2121 if compile_prog "" "" ; then
2122 localtime_r="yes"
2123 else
2124 localtime_r="no"
2125 fi
2126fi
2127
2128##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002129# pkg-config probe
2130
2131if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002132 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002133fi
2134
2135##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002136# NPTL probe
2137
Peter Maydell24cb36a2013-07-16 18:45:00 +01002138if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002139 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002140#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002141#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002142int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002143#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2144#error bork
2145#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002146 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002147}
2148EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002149 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002150 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002151 fi
pbrookbd0c5662008-05-29 14:34:11 +00002152fi
2153
balrogac629222008-10-11 09:56:04 +00002154##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002155# lzo check
2156
2157if test "$lzo" != "no" ; then
2158 cat > $TMPC << EOF
2159#include <lzo/lzo1x.h>
2160int main(void) { lzo_version(); return 0; }
2161EOF
2162 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002163 libs_softmmu="$libs_softmmu -llzo2"
2164 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002165 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002166 if test "$lzo" = "yes"; then
2167 feature_not_found "liblzo2" "Install liblzo2 devel"
2168 fi
2169 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002170 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002171fi
2172
2173##########################################
2174# snappy check
2175
2176if test "$snappy" != "no" ; then
2177 cat > $TMPC << EOF
2178#include <snappy-c.h>
2179int main(void) { snappy_max_compressed_length(4096); return 0; }
2180EOF
2181 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002182 libs_softmmu="$libs_softmmu -lsnappy"
2183 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002184 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002185 if test "$snappy" = "yes"; then
2186 feature_not_found "libsnappy" "Install libsnappy devel"
2187 fi
2188 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002189 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002190fi
2191
2192##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002193# bzip2 check
2194
2195if test "$bzip2" != "no" ; then
2196 cat > $TMPC << EOF
2197#include <bzlib.h>
2198int main(void) { BZ2_bzlibVersion(); return 0; }
2199EOF
2200 if compile_prog "" "-lbz2" ; then
2201 bzip2="yes"
2202 else
2203 if test "$bzip2" = "yes"; then
2204 feature_not_found "libbzip2" "Install libbzip2 devel"
2205 fi
2206 bzip2="no"
2207 fi
2208fi
2209
2210##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002211# libseccomp check
2212
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002213libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002214if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002215 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002216 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002217 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002218 arm|aarch64)
2219 libseccomp_minver="2.2.3"
2220 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002221 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002222 libseccomp_minver="2.3.0"
2223 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002224 *)
2225 libseccomp_minver=""
2226 ;;
2227 esac
2228
2229 if test "$libseccomp_minver" != "" &&
2230 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002231 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2232 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002233 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002234 else
Andrew Jones693e5912015-09-30 11:59:18 -04002235 if test "$seccomp" = "yes" ; then
2236 if test "$libseccomp_minver" != "" ; then
2237 feature_not_found "libseccomp" \
2238 "Install libseccomp devel >= $libseccomp_minver"
2239 else
2240 feature_not_found "libseccomp" \
2241 "libseccomp is not supported for host cpu $cpu"
2242 fi
2243 fi
2244 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002245 fi
2246fi
2247##########################################
aliguorie37630c2009-04-22 15:19:10 +00002248# xen probe
2249
Juan Quintelafc321b42009-08-12 18:29:55 +02002250if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002251 # Check whether Xen library path is specified via --extra-ldflags to avoid
2252 # overriding this setting with pkg-config output. If not, try pkg-config
2253 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002254
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002255 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2256 $pkg_config --exists xencontrol ; then
2257 xen_ctrl_version="$(printf '%d%02d%02d' \
2258 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2259 xen=yes
2260 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2261 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002262 if $pkg_config --exists xentoolcore; then
2263 xen_pc="$xen_pc xentoolcore"
2264 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002265 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2266 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2267 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2268 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002269
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002270 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002271 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002272
2273 # First we test whether Xen headers and libraries are available.
2274 # If no, we are done and there is no Xen support.
2275 # If yes, more tests are run to detect the Xen version.
2276
2277 # Xen (any)
2278 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002279#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002280int main(void) {
2281 return 0;
2282}
2283EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002284 if ! compile_prog "" "$xen_libs" ; then
2285 # Xen not found
2286 if test "$xen" = "yes" ; then
2287 feature_not_found "xen" "Install xen devel"
2288 fi
2289 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002290
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002291 # Xen unstable
2292 elif
2293 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002294#undef XC_WANT_COMPAT_DEVICEMODEL_API
2295#define __XEN_TOOLS__
2296#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002297#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002298int main(void) {
2299 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002300 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002301
2302 xd = xendevicemodel_open(0, 0);
2303 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2304
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002305 xfmem = xenforeignmemory_open(0, 0);
2306 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2307
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002308 return 0;
2309}
2310EOF
2311 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2312 then
2313 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2314 xen_ctrl_version=41100
2315 xen=yes
2316 elif
2317 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002318#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2319#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002320#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002321int main(void) {
2322 xenforeignmemory_handle *xfmem;
2323
2324 xfmem = xenforeignmemory_open(0, 0);
2325 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002326 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002327
2328 return 0;
2329}
2330EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002331 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002332 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002333 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002334 xen_ctrl_version=41000
2335 xen=yes
2336 elif
2337 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002338#undef XC_WANT_COMPAT_DEVICEMODEL_API
2339#define __XEN_TOOLS__
2340#include <xendevicemodel.h>
2341int main(void) {
2342 xendevicemodel_handle *xd;
2343
2344 xd = xendevicemodel_open(0, 0);
2345 xendevicemodel_close(xd);
2346
2347 return 0;
2348}
2349EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002350 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2351 then
2352 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2353 xen_ctrl_version=40900
2354 xen=yes
2355 elif
2356 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002357/*
2358 * If we have stable libs the we don't want the libxc compat
2359 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002360 *
2361 * Also, check if xengnttab_grant_copy_segment_t is defined and
2362 * grant copy operation is implemented.
2363 */
2364#undef XC_WANT_COMPAT_EVTCHN_API
2365#undef XC_WANT_COMPAT_GNTTAB_API
2366#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2367#include <xenctrl.h>
2368#include <xenstore.h>
2369#include <xenevtchn.h>
2370#include <xengnttab.h>
2371#include <xenforeignmemory.h>
2372#include <stdint.h>
2373#include <xen/hvm/hvm_info_table.h>
2374#if !defined(HVM_MAX_VCPUS)
2375# error HVM_MAX_VCPUS not defined
2376#endif
2377int main(void) {
2378 xc_interface *xc = NULL;
2379 xenforeignmemory_handle *xfmem;
2380 xenevtchn_handle *xe;
2381 xengnttab_handle *xg;
2382 xen_domain_handle_t handle;
2383 xengnttab_grant_copy_segment_t* seg = NULL;
2384
2385 xs_daemon_open();
2386
2387 xc = xc_interface_open(0, 0, 0);
2388 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2389 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2390 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2391 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2392 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2393
2394 xfmem = xenforeignmemory_open(0, 0);
2395 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2396
2397 xe = xenevtchn_open(0, 0);
2398 xenevtchn_fd(xe);
2399
2400 xg = xengnttab_open(0, 0);
2401 xengnttab_grant_copy(xg, 0, seg);
2402
2403 return 0;
2404}
2405EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002406 compile_prog "" "$xen_libs $xen_stable_libs"
2407 then
2408 xen_ctrl_version=40800
2409 xen=yes
2410 elif
2411 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002412/*
2413 * If we have stable libs the we don't want the libxc compat
2414 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002415 */
2416#undef XC_WANT_COMPAT_EVTCHN_API
2417#undef XC_WANT_COMPAT_GNTTAB_API
2418#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2419#include <xenctrl.h>
2420#include <xenstore.h>
2421#include <xenevtchn.h>
2422#include <xengnttab.h>
2423#include <xenforeignmemory.h>
2424#include <stdint.h>
2425#include <xen/hvm/hvm_info_table.h>
2426#if !defined(HVM_MAX_VCPUS)
2427# error HVM_MAX_VCPUS not defined
2428#endif
2429int main(void) {
2430 xc_interface *xc = NULL;
2431 xenforeignmemory_handle *xfmem;
2432 xenevtchn_handle *xe;
2433 xengnttab_handle *xg;
2434 xen_domain_handle_t handle;
2435
2436 xs_daemon_open();
2437
2438 xc = xc_interface_open(0, 0, 0);
2439 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2440 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2441 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2442 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2443 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2444
2445 xfmem = xenforeignmemory_open(0, 0);
2446 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2447
2448 xe = xenevtchn_open(0, 0);
2449 xenevtchn_fd(xe);
2450
2451 xg = xengnttab_open(0, 0);
2452 xengnttab_map_grant_ref(xg, 0, 0, 0);
2453
2454 return 0;
2455}
2456EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002457 compile_prog "" "$xen_libs $xen_stable_libs"
2458 then
2459 xen_ctrl_version=40701
2460 xen=yes
2461 elif
2462 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002463#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002464#include <stdint.h>
2465int main(void) {
2466 xc_interface *xc = NULL;
2467 xen_domain_handle_t handle;
2468 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2469 return 0;
2470}
2471EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002472 compile_prog "" "$xen_libs"
2473 then
2474 xen_ctrl_version=40700
2475 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002476
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002477 # Xen 4.6
2478 elif
2479 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002480#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002481#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002482#include <stdint.h>
2483#include <xen/hvm/hvm_info_table.h>
2484#if !defined(HVM_MAX_VCPUS)
2485# error HVM_MAX_VCPUS not defined
2486#endif
2487int main(void) {
2488 xc_interface *xc;
2489 xs_daemon_open();
2490 xc = xc_interface_open(0, 0, 0);
2491 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2492 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002493 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002494 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002495 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002496 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002497 return 0;
2498}
2499EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002500 compile_prog "" "$xen_libs"
2501 then
2502 xen_ctrl_version=40600
2503 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002504
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002505 # Xen 4.5
2506 elif
2507 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002508#include <xenctrl.h>
2509#include <xenstore.h>
2510#include <stdint.h>
2511#include <xen/hvm/hvm_info_table.h>
2512#if !defined(HVM_MAX_VCPUS)
2513# error HVM_MAX_VCPUS not defined
2514#endif
2515int main(void) {
2516 xc_interface *xc;
2517 xs_daemon_open();
2518 xc = xc_interface_open(0, 0, 0);
2519 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2520 xc_gnttab_open(NULL, 0);
2521 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2522 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002523 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2524 return 0;
2525}
2526EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002527 compile_prog "" "$xen_libs"
2528 then
2529 xen_ctrl_version=40500
2530 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002531
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002532 elif
2533 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002534#include <xenctrl.h>
2535#include <xenstore.h>
2536#include <stdint.h>
2537#include <xen/hvm/hvm_info_table.h>
2538#if !defined(HVM_MAX_VCPUS)
2539# error HVM_MAX_VCPUS not defined
2540#endif
2541int main(void) {
2542 xc_interface *xc;
2543 xs_daemon_open();
2544 xc = xc_interface_open(0, 0, 0);
2545 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2546 xc_gnttab_open(NULL, 0);
2547 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2548 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002549 return 0;
2550}
2551EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002552 compile_prog "" "$xen_libs"
2553 then
2554 xen_ctrl_version=40200
2555 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002556
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002557 else
2558 if test "$xen" = "yes" ; then
2559 feature_not_found "xen (unsupported version)" \
2560 "Install a supported xen (xen 4.2 or newer)"
2561 fi
2562 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002563 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002564
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002565 if test "$xen" = yes; then
2566 if test $xen_ctrl_version -ge 40701 ; then
2567 libs_softmmu="$xen_stable_libs $libs_softmmu"
2568 fi
2569 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002570 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002571 fi
aliguorie37630c2009-04-22 15:19:10 +00002572fi
2573
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002574if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002575 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002576 xen_pci_passthrough=yes
2577 else
2578 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002579 error_exit "User requested feature Xen PCI Passthrough" \
2580 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002581 fi
2582 xen_pci_passthrough=no
2583 fi
2584fi
2585
Ian Campbell64a7ad62016-01-15 13:23:44 +00002586if test "$xen_pv_domain_build" = "yes" &&
2587 test "$xen" != "yes"; then
2588 error_exit "User requested Xen PV domain builder support" \
2589 "which requires Xen support."
2590fi
2591
aliguorie37630c2009-04-22 15:19:10 +00002592##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002593# Windows Hypervisor Platform accelerator (WHPX) check
2594if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002595 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002596 whpx="yes"
2597 else
2598 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002599 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002600 fi
2601 whpx="no"
2602 fi
2603fi
2604
2605##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002606# Sparse probe
2607if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002608 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002609 sparse=yes
2610 else
2611 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002612 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002613 fi
2614 sparse=no
2615 fi
2616fi
2617
2618##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002619# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002620if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002621 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002622 x11_cflags=$($pkg_config --cflags x11)
2623 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002624fi
2625
2626##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002627# GTK probe
2628
2629if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002630 gtkpackage="gtk+-3.0"
2631 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002632 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002633 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002634 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2635 gtk_libs=$($pkg_config --libs $gtkpackage)
2636 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002637 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002638 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002639 gtk_cflags="$gtk_cflags $x11_cflags"
2640 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002641 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002642 gtk="yes"
2643 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002644 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002645 else
2646 gtk="no"
2647 fi
2648fi
2649
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002650
2651##########################################
2652# GNUTLS probe
2653
2654if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002655 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002656 gnutls_cflags=$($pkg_config --cflags gnutls)
2657 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002658 libs_softmmu="$gnutls_libs $libs_softmmu"
2659 libs_tools="$gnutls_libs $libs_tools"
2660 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2661 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002662 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002663 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002664 else
2665 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002666 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002667fi
2668
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002669
2670# If user didn't give a --disable/enable-gcrypt flag,
2671# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002672# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002673if test -z "$gcrypt"
2674then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002675 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002676 then
2677 gcrypt="no"
2678 fi
2679fi
2680
2681# If user didn't give a --disable/enable-nettle flag,
2682# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002683# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002684if test -z "$nettle"
2685then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002686 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002687 then
2688 nettle="no"
2689 fi
2690fi
2691
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002692has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002693 if ! has "libgcrypt-config"
2694 then
2695 return 1
2696 fi
2697
2698 if test -n "$cross_prefix"
2699 then
Stefan Weil89138852016-05-16 15:10:20 +02002700 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002701 if test "$host-" != $cross_prefix
2702 then
2703 return 1
2704 fi
2705 fi
2706
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002707 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2708 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2709
2710 if test $maj != 1 || test $min -lt 5
2711 then
2712 return 1
2713 fi
2714
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002715 return 0
2716}
2717
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002718
2719if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002720 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002721 nettle_cflags=$($pkg_config --cflags nettle)
2722 nettle_libs=$($pkg_config --libs nettle)
2723 nettle_version=$($pkg_config --modversion nettle)
2724 libs_softmmu="$nettle_libs $libs_softmmu"
2725 libs_tools="$nettle_libs $libs_tools"
2726 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2727 nettle="yes"
2728
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002729 if test -z "$gcrypt"; then
2730 gcrypt="no"
2731 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002732 else
2733 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002734 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002735 else
2736 nettle="no"
2737 fi
2738 fi
2739fi
2740
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002741if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002742 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002743 gcrypt_cflags=$(libgcrypt-config --cflags)
2744 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002745 # Debian has remove -lgpg-error from libgcrypt-config
2746 # as it "spreads unnecessary dependencies" which in
2747 # turn breaks static builds...
2748 if test "$static" = "yes"
2749 then
2750 gcrypt_libs="$gcrypt_libs -lgpg-error"
2751 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002752 libs_softmmu="$gcrypt_libs $libs_softmmu"
2753 libs_tools="$gcrypt_libs $libs_tools"
2754 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002755 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002756
2757 cat > $TMPC << EOF
2758#include <gcrypt.h>
2759int main(void) {
2760 gcry_mac_hd_t handle;
2761 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2762 GCRY_MAC_FLAG_SECURE, NULL);
2763 return 0;
2764}
2765EOF
2766 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2767 gcrypt_hmac=yes
2768 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002769 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002770 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002771 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002772 else
2773 gcrypt="no"
2774 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002775 fi
2776fi
2777
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002778
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002779if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2780then
2781 error_exit "Only one of gcrypt & nettle can be enabled"
2782fi
2783
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002784##########################################
2785# libtasn1 - only for the TLS creds/session test suite
2786
2787tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002788tasn1_cflags=""
2789tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002790if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002791 tasn1_cflags=$($pkg_config --cflags libtasn1)
2792 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002793else
2794 tasn1=no
2795fi
2796
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002797
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002798##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002799# getifaddrs (for tests/test-io-channel-socket )
2800
2801have_ifaddrs_h=yes
2802if ! check_include "ifaddrs.h" ; then
2803 have_ifaddrs_h=no
2804fi
2805
2806##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002807# VTE probe
2808
2809if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002810 vteminversion="0.32.0"
2811 if $pkg_config --exists "vte-2.91"; then
2812 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002813 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002814 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002815 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002816 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002817 vte_cflags=$($pkg_config --cflags $vtepackage)
2818 vte_libs=$($pkg_config --libs $vtepackage)
2819 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002820 vte="yes"
2821 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002822 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002823 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002824 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002825 fi
2826fi
2827
2828##########################################
bellard11d9f692004-04-02 20:55:59 +00002829# SDL probe
2830
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002831# Look for sdl configuration program (pkg-config or sdl-config). Try
2832# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002833
Peter Xuc6093a02018-04-10 13:40:34 +08002834sdl_probe ()
2835{
2836 sdl_too_old=no
2837 if test "$sdlabi" = ""; then
2838 if $pkg_config --exists "sdl2"; then
2839 sdlabi=2.0
2840 elif $pkg_config --exists "sdl"; then
2841 sdlabi=1.2
2842 else
2843 sdlabi=2.0
2844 fi
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002845 fi
bellard11d9f692004-04-02 20:55:59 +00002846
Peter Xuc6093a02018-04-10 13:40:34 +08002847 if test $sdlabi = "2.0"; then
2848 sdl_config=$sdl2_config
2849 sdlname=sdl2
2850 sdlconfigname=sdl2_config
2851 elif test $sdlabi = "1.2"; then
2852 sdlname=sdl
2853 sdlconfigname=sdl_config
2854 else
2855 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2856 fi
2857
2858 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2859 sdl_config=$sdlconfigname
2860 fi
2861
2862 if $pkg_config $sdlname --exists; then
2863 sdlconfig="$pkg_config $sdlname"
2864 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2865 elif has ${sdl_config}; then
2866 sdlconfig="$sdl_config"
2867 sdlversion=$($sdlconfig --version)
2868 else
2869 if test "$sdl" = "yes" ; then
2870 feature_not_found "sdl" "Install SDL2-devel"
2871 fi
2872 sdl=no
2873 # no need to do the rest
2874 return
2875 fi
2876 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2877 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2878 fi
2879
Juan Quintelaac119f92009-07-27 16:13:15 +02002880 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002881#include <SDL.h>
2882#undef main /* We don't want SDL to override our main() */
2883int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2884EOF
Stefan Weil89138852016-05-16 15:10:20 +02002885 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002886 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002887 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002888 if $pkg_config $sdlname --exists; then
2889 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2890 else
2891 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2892 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002893 else
Stefan Weil89138852016-05-16 15:10:20 +02002894 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002895 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002896 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002897 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002898 sdl_too_old=yes
2899 else
Peter Maydella30878e2015-08-14 16:10:52 +01002900 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002901 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002902
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002903 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002904 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002905 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002906 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2907 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002908 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002909 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002910 :
2911 else
2912 sdl=no
2913 fi
2914 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002915 else # sdl not found
2916 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002917 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002918 fi
2919 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002920 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08002921}
2922
2923if test "$sdl" != "no" ; then
2924 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02002925fi
bellard11d9f692004-04-02 20:55:59 +00002926
aliguori5368a422009-03-03 17:37:21 +00002927if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002928 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002929#include <SDL.h>
2930#if defined(SDL_VIDEO_DRIVER_X11)
2931#include <X11/XKBlib.h>
2932#else
2933#error No x11 support
2934#endif
2935int main(void) { return 0; }
2936EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002937 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002938 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002939 sdl_cflags="$sdl_cflags $x11_cflags"
2940 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002941 fi
aliguori5368a422009-03-03 17:37:21 +00002942fi
2943
ths8f28f3f2007-01-05 21:25:54 +00002944##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002945# RDMA needs OpenFabrics libraries
2946if test "$rdma" != "no" ; then
2947 cat > $TMPC <<EOF
2948#include <rdma/rdma_cma.h>
2949int main(void) { return 0; }
2950EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002951 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04002952 if compile_prog "" "$rdma_libs" ; then
2953 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002954 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04002955 else
2956 if test "$rdma" = "yes" ; then
2957 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002958 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04002959 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002960 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04002961 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2962 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2963 fi
2964 rdma="no"
2965 fi
2966fi
2967
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03002968##########################################
2969# PVRDMA detection
2970
2971cat > $TMPC <<EOF &&
2972#include <sys/mman.h>
2973
2974int
2975main(void)
2976{
2977 char buf = 0;
2978 void *addr = &buf;
2979 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2980
2981 return 0;
2982}
2983EOF
2984
2985if test "$rdma" = "yes" ; then
2986 case "$pvrdma" in
2987 "")
2988 if compile_prog "" ""; then
2989 pvrdma="yes"
2990 else
2991 pvrdma="no"
2992 fi
2993 ;;
2994 "yes")
2995 if ! compile_prog "" ""; then
2996 error_exit "PVRDMA is not supported since mremap is not implemented"
2997 fi
2998 pvrdma="yes"
2999 ;;
3000 "no")
3001 pvrdma="no"
3002 ;;
3003 esac
3004else
3005 if test "$pvrdma" = "yes" ; then
3006 error_exit "PVRDMA requires rdma suppport"
3007 fi
3008 pvrdma="no"
3009fi
ths8d5d2d42007-08-25 01:37:51 +00003010
3011##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003012# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003013if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003014 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003015#include <sasl/sasl.h>
3016#include <stdio.h>
3017int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3018EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003019 # Assuming Cyrus-SASL installed in /usr prefix
3020 vnc_sasl_cflags=""
3021 vnc_sasl_libs="-lsasl2"
3022 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3023 vnc_sasl=yes
3024 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003025 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003026 else
3027 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003028 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003029 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003030 vnc_sasl=no
3031 fi
aliguori2f9606b2009-03-06 20:27:28 +00003032fi
3033
3034##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003035# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003036if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003037cat > $TMPC <<EOF
3038#include <stdio.h>
3039#include <jpeglib.h>
3040int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3041EOF
3042 vnc_jpeg_cflags=""
3043 vnc_jpeg_libs="-ljpeg"
3044 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3045 vnc_jpeg=yes
3046 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003047 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003048 else
3049 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003050 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003051 fi
3052 vnc_jpeg=no
3053 fi
3054fi
3055
3056##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003057# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003058if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003059cat > $TMPC <<EOF
3060//#include <stdio.h>
3061#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003062#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003063int main(void) {
3064 png_structp png_ptr;
3065 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003066 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003067}
3068EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003069 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003070 vnc_png_cflags=$($pkg_config libpng --cflags)
3071 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003072 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003073 vnc_png_cflags=""
3074 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003075 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003076 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3077 vnc_png=yes
3078 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003079 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003080 else
3081 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003082 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003083 fi
3084 vnc_png=no
3085 fi
3086fi
3087
3088##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003089# xkbcommon probe
3090if test "$xkbcommon" != "no" ; then
3091 if $pkg_config xkbcommon --exists; then
3092 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3093 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3094 xkbcommon=yes
3095 else
3096 if test "$xkbcommon" = "yes" ; then
3097 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3098 fi
3099 xkbcommon=no
3100 fi
3101fi
3102
3103##########################################
aliguori76655d62009-03-06 20:27:37 +00003104# fnmatch() probe, used for ACL routines
3105fnmatch="no"
3106cat > $TMPC << EOF
3107#include <fnmatch.h>
3108int main(void)
3109{
3110 fnmatch("foo", "foo", 0);
3111 return 0;
3112}
3113EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003114if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003115 fnmatch="yes"
3116fi
3117
3118##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003119# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003120if test "$xfs" != "no" ; then
3121 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003122#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003123#include <xfs/xfs.h>
3124int main(void)
3125{
3126 xfsctl(NULL, 0, 0, NULL);
3127 return 0;
3128}
3129EOF
3130 if compile_prog "" "" ; then
3131 xfs="yes"
3132 else
3133 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003134 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003135 fi
3136 xfs=no
3137 fi
3138fi
3139
3140##########################################
ths8a16d272008-07-19 09:56:24 +00003141# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003142if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003143 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003144 cat > $TMPC << EOF
3145#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003146int main(void)
3147{
3148 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003149 char s[] = "";
3150 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003151 return 0;
3152}
ths8a16d272008-07-19 09:56:24 +00003153EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003154 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003155 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003156 else
3157 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003158 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003159 fi
3160 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003161 fi
ths8a16d272008-07-19 09:56:24 +00003162fi
3163
3164##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003165# netmap support probe
3166# Apart from looking for netmap headers, we make sure that the host API version
3167# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3168# a minor/major version number. Minor new features will be marked with values up
3169# to 15, and if something happens that requires a change to the backend we will
3170# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003171if test "$netmap" != "no" ; then
3172 cat > $TMPC << EOF
3173#include <inttypes.h>
3174#include <net/if.h>
3175#include <net/netmap.h>
3176#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003177#if (NETMAP_API < 11) || (NETMAP_API > 15)
3178#error
3179#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003180int main(void) { return 0; }
3181EOF
3182 if compile_prog "" "" ; then
3183 netmap=yes
3184 else
3185 if test "$netmap" = "yes" ; then
3186 feature_not_found "netmap"
3187 fi
3188 netmap=no
3189 fi
3190fi
3191
3192##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003193# libcap-ng library probe
3194if test "$cap_ng" != "no" ; then
3195 cap_libs="-lcap-ng"
3196 cat > $TMPC << EOF
3197#include <cap-ng.h>
3198int main(void)
3199{
3200 capng_capability_to_name(CAPNG_EFFECTIVE);
3201 return 0;
3202}
3203EOF
3204 if compile_prog "" "$cap_libs" ; then
3205 cap_ng=yes
3206 libs_tools="$cap_libs $libs_tools"
3207 else
3208 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003209 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003210 fi
3211 cap_ng=no
3212 fi
3213fi
3214
3215##########################################
malcc2de5c92008-06-28 19:13:06 +00003216# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003217
malcc2de5c92008-06-28 19:13:06 +00003218audio_drv_probe()
3219{
3220 drv=$1
3221 hdr=$2
3222 lib=$3
3223 exp=$4
3224 cfl=$5
3225 cat > $TMPC << EOF
3226#include <$hdr>
3227int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003228EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003229 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003230 :
3231 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003232 error_exit "$drv check failed" \
3233 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003234 fi
3235}
3236
Stefan Weil89138852016-05-16 15:10:20 +02003237audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003238for drv in $audio_drv_list; do
3239 case $drv in
3240 alsa)
3241 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003242 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003243 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003244 ;;
3245
malcb8e59f12008-07-02 21:03:08 +00003246 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003247 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3248 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003249 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003250 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003251 ;;
3252
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003253 sdl)
3254 if test "$sdl" = "no"; then
3255 error_exit "sdl not found or disabled, can not use sdl audio driver"
3256 fi
3257 ;;
3258
Juan Quintela997e6902009-08-03 14:46:29 +02003259 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003260 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003261 ;;
3262
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003263 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003264 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003265 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003266 ;;
3267
3268 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003269 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003270 ;;
3271
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003272 wav)
3273 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003274 ;;
3275
malce4c63a62008-07-19 16:15:16 +00003276 *)
malc1c9b2a52008-07-19 16:57:30 +00003277 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003278 error_exit "Unknown driver '$drv' selected" \
3279 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003280 }
3281 ;;
malcc2de5c92008-06-28 19:13:06 +00003282 esac
3283done
ths8f28f3f2007-01-05 21:25:54 +00003284
balrog4d3b6f62008-02-10 16:33:14 +00003285##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003286# BrlAPI probe
3287
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003288if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003289 brlapi_libs="-lbrlapi"
3290 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003291#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003292#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003293int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3294EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003295 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003296 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003297 else
3298 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003299 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003300 fi
3301 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003302 fi
3303fi
aurel322e4d9fb2008-04-08 06:01:02 +00003304
3305##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003306# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003307if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003308 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003309 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3310 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003311 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003312 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003313 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003314 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003315 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003316 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003317#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003318#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003319#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003320int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003321 wchar_t wch = L'w';
3322 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003323 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003324 addwstr(L"wide chars\n");
3325 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003326 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003327 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003328}
balrog4d3b6f62008-02-10 16:33:14 +00003329EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003330 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003331 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003332 # Make sure we get the wide character prototypes
3333 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003334 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003335 for curses_lib in $curses_lib_list; do
3336 unset IFS
3337 if compile_prog "$curses_inc" "$curses_lib" ; then
3338 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003339 break
3340 fi
3341 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003342 if test "$curses_found" = yes ; then
3343 break
3344 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003345 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003346 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003347 if test "$curses_found" = "yes" ; then
3348 curses=yes
3349 else
3350 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003351 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003352 fi
3353 curses=no
3354 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003355fi
balrog4d3b6f62008-02-10 16:33:14 +00003356
blueswir1414f0da2008-08-15 18:20:52 +00003357##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003358# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003359if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003360 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003361 curlconfig="$pkg_config libcurl"
3362 else
3363 curlconfig=curl-config
3364 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003365 cat > $TMPC << EOF
3366#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003367int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003368EOF
Stefan Weil89138852016-05-16 15:10:20 +02003369 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3370 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003371 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003372 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003373 else
3374 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003375 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003376 fi
3377 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003378 fi
3379fi # test "$curl"
3380
3381##########################################
balrogfb599c92008-09-28 23:49:55 +00003382# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003383if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003384 cat > $TMPC << EOF
3385#include <bluetooth/bluetooth.h>
3386int main(void) { return bt_error(0); }
3387EOF
Stefan Weil89138852016-05-16 15:10:20 +02003388 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3389 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003390 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003391 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003392 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003393 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003394 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003395 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003396 fi
balroge820e3f2008-09-30 02:27:44 +00003397 bluez="no"
3398 fi
balrogfb599c92008-09-28 23:49:55 +00003399fi
3400
3401##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003402# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003403
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003404glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003405glib_modules=gthread-2.0
3406if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003407 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003408fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003409
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003410# This workaround is required due to a bug in pkg-config file for glib as it
3411# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3412
3413if test "$static" = yes -a "$mingw32" = yes; then
3414 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3415fi
3416
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003417for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003418 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003419 glib_cflags=$($pkg_config --cflags $i)
3420 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003421 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003422 LIBS="$glib_libs $LIBS"
3423 libs_qga="$glib_libs $libs_qga"
3424 else
3425 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3426 fi
3427done
3428
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003429# Sanity check that the current size_t matches the
3430# size that glib thinks it should be. This catches
3431# problems on multi-arch where people try to build
3432# 32-bit QEMU while pointing at 64-bit glib headers
3433cat > $TMPC <<EOF
3434#include <glib.h>
3435#include <unistd.h>
3436
3437#define QEMU_BUILD_BUG_ON(x) \
3438 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3439
3440int main(void) {
3441 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3442 return 0;
3443}
3444EOF
3445
Stefan Weil5919e032016-04-28 23:33:41 +02003446if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003447 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3448 "You probably need to set PKG_CONFIG_LIBDIR"\
3449 "to point to the right pkg-config files for your"\
3450 "build target"
3451fi
3452
John Snowbbbf2e02015-03-25 18:57:38 -04003453# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3454cat > $TMPC << EOF
3455#include <glib.h>
3456int main(void) { return 0; }
3457EOF
3458if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3459 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3460 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3461 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3462 fi
3463fi
3464
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003465#########################################
3466# zlib check
3467
3468if test "$zlib" != "no" ; then
3469 if $pkg_config --exists zlib; then
3470 zlib_cflags=$($pkg_config --cflags zlib)
3471 zlib_libs=$($pkg_config --libs zlib)
3472 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3473 LIBS="$zlib_libs $LIBS"
3474 else
3475 cat > $TMPC << EOF
3476#include <zlib.h>
3477int main(void) { zlibVersion(); return 0; }
3478EOF
3479 if compile_prog "" "-lz" ; then
3480 LIBS="$LIBS -lz"
3481 else
3482 error_exit "zlib check failed" \
3483 "Make sure to have the zlib libs and headers installed."
3484 fi
3485 fi
3486fi
3487
Fam Zhenge26110c2014-02-10 14:48:57 +08003488##########################################
3489# SHA command probe for modules
3490if test "$modules" = yes; then
3491 shacmd_probe="sha1sum sha1 shasum"
3492 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003493 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003494 shacmd="$c"
3495 break
3496 fi
3497 done
3498 if test "$shacmd" = ""; then
3499 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3500 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003501fi
3502
3503##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003504# pixman support probe
3505
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003506if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003507 pixman_cflags=
3508 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003509elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003510 pixman_cflags=$($pkg_config --cflags pixman-1)
3511 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003512else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003513 error_exit "pixman >= 0.21.8 not present." \
3514 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003515fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003516
3517##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003518# libmpathpersist probe
3519
3520if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003521 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003522 cat > $TMPC <<EOF
3523#include <libudev.h>
3524#include <mpath_persist.h>
3525unsigned mpath_mx_alloc_len = 1024;
3526int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003527static struct config *multipath_conf;
3528extern struct udev *udev;
3529extern struct config *get_multipath_config(void);
3530extern void put_multipath_config(struct config *conf);
3531struct udev *udev;
3532struct config *get_multipath_config(void) { return multipath_conf; }
3533void put_multipath_config(struct config *conf) { }
3534
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003535int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003536 udev = udev_new();
3537 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003538 return 0;
3539}
3540EOF
3541 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3542 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003543 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003544 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003545 # probe for the old API
3546 cat > $TMPC <<EOF
3547#include <libudev.h>
3548#include <mpath_persist.h>
3549unsigned mpath_mx_alloc_len = 1024;
3550int logsink;
3551int main(void) {
3552 struct udev *udev = udev_new();
3553 mpath_lib_init(udev);
3554 return 0;
3555}
3556EOF
3557 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3558 mpathpersist=yes
3559 mpathpersist_new_api=no
3560 else
3561 mpathpersist=no
3562 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003563 fi
3564else
3565 mpathpersist=no
3566fi
3567
3568##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303569# libcap probe
3570
3571if test "$cap" != "no" ; then
3572 cat > $TMPC <<EOF
3573#include <stdio.h>
3574#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003575int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303576EOF
3577 if compile_prog "" "-lcap" ; then
3578 cap=yes
3579 else
3580 cap=no
3581 fi
3582fi
3583
3584##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003585# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003586PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003587
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003588pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003589cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003590#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003591static void *f(void *p) { return NULL; }
3592int main(void) {
3593 pthread_t thread;
3594 pthread_create(&thread, 0, f, 0);
3595 return 0;
3596}
blueswir1414f0da2008-08-15 18:20:52 +00003597EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003598if compile_prog "" "" ; then
3599 pthread=yes
3600else
3601 for pthread_lib in $PTHREADLIBS_LIST; do
3602 if compile_prog "" "$pthread_lib" ; then
3603 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003604 found=no
3605 for lib_entry in $LIBS; do
3606 if test "$lib_entry" = "$pthread_lib"; then
3607 found=yes
3608 break
3609 fi
3610 done
3611 if test "$found" = "no"; then
3612 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003613 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003614 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003615 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003616 break
3617 fi
3618 done
3619fi
blueswir1414f0da2008-08-15 18:20:52 +00003620
Anthony Liguori4617e592009-08-25 17:21:56 -05003621if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003622 error_exit "pthread check failed" \
3623 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003624fi
3625
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003626# check for pthread_setname_np
3627pthread_setname_np=no
3628cat > $TMPC << EOF
3629#include <pthread.h>
3630
3631static void *f(void *p) { return NULL; }
3632int main(void)
3633{
3634 pthread_t thread;
3635 pthread_create(&thread, 0, f, 0);
3636 pthread_setname_np(thread, "QEMU");
3637 return 0;
3638}
3639EOF
3640if compile_prog "" "$pthread_lib" ; then
3641 pthread_setname_np=yes
3642fi
3643
aliguoribf9298b2008-12-05 20:05:26 +00003644##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003645# rbd probe
3646if test "$rbd" != "no" ; then
3647 cat > $TMPC <<EOF
3648#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003649#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003650int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003651 rados_t cluster;
3652 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003653 return 0;
3654}
3655EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003656 rbd_libs="-lrbd -lrados"
3657 if compile_prog "" "$rbd_libs" ; then
3658 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003659 else
3660 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003661 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003662 fi
3663 rbd=no
3664 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003665fi
3666
3667##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003668# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003669min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003670if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003671 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003672 libssh2_cflags=$($pkg_config libssh2 --cflags)
3673 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003674 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003675 else
3676 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003677 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003678 fi
3679 libssh2=no
3680 fi
3681fi
3682
3683##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003684# libssh2_sftp_fsync probe
3685
3686if test "$libssh2" = "yes"; then
3687 cat > $TMPC <<EOF
3688#include <stdio.h>
3689#include <libssh2.h>
3690#include <libssh2_sftp.h>
3691int main(void) {
3692 LIBSSH2_SESSION *session;
3693 LIBSSH2_SFTP *sftp;
3694 LIBSSH2_SFTP_HANDLE *sftp_handle;
3695 session = libssh2_session_init ();
3696 sftp = libssh2_sftp_init (session);
3697 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3698 libssh2_sftp_fsync (sftp_handle);
3699 return 0;
3700}
3701EOF
3702 # libssh2_cflags/libssh2_libs defined in previous test.
3703 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3704 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3705 fi
3706fi
3707
3708##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003709# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003710
3711if test "$linux_aio" != "no" ; then
3712 cat > $TMPC <<EOF
3713#include <libaio.h>
3714#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003715#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003716int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3717EOF
3718 if compile_prog "" "-laio" ; then
3719 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003720 else
3721 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003722 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003723 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003724 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003725 fi
3726fi
3727
3728##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003729# TPM passthrough is only on x86 Linux
3730
3731if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3732 tpm_passthrough=$tpm
3733else
3734 tpm_passthrough=no
3735fi
3736
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003737# TPM emulator is for all posix systems
3738if test "$mingw32" != "yes"; then
3739 tpm_emulator=$tpm
3740else
3741 tpm_emulator=no
3742fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003743##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003744# attr probe
3745
3746if test "$attr" != "no" ; then
3747 cat > $TMPC <<EOF
3748#include <stdio.h>
3749#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003750#ifdef CONFIG_LIBATTR
3751#include <attr/xattr.h>
3752#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003753#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003754#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003755int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3756EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003757 if compile_prog "" "" ; then
3758 attr=yes
3759 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003760 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003761 attr=yes
3762 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003763 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003764 else
3765 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003766 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003767 fi
3768 attr=no
3769 fi
3770fi
3771
3772##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003773# iovec probe
3774cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003775#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003776#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003777#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003778int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003779EOF
3780iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003781if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003782 iovec=yes
3783fi
3784
aurel32f652e6a2008-12-16 10:43:48 +00003785##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003786# preadv probe
3787cat > $TMPC <<EOF
3788#include <sys/types.h>
3789#include <sys/uio.h>
3790#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003791int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003792EOF
3793preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003794if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003795 preadv=yes
3796fi
3797
3798##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003799# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003800# fdt support is mandatory for at least some target architectures,
3801# so insist on it if we're building those system emulators.
3802fdt_required=no
3803for target in $target_list; do
3804 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003805 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003806 fdt_required=yes
3807 ;;
3808 esac
3809done
3810
3811if test "$fdt_required" = "yes"; then
3812 if test "$fdt" = "no"; then
3813 error_exit "fdt disabled but some requested targets require it." \
3814 "You can turn off fdt only if you also disable all the system emulation" \
3815 "targets which need it (by specifying a cut down --target-list)."
3816 fi
3817 fdt=yes
3818fi
3819
Juan Quintela2df87df2009-08-12 18:29:54 +02003820if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003821 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003822 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003823 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003824 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003825#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003826#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003827int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003828EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003829 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003830 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003831 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003832 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003833 # have GIT checkout, so activate dtc submodule
3834 if test -e "${source_path}/.git" ; then
3835 git_submodules="${git_submodules} dtc"
3836 fi
3837 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003838 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003839 mkdir -p dtc
3840 if [ "$pwd_is_source_path" != "y" ] ; then
3841 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3842 symlink "$source_path/dtc/scripts" "dtc/scripts"
3843 fi
3844 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003845 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3846 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003847 elif test "$fdt" = "yes" ; then
3848 # Not a git build & no libfdt found, prompt for system install
3849 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3850 "Please install the DTC (libfdt) devel package"
3851 else
3852 # don't have and don't want
3853 fdt_libs=
3854 fdt=no
3855 fi
aurel32f652e6a2008-12-16 10:43:48 +00003856 fi
3857fi
3858
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003859libs_softmmu="$libs_softmmu $fdt_libs"
3860
Michael Walle20ff0752011-03-07 23:32:39 +01003861##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003862# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003863
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003864if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003865 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003866 if $pkg_config $opengl_pkgs; then
3867 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3868 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003869 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003870 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3871 gtk_gl="yes"
3872 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003873 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003874 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003875 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003876 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003877 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003878 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003879 opengl_libs=""
3880 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003881 fi
3882fi
3883
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003884if test "$opengl" = "yes"; then
3885 cat > $TMPC << EOF
3886#include <epoxy/egl.h>
3887#ifndef EGL_MESA_image_dma_buf_export
3888# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3889#endif
3890int main(void) { return 0; }
3891EOF
3892 if compile_prog "" "" ; then
3893 opengl_dmabuf=yes
3894 fi
3895fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003896
Klim Kireeved279a02018-01-12 12:01:19 +03003897##########################################
3898# libxml2 probe
3899if test "$libxml2" != "no" ; then
3900 if $pkg_config --exists libxml-2.0; then
3901 libxml2="yes"
3902 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3903 libxml2_libs=$($pkg_config --libs libxml-2.0)
3904 else
3905 if test "$libxml2" = "yes"; then
3906 feature_not_found "libxml2" "Install libxml2 devel"
3907 fi
3908 libxml2="no"
3909 fi
3910fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003911
Bharata B Raoeb100392012-09-24 14:42:45 +05303912##########################################
3913# glusterfs probe
3914if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003915 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303916 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003917 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3918 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003919 if $pkg_config --atleast-version=4 glusterfs-api; then
3920 glusterfs_xlator_opt="yes"
3921 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003922 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303923 glusterfs_discard="yes"
3924 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303925 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05303926 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05303927 glusterfs_zerofill="yes"
3928 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303929 else
3930 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003931 feature_not_found "GlusterFS backend support" \
3932 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303933 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303934 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303935 fi
3936fi
3937
aurel3239386ac2009-04-15 19:48:17 +00003938# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003939# emulator. This is done because older glibc versions don't
3940# have syscall stubs for these implemented. In that case we
3941# don't provide them even if kernel supports them.
3942#
3943inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003944cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003945#include <sys/inotify.h>
3946
3947int
3948main(void)
3949{
3950 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003951 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003952}
3953EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003954if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003955 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003956fi
3957
Riku Voipioc05c7a72010-03-26 15:25:11 +00003958inotify1=no
3959cat > $TMPC << EOF
3960#include <sys/inotify.h>
3961
3962int
3963main(void)
3964{
3965 /* try to start inotify */
3966 return inotify_init1(0);
3967}
3968EOF
3969if compile_prog "" "" ; then
3970 inotify1=yes
3971fi
3972
Riku Voipio099d6b02009-05-05 12:10:04 +03003973# check if pipe2 is there
3974pipe2=no
3975cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003976#include <unistd.h>
3977#include <fcntl.h>
3978
3979int main(void)
3980{
3981 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003982 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003983}
3984EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003985if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003986 pipe2=yes
3987fi
3988
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003989# check if accept4 is there
3990accept4=no
3991cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003992#include <sys/socket.h>
3993#include <stddef.h>
3994
3995int main(void)
3996{
3997 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3998 return 0;
3999}
4000EOF
4001if compile_prog "" "" ; then
4002 accept4=yes
4003fi
4004
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304005# check if tee/splice is there. vmsplice was added same time.
4006splice=no
4007cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304008#include <unistd.h>
4009#include <fcntl.h>
4010#include <limits.h>
4011
4012int main(void)
4013{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004014 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304015 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4016 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4017 return 0;
4018}
4019EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004020if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304021 splice=yes
4022fi
4023
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004024##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004025# libnuma probe
4026
4027if test "$numa" != "no" ; then
4028 cat > $TMPC << EOF
4029#include <numa.h>
4030int main(void) { return numa_available(); }
4031EOF
4032
4033 if compile_prog "" "-lnuma" ; then
4034 numa=yes
4035 libs_softmmu="-lnuma $libs_softmmu"
4036 else
4037 if test "$numa" = "yes" ; then
4038 feature_not_found "numa" "install numactl devel"
4039 fi
4040 numa=no
4041 fi
4042fi
4043
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004044if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4045 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4046 exit 1
4047fi
4048
Yang Zhong5a22ab72017-12-20 21:16:46 +08004049# Even if malloc_trim() is available, these non-libc memory allocators
4050# do not support it.
4051if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4052 if test "$malloc_trim" = "yes" ; then
4053 echo "Disabling malloc_trim with non-libc memory allocator"
4054 fi
4055 malloc_trim="no"
4056fi
4057
4058#######################################
4059# malloc_trim
4060
4061if test "$malloc_trim" != "no" ; then
4062 cat > $TMPC << EOF
4063#include <malloc.h>
4064int main(void) { malloc_trim(0); return 0; }
4065EOF
4066 if compile_prog "" "" ; then
4067 malloc_trim="yes"
4068 else
4069 malloc_trim="no"
4070 fi
4071fi
4072
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004073##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004074# tcmalloc probe
4075
4076if test "$tcmalloc" = "yes" ; then
4077 cat > $TMPC << EOF
4078#include <stdlib.h>
4079int main(void) { malloc(1); return 0; }
4080EOF
4081
4082 if compile_prog "" "-ltcmalloc" ; then
4083 LIBS="-ltcmalloc $LIBS"
4084 else
4085 feature_not_found "tcmalloc" "install gperftools devel"
4086 fi
4087fi
4088
4089##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004090# jemalloc probe
4091
4092if test "$jemalloc" = "yes" ; then
4093 cat > $TMPC << EOF
4094#include <stdlib.h>
4095int main(void) { malloc(1); return 0; }
4096EOF
4097
4098 if compile_prog "" "-ljemalloc" ; then
4099 LIBS="-ljemalloc $LIBS"
4100 else
4101 feature_not_found "jemalloc" "install jemalloc devel"
4102 fi
4103fi
4104
4105##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004106# signalfd probe
4107signalfd="no"
4108cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004109#include <unistd.h>
4110#include <sys/syscall.h>
4111#include <signal.h>
4112int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4113EOF
4114
4115if compile_prog "" "" ; then
4116 signalfd=yes
4117fi
4118
Riku Voipioc2882b92009-08-12 15:08:24 +03004119# check if eventfd is supported
4120eventfd=no
4121cat > $TMPC << EOF
4122#include <sys/eventfd.h>
4123
4124int main(void)
4125{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004126 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004127}
4128EOF
4129if compile_prog "" "" ; then
4130 eventfd=yes
4131fi
4132
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004133# check if memfd is supported
4134memfd=no
4135cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004136#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004137
4138int main(void)
4139{
4140 return memfd_create("foo", MFD_ALLOW_SEALING);
4141}
4142EOF
4143if compile_prog "" "" ; then
4144 memfd=yes
4145fi
4146
Cortland Tölva955727d2018-10-08 09:35:19 -07004147# check for usbfs
4148have_usbfs=no
4149if test "$linux_user" = "yes"; then
4150 if check_include linux/usbdevice_fs.h; then
4151 have_usbfs=yes
4152 fi
4153 have_usbfs=yes
4154fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004155
Ulrich Hechtd0927932009-09-17 20:22:14 +03004156# check for fallocate
4157fallocate=no
4158cat > $TMPC << EOF
4159#include <fcntl.h>
4160
4161int main(void)
4162{
4163 fallocate(0, 0, 0, 0);
4164 return 0;
4165}
4166EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004167if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004168 fallocate=yes
4169fi
4170
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004171# check for fallocate hole punching
4172fallocate_punch_hole=no
4173cat > $TMPC << EOF
4174#include <fcntl.h>
4175#include <linux/falloc.h>
4176
4177int main(void)
4178{
4179 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4180 return 0;
4181}
4182EOF
4183if compile_prog "" "" ; then
4184 fallocate_punch_hole=yes
4185fi
4186
Denis V. Lunevb953f072015-01-30 11:42:14 +03004187# check that fallocate supports range zeroing inside the file
4188fallocate_zero_range=no
4189cat > $TMPC << EOF
4190#include <fcntl.h>
4191#include <linux/falloc.h>
4192
4193int main(void)
4194{
4195 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4196 return 0;
4197}
4198EOF
4199if compile_prog "" "" ; then
4200 fallocate_zero_range=yes
4201fi
4202
Kevin Wolfed911432014-09-29 17:12:59 +02004203# check for posix_fallocate
4204posix_fallocate=no
4205cat > $TMPC << EOF
4206#include <fcntl.h>
4207
4208int main(void)
4209{
4210 posix_fallocate(0, 0, 0);
4211 return 0;
4212}
4213EOF
4214if compile_prog "" "" ; then
4215 posix_fallocate=yes
4216fi
4217
Peter Maydellc727f472011-01-06 11:05:10 +00004218# check for sync_file_range
4219sync_file_range=no
4220cat > $TMPC << EOF
4221#include <fcntl.h>
4222
4223int main(void)
4224{
4225 sync_file_range(0, 0, 0, 0);
4226 return 0;
4227}
4228EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004229if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004230 sync_file_range=yes
4231fi
4232
Peter Maydelldace20d2011-01-10 13:11:24 +00004233# check for linux/fiemap.h and FS_IOC_FIEMAP
4234fiemap=no
4235cat > $TMPC << EOF
4236#include <sys/ioctl.h>
4237#include <linux/fs.h>
4238#include <linux/fiemap.h>
4239
4240int main(void)
4241{
4242 ioctl(0, FS_IOC_FIEMAP, 0);
4243 return 0;
4244}
4245EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004246if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004247 fiemap=yes
4248fi
4249
Ulrich Hechtd0927932009-09-17 20:22:14 +03004250# check for dup3
4251dup3=no
4252cat > $TMPC << EOF
4253#include <unistd.h>
4254
4255int main(void)
4256{
4257 dup3(0, 0, 0);
4258 return 0;
4259}
4260EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004261if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004262 dup3=yes
4263fi
4264
Alex Bligh4e0c6522013-08-21 16:02:43 +01004265# check for ppoll support
4266ppoll=no
4267cat > $TMPC << EOF
4268#include <poll.h>
4269
4270int main(void)
4271{
4272 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4273 ppoll(&pfd, 1, 0, 0);
4274 return 0;
4275}
4276EOF
4277if compile_prog "" "" ; then
4278 ppoll=yes
4279fi
4280
Alex Blighcd758dd2013-08-21 16:02:44 +01004281# check for prctl(PR_SET_TIMERSLACK , ... ) support
4282prctl_pr_set_timerslack=no
4283cat > $TMPC << EOF
4284#include <sys/prctl.h>
4285
4286int main(void)
4287{
4288 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4289 return 0;
4290}
4291EOF
4292if compile_prog "" "" ; then
4293 prctl_pr_set_timerslack=yes
4294fi
4295
Peter Maydell3b6edd12011-02-15 18:35:05 +00004296# check for epoll support
4297epoll=no
4298cat > $TMPC << EOF
4299#include <sys/epoll.h>
4300
4301int main(void)
4302{
4303 epoll_create(0);
4304 return 0;
4305}
4306EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004307if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004308 epoll=yes
4309fi
4310
Peter Maydell227f0212016-06-06 19:58:11 +01004311# epoll_create1 is a later addition
4312# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004313epoll_create1=no
4314cat > $TMPC << EOF
4315#include <sys/epoll.h>
4316
4317int main(void)
4318{
Peter Maydell19e83f62011-04-26 16:56:40 +01004319 /* Note that we use epoll_create1 as a value, not as
4320 * a function being called. This is necessary so that on
4321 * old SPARC glibc versions where the function was present in
4322 * the library but not declared in the header file we will
4323 * fail the configure check. (Otherwise we will get a compiler
4324 * warning but not an error, and will proceed to fail the
4325 * qemu compile where we compile with -Werror.)
4326 */
Blue Swirlc075a722012-08-09 20:21:25 +00004327 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004328}
4329EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004330if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004331 epoll_create1=yes
4332fi
4333
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004334# check for sendfile support
4335sendfile=no
4336cat > $TMPC << EOF
4337#include <sys/sendfile.h>
4338
4339int main(void)
4340{
4341 return sendfile(0, 0, 0, 0);
4342}
4343EOF
4344if compile_prog "" "" ; then
4345 sendfile=yes
4346fi
4347
Riku Voipio51834342014-06-22 11:25:42 +01004348# check for timerfd support (glibc 2.8 and newer)
4349timerfd=no
4350cat > $TMPC << EOF
4351#include <sys/timerfd.h>
4352
4353int main(void)
4354{
4355 return(timerfd_create(CLOCK_REALTIME, 0));
4356}
4357EOF
4358if compile_prog "" "" ; then
4359 timerfd=yes
4360fi
4361
Riku Voipio9af5c902014-08-12 15:58:57 +03004362# check for setns and unshare support
4363setns=no
4364cat > $TMPC << EOF
4365#include <sched.h>
4366
4367int main(void)
4368{
4369 int ret;
4370 ret = setns(0, 0);
4371 ret = unshare(0);
4372 return ret;
4373}
4374EOF
4375if compile_prog "" "" ; then
4376 setns=yes
4377fi
4378
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004379# clock_adjtime probe
4380clock_adjtime=no
4381cat > $TMPC <<EOF
4382#include <time.h>
4383
4384int main(void)
4385{
4386 return clock_adjtime(0, 0);
4387}
4388EOF
4389clock_adjtime=no
4390if compile_prog "" "" ; then
4391 clock_adjtime=yes
4392fi
4393
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004394# syncfs probe
4395syncfs=no
4396cat > $TMPC <<EOF
4397#include <unistd.h>
4398
4399int main(void)
4400{
4401 return syncfs(0);
4402}
4403EOF
4404syncfs=no
4405if compile_prog "" "" ; then
4406 syncfs=yes
4407fi
4408
pbrookcc8ae6d2006-04-23 17:57:59 +00004409# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004410if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004411 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004412 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004413 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004414 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004415 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004416 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004417 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004418 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004419fi
4420
Stefan Weilf514f412009-10-11 12:44:07 +02004421# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004422byteswap_h=no
4423cat > $TMPC << EOF
4424#include <byteswap.h>
4425int main(void) { return bswap_32(0); }
4426EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004427if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004428 byteswap_h=yes
4429fi
4430
Stefan Weil75f13592013-01-05 12:17:38 +01004431# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004432bswap_h=no
4433cat > $TMPC << EOF
4434#include <sys/endian.h>
4435#include <sys/types.h>
4436#include <machine/bswap.h>
4437int main(void) { return bswap32(0); }
4438EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004439if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004440 bswap_h=yes
4441fi
4442
aliguorida93a1f2008-12-12 20:02:52 +00004443##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004444# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004445if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004446 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004447 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004448 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4449 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004450 else
4451 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004452 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004453 fi
4454 libiscsi="no"
4455 fi
4456fi
4457
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004458##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004459# Do we need libm
4460cat > $TMPC << EOF
4461#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004462int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004463EOF
4464if compile_prog "" "" ; then
4465 :
4466elif compile_prog "" "-lm" ; then
4467 LIBS="-lm $LIBS"
4468 libs_qga="-lm $libs_qga"
4469else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004470 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004471fi
4472
4473##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004474# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004475# uClibc provides 2 versions of clock_gettime(), one with realtime
4476# support and one without. This means that the clock_gettime() don't
4477# need -lrt. We still need it for timer_create() so we check for this
4478# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004479cat > $TMPC <<EOF
4480#include <signal.h>
4481#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004482int main(void) {
4483 timer_create(CLOCK_REALTIME, NULL, NULL);
4484 return clock_gettime(CLOCK_REALTIME, NULL);
4485}
aliguorida93a1f2008-12-12 20:02:52 +00004486EOF
4487
Juan Quintela52166aa2009-08-03 14:46:03 +02004488if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004489 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004490# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004491elif compile_prog "" "$pthread_lib -lrt" ; then
4492 LIBS="$LIBS -lrt"
4493 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004494fi
4495
Blue Swirl31ff5042009-09-12 12:33:07 +00004496if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004497 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004498 libs_softmmu="-lutil $libs_softmmu"
4499fi
4500
Blue Swirlde5071c2009-09-12 09:58:46 +00004501##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004502# spice probe
4503if test "$spice" != "no" ; then
4504 cat > $TMPC << EOF
4505#include <spice.h>
4506int main(void) { spice_server_new(); return 0; }
4507EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004508 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4509 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004510 if $pkg_config --atleast-version=0.12.0 spice-server && \
4511 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004512 compile_prog "$spice_cflags" "$spice_libs" ; then
4513 spice="yes"
4514 libs_softmmu="$libs_softmmu $spice_libs"
4515 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004516 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4517 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004518 else
4519 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004520 feature_not_found "spice" \
4521 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004522 fi
4523 spice="no"
4524 fi
4525fi
4526
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004527# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004528if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004529 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004530 libcacard_cflags=$($pkg_config --cflags libcacard)
4531 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004532 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004533 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004534 if test "$smartcard" = "yes"; then
4535 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004536 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004537 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004538 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004539fi
4540
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004541# check for libusb
4542if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004543 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004544 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004545 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4546 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004547 else
4548 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004549 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004550 fi
4551 libusb="no"
4552 fi
4553fi
4554
Hans de Goede69354a82011-07-19 11:04:10 +02004555# check for usbredirparser for usb network redirection support
4556if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004557 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004558 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004559 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4560 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004561 else
4562 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004563 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004564 fi
4565 usb_redir="no"
4566 fi
4567fi
4568
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004569##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004570# check if we have VSS SDK headers for win
4571
4572if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4573 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004574 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004575 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4576 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004577 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004578 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4579 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004580 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004581 esac
4582 cat > $TMPC << EOF
4583#define __MIDL_user_allocate_free_DEFINED__
4584#include <inc/win2003/vss.h>
4585int main(void) { return VSS_CTX_BACKUP; }
4586EOF
4587 if compile_prog "$vss_win32_include" "" ; then
4588 guest_agent_with_vss="yes"
4589 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004590 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004591 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004592 else
4593 if test "$vss_win32_sdk" != "" ; then
4594 echo "ERROR: Please download and install Microsoft VSS SDK:"
4595 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4596 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4597 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4598 echo "ERROR: The headers are extracted in the directory \`inc'."
4599 feature_not_found "VSS support"
4600 fi
4601 guest_agent_with_vss="no"
4602 fi
4603fi
4604
4605##########################################
4606# lookup Windows platform SDK (if not specified)
4607# The SDK is needed only to build .tlb (type library) file of guest agent
4608# VSS provider from the source. It is usually unnecessary because the
4609# pre-compiled .tlb file is included.
4610
4611if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4612 if test -z "$win_sdk"; then
4613 programfiles="$PROGRAMFILES"
4614 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4615 if test -n "$programfiles"; then
4616 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4617 else
4618 feature_not_found "Windows SDK"
4619 fi
4620 elif test "$win_sdk" = "no"; then
4621 win_sdk=""
4622 fi
4623fi
4624
4625##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004626# check if mingw environment provides a recent ntddscsi.h
4627if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4628 cat > $TMPC << EOF
4629#include <windows.h>
4630#include <ntddscsi.h>
4631int main(void) {
4632#if !defined(IOCTL_SCSI_GET_ADDRESS)
4633#error Missing required ioctl definitions
4634#endif
4635 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4636 return addr.Lun;
4637}
4638EOF
4639 if compile_prog "" "" ; then
4640 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004641 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004642 fi
4643fi
4644
4645##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004646# virgl renderer probe
4647
4648if test "$virglrenderer" != "no" ; then
4649 cat > $TMPC << EOF
4650#include <virglrenderer.h>
4651int main(void) { virgl_renderer_poll(); return 0; }
4652EOF
4653 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4654 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004655 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004656 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4657 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4658 virglrenderer="yes"
4659 else
4660 if test "$virglrenderer" = "yes" ; then
4661 feature_not_found "virglrenderer"
4662 fi
4663 virglrenderer="no"
4664 fi
4665fi
4666
4667##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004668# capstone
4669
Richard Hendersone219c492017-09-28 09:01:23 -07004670case "$capstone" in
4671 "" | yes)
4672 if $pkg_config capstone; then
4673 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004674 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004675 capstone=git
4676 elif test -e "${source_path}/capstone/Makefile" ; then
4677 capstone=internal
4678 elif test -z "$capstone" ; then
4679 capstone=no
4680 else
4681 feature_not_found "capstone" "Install capstone devel or git submodule"
4682 fi
4683 ;;
4684
4685 system)
4686 if ! $pkg_config capstone; then
4687 feature_not_found "capstone" "Install capstone devel"
4688 fi
4689 ;;
4690esac
4691
4692case "$capstone" in
4693 git | internal)
4694 if test "$capstone" = git; then
4695 git_submodules="${git_submodules} capstone"
4696 fi
4697 mkdir -p capstone
4698 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4699 if test "$mingw32" = "yes"; then
4700 LIBCAPSTONE=capstone.lib
4701 else
4702 LIBCAPSTONE=libcapstone.a
4703 fi
4704 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4705 ;;
4706
4707 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004708 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4709 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004710 ;;
4711
4712 no)
4713 ;;
4714 *)
4715 error_exit "Unknown state for capstone: $capstone"
4716 ;;
4717esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004718
4719##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004720# check if we have fdatasync
4721
4722fdatasync=no
4723cat > $TMPC << EOF
4724#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004725int main(void) {
4726#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4727return fdatasync(0);
4728#else
Stefan Weile172fe12012-04-06 21:33:20 +02004729#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004730#endif
4731}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004732EOF
4733if compile_prog "" "" ; then
4734 fdatasync=yes
4735fi
4736
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004737##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004738# check if we have madvise
4739
4740madvise=no
4741cat > $TMPC << EOF
4742#include <sys/types.h>
4743#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004744#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004745int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4746EOF
4747if compile_prog "" "" ; then
4748 madvise=yes
4749fi
4750
4751##########################################
4752# check if we have posix_madvise
4753
4754posix_madvise=no
4755cat > $TMPC << EOF
4756#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004757#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004758int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4759EOF
4760if compile_prog "" "" ; then
4761 posix_madvise=yes
4762fi
4763
4764##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004765# check if we have posix_memalign()
4766
4767posix_memalign=no
4768cat > $TMPC << EOF
4769#include <stdlib.h>
4770int main(void) {
4771 void *p;
4772 return posix_memalign(&p, 8, 8);
4773}
4774EOF
4775if compile_prog "" "" ; then
4776 posix_memalign=yes
4777fi
4778
4779##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004780# check if we have posix_syslog
4781
4782posix_syslog=no
4783cat > $TMPC << EOF
4784#include <syslog.h>
4785int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4786EOF
4787if compile_prog "" "" ; then
4788 posix_syslog=yes
4789fi
4790
4791##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004792# check if we have sem_timedwait
4793
4794sem_timedwait=no
4795cat > $TMPC << EOF
4796#include <semaphore.h>
4797int main(void) { return sem_timedwait(0, 0); }
4798EOF
4799if compile_prog "" "" ; then
4800 sem_timedwait=yes
4801fi
4802
4803##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004804# check if we have strchrnul
4805
4806strchrnul=no
4807cat > $TMPC << EOF
4808#include <string.h>
4809int main(void);
4810// Use a haystack that the compiler shouldn't be able to constant fold
4811char *haystack = (char*)&main;
4812int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4813EOF
4814if compile_prog "" "" ; then
4815 strchrnul=yes
4816fi
4817
4818##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004819# check if trace backend exists
4820
Lluís Vilanova5b808272014-05-27 15:02:14 +02004821$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004822if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004823 error_exit "invalid trace backends" \
4824 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004825fi
4826
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004827##########################################
4828# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004829if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004830 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004831#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004832int main(void) { return 0; }
4833EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004834 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004835 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004836 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004837 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004838 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004839 fi
4840 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004841 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004842 else
4843 urcu_bp_libs="-lurcu-bp"
4844 fi
4845
4846 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4847 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004848 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004849 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004850 fi
4851fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004852
4853##########################################
4854# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004855if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004856 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004857 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004858 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004859 trace_backend_stap="no"
4860 if has 'stap' ; then
4861 trace_backend_stap="yes"
4862 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004863fi
4864
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004865##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004866# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304867
Peter Maydell7c2acc72013-04-08 12:11:27 +01004868# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004869# is sigcontext. On Windows the only valid backend is the Windows
4870# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004871
4872ucontext_works=no
4873if test "$darwin" != "yes"; then
4874 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304875#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004876#ifdef __stub_makecontext
4877#error Ignoring glibc stub makecontext which will always fail
4878#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004879int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304880EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004881 if compile_prog "" "" ; then
4882 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304883 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004884fi
4885
4886if test "$coroutine" = ""; then
4887 if test "$mingw32" = "yes"; then
4888 coroutine=win32
4889 elif test "$ucontext_works" = "yes"; then
4890 coroutine=ucontext
4891 else
4892 coroutine=sigaltstack
4893 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004894else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004895 case $coroutine in
4896 windows)
4897 if test "$mingw32" != "yes"; then
4898 error_exit "'windows' coroutine backend only valid for Windows"
4899 fi
4900 # Unfortunately the user visible backend name doesn't match the
4901 # coroutine-*.c filename for this case, so we have to adjust it here.
4902 coroutine=win32
4903 ;;
4904 ucontext)
4905 if test "$ucontext_works" != "yes"; then
4906 feature_not_found "ucontext"
4907 fi
4908 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004909 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004910 if test "$mingw32" = "yes"; then
4911 error_exit "only the 'windows' coroutine backend is valid for Windows"
4912 fi
4913 ;;
4914 *)
4915 error_exit "unknown coroutine backend $coroutine"
4916 ;;
4917 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304918fi
4919
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004920if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004921 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004922fi
4923
Peter Lieven7d992e42016-09-27 11:58:45 +02004924if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02004925 if test "$coroutine_pool" = "yes"; then
4926 echo "WARN: disabling coroutine pool for stack usage debugging"
4927 coroutine_pool=no
4928 fi
4929fi
4930
4931
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304932##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304933# check if we have open_by_handle_at
4934
Stefan Weil4e1797f2012-06-18 22:11:06 +02004935open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304936cat > $TMPC << EOF
4937#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004938#if !defined(AT_EMPTY_PATH)
4939# error missing definition
4940#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004941int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004942#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304943EOF
4944if compile_prog "" "" ; then
4945 open_by_handle_at=yes
4946fi
4947
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304948########################################
4949# check if we have linux/magic.h
4950
4951linux_magic_h=no
4952cat > $TMPC << EOF
4953#include <linux/magic.h>
4954int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004955 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304956}
4957EOF
4958if compile_prog "" "" ; then
4959 linux_magic_h=yes
4960fi
4961
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004962########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004963# check whether we can disable warning option with a pragma (this is needed
4964# to silence warnings in the headers of some versions of external libraries).
4965# This test has to be compiled with -Werror as otherwise an unknown pragma is
4966# only a warning.
4967#
4968# If we can't selectively disable warning in the code, disable -Werror so that
4969# the build doesn't fail anyway.
4970
Peter Maydell06d71fa2012-07-30 16:13:07 +01004971pragma_disable_unused_but_set=no
4972cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004973#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01004974#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004975#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004976
Peter Maydell06d71fa2012-07-30 16:13:07 +01004977int main(void) {
4978 return 0;
4979}
4980EOF
4981if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004982 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004983else
4984 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004985fi
4986
4987########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004988# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004989
4990valgrind_h=no
4991cat > $TMPC << EOF
4992#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004993int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004994 return 0;
4995}
4996EOF
4997if compile_prog "" "" ; then
4998 valgrind_h=yes
4999fi
5000
5001########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005002# check if environ is declared
5003
5004has_environ=no
5005cat > $TMPC << EOF
5006#include <unistd.h>
5007int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005008 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005009 return 0;
5010}
5011EOF
5012if compile_prog "" "" ; then
5013 has_environ=yes
5014fi
5015
Richard Henderson76a347e2012-12-28 14:17:02 -08005016########################################
5017# check if cpuid.h is usable.
5018
Richard Henderson76a347e2012-12-28 14:17:02 -08005019cat > $TMPC << EOF
5020#include <cpuid.h>
5021int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005022 unsigned a, b, c, d;
5023 int max = __get_cpuid_max(0, 0);
5024
5025 if (max >= 1) {
5026 __cpuid(1, a, b, c, d);
5027 }
5028
5029 if (max >= 7) {
5030 __cpuid_count(7, 0, a, b, c, d);
5031 }
5032
5033 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005034}
5035EOF
5036if compile_prog "" "" ; then
5037 cpuid_h=yes
5038fi
5039
Richard Henderson5dd89902017-07-18 18:40:18 -10005040##########################################
5041# avx2 optimization requirement check
5042#
5043# There is no point enabling this if cpuid.h is not usable,
5044# since we won't be able to select the new routines.
5045
Liam Merwick86583a02018-10-19 21:38:59 +01005046if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005047 cat > $TMPC << EOF
5048#pragma GCC push_options
5049#pragma GCC target("avx2")
5050#include <cpuid.h>
5051#include <immintrin.h>
5052static int bar(void *a) {
5053 __m256i x = *(__m256i *)a;
5054 return _mm256_testz_si256(x, x);
5055}
5056int main(int argc, char *argv[]) { return bar(argv[0]); }
5057EOF
5058 if compile_object "" ; then
5059 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005060 else
5061 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005062 fi
5063fi
5064
Richard Hendersonf5401662013-02-16 12:46:59 -08005065########################################
5066# check if __[u]int128_t is usable.
5067
5068int128=no
5069cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01005070#if defined(__clang_major__) && defined(__clang_minor__)
5071# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5072# error __int128_t does not work in CLANG before 3.2
5073# endif
5074#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08005075__int128_t a;
5076__uint128_t b;
5077int main (void) {
5078 a = a + b;
5079 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005080 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005081 return 0;
5082}
5083EOF
5084if compile_prog "" "" ; then
5085 int128=yes
5086fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005087
Richard Henderson7ebee432016-06-29 21:10:59 -07005088#########################################
5089# See if 128-bit atomic operations are supported.
5090
5091atomic128=no
5092if test "$int128" = "yes"; then
5093 cat > $TMPC << EOF
5094int main(void)
5095{
5096 unsigned __int128 x = 0, y = 0;
5097 y = __atomic_load_16(&x, 0);
5098 __atomic_store_16(&x, y, 0);
5099 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5100 return 0;
5101}
5102EOF
5103 if compile_prog "" "" ; then
5104 atomic128=yes
5105 fi
5106fi
5107
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005108cmpxchg128=no
5109if test "$int128" = yes -a "$atomic128" = no; then
5110 cat > $TMPC << EOF
5111int main(void)
5112{
5113 unsigned __int128 x = 0, y = 0;
5114 __sync_val_compare_and_swap_16(&x, y, x);
5115 return 0;
5116}
5117EOF
5118 if compile_prog "" "" ; then
5119 cmpxchg128=yes
5120 fi
5121fi
5122
Richard Hendersondf79b992016-09-02 12:23:57 -07005123#########################################
5124# See if 64-bit atomic operations are supported.
5125# Note that without __atomic builtins, we can only
5126# assume atomic loads/stores max at pointer size.
5127
5128cat > $TMPC << EOF
5129#include <stdint.h>
5130int main(void)
5131{
5132 uint64_t x = 0, y = 0;
5133#ifdef __ATOMIC_RELAXED
5134 y = __atomic_load_8(&x, 0);
5135 __atomic_store_8(&x, y, 0);
5136 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5137 __atomic_exchange_8(&x, y, 0);
5138 __atomic_fetch_add_8(&x, y, 0);
5139#else
5140 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5141 __sync_lock_test_and_set(&x, y);
5142 __sync_val_compare_and_swap(&x, y, 0);
5143 __sync_fetch_and_add(&x, y);
5144#endif
5145 return 0;
5146}
5147EOF
5148if compile_prog "" "" ; then
5149 atomic64=yes
5150fi
5151
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005152########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005153# See if 16-byte vector operations are supported.
5154# Even without a vector unit the compiler may expand these.
5155# There is a bug in old GCC for PPC that crashes here.
5156# Unfortunately it's the system compiler for Centos 7.
5157
5158cat > $TMPC << EOF
5159typedef unsigned char U1 __attribute__((vector_size(16)));
5160typedef unsigned short U2 __attribute__((vector_size(16)));
5161typedef unsigned int U4 __attribute__((vector_size(16)));
5162typedef unsigned long long U8 __attribute__((vector_size(16)));
5163typedef signed char S1 __attribute__((vector_size(16)));
5164typedef signed short S2 __attribute__((vector_size(16)));
5165typedef signed int S4 __attribute__((vector_size(16)));
5166typedef signed long long S8 __attribute__((vector_size(16)));
5167static U1 a1, b1;
5168static U2 a2, b2;
5169static U4 a4, b4;
5170static U8 a8, b8;
5171static S1 c1;
5172static S2 c2;
5173static S4 c4;
5174static S8 c8;
5175static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005176void helper(void *d, void *a, int shift, int i);
5177void helper(void *d, void *a, int shift, int i)
5178{
5179 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5180 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5181 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5182 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5183}
Richard Hendersondb432672017-09-15 14:11:45 -07005184int main(void)
5185{
5186 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5187 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5188 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5189 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5190 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5191 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5192 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5193 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5194 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5195 return 0;
5196}
5197EOF
5198
5199vector16=no
5200if compile_prog "" "" ; then
5201 vector16=yes
5202fi
5203
5204########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005205# check if getauxval is available.
5206
5207getauxval=no
5208cat > $TMPC << EOF
5209#include <sys/auxv.h>
5210int main(void) {
5211 return getauxval(AT_HWCAP) == 0;
5212}
5213EOF
5214if compile_prog "" "" ; then
5215 getauxval=yes
5216fi
5217
John Snowfd0e6052015-03-25 18:57:39 -04005218########################################
5219# check if ccache is interfering with
5220# semantic analysis of macros
5221
John Snow5e4dfd32015-10-28 13:56:40 -04005222unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005223ccache_cpp2=no
5224cat > $TMPC << EOF
5225static const int Z = 1;
5226#define fn() ({ Z; })
5227#define TAUT(X) ((X) == Z)
5228#define PAREN(X, Y) (X == Y)
5229#define ID(X) (X)
5230int main(int argc, char *argv[])
5231{
5232 int x = 0, y = 0;
5233 x = ID(x);
5234 x = fn();
5235 fn();
5236 if (PAREN(x, y)) return 0;
5237 if (TAUT(Z)) return 0;
5238 return 0;
5239}
5240EOF
5241
5242if ! compile_object "-Werror"; then
5243 ccache_cpp2=yes
5244fi
5245
John Snowb553a042015-11-03 15:43:42 -05005246#################################################
5247# clang does not support glibc + FORTIFY_SOURCE.
5248
5249if test "$fortify_source" != "no"; then
5250 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5251 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005252 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005253 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005254 fortify_source="no";
5255 else
5256 fortify_source="yes"
5257 fi
5258fi
5259
Fam Zheng1efad062018-06-01 17:26:43 +08005260###############################################
5261# Check if copy_file_range is provided by glibc
5262have_copy_file_range=no
5263cat > $TMPC << EOF
5264#include <unistd.h>
5265int main(void) {
5266 copy_file_range(0, NULL, 0, NULL, 0, 0);
5267 return 0;
5268}
5269EOF
5270if compile_prog "" "" ; then
5271 have_copy_file_range=yes
5272fi
5273
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305274##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005275# check if struct fsxattr is available via linux/fs.h
5276
5277have_fsxattr=no
5278cat > $TMPC << EOF
5279#include <linux/fs.h>
5280struct fsxattr foo;
5281int main(void) {
5282 return 0;
5283}
5284EOF
5285if compile_prog "" "" ; then
5286 have_fsxattr=yes
5287fi
5288
Peter Maydellb66e10e2016-06-08 18:34:32 +01005289##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005290# check for usable membarrier system call
5291if test "$membarrier" = "yes"; then
5292 have_membarrier=no
5293 if test "$mingw32" = "yes" ; then
5294 have_membarrier=yes
5295 elif test "$linux" = "yes" ; then
5296 cat > $TMPC << EOF
5297 #include <linux/membarrier.h>
5298 #include <sys/syscall.h>
5299 #include <unistd.h>
5300 #include <stdlib.h>
5301 int main(void) {
5302 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5303 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5304 exit(0);
5305 }
5306EOF
5307 if compile_prog "" "" ; then
5308 have_membarrier=yes
5309 fi
5310 fi
5311 if test "$have_membarrier" = "no"; then
5312 feature_not_found "membarrier" "membarrier system call not available"
5313 fi
5314else
5315 # Do not enable it by default even for Mingw32, because it doesn't
5316 # work on Wine.
5317 membarrier=no
5318fi
5319
5320##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005321# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005322have_rtnetlink=no
5323cat > $TMPC << EOF
5324#include <linux/rtnetlink.h>
5325int main(void) {
5326 return IFLA_PROTO_DOWN;
5327}
5328EOF
5329if compile_prog "" "" ; then
5330 have_rtnetlink=yes
5331fi
5332
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005333##########################################
5334# check for usable AF_VSOCK environment
5335have_af_vsock=no
5336cat > $TMPC << EOF
5337#include <errno.h>
5338#include <sys/types.h>
5339#include <sys/socket.h>
5340#if !defined(AF_VSOCK)
5341# error missing AF_VSOCK flag
5342#endif
5343#include <linux/vm_sockets.h>
5344int main(void) {
5345 int sock, ret;
5346 struct sockaddr_vm svm;
5347 socklen_t len = sizeof(svm);
5348 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5349 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5350 if ((ret == -1) && (errno == ENOTCONN)) {
5351 return 0;
5352 }
5353 return -1;
5354}
5355EOF
5356if compile_prog "" "" ; then
5357 have_af_vsock=yes
5358fi
5359
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005360##########################################
5361# check for usable AF_ALG environment
5362hava_afalg=no
5363cat > $TMPC << EOF
5364#include <errno.h>
5365#include <sys/types.h>
5366#include <sys/socket.h>
5367#include <linux/if_alg.h>
5368int main(void) {
5369 int sock;
5370 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5371 return sock;
5372}
5373EOF
5374if compile_prog "" "" ; then
5375 have_afalg=yes
5376fi
5377if test "$crypto_afalg" = "yes"
5378then
5379 if test "$have_afalg" != "yes"
5380 then
5381 error_exit "AF_ALG requested but could not be detected"
5382 fi
5383fi
5384
5385
James Clarke6969ec62016-06-06 12:02:50 +01005386#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005387# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005388if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005389 cat > $TMPC << EOF
5390#include <Hypervisor/hv.h>
5391int main() { return 0;}
5392EOF
5393 if ! compile_object ""; then
5394 hvf='no'
5395 else
5396 hvf='yes'
5397 LDFLAGS="-framework Hypervisor $LDFLAGS"
5398 fi
5399fi
5400
5401#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005402# Sparc implicitly links with --relax, which is
5403# incompatible with -r, so --no-relax should be
5404# given. It does no harm to give it on other
5405# platforms too.
5406
5407# Note: the prototype is needed since QEMU_CFLAGS
5408# contains -Wmissing-prototypes
5409cat > $TMPC << EOF
5410extern int foo(void);
5411int foo(void) { return 0; }
5412EOF
5413if ! compile_object ""; then
5414 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5415fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005416for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5417 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5418 LD_REL_FLAGS=$i
5419 break
5420 fi
5421done
5422if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5423 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005424fi
5425
Jan Vesely277abf12016-04-29 13:15:23 -04005426##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005427# check for sysmacros.h
5428
5429have_sysmacros=no
5430cat > $TMPC << EOF
5431#include <sys/sysmacros.h>
5432int main(void) {
5433 return makedev(0, 0);
5434}
5435EOF
5436if compile_prog "" "" ; then
5437 have_sysmacros=yes
5438fi
5439
5440##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005441# Veritas HyperScale block driver VxHS
5442# Check if libvxhs is installed
5443
5444if test "$vxhs" != "no" ; then
5445 cat > $TMPC <<EOF
5446#include <stdint.h>
5447#include <qnio/qnio_api.h>
5448
5449void *vxhs_callback;
5450
5451int main(void) {
5452 iio_init(QNIO_VERSION, vxhs_callback);
5453 return 0;
5454}
5455EOF
5456 vxhs_libs="-lvxhs -lssl"
5457 if compile_prog "" "$vxhs_libs" ; then
5458 vxhs=yes
5459 else
5460 if test "$vxhs" = "yes" ; then
5461 feature_not_found "vxhs block device" "Install libvxhs See github"
5462 fi
5463 vxhs=no
5464 fi
5465fi
5466
5467##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005468# check for _Static_assert()
5469
5470have_static_assert=no
5471cat > $TMPC << EOF
5472_Static_assert(1, "success");
5473int main(void) {
5474 return 0;
5475}
5476EOF
5477if compile_prog "" "" ; then
5478 have_static_assert=yes
5479fi
5480
5481##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005482# check for utmpx.h, it is missing e.g. on OpenBSD
5483
5484have_utmpx=no
5485cat > $TMPC << EOF
5486#include <utmpx.h>
5487struct utmpx user_info;
5488int main(void) {
5489 return 0;
5490}
5491EOF
5492if compile_prog "" "" ; then
5493 have_utmpx=yes
5494fi
5495
5496##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005497# checks for sanitizers
5498
Marc-André Lureau247724c2018-01-16 16:11:51 +01005499have_asan=no
5500have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005501have_asan_iface_h=no
5502have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005503
5504if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005505 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005506 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5507 have_asan=yes
5508 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005509
5510 # we could use a simple skeleton for flags checks, but this also
5511 # detect the static linking issue of ubsan, see also:
5512 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5513 cat > $TMPC << EOF
5514#include <stdlib.h>
5515int main(void) {
5516 void *tmp = malloc(10);
5517 return *(int *)(tmp + 2);
5518}
5519EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005520 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5521 have_ubsan=yes
5522 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005523
5524 if check_include "sanitizer/asan_interface.h" ; then
5525 have_asan_iface_h=yes
5526 fi
5527
5528 cat > $TMPC << EOF
5529#include <sanitizer/asan_interface.h>
5530int main(void) {
5531 __sanitizer_start_switch_fiber(0, 0, 0);
5532 return 0;
5533}
5534EOF
5535 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5536 have_asan_iface_fiber=yes
5537 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005538fi
5539
5540##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005541# Docker and cross-compiler support
5542#
5543# This is specifically for building test
5544# cases for foreign architectures, not
5545# cross-compiling QEMU itself.
5546
5547if has "docker"; then
5548 docker=$($python $source_path/tests/docker/docker.py probe)
5549fi
5550
5551##########################################
Junyan He17824402018-07-18 15:47:59 +08005552# check for libpmem
5553
5554if test "$libpmem" != "no"; then
5555 if $pkg_config --exists "libpmem"; then
5556 libpmem="yes"
5557 libpmem_libs=$($pkg_config --libs libpmem)
5558 libpmem_cflags=$($pkg_config --cflags libpmem)
5559 libs_softmmu="$libs_softmmu $libpmem_libs"
5560 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5561 else
5562 if test "$libpmem" = "yes" ; then
5563 feature_not_found "libpmem" "Install nvml or pmdk"
5564 fi
5565 libpmem="no"
5566 fi
5567fi
5568
5569##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005570# End of CC checks
5571# After here, no more $cc or $ld runs
5572
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005573write_c_skeleton
5574
Blue Swirl1d728c32012-05-01 18:45:39 +00005575if test "$gcov" = "yes" ; then
5576 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5577 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005578elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005579 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005580elif test "$debug" = "no"; then
5581 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005582fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005583
Marc-André Lureau247724c2018-01-16 16:11:51 +01005584if test "$have_asan" = "yes"; then
5585 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005586 if test "$have_asan_iface_h" = "no" ; then
5587 echo "ASAN build enabled, but ASAN header missing." \
5588 "Without code annotation, the report may be inferior."
5589 elif test "$have_asan_iface_fiber" = "no" ; then
5590 echo "ASAN build enabled, but ASAN header is too old." \
5591 "Without code annotation, the report may be inferior."
5592 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005593fi
5594if test "$have_ubsan" = "yes"; then
5595 CFLAGS="-fsanitize=undefined $CFLAGS"
5596fi
5597
Peter Lieven6542aa92014-02-03 10:26:13 +01005598##########################################
5599# Do we have libnfs
5600if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005601 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005602 libnfs="yes"
5603 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005604 else
5605 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005606 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005607 fi
5608 libnfs="no"
5609 fi
5610fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005611
Peter Maydell6ca026c2012-07-18 15:10:18 +01005612# Now we've finished running tests it's OK to add -Werror to the compiler flags
5613if test "$werror" = "yes"; then
5614 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5615fi
5616
Juan Quintelae86ecd42009-08-03 14:45:59 +02005617if test "$solaris" = "no" ; then
5618 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005619 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005620 fi
5621fi
5622
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005623# test if pod2man has --utf8 option
5624if pod2man --help | grep -q utf8; then
5625 POD2MAN="pod2man --utf8"
5626else
5627 POD2MAN="pod2man"
5628fi
5629
Blue Swirl952afb72010-09-19 08:36:34 +00005630# Use ASLR, no-SEH and DEP if available
5631if test "$mingw32" = "yes" ; then
5632 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005633 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005634 LDFLAGS="-Wl,$flag $LDFLAGS"
5635 fi
5636 done
5637fi
5638
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005639qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005640qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005641qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005642qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005643
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005644# We can only support ivshmem if we have eventfd
5645if [ "$eventfd" = "yes" ]; then
5646 ivshmem=yes
5647fi
5648
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005649tools=""
5650if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005651 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005652 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5653 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005654 fi
5655 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005656 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005657 fi
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005658 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5659 tools="elf2dmp $tools"
5660 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005661fi
5662if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005663 if test "$linux" = yes; then
5664 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005665 virtfs=yes
5666 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5667 else
5668 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005669 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305670 fi
Andreas Färber17500372012-05-01 01:12:03 +02005671 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005672 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005673 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5674 mpath=yes
5675 else
5676 if test "$mpath" = yes; then
5677 error_exit "Multipath requires libmpathpersist devel"
5678 fi
5679 mpath=no
5680 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005681 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5682 else
5683 if test "$virtfs" = yes; then
5684 error_exit "VirtFS is supported only on Linux"
5685 fi
5686 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005687 if test "$mpath" = yes; then
5688 error_exit "Multipath is supported only on Linux"
5689 fi
5690 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305691 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005692 if test "$xkbcommon" = "yes"; then
5693 tools="qemu-keymap\$(EXESUF) $tools"
5694 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005695fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005696
5697# Probe for guest agent support/options
5698
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005699if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005700 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005701 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005702 guest_agent=yes
5703 elif [ "$guest_agent" != yes ]; then
5704 guest_agent=no
5705 else
5706 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005707 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005708fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005709
Michael Roth9d6bc272015-08-26 10:49:13 -05005710# Guest agent Window MSI package
5711
5712if test "$guest_agent" != yes; then
5713 if test "$guest_agent_msi" = yes; then
5714 error_exit "MSI guest agent package requires guest agent enabled"
5715 fi
5716 guest_agent_msi=no
5717elif test "$mingw32" != "yes"; then
5718 if test "$guest_agent_msi" = "yes"; then
5719 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5720 fi
5721 guest_agent_msi=no
5722elif ! has wixl; then
5723 if test "$guest_agent_msi" = "yes"; then
5724 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5725 fi
5726 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005727else
5728 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5729 # disabled explicitly
5730 if test "$guest_agent_msi" != "no"; then
5731 guest_agent_msi=yes
5732 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005733fi
5734
Michael Roth1a349042015-08-26 11:14:31 -05005735if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005736 if test "$guest_agent_with_vss" = "yes"; then
5737 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5738 fi
5739
5740 if test "$QEMU_GA_MANUFACTURER" = ""; then
5741 QEMU_GA_MANUFACTURER=QEMU
5742 fi
5743
5744 if test "$QEMU_GA_DISTRO" = ""; then
5745 QEMU_GA_DISTRO=Linux
5746 fi
5747
5748 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005749 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005750 fi
5751
Stefan Weil89138852016-05-16 15:10:20 +02005752 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005753
5754 case "$cpu" in
5755 x86_64)
5756 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5757 ;;
5758 i386)
5759 QEMU_GA_MSI_ARCH="-D Arch=32"
5760 ;;
5761 *)
5762 error_exit "CPU $cpu not supported for building installation package"
5763 ;;
5764 esac
5765fi
5766
Paolo Bonzinica35f782010-05-26 16:08:29 +02005767# Mac OS X ships with a broken assembler
5768roms=
5769if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5770 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5771 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005772 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005773 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5774 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5775 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005776 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5777 ld_i386_emulation="$emu"
5778 roms="optionrom"
5779 break
5780 fi
5781 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005782fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005783if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005784 roms="$roms spapr-rtas"
5785fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005786
Christian Borntraeger9933c302013-04-23 01:23:03 +00005787if test "$cpu" = "s390x" ; then
5788 roms="$roms s390-ccw"
5789fi
5790
Richard Henderson964c6fa2013-06-21 19:10:16 -07005791# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005792if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005793 textseg_addr=
5794 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005795 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5796 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005797 textseg_addr=0x60000000
5798 ;;
5799 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005800 # A 256M aligned address, high in the address space, with enough
5801 # room for the code_gen_buffer above it before the stack.
5802 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005803 ;;
5804 esac
5805 if [ -n "$textseg_addr" ]; then
5806 cat > $TMPC <<EOF
5807 int main(void) { return 0; }
5808EOF
5809 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5810 if ! compile_prog "" "$textseg_ldflags"; then
5811 # In case ld does not support -Ttext-segment, edit the default linker
5812 # script via sed to set the .text start addr. This is needed on FreeBSD
5813 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005814 if ! $ld --verbose >/dev/null 2>&1; then
5815 error_exit \
5816 "We need to link the QEMU user mode binaries at a" \
5817 "specific text address. Unfortunately your linker" \
5818 "doesn't support either the -Ttext-segment option or" \
5819 "printing the default linker script with --verbose." \
5820 "If you don't want the user mode binaries, pass the" \
5821 "--disable-user option to configure."
5822 fi
5823
Richard Henderson964c6fa2013-06-21 19:10:16 -07005824 $ld --verbose | sed \
5825 -e '1,/==================================================/d' \
5826 -e '/==================================================/,$d' \
5827 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5828 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5829 textseg_ldflags="-Wl,-T../config-host.ld"
5830 fi
5831 fi
5832fi
5833
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005834# Check that the C++ compiler exists and works with the C compiler.
5835# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5836if has $cxx; then
5837 cat > $TMPC <<EOF
5838int c_function(void);
5839int main(void) { return c_function(); }
5840EOF
5841
5842 compile_object
5843
5844 cat > $TMPCXX <<EOF
5845extern "C" {
5846 int c_function(void);
5847}
5848int c_function(void) { return 42; }
5849EOF
5850
5851 update_cxxflags
5852
5853 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5854 # C++ compiler $cxx works ok with C compiler $cc
5855 :
5856 else
5857 echo "C++ compiler $cxx does not work with C compiler $cc"
5858 echo "Disabling C++ specific optional code"
5859 cxx=
5860 fi
5861else
5862 echo "No C++ compiler available; disabling C++ specific optional code"
5863 cxx=
5864fi
5865
Cole Robinson02d34f62016-05-06 14:03:09 -04005866echo_version() {
5867 if test "$1" = "yes" ; then
5868 echo "($2)"
5869 fi
5870}
5871
Jan Kiszka50e12062014-10-02 10:03:55 +02005872# prepend pixman and ftd flags after all config tests are done
5873QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005874QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005875libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005876
bellard43ce4df2003-06-09 19:53:12 +00005877echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005878echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005879echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005880echo "binary directory $(eval echo $bindir)"
5881echo "library directory $(eval echo $libdir)"
5882echo "module directory $(eval echo $qemu_moddir)"
5883echo "libexec directory $(eval echo $libexecdir)"
5884echo "include directory $(eval echo $includedir)"
5885echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005886if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005887echo "local state directory $(eval echo $local_statedir)"
5888echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005889echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005890else
5891echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005892echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005893fi
bellard5a671352003-10-01 00:13:48 +00005894echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005895echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005896echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005897echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005898echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005899echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005900echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005901echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005902echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005903echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005904echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005905echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005906echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005907echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005908echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005909if test "$slirp" = "yes" ; then
5910 echo "smbd $smbd"
5911fi
Fam Zheng17969262014-02-10 14:48:56 +08005912echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005913echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005914echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005915echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005916echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005917echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005918echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005919echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005920echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005921if test "$darwin" = "yes" ; then
5922 echo "Cocoa support $cocoa"
5923fi
Stefan Weil89138852016-05-16 15:10:20 +02005924echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5925echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005926echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005927echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005928echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005929echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005930echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02005931echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005932echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005933echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02005934echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02005935echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005936echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005937echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005938echo "Block whitelist (rw) $block_drv_rw_whitelist"
5939echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305940echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005941echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01005942echo "VNC support $vnc"
5943if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005944 echo "VNC SASL support $vnc_sasl"
5945 echo "VNC JPEG support $vnc_jpeg"
5946 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005947fi
blueswir131422552007-04-16 18:27:06 +00005948if test -n "$sparc_cpu"; then
5949 echo "Target Sparc Arch $sparc_cpu"
5950fi
aliguorie37630c2009-04-22 15:19:10 +00005951echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005952if test "$xen" = "yes" ; then
5953 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005954 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005955fi
aurel322e4d9fb2008-04-08 06:01:02 +00005956echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005957echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005958echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005959echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005960echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005961echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005962echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005963echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005964echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005965echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01005966echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005967echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08005968echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005969echo "TCG support $tcg"
5970if test "$tcg" = "yes" ; then
5971 echo "TCG debug enabled $debug_tcg"
5972 echo "TCG interpreter $tcg_interpreter"
5973fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08005974echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04005975echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03005976echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00005977echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005978echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00005979echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005980echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005981echo "madvise $madvise"
5982echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005983echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05005984echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005985echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08005986echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005987echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005988echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005989echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005990echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005991if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005992echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005993fi
Stefan Weil89138852016-05-16 15:10:20 +02005994echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005995echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005996echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005997echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005998echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005999echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006000echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006001echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006002echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006003echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006004echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006005echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006006echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006007echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006008echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006009echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006010echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006011echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006012echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006013echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306014echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006015echo "gcov $gcov_tool"
6016echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006017echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006018echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006019echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006020echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006021echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006022echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006023echo "lzo support $lzo"
6024echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006025echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006026echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006027echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006028echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006029echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006030echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006031echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006032echo "VxHS block device $vxhs"
Richard Henderson8ca80762017-09-14 09:41:12 -07006033echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006034echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006035echo "libpmem support $libpmem"
bellard67b915a2004-03-31 23:37:16 +00006036
Stefan Weil1ba16962011-07-29 22:40:45 +02006037if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006038echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006039fi
bellard97a847b2003-08-10 21:36:04 +00006040
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006041if test "$sdlabi" = "1.2"; then
6042 echo
6043 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6044 echo "WARNING: future releases. Please switch to using SDL 2.0"
6045fi
6046
Peter Maydell898be3e2017-03-21 14:31:57 +00006047if test "$supported_cpu" = "no"; then
6048 echo
6049 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6050 echo
6051 echo "CPU host architecture $cpu support is not currently maintained."
6052 echo "The QEMU project intends to remove support for this host CPU in"
6053 echo "a future release if nobody volunteers to maintain it and to"
6054 echo "provide a build host for our continuous integration setup."
6055 echo "configure has succeeded and you can continue to build, but"
6056 echo "if you care about QEMU on this platform you should contact"
6057 echo "us upstream at qemu-devel@nongnu.org."
6058fi
6059
6060if test "$supported_os" = "no"; then
6061 echo
6062 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6063 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006064 echo "Host OS $targetos support is not currently maintained."
6065 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006066 echo "a future release if nobody volunteers to maintain it and to"
6067 echo "provide a build host for our continuous integration setup."
6068 echo "configure has succeeded and you can continue to build, but"
6069 echo "if you care about QEMU on this platform you should contact"
6070 echo "us upstream at qemu-devel@nongnu.org."
6071fi
6072
Juan Quintela98ec69a2009-07-16 18:34:18 +02006073config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006074
Stefan Weildbd99ae2013-01-01 18:33:44 +01006075echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6076
Juan Quintela98ec69a2009-07-16 18:34:18 +02006077echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006078echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006079
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006080echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006081echo "prefix=$prefix" >> $config_host_mak
6082echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006083echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006084echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006085echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006086echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006087echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006088echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006089echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006090echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006091echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006092echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006093if test "$mingw32" = "no" ; then
6094 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6095fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006096echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006097echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006098echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006099echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006100echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006101echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006102
Juan Quintela98ec69a2009-07-16 18:34:18 +02006103echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006104
aurel32f8393942009-04-13 18:45:38 +00006105if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006106 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006107fi
aliguori1625af82009-04-05 17:41:02 +00006108if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006109 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006110fi
bellard7d132992003-03-06 23:23:54 +00006111if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006112 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006113fi
bellard67b915a2004-03-31 23:37:16 +00006114if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006115 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006116 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006117 version_major=${rc_version%%.*}
6118 rc_version=${rc_version#*.}
6119 version_minor=${rc_version%%.*}
6120 rc_version=${rc_version#*.}
6121 version_subminor=${rc_version%%.*}
6122 version_micro=0
6123 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6124 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006125 if test "$guest_agent_with_vss" = "yes" ; then
6126 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006127 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006128 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6129 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006130 if test "$guest_agent_ntddscsi" = "yes" ; then
6131 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6132 fi
Michael Roth1a349042015-08-26 11:14:31 -05006133 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006134 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006135 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6136 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6137 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6138 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6139 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6140 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6141 fi
pbrook210fa552007-02-27 21:04:49 +00006142else
Juan Quintela35f4df22009-07-27 16:13:07 +02006143 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006144fi
blueswir1128ab2f2008-08-15 18:33:42 +00006145
Mark McLoughlindffcb712009-10-22 17:49:11 +01006146if test "$linux" = "yes" ; then
6147 echo "CONFIG_LINUX=y" >> $config_host_mak
6148fi
6149
bellard83fb7ad2004-07-05 21:25:26 +00006150if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006151 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006152fi
malcb29fe3e2008-11-18 01:42:22 +00006153
bellardec530c82006-04-25 22:36:06 +00006154if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006155 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006156fi
Andreas Färber179cf402010-09-20 00:50:43 +02006157if test "$haiku" = "yes" ; then
6158 echo "CONFIG_HAIKU=y" >> $config_host_mak
6159fi
bellard97a847b2003-08-10 21:36:04 +00006160if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006161 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006162fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006163if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006164 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006165fi
bellardc20709a2004-04-21 23:27:19 +00006166if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006167 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006168 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006169fi
ths8a16d272008-07-19 09:56:24 +00006170if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006171 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006172 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006173fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006174if test "$netmap" = "yes" ; then
6175 echo "CONFIG_NETMAP=y" >> $config_host_mak
6176fi
Gonglei015a33b2014-07-01 20:58:08 +08006177if test "$l2tpv3" = "yes" ; then
6178 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6179fi
Corey Bryant47e98652012-01-26 09:42:26 -05006180if test "$cap_ng" = "yes" ; then
6181 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6182fi
Juan Quintela2358a492009-07-27 16:13:25 +02006183echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006184for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006185 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006186 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006187 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006188 echo "$def=m" >> $config_host_mak ;;
6189 *)
6190 echo "$def=y" >> $config_host_mak ;;
6191 esac
malc0c58ac12008-06-25 21:04:05 +00006192done
Fam Zhengb1149912017-09-07 16:29:13 +08006193echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6194echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6195echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6196echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6197echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006198if test "$audio_pt_int" = "yes" ; then
6199 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6200fi
malcd5631632009-10-10 01:13:41 +04006201if test "$audio_win_int" = "yes" ; then
6202 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6203fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006204echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6205echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006206if test "$vnc" = "yes" ; then
6207 echo "CONFIG_VNC=y" >> $config_host_mak
6208fi
aliguori2f9606b2009-03-06 20:27:28 +00006209if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006210 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006211fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006212if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006213 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006214fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006215if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006216 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006217fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006218if test "$xkbcommon" = "yes" ; then
6219 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6220 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6221fi
aliguori76655d62009-03-06 20:27:37 +00006222if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006223 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006224fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006225if test "$xfs" = "yes" ; then
6226 echo "CONFIG_XFS=y" >> $config_host_mak
6227fi
Stefan Weil89138852016-05-16 15:10:20 +02006228qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006229echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006230echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006231echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006232echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006233if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006234 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006235fi
Fam Zheng17969262014-02-10 14:48:56 +08006236if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006237 # $shacmd can generate a hash started with digit, which the compiler doesn't
6238 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006239 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006240 echo "CONFIG_MODULES=y" >> $config_host_mak
6241fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006242if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6243 echo "CONFIG_X11=y" >> $config_host_mak
6244 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6245 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6246fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006247if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006248 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006249 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006250 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006251 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006252fi
6253if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006254 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006255fi
6256if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006257 echo "CONFIG_CURSES=m" >> $config_host_mak
6258 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6259 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006260fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006261if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006262 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006263fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006264if test "$accept4" = "yes" ; then
6265 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6266fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306267if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006268 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306269fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006270if test "$eventfd" = "yes" ; then
6271 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6272fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006273if test "$memfd" = "yes" ; then
6274 echo "CONFIG_MEMFD=y" >> $config_host_mak
6275fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006276if test "$have_usbfs" = "yes" ; then
6277 echo "CONFIG_USBFS=y" >> $config_host_mak
6278fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006279if test "$fallocate" = "yes" ; then
6280 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6281fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006282if test "$fallocate_punch_hole" = "yes" ; then
6283 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6284fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006285if test "$fallocate_zero_range" = "yes" ; then
6286 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6287fi
Kevin Wolfed911432014-09-29 17:12:59 +02006288if test "$posix_fallocate" = "yes" ; then
6289 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6290fi
Peter Maydellc727f472011-01-06 11:05:10 +00006291if test "$sync_file_range" = "yes" ; then
6292 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6293fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006294if test "$fiemap" = "yes" ; then
6295 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6296fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006297if test "$dup3" = "yes" ; then
6298 echo "CONFIG_DUP3=y" >> $config_host_mak
6299fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006300if test "$ppoll" = "yes" ; then
6301 echo "CONFIG_PPOLL=y" >> $config_host_mak
6302fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006303if test "$prctl_pr_set_timerslack" = "yes" ; then
6304 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6305fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006306if test "$epoll" = "yes" ; then
6307 echo "CONFIG_EPOLL=y" >> $config_host_mak
6308fi
6309if test "$epoll_create1" = "yes" ; then
6310 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6311fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006312if test "$sendfile" = "yes" ; then
6313 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6314fi
Riku Voipio51834342014-06-22 11:25:42 +01006315if test "$timerfd" = "yes" ; then
6316 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6317fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006318if test "$setns" = "yes" ; then
6319 echo "CONFIG_SETNS=y" >> $config_host_mak
6320fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006321if test "$clock_adjtime" = "yes" ; then
6322 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6323fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006324if test "$syncfs" = "yes" ; then
6325 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6326fi
aurel323b3f24a2009-04-15 16:12:13 +00006327if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006328 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006329fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006330if test "$inotify1" = "yes" ; then
6331 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6332fi
Peter Maydell401bc052017-09-05 13:19:32 +01006333if test "$sem_timedwait" = "yes" ; then
6334 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6335fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006336if test "$strchrnul" = "yes" ; then
6337 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6338fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006339if test "$byteswap_h" = "yes" ; then
6340 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6341fi
6342if test "$bswap_h" = "yes" ; then
6343 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6344fi
Alexander Graf769ce762009-05-11 17:41:42 +02006345if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006346 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006347 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006348 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006349fi
aurel322e4d9fb2008-04-08 06:01:02 +00006350if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006351 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006352 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006353fi
balrogfb599c92008-09-28 23:49:55 +00006354if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006355 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006356 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006357fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006358if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006359 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006360 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006361 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006362 if test "$gtk_gl" = "yes" ; then
6363 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6364 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006365fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006366echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006367if test "$gnutls" = "yes" ; then
6368 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6369fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006370if test "$gcrypt" = "yes" ; then
6371 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006372 if test "$gcrypt_hmac" = "yes" ; then
6373 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6374 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006375fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006376if test "$nettle" = "yes" ; then
6377 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006378 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006379fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006380if test "$tasn1" = "yes" ; then
6381 echo "CONFIG_TASN1=y" >> $config_host_mak
6382fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006383if test "$have_ifaddrs_h" = "yes" ; then
6384 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6385fi
Eric Blake6b39b062016-10-11 10:46:23 -05006386if test "$have_broken_size_max" = "yes" ; then
6387 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6388fi
Jan Vesely277abf12016-04-29 13:15:23 -04006389
6390# Work around a system header bug with some kernel/XFS header
6391# versions where they both try to define 'struct fsxattr':
6392# xfs headers will not try to redefine structs from linux headers
6393# if this macro is set.
6394if test "$have_fsxattr" = "yes" ; then
6395 echo "HAVE_FSXATTR=y" >> $config_host_mak
6396fi
Fam Zheng1efad062018-06-01 17:26:43 +08006397if test "$have_copy_file_range" = "yes" ; then
6398 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6399fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006400if test "$vte" = "yes" ; then
6401 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006402 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006403 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006404fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006405if test "$virglrenderer" = "yes" ; then
6406 echo "CONFIG_VIRGL=y" >> $config_host_mak
6407 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6408 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6409fi
aliguorie37630c2009-04-22 15:19:10 +00006410if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006411 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006412 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006413 if test "$xen_pv_domain_build" = "yes" ; then
6414 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6415 fi
aliguorie37630c2009-04-22 15:19:10 +00006416fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006417if test "$linux_aio" = "yes" ; then
6418 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6419fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006420if test "$attr" = "yes" ; then
6421 echo "CONFIG_ATTR=y" >> $config_host_mak
6422fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006423if test "$libattr" = "yes" ; then
6424 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6425fi
Meador Inge983eef52012-02-24 14:00:42 +05306426if test "$virtfs" = "yes" ; then
6427 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006428fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006429if test "$mpath" = "yes" ; then
6430 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006431 if test "$mpathpersist_new_api" = "yes"; then
6432 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6433 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006434fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006435if test "$vhost_scsi" = "yes" ; then
6436 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6437fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006438if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006439 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6440fi
Gonglei042cea22018-03-01 21:46:28 +08006441if test "$vhost_crypto" = "yes" ; then
6442 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6443fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006444if test "$vhost_vsock" = "yes" ; then
6445 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6446fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006447if test "$vhost_user" = "yes" ; then
6448 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6449fi
ths77755342008-11-27 15:45:16 +00006450if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006451 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006452fi
aliguoribf9298b2008-12-05 20:05:26 +00006453if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006454 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006455fi
aliguoriceb42de2009-04-07 18:43:28 +00006456if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006457 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006458fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006459if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006460 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006461fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006462if test "$membarrier" = "yes" ; then
6463 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6464fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006465if test "$signalfd" = "yes" ; then
6466 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6467fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006468if test "$tcg" = "yes"; then
6469 echo "CONFIG_TCG=y" >> $config_host_mak
6470 if test "$tcg_interpreter" = "yes" ; then
6471 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6472 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006473fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006474if test "$fdatasync" = "yes" ; then
6475 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6476fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006477if test "$madvise" = "yes" ; then
6478 echo "CONFIG_MADVISE=y" >> $config_host_mak
6479fi
6480if test "$posix_madvise" = "yes" ; then
6481 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6482fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006483if test "$posix_memalign" = "yes" ; then
6484 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6485fi
bellard97a847b2003-08-10 21:36:04 +00006486
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006487if test "$spice" = "yes" ; then
6488 echo "CONFIG_SPICE=y" >> $config_host_mak
6489fi
6490
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006491if test "$smartcard" = "yes" ; then
6492 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006493 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6494 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006495fi
6496
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006497if test "$libusb" = "yes" ; then
6498 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006499 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6500 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006501fi
6502
Hans de Goede69354a82011-07-19 11:04:10 +02006503if test "$usb_redir" = "yes" ; then
6504 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006505 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6506 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006507fi
6508
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006509if test "$opengl" = "yes" ; then
6510 echo "CONFIG_OPENGL=y" >> $config_host_mak
6511 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006512 if test "$opengl_dmabuf" = "yes" ; then
6513 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6514 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006515fi
6516
Yang Zhong5a22ab72017-12-20 21:16:46 +08006517if test "$malloc_trim" = "yes" ; then
6518 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6519fi
6520
Liang Li99f2dbd2016-03-08 13:53:16 +08006521if test "$avx2_opt" = "yes" ; then
6522 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6523fi
6524
qiaonuohan607dacd2014-02-18 14:11:30 +08006525if test "$lzo" = "yes" ; then
6526 echo "CONFIG_LZO=y" >> $config_host_mak
6527fi
6528
6529if test "$snappy" = "yes" ; then
6530 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6531fi
6532
Peter Wu6b383c02015-01-06 18:48:14 +01006533if test "$bzip2" = "yes" ; then
6534 echo "CONFIG_BZIP2=y" >> $config_host_mak
6535 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6536fi
6537
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006538if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006539 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006540 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6541 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006542fi
6543
Peter Lieven6542aa92014-02-03 10:26:13 +01006544if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006545 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6546 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006547fi
6548
Eduardo Otubof7945732012-08-14 18:44:05 -03006549if test "$seccomp" = "yes"; then
6550 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006551 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6552 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006553fi
6554
bellard83fb7ad2004-07-05 21:25:26 +00006555# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006556if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006557 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006558fi
6559
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006560if test "$localtime_r" = "yes" ; then
6561 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6562fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006563if test "$qom_cast_debug" = "yes" ; then
6564 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6565fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006566if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006567 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006568 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6569 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006570fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006571
Peter Maydell7c2acc72013-04-08 12:11:27 +01006572echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006573if test "$coroutine_pool" = "yes" ; then
6574 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6575else
6576 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6577fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306578
Peter Lieven7d992e42016-09-27 11:58:45 +02006579if test "$debug_stack_usage" = "yes" ; then
6580 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6581fi
6582
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006583if test "$crypto_afalg" = "yes" ; then
6584 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6585fi
6586
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306587if test "$open_by_handle_at" = "yes" ; then
6588 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6589fi
6590
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306591if test "$linux_magic_h" = "yes" ; then
6592 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6593fi
6594
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006595if test "$pragma_diagnostic_available" = "yes" ; then
6596 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006597fi
6598
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006599if test "$valgrind_h" = "yes" ; then
6600 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6601fi
6602
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006603if test "$have_asan_iface_fiber" = "yes" ; then
6604 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6605fi
6606
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006607if test "$has_environ" = "yes" ; then
6608 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6609fi
6610
Richard Henderson76a347e2012-12-28 14:17:02 -08006611if test "$cpuid_h" = "yes" ; then
6612 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6613fi
6614
Richard Hendersonf5401662013-02-16 12:46:59 -08006615if test "$int128" = "yes" ; then
6616 echo "CONFIG_INT128=y" >> $config_host_mak
6617fi
6618
Richard Henderson7ebee432016-06-29 21:10:59 -07006619if test "$atomic128" = "yes" ; then
6620 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6621fi
6622
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006623if test "$cmpxchg128" = "yes" ; then
6624 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6625fi
6626
Richard Hendersondf79b992016-09-02 12:23:57 -07006627if test "$atomic64" = "yes" ; then
6628 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6629fi
6630
Richard Hendersondb432672017-09-15 14:11:45 -07006631if test "$vector16" = "yes" ; then
6632 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6633fi
6634
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006635if test "$getauxval" = "yes" ; then
6636 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6637fi
6638
Bharata B Raoeb100392012-09-24 14:42:45 +05306639if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006640 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006641 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6642 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306643fi
6644
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006645if test "$glusterfs_xlator_opt" = "yes" ; then
6646 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6647fi
6648
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306649if test "$glusterfs_discard" = "yes" ; then
6650 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6651fi
6652
Niels de Vosdf3a4292017-05-28 12:01:14 +05306653if test "$glusterfs_fallocate" = "yes" ; then
6654 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6655fi
6656
Bharata B Rao7c815372013-12-21 14:51:25 +05306657if test "$glusterfs_zerofill" = "yes" ; then
6658 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6659fi
6660
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006661if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006662 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006663 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6664 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006665fi
6666
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006667if test "$live_block_migration" = "yes" ; then
6668 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6669fi
6670
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006671if test "$tpm" = "yes"; then
6672 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006673 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006674 if test "$tpm_passthrough" = "yes"; then
6675 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6676 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006677 # TPM emulator support?
6678 if test "$tpm_emulator" = "yes"; then
6679 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6680 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006681fi
6682
Lluís Vilanova5b808272014-05-27 15:02:14 +02006683echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6684if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006685 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306686fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006687if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006688 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6689 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006690 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006691fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006692if have_backend "log"; then
6693 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006694fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006695if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006696 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6697fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006698if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006699 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6700 if test "$trace_backend_stap" = "yes" ; then
6701 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6702 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006703fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006704if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006705 if test "$linux" = "yes" ; then
6706 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006707 else
Stewart Smith21684af2014-01-24 12:39:10 +11006708 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006709 fi
6710fi
Paul Durrant0a852412016-08-04 14:44:14 +01006711if have_backend "syslog"; then
6712 if test "$posix_syslog" = "yes" ; then
6713 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6714 else
6715 feature_not_found "syslog(trace backend)" "syslog not available"
6716 fi
6717fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006718echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6719
Michael R. Hines2da776d2013-07-22 10:01:54 -04006720if test "$rdma" = "yes" ; then
6721 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006722 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006723fi
6724
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006725if test "$pvrdma" = "yes" ; then
6726 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6727fi
6728
Laurent Vivier575b22b2016-06-02 22:14:15 +02006729if test "$have_rtnetlink" = "yes" ; then
6730 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6731fi
6732
Klim Kireeved279a02018-01-12 12:01:19 +03006733if test "$libxml2" = "yes" ; then
6734 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6735 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6736 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6737fi
6738
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006739if test "$replication" = "yes" ; then
6740 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6741fi
6742
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006743if test "$have_af_vsock" = "yes" ; then
6744 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6745fi
6746
Christopher Covington4d043512016-12-28 15:04:33 -05006747if test "$have_sysmacros" = "yes" ; then
6748 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6749fi
6750
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006751if test "$have_static_assert" = "yes" ; then
6752 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6753fi
6754
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006755if test "$have_utmpx" = "yes" ; then
6756 echo "HAVE_UTMPX=y" >> $config_host_mak
6757fi
6758
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006759if test "$ivshmem" = "yes" ; then
6760 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6761fi
Richard Hendersone219c492017-09-28 09:01:23 -07006762if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006763 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6764fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006765if test "$debug_mutex" = "yes" ; then
6766 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6767fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006768
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006769# Hold two types of flag:
6770# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6771# a thread we have a handle to
6772# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6773# platform
6774if test "$pthread_setname_np" = "yes" ; then
6775 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6776 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6777fi
6778
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006779if test "$vxhs" = "yes" ; then
6780 echo "CONFIG_VXHS=y" >> $config_host_mak
6781 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6782fi
6783
Junyan He17824402018-07-18 15:47:59 +08006784if test "$libpmem" = "yes" ; then
6785 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6786fi
6787
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006788if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006789 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006790elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006791 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006792elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006793 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006794elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006795 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006796elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006797 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006798else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006799 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006800fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006801QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006802
Juan Quintela98ec69a2009-07-16 18:34:18 +02006803echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006804echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006805echo "MAKE=$make" >> $config_host_mak
6806echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006807echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6808echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006809echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6810echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006811echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006812echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006813if $iasl -h > /dev/null 2>&1; then
6814 echo "IASL=$iasl" >> $config_host_mak
6815fi
Juan Quintela804edf22009-07-27 16:12:49 +02006816echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006817echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006818echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006819echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006820echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006821echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006822echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006823echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006824echo "OBJCOPY=$objcopy" >> $config_host_mak
6825echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006826echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006827echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006828echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006829echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006830echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006831echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006832echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006833echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006834if test "$sparse" = "yes" ; then
6835 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006836 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006837 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006838 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6839 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6840fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006841if test "$cross_prefix" != ""; then
6842 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6843else
6844 echo "AUTOCONF_HOST := " >> $config_host_mak
6845fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006846echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006847echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006848echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006849echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006850echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006851echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006852echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006853echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006854echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006855echo "DSOSUF=$DSOSUF" >> $config_host_mak
6856echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006857echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006858echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6859echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006860echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006861echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006862if test "$gcov" = "yes" ; then
6863 echo "CONFIG_GCOV=y" >> $config_host_mak
6864 echo "GCOV=$gcov_tool" >> $config_host_mak
6865fi
Juan Quintela804edf22009-07-27 16:12:49 +02006866
Alex Bennée51a12b52018-04-04 14:24:39 +01006867if test "$docker" != "no"; then
6868 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6869fi
6870
Peter Maydell6efd7512011-11-30 11:59:04 +00006871# use included Linux headers
6872if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006873 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006874 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006875 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006876 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006877 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02006878 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006879 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006880 ;;
6881 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006882 linux_arch=s390
6883 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006884 aarch64)
6885 linux_arch=arm64
6886 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006887 mips64)
6888 linux_arch=mips
6889 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006890 *)
6891 # For most CPUs the kernel architecture name and QEMU CPU name match.
6892 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006893 ;;
6894 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006895 # For non-KVM architectures we will not have asm headers
6896 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6897 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6898 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006899fi
6900
bellard1d14ffa2005-10-30 18:58:22 +00006901for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006902target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006903config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006904target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006905target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006906
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006907case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02006908 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 +02006909 target_bigendian=yes
6910 ;;
6911esac
bellard97a847b2003-08-10 21:36:04 +00006912target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006913target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006914target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006915target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006916case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006917 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006918 target_softmmu="yes"
6919 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006920 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006921 target_user_only="yes"
6922 target_linux_user="yes"
6923 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006924 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00006925 target_user_only="yes"
6926 target_bsd_user="yes"
6927 ;;
pbrook9e407a82007-05-26 16:38:53 +00006928 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006929 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006930 exit 1
6931 ;;
6932esac
ths831b7822007-01-18 20:06:33 +00006933
Alex Bennéed75402b2018-04-04 20:27:05 +01006934target_compiler=""
6935target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01006936target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01006937
bellard97a847b2003-08-10 21:36:04 +00006938mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006939echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006940
pbrooke5fe0c52006-06-11 13:32:59 +00006941bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00006942mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02006943interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00006944gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00006945
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006946TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02006947TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02006948TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02006949
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006950case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00006951 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04006952 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006953 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006954 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01006955 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00006956 ;;
6957 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006958 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04006959 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006960 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006961 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00006962 ;;
6963 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11006964 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01006965 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00006966 ;;
6967 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006968 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00006969 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006970 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00006971 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006972 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01006973 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00006974 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00006975 aarch64|aarch64_be)
6976 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01006977 TARGET_BASE_ARCH=arm
6978 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006979 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01006980 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 +01006981 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01006982 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01006983 ;;
aurel322408a522008-04-20 20:19:44 +00006984 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01006985 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00006986 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08006987 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08006988 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01006989 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08006990 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01006991 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01006992 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01006993 ;;
aurel322408a522008-04-20 20:19:44 +00006994 m68k)
aurel322408a522008-04-20 20:19:44 +00006995 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02006996 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006997 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00006998 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006999 microblaze|microblazeel)
7000 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007001 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007002 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007003 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007004 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007005 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007006 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007007 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007008 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007009 ;;
7010 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007011 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007012 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007013 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007014 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007015 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007016 ;;
7017 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007018 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007019 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007020 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007021 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007022 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007023 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007024 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007025 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007026 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007027 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007028 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007029 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007030 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007031 TARGET_ARCH=openrisc
7032 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007033 ;;
aurel322408a522008-04-20 20:19:44 +00007034 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007035 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007036 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007037 ;;
aurel322408a522008-04-20 20:19:44 +00007038 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007039 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007040 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307041 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007042 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 +01007043 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007044 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007045 ppc64le)
7046 TARGET_ARCH=ppc64
7047 TARGET_BASE_ARCH=ppc
7048 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307049 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007050 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 +01007051 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007052 ;;
aurel322408a522008-04-20 20:19:44 +00007053 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007054 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007055 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007056 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007057 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007058 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 +01007059 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007060 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007061 riscv32)
7062 TARGET_BASE_ARCH=riscv
7063 TARGET_ABI_DIR=riscv
7064 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007065 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007066 ;;
7067 riscv64)
7068 TARGET_BASE_ARCH=riscv
7069 TARGET_ABI_DIR=riscv
7070 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007071 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007072 ;;
aurel322408a522008-04-20 20:19:44 +00007073 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007074 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007075 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007076 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007077 ;;
7078 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007079 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007080 ;;
7081 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007082 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007083 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007084 ;;
7085 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007086 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007087 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007088 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007089 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007090 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007091 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007092 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007093 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007094 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 +01007095 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007096 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007097 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007098 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007099 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007100 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007101 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007102 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007103 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007104 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007105 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007106 xtensa|xtensaeb)
7107 TARGET_ARCH=xtensa
Max Filippov9fb40342017-03-06 17:17:43 -08007108 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007109 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007110 ;;
aurel322408a522008-04-20 20:19:44 +00007111 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007112 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007113 ;;
7114esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007115# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7116if [ "$TARGET_BASE_ARCH" = "" ]; then
7117 TARGET_BASE_ARCH=$TARGET_ARCH
7118fi
7119
Alex Bennéed75402b2018-04-04 20:27:05 +01007120# Do we have a cross compiler for this target?
7121if has $target_compiler; then
7122
7123 write_c_skeleton
7124
Alex Bennée716a5072018-04-10 12:19:40 +01007125 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007126 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007127 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007128 target_compiler=""
7129 else
7130 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7131 target_compiler_static="n"
7132 fi
7133 else
7134 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7135 target_compiler_static="y"
7136 fi
7137else
7138 target_compiler=""
7139fi
7140
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007141symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7142
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007143upper() {
7144 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7145}
7146
Stefan Weil89138852016-05-16 15:10:20 +02007147target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007148echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007149echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007150echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007151if [ "$TARGET_ABI_DIR" = "" ]; then
7152 TARGET_ABI_DIR=$TARGET_ARCH
7153fi
Juan Quintela25be2102009-10-07 02:41:00 +02007154echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007155if [ "$HOST_VARIANT_DIR" != "" ]; then
7156 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7157fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007158
7159if supported_xen_target $target; then
7160 echo "CONFIG_XEN=y" >> $config_target_mak
7161 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007162 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007163 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007164fi
7165if supported_kvm_target $target; then
7166 echo "CONFIG_KVM=y" >> $config_target_mak
7167 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007168 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007169 if test "$vhost_user" = "yes" ; then
7170 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7171 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007172 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007173fi
7174if supported_hax_target $target; then
7175 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007176fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007177if supported_hvf_target $target; then
7178 echo "CONFIG_HVF=y" >> $config_target_mak
7179fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007180if supported_whpx_target $target; then
7181 echo "CONFIG_WHPX=y" >> $config_target_mak
7182fi
bellardde83cd02003-06-15 20:25:43 +00007183if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007184 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007185fi
7186if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007187 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007188 if test "$mttcg" = "yes" ; then
7189 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7190 fi
bellardde83cd02003-06-15 20:25:43 +00007191fi
bellard997344f2003-10-27 21:10:39 +00007192if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007193 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007194 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007195fi
ths831b7822007-01-18 20:06:33 +00007196if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007197 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007198fi
pbrook56aebc82008-10-11 17:55:29 +00007199list=""
7200if test ! -z "$gdb_xml_files" ; then
7201 for x in $gdb_xml_files; do
7202 list="$list $source_path/gdb-xml/$x"
7203 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007204 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007205fi
bellardde83cd02003-06-15 20:25:43 +00007206
pbrooke5fe0c52006-06-11 13:32:59 +00007207if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007208 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007209fi
blueswir184778502008-10-26 20:33:16 +00007210if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007211 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007212fi
bellard5b0753e2005-03-01 21:37:28 +00007213
Alex Bennéed75402b2018-04-04 20:27:05 +01007214if test -n "$target_compiler"; then
7215 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7216
7217 if test -n "$target_compiler_static"; then
7218 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7219 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007220
7221 if test -n "$target_compiler_cflags"; then
7222 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7223 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007224fi
7225
Alex Bennée716a5072018-04-10 12:19:40 +01007226
Juan Quintela4afddb52009-08-03 14:46:45 +02007227# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007228
Juan Quintela4afddb52009-08-03 14:46:45 +02007229cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007230ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007231
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007232disas_config() {
7233 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7234 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7235}
7236
Juan Quintela64656022009-08-03 14:46:53 +02007237for i in $ARCH $TARGET_BASE_ARCH ; do
7238 case "$i" in
7239 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007240 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007241 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007242 aarch64)
7243 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007244 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007245 fi
7246 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007247 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007248 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007249 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007250 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007251 fi
Juan Quintela64656022009-08-03 14:46:53 +02007252 ;;
7253 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007254 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007255 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007256 hppa)
7257 disas_config "HPPA"
7258 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007259 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007260 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007261 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007262 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007263 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007264 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007265 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007266 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007267 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007268 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007269 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007270 ;;
7271 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007272 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007273 if test -n "${cxx}"; then
7274 disas_config "NANOMIPS"
7275 fi
Juan Quintela64656022009-08-03 14:46:53 +02007276 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007277 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007278 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007279 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007280 nios2)
7281 disas_config "NIOS2"
7282 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007283 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007284 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007285 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007286 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007287 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007288 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007289 riscv)
7290 disas_config "RISCV"
7291 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007292 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007293 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007294 ;;
7295 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007296 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007297 ;;
7298 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007299 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007300 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007301 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007302 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007303 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007304 esac
7305done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007306if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007307 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007308fi
Juan Quintela64656022009-08-03 14:46:53 +02007309
Juan Quintela6ee71262009-08-03 14:46:47 +02007310case "$ARCH" in
7311alpha)
7312 # Ensure there's only a single GP
7313 cflags="-msmall-data $cflags"
7314;;
7315esac
7316
Juan Quintelad02c1db2009-08-03 14:46:50 +02007317if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007318 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007319 if test "$target_linux_user" = "yes" ; then
7320 cflags="-p $cflags"
7321 ldflags="-p $ldflags"
7322 fi
7323 if test "$target_softmmu" = "yes" ; then
7324 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007325 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007326 fi
7327fi
7328
Juan Quintela9b8e1112009-08-03 14:46:46 +02007329if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007330 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007331fi
Juan Quintelafa282482009-07-22 22:37:39 +02007332
Christian Borntraegere9a35912017-08-23 12:16:23 +02007333# Newer kernels on s390 check for an S390_PGSTE program header and
7334# enable the pgste page table extensions in that case. This makes
7335# the vm.allocate_pgste sysctl unnecessary. We enable this program
7336# header if
7337# - we build on s390x
7338# - we build the system emulation for s390x (qemu-system-s390x)
7339# - KVM is enabled
7340# - the linker supports --s390-pgste
7341if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7342 if ld_has --s390-pgste ; then
7343 ldflags="-Wl,--s390-pgste $ldflags"
7344 fi
7345fi
7346
Juan Quintela25be2102009-10-07 02:41:00 +02007347echo "LDFLAGS+=$ldflags" >> $config_target_mak
7348echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007349
bellard97a847b2003-08-10 21:36:04 +00007350done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007351
Alex Bennéed75402b2018-04-04 20:27:05 +01007352if test -n "$enabled_cross_compilers"; then
7353 echo
7354 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7355fi
7356
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007357if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007358 echo "config-host.h: subdir-dtc" >> $config_host_mak
7359fi
Richard Hendersone219c492017-09-28 09:01:23 -07007360if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7361 echo "config-host.h: subdir-capstone" >> $config_host_mak
7362fi
7363if test -n "$LIBCAPSTONE"; then
7364 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7365fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007366
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007367if test "$numa" = "yes"; then
7368 echo "CONFIG_NUMA=y" >> $config_host_mak
7369fi
7370
John Snowfd0e6052015-03-25 18:57:39 -04007371if test "$ccache_cpp2" = "yes"; then
7372 echo "export CCACHE_CPP2=y" >> $config_host_mak
7373fi
7374
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007375# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007376DIRS="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 -05007377DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007378DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007379DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007380DIRS="$DIRS roms/seabios roms/vgabios"
Anthony Liguoric09015d2012-01-10 13:10:42 -06007381FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7382FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02007383FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -05007384FILES="$FILES tests/fp/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007385FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02007386FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007387FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007388FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01007389FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01007390FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07007391for bios_file in \
7392 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007393 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007394 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007395 $source_path/pc-bios/*.rom \
7396 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007397 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007398 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007399 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007400 $source_path/pc-bios/palcode-*
7401do
Stefan Weil89138852016-05-16 15:10:20 +02007402 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007403done
Stefan Weil89138852016-05-16 15:10:20 +02007404for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007405do
Stefan Weil89138852016-05-16 15:10:20 +02007406 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007407done
Su Hang645d3cb2018-08-16 14:05:28 +01007408for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7409do
7410 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7411done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007412mkdir -p $DIRS
7413for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007414 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007415 symlink "$source_path/$f" "$f"
7416 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007417done
Paul Brook1ad21342009-05-19 16:17:58 +01007418
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007419# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007420for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007421 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007422 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007423 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007424 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007425 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007426 echo "CC=$cc" >> $config_mak
7427 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007428 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007429 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007430 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007431 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007432 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007433done
7434
Marc-André Lureaufe310172016-06-15 13:06:00 +02007435# set up tests data directory
Philippe Mathieu-Daudé1b145d52018-06-12 14:34:37 -03007436for tests_subdir in acceptance data; do
7437 if [ ! -e tests/$tests_subdir ]; then
7438 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7439 fi
7440done
Marc-André Lureaufe310172016-06-15 13:06:00 +02007441
Max Reitz76c75602014-05-24 23:24:56 +02007442# set up qemu-iotests in this build directory
7443iotests_common_env="tests/qemu-iotests/common.env"
7444iotests_check="tests/qemu-iotests/check"
7445
7446echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7447echo >> "$iotests_common_env"
7448echo "export PYTHON='$python'" >> "$iotests_common_env"
7449
7450if [ ! -e "$iotests_check" ]; then
7451 symlink "$source_path/$iotests_check" "$iotests_check"
7452fi
7453
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007454# Save the configure command line for later reuse.
7455cat <<EOD >config.status
7456#!/bin/sh
7457# Generated by configure.
7458# Run this file to recreate the current configuration.
7459# Compiler output produced by configure, useful for debugging
7460# configure, is in config.log if it exists.
7461EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007462
7463preserve_env() {
7464 envname=$1
7465
7466 eval envval=\$$envname
7467
7468 if test -n "$envval"
7469 then
7470 echo "$envname='$envval'" >> config.status
7471 echo "export $envname" >> config.status
7472 else
7473 echo "unset $envname" >> config.status
7474 fi
7475}
7476
7477# Preserve various env variables that influence what
7478# features/build target configure will detect
7479preserve_env AR
7480preserve_env AS
7481preserve_env CC
7482preserve_env CPP
7483preserve_env CXX
7484preserve_env INSTALL
7485preserve_env LD
7486preserve_env LD_LIBRARY_PATH
7487preserve_env LIBTOOL
7488preserve_env MAKE
7489preserve_env NM
7490preserve_env OBJCOPY
7491preserve_env PATH
7492preserve_env PKG_CONFIG
7493preserve_env PKG_CONFIG_LIBDIR
7494preserve_env PKG_CONFIG_PATH
7495preserve_env PYTHON
7496preserve_env SDL_CONFIG
7497preserve_env SDL2_CONFIG
7498preserve_env SMBD
7499preserve_env STRIP
7500preserve_env WINDRES
7501
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007502printf "exec" >>config.status
7503printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007504echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007505chmod +x config.status
7506
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007507rm -r "$TMPDIR1"