blob: 1c473ce95ba18bb1724739c071aa26442a00bb44 [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
Liang Li99f2dbd2016-03-08 13:53:16 +08002154#########################################
balrogac629222008-10-11 09:56:04 +00002155# zlib check
2156
Alon Levy1ece9902011-07-26 12:30:40 +03002157if test "$zlib" != "no" ; then
2158 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00002159#include <zlib.h>
2160int main(void) { zlibVersion(); return 0; }
2161EOF
Alon Levy1ece9902011-07-26 12:30:40 +03002162 if compile_prog "" "-lz" ; then
2163 :
2164 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002165 error_exit "zlib check failed" \
2166 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03002167 fi
balrogac629222008-10-11 09:56:04 +00002168fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00002169LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00002170
2171##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002172# lzo check
2173
2174if test "$lzo" != "no" ; then
2175 cat > $TMPC << EOF
2176#include <lzo/lzo1x.h>
2177int main(void) { lzo_version(); return 0; }
2178EOF
2179 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002180 libs_softmmu="$libs_softmmu -llzo2"
2181 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002182 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002183 if test "$lzo" = "yes"; then
2184 feature_not_found "liblzo2" "Install liblzo2 devel"
2185 fi
2186 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002187 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002188fi
2189
2190##########################################
2191# snappy check
2192
2193if test "$snappy" != "no" ; then
2194 cat > $TMPC << EOF
2195#include <snappy-c.h>
2196int main(void) { snappy_max_compressed_length(4096); return 0; }
2197EOF
2198 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002199 libs_softmmu="$libs_softmmu -lsnappy"
2200 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002201 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002202 if test "$snappy" = "yes"; then
2203 feature_not_found "libsnappy" "Install libsnappy devel"
2204 fi
2205 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002206 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002207fi
2208
2209##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002210# bzip2 check
2211
2212if test "$bzip2" != "no" ; then
2213 cat > $TMPC << EOF
2214#include <bzlib.h>
2215int main(void) { BZ2_bzlibVersion(); return 0; }
2216EOF
2217 if compile_prog "" "-lbz2" ; then
2218 bzip2="yes"
2219 else
2220 if test "$bzip2" = "yes"; then
2221 feature_not_found "libbzip2" "Install libbzip2 devel"
2222 fi
2223 bzip2="no"
2224 fi
2225fi
2226
2227##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002228# libseccomp check
2229
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002230libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002231if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002232 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002233 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002234 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002235 arm|aarch64)
2236 libseccomp_minver="2.2.3"
2237 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002238 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002239 libseccomp_minver="2.3.0"
2240 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002241 *)
2242 libseccomp_minver=""
2243 ;;
2244 esac
2245
2246 if test "$libseccomp_minver" != "" &&
2247 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002248 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2249 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002250 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002251 else
Andrew Jones693e5912015-09-30 11:59:18 -04002252 if test "$seccomp" = "yes" ; then
2253 if test "$libseccomp_minver" != "" ; then
2254 feature_not_found "libseccomp" \
2255 "Install libseccomp devel >= $libseccomp_minver"
2256 else
2257 feature_not_found "libseccomp" \
2258 "libseccomp is not supported for host cpu $cpu"
2259 fi
2260 fi
2261 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002262 fi
2263fi
2264##########################################
aliguorie37630c2009-04-22 15:19:10 +00002265# xen probe
2266
Juan Quintelafc321b42009-08-12 18:29:55 +02002267if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002268 # Check whether Xen library path is specified via --extra-ldflags to avoid
2269 # overriding this setting with pkg-config output. If not, try pkg-config
2270 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002271
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002272 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2273 $pkg_config --exists xencontrol ; then
2274 xen_ctrl_version="$(printf '%d%02d%02d' \
2275 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2276 xen=yes
2277 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2278 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002279 if $pkg_config --exists xentoolcore; then
2280 xen_pc="$xen_pc xentoolcore"
2281 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002282 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2283 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2284 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2285 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002286
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002287 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002288 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002289
2290 # First we test whether Xen headers and libraries are available.
2291 # If no, we are done and there is no Xen support.
2292 # If yes, more tests are run to detect the Xen version.
2293
2294 # Xen (any)
2295 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002296#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002297int main(void) {
2298 return 0;
2299}
2300EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002301 if ! compile_prog "" "$xen_libs" ; then
2302 # Xen not found
2303 if test "$xen" = "yes" ; then
2304 feature_not_found "xen" "Install xen devel"
2305 fi
2306 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002307
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002308 # Xen unstable
2309 elif
2310 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002311#undef XC_WANT_COMPAT_DEVICEMODEL_API
2312#define __XEN_TOOLS__
2313#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002314#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002315int main(void) {
2316 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002317 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002318
2319 xd = xendevicemodel_open(0, 0);
2320 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2321
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002322 xfmem = xenforeignmemory_open(0, 0);
2323 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2324
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002325 return 0;
2326}
2327EOF
2328 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2329 then
2330 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2331 xen_ctrl_version=41100
2332 xen=yes
2333 elif
2334 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002335#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2336#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002337#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002338int main(void) {
2339 xenforeignmemory_handle *xfmem;
2340
2341 xfmem = xenforeignmemory_open(0, 0);
2342 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002343 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002344
2345 return 0;
2346}
2347EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002348 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002349 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002350 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002351 xen_ctrl_version=41000
2352 xen=yes
2353 elif
2354 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002355#undef XC_WANT_COMPAT_DEVICEMODEL_API
2356#define __XEN_TOOLS__
2357#include <xendevicemodel.h>
2358int main(void) {
2359 xendevicemodel_handle *xd;
2360
2361 xd = xendevicemodel_open(0, 0);
2362 xendevicemodel_close(xd);
2363
2364 return 0;
2365}
2366EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002367 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2368 then
2369 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2370 xen_ctrl_version=40900
2371 xen=yes
2372 elif
2373 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002374/*
2375 * If we have stable libs the we don't want the libxc compat
2376 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002377 *
2378 * Also, check if xengnttab_grant_copy_segment_t is defined and
2379 * grant copy operation is implemented.
2380 */
2381#undef XC_WANT_COMPAT_EVTCHN_API
2382#undef XC_WANT_COMPAT_GNTTAB_API
2383#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2384#include <xenctrl.h>
2385#include <xenstore.h>
2386#include <xenevtchn.h>
2387#include <xengnttab.h>
2388#include <xenforeignmemory.h>
2389#include <stdint.h>
2390#include <xen/hvm/hvm_info_table.h>
2391#if !defined(HVM_MAX_VCPUS)
2392# error HVM_MAX_VCPUS not defined
2393#endif
2394int main(void) {
2395 xc_interface *xc = NULL;
2396 xenforeignmemory_handle *xfmem;
2397 xenevtchn_handle *xe;
2398 xengnttab_handle *xg;
2399 xen_domain_handle_t handle;
2400 xengnttab_grant_copy_segment_t* seg = NULL;
2401
2402 xs_daemon_open();
2403
2404 xc = xc_interface_open(0, 0, 0);
2405 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2406 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2407 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2408 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2409 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2410
2411 xfmem = xenforeignmemory_open(0, 0);
2412 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2413
2414 xe = xenevtchn_open(0, 0);
2415 xenevtchn_fd(xe);
2416
2417 xg = xengnttab_open(0, 0);
2418 xengnttab_grant_copy(xg, 0, seg);
2419
2420 return 0;
2421}
2422EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002423 compile_prog "" "$xen_libs $xen_stable_libs"
2424 then
2425 xen_ctrl_version=40800
2426 xen=yes
2427 elif
2428 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002429/*
2430 * If we have stable libs the we don't want the libxc compat
2431 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002432 */
2433#undef XC_WANT_COMPAT_EVTCHN_API
2434#undef XC_WANT_COMPAT_GNTTAB_API
2435#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2436#include <xenctrl.h>
2437#include <xenstore.h>
2438#include <xenevtchn.h>
2439#include <xengnttab.h>
2440#include <xenforeignmemory.h>
2441#include <stdint.h>
2442#include <xen/hvm/hvm_info_table.h>
2443#if !defined(HVM_MAX_VCPUS)
2444# error HVM_MAX_VCPUS not defined
2445#endif
2446int main(void) {
2447 xc_interface *xc = NULL;
2448 xenforeignmemory_handle *xfmem;
2449 xenevtchn_handle *xe;
2450 xengnttab_handle *xg;
2451 xen_domain_handle_t handle;
2452
2453 xs_daemon_open();
2454
2455 xc = xc_interface_open(0, 0, 0);
2456 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2457 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2458 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2459 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2460 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2461
2462 xfmem = xenforeignmemory_open(0, 0);
2463 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2464
2465 xe = xenevtchn_open(0, 0);
2466 xenevtchn_fd(xe);
2467
2468 xg = xengnttab_open(0, 0);
2469 xengnttab_map_grant_ref(xg, 0, 0, 0);
2470
2471 return 0;
2472}
2473EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002474 compile_prog "" "$xen_libs $xen_stable_libs"
2475 then
2476 xen_ctrl_version=40701
2477 xen=yes
2478 elif
2479 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002480#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002481#include <stdint.h>
2482int main(void) {
2483 xc_interface *xc = NULL;
2484 xen_domain_handle_t handle;
2485 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2486 return 0;
2487}
2488EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002489 compile_prog "" "$xen_libs"
2490 then
2491 xen_ctrl_version=40700
2492 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002493
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002494 # Xen 4.6
2495 elif
2496 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002497#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002498#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002499#include <stdint.h>
2500#include <xen/hvm/hvm_info_table.h>
2501#if !defined(HVM_MAX_VCPUS)
2502# error HVM_MAX_VCPUS not defined
2503#endif
2504int main(void) {
2505 xc_interface *xc;
2506 xs_daemon_open();
2507 xc = xc_interface_open(0, 0, 0);
2508 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2509 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002510 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002511 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002512 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002513 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002514 return 0;
2515}
2516EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002517 compile_prog "" "$xen_libs"
2518 then
2519 xen_ctrl_version=40600
2520 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002521
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002522 # Xen 4.5
2523 elif
2524 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002525#include <xenctrl.h>
2526#include <xenstore.h>
2527#include <stdint.h>
2528#include <xen/hvm/hvm_info_table.h>
2529#if !defined(HVM_MAX_VCPUS)
2530# error HVM_MAX_VCPUS not defined
2531#endif
2532int main(void) {
2533 xc_interface *xc;
2534 xs_daemon_open();
2535 xc = xc_interface_open(0, 0, 0);
2536 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2537 xc_gnttab_open(NULL, 0);
2538 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2539 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002540 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2541 return 0;
2542}
2543EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002544 compile_prog "" "$xen_libs"
2545 then
2546 xen_ctrl_version=40500
2547 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002548
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002549 elif
2550 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002551#include <xenctrl.h>
2552#include <xenstore.h>
2553#include <stdint.h>
2554#include <xen/hvm/hvm_info_table.h>
2555#if !defined(HVM_MAX_VCPUS)
2556# error HVM_MAX_VCPUS not defined
2557#endif
2558int main(void) {
2559 xc_interface *xc;
2560 xs_daemon_open();
2561 xc = xc_interface_open(0, 0, 0);
2562 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2563 xc_gnttab_open(NULL, 0);
2564 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2565 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002566 return 0;
2567}
2568EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002569 compile_prog "" "$xen_libs"
2570 then
2571 xen_ctrl_version=40200
2572 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002573
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002574 else
2575 if test "$xen" = "yes" ; then
2576 feature_not_found "xen (unsupported version)" \
2577 "Install a supported xen (xen 4.2 or newer)"
2578 fi
2579 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002580 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002581
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002582 if test "$xen" = yes; then
2583 if test $xen_ctrl_version -ge 40701 ; then
2584 libs_softmmu="$xen_stable_libs $libs_softmmu"
2585 fi
2586 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002587 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002588 fi
aliguorie37630c2009-04-22 15:19:10 +00002589fi
2590
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002591if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002592 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002593 xen_pci_passthrough=yes
2594 else
2595 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002596 error_exit "User requested feature Xen PCI Passthrough" \
2597 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002598 fi
2599 xen_pci_passthrough=no
2600 fi
2601fi
2602
Ian Campbell64a7ad62016-01-15 13:23:44 +00002603if test "$xen_pv_domain_build" = "yes" &&
2604 test "$xen" != "yes"; then
2605 error_exit "User requested Xen PV domain builder support" \
2606 "which requires Xen support."
2607fi
2608
aliguorie37630c2009-04-22 15:19:10 +00002609##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002610# Windows Hypervisor Platform accelerator (WHPX) check
2611if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002612 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002613 whpx="yes"
2614 else
2615 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002616 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002617 fi
2618 whpx="no"
2619 fi
2620fi
2621
2622##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002623# Sparse probe
2624if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002625 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002626 sparse=yes
2627 else
2628 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002629 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002630 fi
2631 sparse=no
2632 fi
2633fi
2634
2635##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002636# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002637if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002638 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002639 x11_cflags=$($pkg_config --cflags x11)
2640 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002641fi
2642
2643##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002644# GTK probe
2645
2646if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002647 gtkpackage="gtk+-3.0"
2648 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002649 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002650 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002651 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2652 gtk_libs=$($pkg_config --libs $gtkpackage)
2653 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002654 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002655 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002656 gtk_cflags="$gtk_cflags $x11_cflags"
2657 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002658 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002659 gtk="yes"
2660 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002661 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002662 else
2663 gtk="no"
2664 fi
2665fi
2666
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002667
2668##########################################
2669# GNUTLS probe
2670
2671if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002672 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002673 gnutls_cflags=$($pkg_config --cflags gnutls)
2674 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002675 libs_softmmu="$gnutls_libs $libs_softmmu"
2676 libs_tools="$gnutls_libs $libs_tools"
2677 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2678 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002679 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002680 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002681 else
2682 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002683 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002684fi
2685
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002686
2687# If user didn't give a --disable/enable-gcrypt flag,
2688# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002689# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002690if test -z "$gcrypt"
2691then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002692 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002693 then
2694 gcrypt="no"
2695 fi
2696fi
2697
2698# If user didn't give a --disable/enable-nettle flag,
2699# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002700# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002701if test -z "$nettle"
2702then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002703 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002704 then
2705 nettle="no"
2706 fi
2707fi
2708
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002709has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002710 if ! has "libgcrypt-config"
2711 then
2712 return 1
2713 fi
2714
2715 if test -n "$cross_prefix"
2716 then
Stefan Weil89138852016-05-16 15:10:20 +02002717 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002718 if test "$host-" != $cross_prefix
2719 then
2720 return 1
2721 fi
2722 fi
2723
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002724 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2725 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2726
2727 if test $maj != 1 || test $min -lt 5
2728 then
2729 return 1
2730 fi
2731
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002732 return 0
2733}
2734
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002735
2736if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002737 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002738 nettle_cflags=$($pkg_config --cflags nettle)
2739 nettle_libs=$($pkg_config --libs nettle)
2740 nettle_version=$($pkg_config --modversion nettle)
2741 libs_softmmu="$nettle_libs $libs_softmmu"
2742 libs_tools="$nettle_libs $libs_tools"
2743 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2744 nettle="yes"
2745
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002746 if test -z "$gcrypt"; then
2747 gcrypt="no"
2748 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002749 else
2750 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002751 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002752 else
2753 nettle="no"
2754 fi
2755 fi
2756fi
2757
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002758if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002759 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002760 gcrypt_cflags=$(libgcrypt-config --cflags)
2761 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002762 # Debian has remove -lgpg-error from libgcrypt-config
2763 # as it "spreads unnecessary dependencies" which in
2764 # turn breaks static builds...
2765 if test "$static" = "yes"
2766 then
2767 gcrypt_libs="$gcrypt_libs -lgpg-error"
2768 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002769 libs_softmmu="$gcrypt_libs $libs_softmmu"
2770 libs_tools="$gcrypt_libs $libs_tools"
2771 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002772 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002773
2774 cat > $TMPC << EOF
2775#include <gcrypt.h>
2776int main(void) {
2777 gcry_mac_hd_t handle;
2778 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2779 GCRY_MAC_FLAG_SECURE, NULL);
2780 return 0;
2781}
2782EOF
2783 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2784 gcrypt_hmac=yes
2785 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002786 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002787 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002788 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002789 else
2790 gcrypt="no"
2791 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002792 fi
2793fi
2794
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002795
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002796if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2797then
2798 error_exit "Only one of gcrypt & nettle can be enabled"
2799fi
2800
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002801##########################################
2802# libtasn1 - only for the TLS creds/session test suite
2803
2804tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002805tasn1_cflags=""
2806tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002807if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002808 tasn1_cflags=$($pkg_config --cflags libtasn1)
2809 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002810else
2811 tasn1=no
2812fi
2813
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002814
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002815##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002816# getifaddrs (for tests/test-io-channel-socket )
2817
2818have_ifaddrs_h=yes
2819if ! check_include "ifaddrs.h" ; then
2820 have_ifaddrs_h=no
2821fi
2822
2823##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002824# VTE probe
2825
2826if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002827 vteminversion="0.32.0"
2828 if $pkg_config --exists "vte-2.91"; then
2829 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002830 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002831 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002832 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002833 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002834 vte_cflags=$($pkg_config --cflags $vtepackage)
2835 vte_libs=$($pkg_config --libs $vtepackage)
2836 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002837 vte="yes"
2838 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002839 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002840 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002841 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002842 fi
2843fi
2844
2845##########################################
bellard11d9f692004-04-02 20:55:59 +00002846# SDL probe
2847
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002848# Look for sdl configuration program (pkg-config or sdl-config). Try
2849# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002850
Peter Xuc6093a02018-04-10 13:40:34 +08002851sdl_probe ()
2852{
2853 sdl_too_old=no
2854 if test "$sdlabi" = ""; then
2855 if $pkg_config --exists "sdl2"; then
2856 sdlabi=2.0
2857 elif $pkg_config --exists "sdl"; then
2858 sdlabi=1.2
2859 else
2860 sdlabi=2.0
2861 fi
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002862 fi
bellard11d9f692004-04-02 20:55:59 +00002863
Peter Xuc6093a02018-04-10 13:40:34 +08002864 if test $sdlabi = "2.0"; then
2865 sdl_config=$sdl2_config
2866 sdlname=sdl2
2867 sdlconfigname=sdl2_config
2868 elif test $sdlabi = "1.2"; then
2869 sdlname=sdl
2870 sdlconfigname=sdl_config
2871 else
2872 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2873 fi
2874
2875 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2876 sdl_config=$sdlconfigname
2877 fi
2878
2879 if $pkg_config $sdlname --exists; then
2880 sdlconfig="$pkg_config $sdlname"
2881 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2882 elif has ${sdl_config}; then
2883 sdlconfig="$sdl_config"
2884 sdlversion=$($sdlconfig --version)
2885 else
2886 if test "$sdl" = "yes" ; then
2887 feature_not_found "sdl" "Install SDL2-devel"
2888 fi
2889 sdl=no
2890 # no need to do the rest
2891 return
2892 fi
2893 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2894 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2895 fi
2896
Juan Quintelaac119f92009-07-27 16:13:15 +02002897 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002898#include <SDL.h>
2899#undef main /* We don't want SDL to override our main() */
2900int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2901EOF
Stefan Weil89138852016-05-16 15:10:20 +02002902 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002903 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002904 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002905 if $pkg_config $sdlname --exists; then
2906 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2907 else
2908 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2909 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002910 else
Stefan Weil89138852016-05-16 15:10:20 +02002911 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002912 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002913 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002914 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002915 sdl_too_old=yes
2916 else
Peter Maydella30878e2015-08-14 16:10:52 +01002917 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002918 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002919
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002920 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002921 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002922 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002923 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2924 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002925 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002926 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002927 :
2928 else
2929 sdl=no
2930 fi
2931 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002932 else # sdl not found
2933 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002934 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002935 fi
2936 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002937 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08002938}
2939
2940if test "$sdl" != "no" ; then
2941 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02002942fi
bellard11d9f692004-04-02 20:55:59 +00002943
aliguori5368a422009-03-03 17:37:21 +00002944if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002945 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002946#include <SDL.h>
2947#if defined(SDL_VIDEO_DRIVER_X11)
2948#include <X11/XKBlib.h>
2949#else
2950#error No x11 support
2951#endif
2952int main(void) { return 0; }
2953EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002954 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002955 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002956 sdl_cflags="$sdl_cflags $x11_cflags"
2957 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002958 fi
aliguori5368a422009-03-03 17:37:21 +00002959fi
2960
ths8f28f3f2007-01-05 21:25:54 +00002961##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002962# RDMA needs OpenFabrics libraries
2963if test "$rdma" != "no" ; then
2964 cat > $TMPC <<EOF
2965#include <rdma/rdma_cma.h>
2966int main(void) { return 0; }
2967EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002968 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04002969 if compile_prog "" "$rdma_libs" ; then
2970 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002971 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04002972 else
2973 if test "$rdma" = "yes" ; then
2974 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002975 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04002976 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002977 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04002978 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2979 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2980 fi
2981 rdma="no"
2982 fi
2983fi
2984
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03002985##########################################
2986# PVRDMA detection
2987
2988cat > $TMPC <<EOF &&
2989#include <sys/mman.h>
2990
2991int
2992main(void)
2993{
2994 char buf = 0;
2995 void *addr = &buf;
2996 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2997
2998 return 0;
2999}
3000EOF
3001
3002if test "$rdma" = "yes" ; then
3003 case "$pvrdma" in
3004 "")
3005 if compile_prog "" ""; then
3006 pvrdma="yes"
3007 else
3008 pvrdma="no"
3009 fi
3010 ;;
3011 "yes")
3012 if ! compile_prog "" ""; then
3013 error_exit "PVRDMA is not supported since mremap is not implemented"
3014 fi
3015 pvrdma="yes"
3016 ;;
3017 "no")
3018 pvrdma="no"
3019 ;;
3020 esac
3021else
3022 if test "$pvrdma" = "yes" ; then
3023 error_exit "PVRDMA requires rdma suppport"
3024 fi
3025 pvrdma="no"
3026fi
ths8d5d2d42007-08-25 01:37:51 +00003027
3028##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003029# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003030if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003031 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003032#include <sasl/sasl.h>
3033#include <stdio.h>
3034int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3035EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003036 # Assuming Cyrus-SASL installed in /usr prefix
3037 vnc_sasl_cflags=""
3038 vnc_sasl_libs="-lsasl2"
3039 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3040 vnc_sasl=yes
3041 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003042 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003043 else
3044 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003045 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003046 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003047 vnc_sasl=no
3048 fi
aliguori2f9606b2009-03-06 20:27:28 +00003049fi
3050
3051##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003052# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003053if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003054cat > $TMPC <<EOF
3055#include <stdio.h>
3056#include <jpeglib.h>
3057int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3058EOF
3059 vnc_jpeg_cflags=""
3060 vnc_jpeg_libs="-ljpeg"
3061 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3062 vnc_jpeg=yes
3063 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003064 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003065 else
3066 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003067 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003068 fi
3069 vnc_jpeg=no
3070 fi
3071fi
3072
3073##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003074# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003075if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003076cat > $TMPC <<EOF
3077//#include <stdio.h>
3078#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003079#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003080int main(void) {
3081 png_structp png_ptr;
3082 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003083 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003084}
3085EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003086 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003087 vnc_png_cflags=$($pkg_config libpng --cflags)
3088 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003089 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003090 vnc_png_cflags=""
3091 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003092 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003093 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3094 vnc_png=yes
3095 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003096 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003097 else
3098 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003099 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003100 fi
3101 vnc_png=no
3102 fi
3103fi
3104
3105##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003106# xkbcommon probe
3107if test "$xkbcommon" != "no" ; then
3108 if $pkg_config xkbcommon --exists; then
3109 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3110 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3111 xkbcommon=yes
3112 else
3113 if test "$xkbcommon" = "yes" ; then
3114 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3115 fi
3116 xkbcommon=no
3117 fi
3118fi
3119
3120##########################################
aliguori76655d62009-03-06 20:27:37 +00003121# fnmatch() probe, used for ACL routines
3122fnmatch="no"
3123cat > $TMPC << EOF
3124#include <fnmatch.h>
3125int main(void)
3126{
3127 fnmatch("foo", "foo", 0);
3128 return 0;
3129}
3130EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003131if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003132 fnmatch="yes"
3133fi
3134
3135##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003136# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003137if test "$xfs" != "no" ; then
3138 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003139#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003140#include <xfs/xfs.h>
3141int main(void)
3142{
3143 xfsctl(NULL, 0, 0, NULL);
3144 return 0;
3145}
3146EOF
3147 if compile_prog "" "" ; then
3148 xfs="yes"
3149 else
3150 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003151 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003152 fi
3153 xfs=no
3154 fi
3155fi
3156
3157##########################################
ths8a16d272008-07-19 09:56:24 +00003158# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003159if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003160 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003161 cat > $TMPC << EOF
3162#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003163int main(void)
3164{
3165 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003166 char s[] = "";
3167 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003168 return 0;
3169}
ths8a16d272008-07-19 09:56:24 +00003170EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003171 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003172 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003173 else
3174 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003175 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003176 fi
3177 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003178 fi
ths8a16d272008-07-19 09:56:24 +00003179fi
3180
3181##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003182# netmap support probe
3183# Apart from looking for netmap headers, we make sure that the host API version
3184# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3185# a minor/major version number. Minor new features will be marked with values up
3186# to 15, and if something happens that requires a change to the backend we will
3187# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003188if test "$netmap" != "no" ; then
3189 cat > $TMPC << EOF
3190#include <inttypes.h>
3191#include <net/if.h>
3192#include <net/netmap.h>
3193#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003194#if (NETMAP_API < 11) || (NETMAP_API > 15)
3195#error
3196#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003197int main(void) { return 0; }
3198EOF
3199 if compile_prog "" "" ; then
3200 netmap=yes
3201 else
3202 if test "$netmap" = "yes" ; then
3203 feature_not_found "netmap"
3204 fi
3205 netmap=no
3206 fi
3207fi
3208
3209##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003210# libcap-ng library probe
3211if test "$cap_ng" != "no" ; then
3212 cap_libs="-lcap-ng"
3213 cat > $TMPC << EOF
3214#include <cap-ng.h>
3215int main(void)
3216{
3217 capng_capability_to_name(CAPNG_EFFECTIVE);
3218 return 0;
3219}
3220EOF
3221 if compile_prog "" "$cap_libs" ; then
3222 cap_ng=yes
3223 libs_tools="$cap_libs $libs_tools"
3224 else
3225 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003226 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003227 fi
3228 cap_ng=no
3229 fi
3230fi
3231
3232##########################################
malcc2de5c92008-06-28 19:13:06 +00003233# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003234
malcc2de5c92008-06-28 19:13:06 +00003235audio_drv_probe()
3236{
3237 drv=$1
3238 hdr=$2
3239 lib=$3
3240 exp=$4
3241 cfl=$5
3242 cat > $TMPC << EOF
3243#include <$hdr>
3244int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003245EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003246 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003247 :
3248 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003249 error_exit "$drv check failed" \
3250 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003251 fi
3252}
3253
Stefan Weil89138852016-05-16 15:10:20 +02003254audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003255for drv in $audio_drv_list; do
3256 case $drv in
3257 alsa)
3258 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003259 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003260 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003261 ;;
3262
malcb8e59f12008-07-02 21:03:08 +00003263 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003264 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3265 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003266 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003267 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003268 ;;
3269
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003270 sdl)
3271 if test "$sdl" = "no"; then
3272 error_exit "sdl not found or disabled, can not use sdl audio driver"
3273 fi
3274 ;;
3275
Juan Quintela997e6902009-08-03 14:46:29 +02003276 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003277 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003278 ;;
3279
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003280 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003281 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003282 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003283 ;;
3284
3285 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003286 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003287 ;;
3288
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003289 wav)
3290 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003291 ;;
3292
malce4c63a62008-07-19 16:15:16 +00003293 *)
malc1c9b2a52008-07-19 16:57:30 +00003294 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003295 error_exit "Unknown driver '$drv' selected" \
3296 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003297 }
3298 ;;
malcc2de5c92008-06-28 19:13:06 +00003299 esac
3300done
ths8f28f3f2007-01-05 21:25:54 +00003301
balrog4d3b6f62008-02-10 16:33:14 +00003302##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003303# BrlAPI probe
3304
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003305if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003306 brlapi_libs="-lbrlapi"
3307 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003308#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003309#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003310int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3311EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003312 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003313 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003314 else
3315 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003316 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003317 fi
3318 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003319 fi
3320fi
aurel322e4d9fb2008-04-08 06:01:02 +00003321
3322##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003323# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003324if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003325 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003326 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3327 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003328 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003329 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003330 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003331 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003332 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003333 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003334#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003335#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003336#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003337int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003338 wchar_t wch = L'w';
3339 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003340 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003341 addwstr(L"wide chars\n");
3342 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003343 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003344 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003345}
balrog4d3b6f62008-02-10 16:33:14 +00003346EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003347 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003348 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003349 # Make sure we get the wide character prototypes
3350 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003351 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003352 for curses_lib in $curses_lib_list; do
3353 unset IFS
3354 if compile_prog "$curses_inc" "$curses_lib" ; then
3355 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003356 break
3357 fi
3358 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003359 if test "$curses_found" = yes ; then
3360 break
3361 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003362 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003363 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003364 if test "$curses_found" = "yes" ; then
3365 curses=yes
3366 else
3367 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003368 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003369 fi
3370 curses=no
3371 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003372fi
balrog4d3b6f62008-02-10 16:33:14 +00003373
blueswir1414f0da2008-08-15 18:20:52 +00003374##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003375# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003376if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003377 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003378 curlconfig="$pkg_config libcurl"
3379 else
3380 curlconfig=curl-config
3381 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003382 cat > $TMPC << EOF
3383#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003384int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003385EOF
Stefan Weil89138852016-05-16 15:10:20 +02003386 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3387 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003388 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003389 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003390 else
3391 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003392 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003393 fi
3394 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003395 fi
3396fi # test "$curl"
3397
3398##########################################
balrogfb599c92008-09-28 23:49:55 +00003399# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003400if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003401 cat > $TMPC << EOF
3402#include <bluetooth/bluetooth.h>
3403int main(void) { return bt_error(0); }
3404EOF
Stefan Weil89138852016-05-16 15:10:20 +02003405 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3406 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003407 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003408 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003409 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003410 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003411 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003412 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003413 fi
balroge820e3f2008-09-30 02:27:44 +00003414 bluez="no"
3415 fi
balrogfb599c92008-09-28 23:49:55 +00003416fi
3417
3418##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003419# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003420
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003421glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003422glib_modules=gthread-2.0
3423if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003424 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003425fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003426
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003427# This workaround is required due to a bug in pkg-config file for glib as it
3428# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3429
3430if test "$static" = yes -a "$mingw32" = yes; then
3431 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3432fi
3433
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003434for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003435 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003436 glib_cflags=$($pkg_config --cflags $i)
3437 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003438 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003439 LIBS="$glib_libs $LIBS"
3440 libs_qga="$glib_libs $libs_qga"
3441 else
3442 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3443 fi
3444done
3445
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003446# Sanity check that the current size_t matches the
3447# size that glib thinks it should be. This catches
3448# problems on multi-arch where people try to build
3449# 32-bit QEMU while pointing at 64-bit glib headers
3450cat > $TMPC <<EOF
3451#include <glib.h>
3452#include <unistd.h>
3453
3454#define QEMU_BUILD_BUG_ON(x) \
3455 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3456
3457int main(void) {
3458 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3459 return 0;
3460}
3461EOF
3462
Stefan Weil5919e032016-04-28 23:33:41 +02003463if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003464 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3465 "You probably need to set PKG_CONFIG_LIBDIR"\
3466 "to point to the right pkg-config files for your"\
3467 "build target"
3468fi
3469
John Snowbbbf2e02015-03-25 18:57:38 -04003470# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3471cat > $TMPC << EOF
3472#include <glib.h>
3473int main(void) { return 0; }
3474EOF
3475if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3476 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3477 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3478 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3479 fi
3480fi
3481
Fam Zhenge26110c2014-02-10 14:48:57 +08003482##########################################
3483# SHA command probe for modules
3484if test "$modules" = yes; then
3485 shacmd_probe="sha1sum sha1 shasum"
3486 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003487 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003488 shacmd="$c"
3489 break
3490 fi
3491 done
3492 if test "$shacmd" = ""; then
3493 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3494 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003495fi
3496
3497##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003498# pixman support probe
3499
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003500if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003501 pixman_cflags=
3502 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003503elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003504 pixman_cflags=$($pkg_config --cflags pixman-1)
3505 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003506else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003507 error_exit "pixman >= 0.21.8 not present." \
3508 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003509fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003510
3511##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003512# libmpathpersist probe
3513
3514if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003515 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003516 cat > $TMPC <<EOF
3517#include <libudev.h>
3518#include <mpath_persist.h>
3519unsigned mpath_mx_alloc_len = 1024;
3520int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003521static struct config *multipath_conf;
3522extern struct udev *udev;
3523extern struct config *get_multipath_config(void);
3524extern void put_multipath_config(struct config *conf);
3525struct udev *udev;
3526struct config *get_multipath_config(void) { return multipath_conf; }
3527void put_multipath_config(struct config *conf) { }
3528
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003529int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003530 udev = udev_new();
3531 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003532 return 0;
3533}
3534EOF
3535 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3536 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003537 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003538 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003539 # probe for the old API
3540 cat > $TMPC <<EOF
3541#include <libudev.h>
3542#include <mpath_persist.h>
3543unsigned mpath_mx_alloc_len = 1024;
3544int logsink;
3545int main(void) {
3546 struct udev *udev = udev_new();
3547 mpath_lib_init(udev);
3548 return 0;
3549}
3550EOF
3551 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3552 mpathpersist=yes
3553 mpathpersist_new_api=no
3554 else
3555 mpathpersist=no
3556 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003557 fi
3558else
3559 mpathpersist=no
3560fi
3561
3562##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303563# libcap probe
3564
3565if test "$cap" != "no" ; then
3566 cat > $TMPC <<EOF
3567#include <stdio.h>
3568#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003569int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303570EOF
3571 if compile_prog "" "-lcap" ; then
3572 cap=yes
3573 else
3574 cap=no
3575 fi
3576fi
3577
3578##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003579# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003580PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003581
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003582pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003583cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003584#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003585static void *f(void *p) { return NULL; }
3586int main(void) {
3587 pthread_t thread;
3588 pthread_create(&thread, 0, f, 0);
3589 return 0;
3590}
blueswir1414f0da2008-08-15 18:20:52 +00003591EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003592if compile_prog "" "" ; then
3593 pthread=yes
3594else
3595 for pthread_lib in $PTHREADLIBS_LIST; do
3596 if compile_prog "" "$pthread_lib" ; then
3597 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003598 found=no
3599 for lib_entry in $LIBS; do
3600 if test "$lib_entry" = "$pthread_lib"; then
3601 found=yes
3602 break
3603 fi
3604 done
3605 if test "$found" = "no"; then
3606 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003607 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003608 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003609 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003610 break
3611 fi
3612 done
3613fi
blueswir1414f0da2008-08-15 18:20:52 +00003614
Anthony Liguori4617e592009-08-25 17:21:56 -05003615if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003616 error_exit "pthread check failed" \
3617 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003618fi
3619
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003620# check for pthread_setname_np
3621pthread_setname_np=no
3622cat > $TMPC << EOF
3623#include <pthread.h>
3624
3625static void *f(void *p) { return NULL; }
3626int main(void)
3627{
3628 pthread_t thread;
3629 pthread_create(&thread, 0, f, 0);
3630 pthread_setname_np(thread, "QEMU");
3631 return 0;
3632}
3633EOF
3634if compile_prog "" "$pthread_lib" ; then
3635 pthread_setname_np=yes
3636fi
3637
aliguoribf9298b2008-12-05 20:05:26 +00003638##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003639# rbd probe
3640if test "$rbd" != "no" ; then
3641 cat > $TMPC <<EOF
3642#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003643#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003644int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003645 rados_t cluster;
3646 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003647 return 0;
3648}
3649EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003650 rbd_libs="-lrbd -lrados"
3651 if compile_prog "" "$rbd_libs" ; then
3652 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003653 else
3654 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003655 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003656 fi
3657 rbd=no
3658 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003659fi
3660
3661##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003662# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003663min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003664if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003665 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003666 libssh2_cflags=$($pkg_config libssh2 --cflags)
3667 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003668 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003669 else
3670 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003671 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003672 fi
3673 libssh2=no
3674 fi
3675fi
3676
3677##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003678# libssh2_sftp_fsync probe
3679
3680if test "$libssh2" = "yes"; then
3681 cat > $TMPC <<EOF
3682#include <stdio.h>
3683#include <libssh2.h>
3684#include <libssh2_sftp.h>
3685int main(void) {
3686 LIBSSH2_SESSION *session;
3687 LIBSSH2_SFTP *sftp;
3688 LIBSSH2_SFTP_HANDLE *sftp_handle;
3689 session = libssh2_session_init ();
3690 sftp = libssh2_sftp_init (session);
3691 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3692 libssh2_sftp_fsync (sftp_handle);
3693 return 0;
3694}
3695EOF
3696 # libssh2_cflags/libssh2_libs defined in previous test.
3697 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3698 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3699 fi
3700fi
3701
3702##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003703# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003704
3705if test "$linux_aio" != "no" ; then
3706 cat > $TMPC <<EOF
3707#include <libaio.h>
3708#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003709#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003710int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3711EOF
3712 if compile_prog "" "-laio" ; then
3713 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003714 else
3715 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003716 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003717 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003718 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003719 fi
3720fi
3721
3722##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003723# TPM passthrough is only on x86 Linux
3724
3725if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3726 tpm_passthrough=$tpm
3727else
3728 tpm_passthrough=no
3729fi
3730
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003731# TPM emulator is for all posix systems
3732if test "$mingw32" != "yes"; then
3733 tpm_emulator=$tpm
3734else
3735 tpm_emulator=no
3736fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003737##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003738# attr probe
3739
3740if test "$attr" != "no" ; then
3741 cat > $TMPC <<EOF
3742#include <stdio.h>
3743#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003744#ifdef CONFIG_LIBATTR
3745#include <attr/xattr.h>
3746#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003747#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003748#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003749int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3750EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003751 if compile_prog "" "" ; then
3752 attr=yes
3753 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003754 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003755 attr=yes
3756 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003757 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003758 else
3759 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003760 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003761 fi
3762 attr=no
3763 fi
3764fi
3765
3766##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003767# iovec probe
3768cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003769#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003770#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003771#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003772int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003773EOF
3774iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003775if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003776 iovec=yes
3777fi
3778
aurel32f652e6a2008-12-16 10:43:48 +00003779##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003780# preadv probe
3781cat > $TMPC <<EOF
3782#include <sys/types.h>
3783#include <sys/uio.h>
3784#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003785int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003786EOF
3787preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003788if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003789 preadv=yes
3790fi
3791
3792##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003793# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003794# fdt support is mandatory for at least some target architectures,
3795# so insist on it if we're building those system emulators.
3796fdt_required=no
3797for target in $target_list; do
3798 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003799 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003800 fdt_required=yes
3801 ;;
3802 esac
3803done
3804
3805if test "$fdt_required" = "yes"; then
3806 if test "$fdt" = "no"; then
3807 error_exit "fdt disabled but some requested targets require it." \
3808 "You can turn off fdt only if you also disable all the system emulation" \
3809 "targets which need it (by specifying a cut down --target-list)."
3810 fi
3811 fdt=yes
3812fi
3813
Juan Quintela2df87df2009-08-12 18:29:54 +02003814if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003815 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003816 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003817 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003818 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003819#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003820#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003821int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003822EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003823 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003824 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003825 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003826 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003827 # have GIT checkout, so activate dtc submodule
3828 if test -e "${source_path}/.git" ; then
3829 git_submodules="${git_submodules} dtc"
3830 fi
3831 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003832 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003833 mkdir -p dtc
3834 if [ "$pwd_is_source_path" != "y" ] ; then
3835 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3836 symlink "$source_path/dtc/scripts" "dtc/scripts"
3837 fi
3838 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003839 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3840 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003841 elif test "$fdt" = "yes" ; then
3842 # Not a git build & no libfdt found, prompt for system install
3843 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3844 "Please install the DTC (libfdt) devel package"
3845 else
3846 # don't have and don't want
3847 fdt_libs=
3848 fdt=no
3849 fi
aurel32f652e6a2008-12-16 10:43:48 +00003850 fi
3851fi
3852
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003853libs_softmmu="$libs_softmmu $fdt_libs"
3854
Michael Walle20ff0752011-03-07 23:32:39 +01003855##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003856# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003857
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003858if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003859 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003860 if $pkg_config $opengl_pkgs; then
3861 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3862 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003863 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003864 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3865 gtk_gl="yes"
3866 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003867 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003868 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003869 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003870 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003871 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003872 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003873 opengl_libs=""
3874 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003875 fi
3876fi
3877
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003878if test "$opengl" = "yes"; then
3879 cat > $TMPC << EOF
3880#include <epoxy/egl.h>
3881#ifndef EGL_MESA_image_dma_buf_export
3882# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3883#endif
3884int main(void) { return 0; }
3885EOF
3886 if compile_prog "" "" ; then
3887 opengl_dmabuf=yes
3888 fi
3889fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003890
Klim Kireeved279a02018-01-12 12:01:19 +03003891##########################################
3892# libxml2 probe
3893if test "$libxml2" != "no" ; then
3894 if $pkg_config --exists libxml-2.0; then
3895 libxml2="yes"
3896 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3897 libxml2_libs=$($pkg_config --libs libxml-2.0)
3898 else
3899 if test "$libxml2" = "yes"; then
3900 feature_not_found "libxml2" "Install libxml2 devel"
3901 fi
3902 libxml2="no"
3903 fi
3904fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003905
Bharata B Raoeb100392012-09-24 14:42:45 +05303906##########################################
3907# glusterfs probe
3908if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003909 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303910 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003911 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3912 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003913 if $pkg_config --atleast-version=4 glusterfs-api; then
3914 glusterfs_xlator_opt="yes"
3915 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003916 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303917 glusterfs_discard="yes"
3918 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303919 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05303920 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05303921 glusterfs_zerofill="yes"
3922 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303923 else
3924 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003925 feature_not_found "GlusterFS backend support" \
3926 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303927 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303928 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303929 fi
3930fi
3931
aurel3239386ac2009-04-15 19:48:17 +00003932# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003933# emulator. This is done because older glibc versions don't
3934# have syscall stubs for these implemented. In that case we
3935# don't provide them even if kernel supports them.
3936#
3937inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003938cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003939#include <sys/inotify.h>
3940
3941int
3942main(void)
3943{
3944 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003945 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003946}
3947EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003948if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003949 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003950fi
3951
Riku Voipioc05c7a72010-03-26 15:25:11 +00003952inotify1=no
3953cat > $TMPC << EOF
3954#include <sys/inotify.h>
3955
3956int
3957main(void)
3958{
3959 /* try to start inotify */
3960 return inotify_init1(0);
3961}
3962EOF
3963if compile_prog "" "" ; then
3964 inotify1=yes
3965fi
3966
Riku Voipio099d6b02009-05-05 12:10:04 +03003967# check if pipe2 is there
3968pipe2=no
3969cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003970#include <unistd.h>
3971#include <fcntl.h>
3972
3973int main(void)
3974{
3975 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003976 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003977}
3978EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003979if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003980 pipe2=yes
3981fi
3982
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003983# check if accept4 is there
3984accept4=no
3985cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003986#include <sys/socket.h>
3987#include <stddef.h>
3988
3989int main(void)
3990{
3991 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3992 return 0;
3993}
3994EOF
3995if compile_prog "" "" ; then
3996 accept4=yes
3997fi
3998
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303999# check if tee/splice is there. vmsplice was added same time.
4000splice=no
4001cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304002#include <unistd.h>
4003#include <fcntl.h>
4004#include <limits.h>
4005
4006int main(void)
4007{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004008 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304009 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4010 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4011 return 0;
4012}
4013EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004014if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304015 splice=yes
4016fi
4017
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004018##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004019# libnuma probe
4020
4021if test "$numa" != "no" ; then
4022 cat > $TMPC << EOF
4023#include <numa.h>
4024int main(void) { return numa_available(); }
4025EOF
4026
4027 if compile_prog "" "-lnuma" ; then
4028 numa=yes
4029 libs_softmmu="-lnuma $libs_softmmu"
4030 else
4031 if test "$numa" = "yes" ; then
4032 feature_not_found "numa" "install numactl devel"
4033 fi
4034 numa=no
4035 fi
4036fi
4037
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004038if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4039 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4040 exit 1
4041fi
4042
Yang Zhong5a22ab72017-12-20 21:16:46 +08004043# Even if malloc_trim() is available, these non-libc memory allocators
4044# do not support it.
4045if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4046 if test "$malloc_trim" = "yes" ; then
4047 echo "Disabling malloc_trim with non-libc memory allocator"
4048 fi
4049 malloc_trim="no"
4050fi
4051
4052#######################################
4053# malloc_trim
4054
4055if test "$malloc_trim" != "no" ; then
4056 cat > $TMPC << EOF
4057#include <malloc.h>
4058int main(void) { malloc_trim(0); return 0; }
4059EOF
4060 if compile_prog "" "" ; then
4061 malloc_trim="yes"
4062 else
4063 malloc_trim="no"
4064 fi
4065fi
4066
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004067##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004068# tcmalloc probe
4069
4070if test "$tcmalloc" = "yes" ; then
4071 cat > $TMPC << EOF
4072#include <stdlib.h>
4073int main(void) { malloc(1); return 0; }
4074EOF
4075
4076 if compile_prog "" "-ltcmalloc" ; then
4077 LIBS="-ltcmalloc $LIBS"
4078 else
4079 feature_not_found "tcmalloc" "install gperftools devel"
4080 fi
4081fi
4082
4083##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004084# jemalloc probe
4085
4086if test "$jemalloc" = "yes" ; then
4087 cat > $TMPC << EOF
4088#include <stdlib.h>
4089int main(void) { malloc(1); return 0; }
4090EOF
4091
4092 if compile_prog "" "-ljemalloc" ; then
4093 LIBS="-ljemalloc $LIBS"
4094 else
4095 feature_not_found "jemalloc" "install jemalloc devel"
4096 fi
4097fi
4098
4099##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004100# signalfd probe
4101signalfd="no"
4102cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004103#include <unistd.h>
4104#include <sys/syscall.h>
4105#include <signal.h>
4106int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4107EOF
4108
4109if compile_prog "" "" ; then
4110 signalfd=yes
4111fi
4112
Riku Voipioc2882b92009-08-12 15:08:24 +03004113# check if eventfd is supported
4114eventfd=no
4115cat > $TMPC << EOF
4116#include <sys/eventfd.h>
4117
4118int main(void)
4119{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004120 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004121}
4122EOF
4123if compile_prog "" "" ; then
4124 eventfd=yes
4125fi
4126
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004127# check if memfd is supported
4128memfd=no
4129cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004130#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004131
4132int main(void)
4133{
4134 return memfd_create("foo", MFD_ALLOW_SEALING);
4135}
4136EOF
4137if compile_prog "" "" ; then
4138 memfd=yes
4139fi
4140
Cortland Tölva955727d2018-10-08 09:35:19 -07004141# check for usbfs
4142have_usbfs=no
4143if test "$linux_user" = "yes"; then
4144 if check_include linux/usbdevice_fs.h; then
4145 have_usbfs=yes
4146 fi
4147 have_usbfs=yes
4148fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004149
Ulrich Hechtd0927932009-09-17 20:22:14 +03004150# check for fallocate
4151fallocate=no
4152cat > $TMPC << EOF
4153#include <fcntl.h>
4154
4155int main(void)
4156{
4157 fallocate(0, 0, 0, 0);
4158 return 0;
4159}
4160EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004161if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004162 fallocate=yes
4163fi
4164
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004165# check for fallocate hole punching
4166fallocate_punch_hole=no
4167cat > $TMPC << EOF
4168#include <fcntl.h>
4169#include <linux/falloc.h>
4170
4171int main(void)
4172{
4173 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4174 return 0;
4175}
4176EOF
4177if compile_prog "" "" ; then
4178 fallocate_punch_hole=yes
4179fi
4180
Denis V. Lunevb953f072015-01-30 11:42:14 +03004181# check that fallocate supports range zeroing inside the file
4182fallocate_zero_range=no
4183cat > $TMPC << EOF
4184#include <fcntl.h>
4185#include <linux/falloc.h>
4186
4187int main(void)
4188{
4189 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4190 return 0;
4191}
4192EOF
4193if compile_prog "" "" ; then
4194 fallocate_zero_range=yes
4195fi
4196
Kevin Wolfed911432014-09-29 17:12:59 +02004197# check for posix_fallocate
4198posix_fallocate=no
4199cat > $TMPC << EOF
4200#include <fcntl.h>
4201
4202int main(void)
4203{
4204 posix_fallocate(0, 0, 0);
4205 return 0;
4206}
4207EOF
4208if compile_prog "" "" ; then
4209 posix_fallocate=yes
4210fi
4211
Peter Maydellc727f472011-01-06 11:05:10 +00004212# check for sync_file_range
4213sync_file_range=no
4214cat > $TMPC << EOF
4215#include <fcntl.h>
4216
4217int main(void)
4218{
4219 sync_file_range(0, 0, 0, 0);
4220 return 0;
4221}
4222EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004223if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004224 sync_file_range=yes
4225fi
4226
Peter Maydelldace20d2011-01-10 13:11:24 +00004227# check for linux/fiemap.h and FS_IOC_FIEMAP
4228fiemap=no
4229cat > $TMPC << EOF
4230#include <sys/ioctl.h>
4231#include <linux/fs.h>
4232#include <linux/fiemap.h>
4233
4234int main(void)
4235{
4236 ioctl(0, FS_IOC_FIEMAP, 0);
4237 return 0;
4238}
4239EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004240if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004241 fiemap=yes
4242fi
4243
Ulrich Hechtd0927932009-09-17 20:22:14 +03004244# check for dup3
4245dup3=no
4246cat > $TMPC << EOF
4247#include <unistd.h>
4248
4249int main(void)
4250{
4251 dup3(0, 0, 0);
4252 return 0;
4253}
4254EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004255if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004256 dup3=yes
4257fi
4258
Alex Bligh4e0c6522013-08-21 16:02:43 +01004259# check for ppoll support
4260ppoll=no
4261cat > $TMPC << EOF
4262#include <poll.h>
4263
4264int main(void)
4265{
4266 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4267 ppoll(&pfd, 1, 0, 0);
4268 return 0;
4269}
4270EOF
4271if compile_prog "" "" ; then
4272 ppoll=yes
4273fi
4274
Alex Blighcd758dd2013-08-21 16:02:44 +01004275# check for prctl(PR_SET_TIMERSLACK , ... ) support
4276prctl_pr_set_timerslack=no
4277cat > $TMPC << EOF
4278#include <sys/prctl.h>
4279
4280int main(void)
4281{
4282 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4283 return 0;
4284}
4285EOF
4286if compile_prog "" "" ; then
4287 prctl_pr_set_timerslack=yes
4288fi
4289
Peter Maydell3b6edd12011-02-15 18:35:05 +00004290# check for epoll support
4291epoll=no
4292cat > $TMPC << EOF
4293#include <sys/epoll.h>
4294
4295int main(void)
4296{
4297 epoll_create(0);
4298 return 0;
4299}
4300EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004301if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004302 epoll=yes
4303fi
4304
Peter Maydell227f0212016-06-06 19:58:11 +01004305# epoll_create1 is a later addition
4306# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004307epoll_create1=no
4308cat > $TMPC << EOF
4309#include <sys/epoll.h>
4310
4311int main(void)
4312{
Peter Maydell19e83f62011-04-26 16:56:40 +01004313 /* Note that we use epoll_create1 as a value, not as
4314 * a function being called. This is necessary so that on
4315 * old SPARC glibc versions where the function was present in
4316 * the library but not declared in the header file we will
4317 * fail the configure check. (Otherwise we will get a compiler
4318 * warning but not an error, and will proceed to fail the
4319 * qemu compile where we compile with -Werror.)
4320 */
Blue Swirlc075a722012-08-09 20:21:25 +00004321 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004322}
4323EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004324if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004325 epoll_create1=yes
4326fi
4327
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004328# check for sendfile support
4329sendfile=no
4330cat > $TMPC << EOF
4331#include <sys/sendfile.h>
4332
4333int main(void)
4334{
4335 return sendfile(0, 0, 0, 0);
4336}
4337EOF
4338if compile_prog "" "" ; then
4339 sendfile=yes
4340fi
4341
Riku Voipio51834342014-06-22 11:25:42 +01004342# check for timerfd support (glibc 2.8 and newer)
4343timerfd=no
4344cat > $TMPC << EOF
4345#include <sys/timerfd.h>
4346
4347int main(void)
4348{
4349 return(timerfd_create(CLOCK_REALTIME, 0));
4350}
4351EOF
4352if compile_prog "" "" ; then
4353 timerfd=yes
4354fi
4355
Riku Voipio9af5c902014-08-12 15:58:57 +03004356# check for setns and unshare support
4357setns=no
4358cat > $TMPC << EOF
4359#include <sched.h>
4360
4361int main(void)
4362{
4363 int ret;
4364 ret = setns(0, 0);
4365 ret = unshare(0);
4366 return ret;
4367}
4368EOF
4369if compile_prog "" "" ; then
4370 setns=yes
4371fi
4372
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004373# clock_adjtime probe
4374clock_adjtime=no
4375cat > $TMPC <<EOF
4376#include <time.h>
4377
4378int main(void)
4379{
4380 return clock_adjtime(0, 0);
4381}
4382EOF
4383clock_adjtime=no
4384if compile_prog "" "" ; then
4385 clock_adjtime=yes
4386fi
4387
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004388# syncfs probe
4389syncfs=no
4390cat > $TMPC <<EOF
4391#include <unistd.h>
4392
4393int main(void)
4394{
4395 return syncfs(0);
4396}
4397EOF
4398syncfs=no
4399if compile_prog "" "" ; then
4400 syncfs=yes
4401fi
4402
pbrookcc8ae6d2006-04-23 17:57:59 +00004403# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004404if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004405 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004406 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004407 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004408 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004409 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004410 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004411 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004412 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004413fi
4414
Stefan Weilf514f412009-10-11 12:44:07 +02004415# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004416byteswap_h=no
4417cat > $TMPC << EOF
4418#include <byteswap.h>
4419int main(void) { return bswap_32(0); }
4420EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004421if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004422 byteswap_h=yes
4423fi
4424
Stefan Weil75f13592013-01-05 12:17:38 +01004425# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004426bswap_h=no
4427cat > $TMPC << EOF
4428#include <sys/endian.h>
4429#include <sys/types.h>
4430#include <machine/bswap.h>
4431int main(void) { return bswap32(0); }
4432EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004433if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004434 bswap_h=yes
4435fi
4436
aliguorida93a1f2008-12-12 20:02:52 +00004437##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004438# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004439if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004440 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004441 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004442 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4443 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004444 else
4445 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004446 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004447 fi
4448 libiscsi="no"
4449 fi
4450fi
4451
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004452##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004453# Do we need libm
4454cat > $TMPC << EOF
4455#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004456int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004457EOF
4458if compile_prog "" "" ; then
4459 :
4460elif compile_prog "" "-lm" ; then
4461 LIBS="-lm $LIBS"
4462 libs_qga="-lm $libs_qga"
4463else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004464 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004465fi
4466
4467##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004468# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004469# uClibc provides 2 versions of clock_gettime(), one with realtime
4470# support and one without. This means that the clock_gettime() don't
4471# need -lrt. We still need it for timer_create() so we check for this
4472# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004473cat > $TMPC <<EOF
4474#include <signal.h>
4475#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004476int main(void) {
4477 timer_create(CLOCK_REALTIME, NULL, NULL);
4478 return clock_gettime(CLOCK_REALTIME, NULL);
4479}
aliguorida93a1f2008-12-12 20:02:52 +00004480EOF
4481
Juan Quintela52166aa2009-08-03 14:46:03 +02004482if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004483 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004484# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004485elif compile_prog "" "$pthread_lib -lrt" ; then
4486 LIBS="$LIBS -lrt"
4487 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004488fi
4489
Blue Swirl31ff5042009-09-12 12:33:07 +00004490if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004491 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004492 libs_softmmu="-lutil $libs_softmmu"
4493fi
4494
Blue Swirlde5071c2009-09-12 09:58:46 +00004495##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004496# spice probe
4497if test "$spice" != "no" ; then
4498 cat > $TMPC << EOF
4499#include <spice.h>
4500int main(void) { spice_server_new(); return 0; }
4501EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004502 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4503 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004504 if $pkg_config --atleast-version=0.12.0 spice-server && \
4505 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004506 compile_prog "$spice_cflags" "$spice_libs" ; then
4507 spice="yes"
4508 libs_softmmu="$libs_softmmu $spice_libs"
4509 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004510 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4511 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004512 else
4513 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004514 feature_not_found "spice" \
4515 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004516 fi
4517 spice="no"
4518 fi
4519fi
4520
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004521# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004522if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004523 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004524 libcacard_cflags=$($pkg_config --cflags libcacard)
4525 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004526 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004527 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004528 if test "$smartcard" = "yes"; then
4529 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004530 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004531 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004532 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004533fi
4534
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004535# check for libusb
4536if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004537 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004538 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004539 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4540 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004541 else
4542 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004543 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004544 fi
4545 libusb="no"
4546 fi
4547fi
4548
Hans de Goede69354a82011-07-19 11:04:10 +02004549# check for usbredirparser for usb network redirection support
4550if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004551 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004552 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004553 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4554 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004555 else
4556 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004557 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004558 fi
4559 usb_redir="no"
4560 fi
4561fi
4562
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004563##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004564# check if we have VSS SDK headers for win
4565
4566if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4567 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004568 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004569 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4570 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004571 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004572 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4573 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004574 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004575 esac
4576 cat > $TMPC << EOF
4577#define __MIDL_user_allocate_free_DEFINED__
4578#include <inc/win2003/vss.h>
4579int main(void) { return VSS_CTX_BACKUP; }
4580EOF
4581 if compile_prog "$vss_win32_include" "" ; then
4582 guest_agent_with_vss="yes"
4583 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004584 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004585 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004586 else
4587 if test "$vss_win32_sdk" != "" ; then
4588 echo "ERROR: Please download and install Microsoft VSS SDK:"
4589 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4590 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4591 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4592 echo "ERROR: The headers are extracted in the directory \`inc'."
4593 feature_not_found "VSS support"
4594 fi
4595 guest_agent_with_vss="no"
4596 fi
4597fi
4598
4599##########################################
4600# lookup Windows platform SDK (if not specified)
4601# The SDK is needed only to build .tlb (type library) file of guest agent
4602# VSS provider from the source. It is usually unnecessary because the
4603# pre-compiled .tlb file is included.
4604
4605if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4606 if test -z "$win_sdk"; then
4607 programfiles="$PROGRAMFILES"
4608 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4609 if test -n "$programfiles"; then
4610 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4611 else
4612 feature_not_found "Windows SDK"
4613 fi
4614 elif test "$win_sdk" = "no"; then
4615 win_sdk=""
4616 fi
4617fi
4618
4619##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004620# check if mingw environment provides a recent ntddscsi.h
4621if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4622 cat > $TMPC << EOF
4623#include <windows.h>
4624#include <ntddscsi.h>
4625int main(void) {
4626#if !defined(IOCTL_SCSI_GET_ADDRESS)
4627#error Missing required ioctl definitions
4628#endif
4629 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4630 return addr.Lun;
4631}
4632EOF
4633 if compile_prog "" "" ; then
4634 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004635 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004636 fi
4637fi
4638
4639##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004640# virgl renderer probe
4641
4642if test "$virglrenderer" != "no" ; then
4643 cat > $TMPC << EOF
4644#include <virglrenderer.h>
4645int main(void) { virgl_renderer_poll(); return 0; }
4646EOF
4647 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4648 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004649 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004650 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4651 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4652 virglrenderer="yes"
4653 else
4654 if test "$virglrenderer" = "yes" ; then
4655 feature_not_found "virglrenderer"
4656 fi
4657 virglrenderer="no"
4658 fi
4659fi
4660
4661##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004662# capstone
4663
Richard Hendersone219c492017-09-28 09:01:23 -07004664case "$capstone" in
4665 "" | yes)
4666 if $pkg_config capstone; then
4667 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004668 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004669 capstone=git
4670 elif test -e "${source_path}/capstone/Makefile" ; then
4671 capstone=internal
4672 elif test -z "$capstone" ; then
4673 capstone=no
4674 else
4675 feature_not_found "capstone" "Install capstone devel or git submodule"
4676 fi
4677 ;;
4678
4679 system)
4680 if ! $pkg_config capstone; then
4681 feature_not_found "capstone" "Install capstone devel"
4682 fi
4683 ;;
4684esac
4685
4686case "$capstone" in
4687 git | internal)
4688 if test "$capstone" = git; then
4689 git_submodules="${git_submodules} capstone"
4690 fi
4691 mkdir -p capstone
4692 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4693 if test "$mingw32" = "yes"; then
4694 LIBCAPSTONE=capstone.lib
4695 else
4696 LIBCAPSTONE=libcapstone.a
4697 fi
4698 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4699 ;;
4700
4701 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004702 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4703 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004704 ;;
4705
4706 no)
4707 ;;
4708 *)
4709 error_exit "Unknown state for capstone: $capstone"
4710 ;;
4711esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004712
4713##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004714# check if we have fdatasync
4715
4716fdatasync=no
4717cat > $TMPC << EOF
4718#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004719int main(void) {
4720#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4721return fdatasync(0);
4722#else
Stefan Weile172fe12012-04-06 21:33:20 +02004723#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004724#endif
4725}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004726EOF
4727if compile_prog "" "" ; then
4728 fdatasync=yes
4729fi
4730
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004731##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004732# check if we have madvise
4733
4734madvise=no
4735cat > $TMPC << EOF
4736#include <sys/types.h>
4737#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004738#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004739int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4740EOF
4741if compile_prog "" "" ; then
4742 madvise=yes
4743fi
4744
4745##########################################
4746# check if we have posix_madvise
4747
4748posix_madvise=no
4749cat > $TMPC << EOF
4750#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004751#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004752int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4753EOF
4754if compile_prog "" "" ; then
4755 posix_madvise=yes
4756fi
4757
4758##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004759# check if we have posix_memalign()
4760
4761posix_memalign=no
4762cat > $TMPC << EOF
4763#include <stdlib.h>
4764int main(void) {
4765 void *p;
4766 return posix_memalign(&p, 8, 8);
4767}
4768EOF
4769if compile_prog "" "" ; then
4770 posix_memalign=yes
4771fi
4772
4773##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004774# check if we have posix_syslog
4775
4776posix_syslog=no
4777cat > $TMPC << EOF
4778#include <syslog.h>
4779int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4780EOF
4781if compile_prog "" "" ; then
4782 posix_syslog=yes
4783fi
4784
4785##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004786# check if we have sem_timedwait
4787
4788sem_timedwait=no
4789cat > $TMPC << EOF
4790#include <semaphore.h>
4791int main(void) { return sem_timedwait(0, 0); }
4792EOF
4793if compile_prog "" "" ; then
4794 sem_timedwait=yes
4795fi
4796
4797##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004798# check if we have strchrnul
4799
4800strchrnul=no
4801cat > $TMPC << EOF
4802#include <string.h>
4803int main(void);
4804// Use a haystack that the compiler shouldn't be able to constant fold
4805char *haystack = (char*)&main;
4806int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4807EOF
4808if compile_prog "" "" ; then
4809 strchrnul=yes
4810fi
4811
4812##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004813# check if trace backend exists
4814
Lluís Vilanova5b808272014-05-27 15:02:14 +02004815$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004816if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004817 error_exit "invalid trace backends" \
4818 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004819fi
4820
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004821##########################################
4822# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004823if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004824 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004825#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004826int main(void) { return 0; }
4827EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004828 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004829 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004830 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004831 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004832 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004833 fi
4834 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004835 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004836 else
4837 urcu_bp_libs="-lurcu-bp"
4838 fi
4839
4840 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4841 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004842 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004843 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004844 fi
4845fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004846
4847##########################################
4848# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004849if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004850 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004851 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004852 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004853 trace_backend_stap="no"
4854 if has 'stap' ; then
4855 trace_backend_stap="yes"
4856 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004857fi
4858
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004859##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004860# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304861
Peter Maydell7c2acc72013-04-08 12:11:27 +01004862# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004863# is sigcontext. On Windows the only valid backend is the Windows
4864# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004865
4866ucontext_works=no
4867if test "$darwin" != "yes"; then
4868 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304869#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004870#ifdef __stub_makecontext
4871#error Ignoring glibc stub makecontext which will always fail
4872#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004873int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304874EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004875 if compile_prog "" "" ; then
4876 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304877 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004878fi
4879
4880if test "$coroutine" = ""; then
4881 if test "$mingw32" = "yes"; then
4882 coroutine=win32
4883 elif test "$ucontext_works" = "yes"; then
4884 coroutine=ucontext
4885 else
4886 coroutine=sigaltstack
4887 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004888else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004889 case $coroutine in
4890 windows)
4891 if test "$mingw32" != "yes"; then
4892 error_exit "'windows' coroutine backend only valid for Windows"
4893 fi
4894 # Unfortunately the user visible backend name doesn't match the
4895 # coroutine-*.c filename for this case, so we have to adjust it here.
4896 coroutine=win32
4897 ;;
4898 ucontext)
4899 if test "$ucontext_works" != "yes"; then
4900 feature_not_found "ucontext"
4901 fi
4902 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004903 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004904 if test "$mingw32" = "yes"; then
4905 error_exit "only the 'windows' coroutine backend is valid for Windows"
4906 fi
4907 ;;
4908 *)
4909 error_exit "unknown coroutine backend $coroutine"
4910 ;;
4911 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304912fi
4913
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004914if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004915 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004916fi
4917
Peter Lieven7d992e42016-09-27 11:58:45 +02004918if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02004919 if test "$coroutine_pool" = "yes"; then
4920 echo "WARN: disabling coroutine pool for stack usage debugging"
4921 coroutine_pool=no
4922 fi
4923fi
4924
4925
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304926##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304927# check if we have open_by_handle_at
4928
Stefan Weil4e1797f2012-06-18 22:11:06 +02004929open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304930cat > $TMPC << EOF
4931#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004932#if !defined(AT_EMPTY_PATH)
4933# error missing definition
4934#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004935int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004936#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304937EOF
4938if compile_prog "" "" ; then
4939 open_by_handle_at=yes
4940fi
4941
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304942########################################
4943# check if we have linux/magic.h
4944
4945linux_magic_h=no
4946cat > $TMPC << EOF
4947#include <linux/magic.h>
4948int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004949 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304950}
4951EOF
4952if compile_prog "" "" ; then
4953 linux_magic_h=yes
4954fi
4955
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004956########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004957# check whether we can disable warning option with a pragma (this is needed
4958# to silence warnings in the headers of some versions of external libraries).
4959# This test has to be compiled with -Werror as otherwise an unknown pragma is
4960# only a warning.
4961#
4962# If we can't selectively disable warning in the code, disable -Werror so that
4963# the build doesn't fail anyway.
4964
Peter Maydell06d71fa2012-07-30 16:13:07 +01004965pragma_disable_unused_but_set=no
4966cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004967#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01004968#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004969#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004970
Peter Maydell06d71fa2012-07-30 16:13:07 +01004971int main(void) {
4972 return 0;
4973}
4974EOF
4975if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004976 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004977else
4978 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004979fi
4980
4981########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004982# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004983
4984valgrind_h=no
4985cat > $TMPC << EOF
4986#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004987int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004988 return 0;
4989}
4990EOF
4991if compile_prog "" "" ; then
4992 valgrind_h=yes
4993fi
4994
4995########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004996# check if environ is declared
4997
4998has_environ=no
4999cat > $TMPC << EOF
5000#include <unistd.h>
5001int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005002 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005003 return 0;
5004}
5005EOF
5006if compile_prog "" "" ; then
5007 has_environ=yes
5008fi
5009
Richard Henderson76a347e2012-12-28 14:17:02 -08005010########################################
5011# check if cpuid.h is usable.
5012
Richard Henderson76a347e2012-12-28 14:17:02 -08005013cat > $TMPC << EOF
5014#include <cpuid.h>
5015int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005016 unsigned a, b, c, d;
5017 int max = __get_cpuid_max(0, 0);
5018
5019 if (max >= 1) {
5020 __cpuid(1, a, b, c, d);
5021 }
5022
5023 if (max >= 7) {
5024 __cpuid_count(7, 0, a, b, c, d);
5025 }
5026
5027 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005028}
5029EOF
5030if compile_prog "" "" ; then
5031 cpuid_h=yes
5032fi
5033
Richard Henderson5dd89902017-07-18 18:40:18 -10005034##########################################
5035# avx2 optimization requirement check
5036#
5037# There is no point enabling this if cpuid.h is not usable,
5038# since we won't be able to select the new routines.
5039
Liam Merwick86583a02018-10-19 21:38:59 +01005040if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005041 cat > $TMPC << EOF
5042#pragma GCC push_options
5043#pragma GCC target("avx2")
5044#include <cpuid.h>
5045#include <immintrin.h>
5046static int bar(void *a) {
5047 __m256i x = *(__m256i *)a;
5048 return _mm256_testz_si256(x, x);
5049}
5050int main(int argc, char *argv[]) { return bar(argv[0]); }
5051EOF
5052 if compile_object "" ; then
5053 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005054 else
5055 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005056 fi
5057fi
5058
Richard Hendersonf5401662013-02-16 12:46:59 -08005059########################################
5060# check if __[u]int128_t is usable.
5061
5062int128=no
5063cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01005064#if defined(__clang_major__) && defined(__clang_minor__)
5065# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5066# error __int128_t does not work in CLANG before 3.2
5067# endif
5068#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08005069__int128_t a;
5070__uint128_t b;
5071int main (void) {
5072 a = a + b;
5073 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005074 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005075 return 0;
5076}
5077EOF
5078if compile_prog "" "" ; then
5079 int128=yes
5080fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005081
Richard Henderson7ebee432016-06-29 21:10:59 -07005082#########################################
5083# See if 128-bit atomic operations are supported.
5084
5085atomic128=no
5086if test "$int128" = "yes"; then
5087 cat > $TMPC << EOF
5088int main(void)
5089{
5090 unsigned __int128 x = 0, y = 0;
5091 y = __atomic_load_16(&x, 0);
5092 __atomic_store_16(&x, y, 0);
5093 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5094 return 0;
5095}
5096EOF
5097 if compile_prog "" "" ; then
5098 atomic128=yes
5099 fi
5100fi
5101
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005102cmpxchg128=no
5103if test "$int128" = yes -a "$atomic128" = no; then
5104 cat > $TMPC << EOF
5105int main(void)
5106{
5107 unsigned __int128 x = 0, y = 0;
5108 __sync_val_compare_and_swap_16(&x, y, x);
5109 return 0;
5110}
5111EOF
5112 if compile_prog "" "" ; then
5113 cmpxchg128=yes
5114 fi
5115fi
5116
Richard Hendersondf79b992016-09-02 12:23:57 -07005117#########################################
5118# See if 64-bit atomic operations are supported.
5119# Note that without __atomic builtins, we can only
5120# assume atomic loads/stores max at pointer size.
5121
5122cat > $TMPC << EOF
5123#include <stdint.h>
5124int main(void)
5125{
5126 uint64_t x = 0, y = 0;
5127#ifdef __ATOMIC_RELAXED
5128 y = __atomic_load_8(&x, 0);
5129 __atomic_store_8(&x, y, 0);
5130 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5131 __atomic_exchange_8(&x, y, 0);
5132 __atomic_fetch_add_8(&x, y, 0);
5133#else
5134 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5135 __sync_lock_test_and_set(&x, y);
5136 __sync_val_compare_and_swap(&x, y, 0);
5137 __sync_fetch_and_add(&x, y);
5138#endif
5139 return 0;
5140}
5141EOF
5142if compile_prog "" "" ; then
5143 atomic64=yes
5144fi
5145
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005146########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005147# See if 16-byte vector operations are supported.
5148# Even without a vector unit the compiler may expand these.
5149# There is a bug in old GCC for PPC that crashes here.
5150# Unfortunately it's the system compiler for Centos 7.
5151
5152cat > $TMPC << EOF
5153typedef unsigned char U1 __attribute__((vector_size(16)));
5154typedef unsigned short U2 __attribute__((vector_size(16)));
5155typedef unsigned int U4 __attribute__((vector_size(16)));
5156typedef unsigned long long U8 __attribute__((vector_size(16)));
5157typedef signed char S1 __attribute__((vector_size(16)));
5158typedef signed short S2 __attribute__((vector_size(16)));
5159typedef signed int S4 __attribute__((vector_size(16)));
5160typedef signed long long S8 __attribute__((vector_size(16)));
5161static U1 a1, b1;
5162static U2 a2, b2;
5163static U4 a4, b4;
5164static U8 a8, b8;
5165static S1 c1;
5166static S2 c2;
5167static S4 c4;
5168static S8 c8;
5169static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005170void helper(void *d, void *a, int shift, int i);
5171void helper(void *d, void *a, int shift, int i)
5172{
5173 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5174 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5175 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5176 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5177}
Richard Hendersondb432672017-09-15 14:11:45 -07005178int main(void)
5179{
5180 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5181 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5182 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5183 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5184 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5185 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5186 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5187 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5188 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5189 return 0;
5190}
5191EOF
5192
5193vector16=no
5194if compile_prog "" "" ; then
5195 vector16=yes
5196fi
5197
5198########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005199# check if getauxval is available.
5200
5201getauxval=no
5202cat > $TMPC << EOF
5203#include <sys/auxv.h>
5204int main(void) {
5205 return getauxval(AT_HWCAP) == 0;
5206}
5207EOF
5208if compile_prog "" "" ; then
5209 getauxval=yes
5210fi
5211
John Snowfd0e6052015-03-25 18:57:39 -04005212########################################
5213# check if ccache is interfering with
5214# semantic analysis of macros
5215
John Snow5e4dfd32015-10-28 13:56:40 -04005216unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005217ccache_cpp2=no
5218cat > $TMPC << EOF
5219static const int Z = 1;
5220#define fn() ({ Z; })
5221#define TAUT(X) ((X) == Z)
5222#define PAREN(X, Y) (X == Y)
5223#define ID(X) (X)
5224int main(int argc, char *argv[])
5225{
5226 int x = 0, y = 0;
5227 x = ID(x);
5228 x = fn();
5229 fn();
5230 if (PAREN(x, y)) return 0;
5231 if (TAUT(Z)) return 0;
5232 return 0;
5233}
5234EOF
5235
5236if ! compile_object "-Werror"; then
5237 ccache_cpp2=yes
5238fi
5239
John Snowb553a042015-11-03 15:43:42 -05005240#################################################
5241# clang does not support glibc + FORTIFY_SOURCE.
5242
5243if test "$fortify_source" != "no"; then
5244 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5245 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005246 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005247 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005248 fortify_source="no";
5249 else
5250 fortify_source="yes"
5251 fi
5252fi
5253
Fam Zheng1efad062018-06-01 17:26:43 +08005254###############################################
5255# Check if copy_file_range is provided by glibc
5256have_copy_file_range=no
5257cat > $TMPC << EOF
5258#include <unistd.h>
5259int main(void) {
5260 copy_file_range(0, NULL, 0, NULL, 0, 0);
5261 return 0;
5262}
5263EOF
5264if compile_prog "" "" ; then
5265 have_copy_file_range=yes
5266fi
5267
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305268##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005269# check if struct fsxattr is available via linux/fs.h
5270
5271have_fsxattr=no
5272cat > $TMPC << EOF
5273#include <linux/fs.h>
5274struct fsxattr foo;
5275int main(void) {
5276 return 0;
5277}
5278EOF
5279if compile_prog "" "" ; then
5280 have_fsxattr=yes
5281fi
5282
Peter Maydellb66e10e2016-06-08 18:34:32 +01005283##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005284# check for usable membarrier system call
5285if test "$membarrier" = "yes"; then
5286 have_membarrier=no
5287 if test "$mingw32" = "yes" ; then
5288 have_membarrier=yes
5289 elif test "$linux" = "yes" ; then
5290 cat > $TMPC << EOF
5291 #include <linux/membarrier.h>
5292 #include <sys/syscall.h>
5293 #include <unistd.h>
5294 #include <stdlib.h>
5295 int main(void) {
5296 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5297 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5298 exit(0);
5299 }
5300EOF
5301 if compile_prog "" "" ; then
5302 have_membarrier=yes
5303 fi
5304 fi
5305 if test "$have_membarrier" = "no"; then
5306 feature_not_found "membarrier" "membarrier system call not available"
5307 fi
5308else
5309 # Do not enable it by default even for Mingw32, because it doesn't
5310 # work on Wine.
5311 membarrier=no
5312fi
5313
5314##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005315# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005316have_rtnetlink=no
5317cat > $TMPC << EOF
5318#include <linux/rtnetlink.h>
5319int main(void) {
5320 return IFLA_PROTO_DOWN;
5321}
5322EOF
5323if compile_prog "" "" ; then
5324 have_rtnetlink=yes
5325fi
5326
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005327##########################################
5328# check for usable AF_VSOCK environment
5329have_af_vsock=no
5330cat > $TMPC << EOF
5331#include <errno.h>
5332#include <sys/types.h>
5333#include <sys/socket.h>
5334#if !defined(AF_VSOCK)
5335# error missing AF_VSOCK flag
5336#endif
5337#include <linux/vm_sockets.h>
5338int main(void) {
5339 int sock, ret;
5340 struct sockaddr_vm svm;
5341 socklen_t len = sizeof(svm);
5342 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5343 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5344 if ((ret == -1) && (errno == ENOTCONN)) {
5345 return 0;
5346 }
5347 return -1;
5348}
5349EOF
5350if compile_prog "" "" ; then
5351 have_af_vsock=yes
5352fi
5353
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005354##########################################
5355# check for usable AF_ALG environment
5356hava_afalg=no
5357cat > $TMPC << EOF
5358#include <errno.h>
5359#include <sys/types.h>
5360#include <sys/socket.h>
5361#include <linux/if_alg.h>
5362int main(void) {
5363 int sock;
5364 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5365 return sock;
5366}
5367EOF
5368if compile_prog "" "" ; then
5369 have_afalg=yes
5370fi
5371if test "$crypto_afalg" = "yes"
5372then
5373 if test "$have_afalg" != "yes"
5374 then
5375 error_exit "AF_ALG requested but could not be detected"
5376 fi
5377fi
5378
5379
James Clarke6969ec62016-06-06 12:02:50 +01005380#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005381# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005382if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005383 cat > $TMPC << EOF
5384#include <Hypervisor/hv.h>
5385int main() { return 0;}
5386EOF
5387 if ! compile_object ""; then
5388 hvf='no'
5389 else
5390 hvf='yes'
5391 LDFLAGS="-framework Hypervisor $LDFLAGS"
5392 fi
5393fi
5394
5395#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005396# Sparc implicitly links with --relax, which is
5397# incompatible with -r, so --no-relax should be
5398# given. It does no harm to give it on other
5399# platforms too.
5400
5401# Note: the prototype is needed since QEMU_CFLAGS
5402# contains -Wmissing-prototypes
5403cat > $TMPC << EOF
5404extern int foo(void);
5405int foo(void) { return 0; }
5406EOF
5407if ! compile_object ""; then
5408 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5409fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005410for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5411 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5412 LD_REL_FLAGS=$i
5413 break
5414 fi
5415done
5416if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5417 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005418fi
5419
Jan Vesely277abf12016-04-29 13:15:23 -04005420##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005421# check for sysmacros.h
5422
5423have_sysmacros=no
5424cat > $TMPC << EOF
5425#include <sys/sysmacros.h>
5426int main(void) {
5427 return makedev(0, 0);
5428}
5429EOF
5430if compile_prog "" "" ; then
5431 have_sysmacros=yes
5432fi
5433
5434##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005435# Veritas HyperScale block driver VxHS
5436# Check if libvxhs is installed
5437
5438if test "$vxhs" != "no" ; then
5439 cat > $TMPC <<EOF
5440#include <stdint.h>
5441#include <qnio/qnio_api.h>
5442
5443void *vxhs_callback;
5444
5445int main(void) {
5446 iio_init(QNIO_VERSION, vxhs_callback);
5447 return 0;
5448}
5449EOF
5450 vxhs_libs="-lvxhs -lssl"
5451 if compile_prog "" "$vxhs_libs" ; then
5452 vxhs=yes
5453 else
5454 if test "$vxhs" = "yes" ; then
5455 feature_not_found "vxhs block device" "Install libvxhs See github"
5456 fi
5457 vxhs=no
5458 fi
5459fi
5460
5461##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005462# check for _Static_assert()
5463
5464have_static_assert=no
5465cat > $TMPC << EOF
5466_Static_assert(1, "success");
5467int main(void) {
5468 return 0;
5469}
5470EOF
5471if compile_prog "" "" ; then
5472 have_static_assert=yes
5473fi
5474
5475##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005476# check for utmpx.h, it is missing e.g. on OpenBSD
5477
5478have_utmpx=no
5479cat > $TMPC << EOF
5480#include <utmpx.h>
5481struct utmpx user_info;
5482int main(void) {
5483 return 0;
5484}
5485EOF
5486if compile_prog "" "" ; then
5487 have_utmpx=yes
5488fi
5489
5490##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005491# checks for sanitizers
5492
Marc-André Lureau247724c2018-01-16 16:11:51 +01005493have_asan=no
5494have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005495have_asan_iface_h=no
5496have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005497
5498if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005499 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005500 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5501 have_asan=yes
5502 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005503
5504 # we could use a simple skeleton for flags checks, but this also
5505 # detect the static linking issue of ubsan, see also:
5506 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5507 cat > $TMPC << EOF
5508#include <stdlib.h>
5509int main(void) {
5510 void *tmp = malloc(10);
5511 return *(int *)(tmp + 2);
5512}
5513EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005514 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5515 have_ubsan=yes
5516 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005517
5518 if check_include "sanitizer/asan_interface.h" ; then
5519 have_asan_iface_h=yes
5520 fi
5521
5522 cat > $TMPC << EOF
5523#include <sanitizer/asan_interface.h>
5524int main(void) {
5525 __sanitizer_start_switch_fiber(0, 0, 0);
5526 return 0;
5527}
5528EOF
5529 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5530 have_asan_iface_fiber=yes
5531 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005532fi
5533
5534##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005535# Docker and cross-compiler support
5536#
5537# This is specifically for building test
5538# cases for foreign architectures, not
5539# cross-compiling QEMU itself.
5540
5541if has "docker"; then
5542 docker=$($python $source_path/tests/docker/docker.py probe)
5543fi
5544
5545##########################################
Junyan He17824402018-07-18 15:47:59 +08005546# check for libpmem
5547
5548if test "$libpmem" != "no"; then
5549 if $pkg_config --exists "libpmem"; then
5550 libpmem="yes"
5551 libpmem_libs=$($pkg_config --libs libpmem)
5552 libpmem_cflags=$($pkg_config --cflags libpmem)
5553 libs_softmmu="$libs_softmmu $libpmem_libs"
5554 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5555 else
5556 if test "$libpmem" = "yes" ; then
5557 feature_not_found "libpmem" "Install nvml or pmdk"
5558 fi
5559 libpmem="no"
5560 fi
5561fi
5562
5563##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005564# End of CC checks
5565# After here, no more $cc or $ld runs
5566
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005567write_c_skeleton
5568
Blue Swirl1d728c32012-05-01 18:45:39 +00005569if test "$gcov" = "yes" ; then
5570 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5571 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005572elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005573 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005574elif test "$debug" = "no"; then
5575 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005576fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005577
Marc-André Lureau247724c2018-01-16 16:11:51 +01005578if test "$have_asan" = "yes"; then
5579 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005580 if test "$have_asan_iface_h" = "no" ; then
5581 echo "ASAN build enabled, but ASAN header missing." \
5582 "Without code annotation, the report may be inferior."
5583 elif test "$have_asan_iface_fiber" = "no" ; then
5584 echo "ASAN build enabled, but ASAN header is too old." \
5585 "Without code annotation, the report may be inferior."
5586 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005587fi
5588if test "$have_ubsan" = "yes"; then
5589 CFLAGS="-fsanitize=undefined $CFLAGS"
5590fi
5591
Peter Lieven6542aa92014-02-03 10:26:13 +01005592##########################################
5593# Do we have libnfs
5594if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005595 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005596 libnfs="yes"
5597 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005598 else
5599 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005600 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005601 fi
5602 libnfs="no"
5603 fi
5604fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005605
Peter Maydell6ca026c2012-07-18 15:10:18 +01005606# Now we've finished running tests it's OK to add -Werror to the compiler flags
5607if test "$werror" = "yes"; then
5608 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5609fi
5610
Juan Quintelae86ecd42009-08-03 14:45:59 +02005611if test "$solaris" = "no" ; then
5612 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005613 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005614 fi
5615fi
5616
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005617# test if pod2man has --utf8 option
5618if pod2man --help | grep -q utf8; then
5619 POD2MAN="pod2man --utf8"
5620else
5621 POD2MAN="pod2man"
5622fi
5623
Blue Swirl952afb72010-09-19 08:36:34 +00005624# Use ASLR, no-SEH and DEP if available
5625if test "$mingw32" = "yes" ; then
5626 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005627 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005628 LDFLAGS="-Wl,$flag $LDFLAGS"
5629 fi
5630 done
5631fi
5632
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005633qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005634qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005635qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005636qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005637
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005638# We can only support ivshmem if we have eventfd
5639if [ "$eventfd" = "yes" ]; then
5640 ivshmem=yes
5641fi
5642
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005643tools=""
5644if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005645 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005646 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5647 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005648 fi
5649 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005650 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005651 fi
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005652 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5653 tools="elf2dmp $tools"
5654 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005655fi
5656if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005657 if test "$linux" = yes; then
5658 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005659 virtfs=yes
5660 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5661 else
5662 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005663 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305664 fi
Andreas Färber17500372012-05-01 01:12:03 +02005665 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005666 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005667 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5668 mpath=yes
5669 else
5670 if test "$mpath" = yes; then
5671 error_exit "Multipath requires libmpathpersist devel"
5672 fi
5673 mpath=no
5674 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005675 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5676 else
5677 if test "$virtfs" = yes; then
5678 error_exit "VirtFS is supported only on Linux"
5679 fi
5680 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005681 if test "$mpath" = yes; then
5682 error_exit "Multipath is supported only on Linux"
5683 fi
5684 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305685 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005686 if test "$xkbcommon" = "yes"; then
5687 tools="qemu-keymap\$(EXESUF) $tools"
5688 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005689fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005690
5691# Probe for guest agent support/options
5692
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005693if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005694 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005695 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005696 guest_agent=yes
5697 elif [ "$guest_agent" != yes ]; then
5698 guest_agent=no
5699 else
5700 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005701 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005702fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005703
Michael Roth9d6bc272015-08-26 10:49:13 -05005704# Guest agent Window MSI package
5705
5706if test "$guest_agent" != yes; then
5707 if test "$guest_agent_msi" = yes; then
5708 error_exit "MSI guest agent package requires guest agent enabled"
5709 fi
5710 guest_agent_msi=no
5711elif test "$mingw32" != "yes"; then
5712 if test "$guest_agent_msi" = "yes"; then
5713 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5714 fi
5715 guest_agent_msi=no
5716elif ! has wixl; then
5717 if test "$guest_agent_msi" = "yes"; then
5718 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5719 fi
5720 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005721else
5722 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5723 # disabled explicitly
5724 if test "$guest_agent_msi" != "no"; then
5725 guest_agent_msi=yes
5726 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005727fi
5728
Michael Roth1a349042015-08-26 11:14:31 -05005729if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005730 if test "$guest_agent_with_vss" = "yes"; then
5731 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5732 fi
5733
5734 if test "$QEMU_GA_MANUFACTURER" = ""; then
5735 QEMU_GA_MANUFACTURER=QEMU
5736 fi
5737
5738 if test "$QEMU_GA_DISTRO" = ""; then
5739 QEMU_GA_DISTRO=Linux
5740 fi
5741
5742 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005743 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005744 fi
5745
Stefan Weil89138852016-05-16 15:10:20 +02005746 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005747
5748 case "$cpu" in
5749 x86_64)
5750 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5751 ;;
5752 i386)
5753 QEMU_GA_MSI_ARCH="-D Arch=32"
5754 ;;
5755 *)
5756 error_exit "CPU $cpu not supported for building installation package"
5757 ;;
5758 esac
5759fi
5760
Paolo Bonzinica35f782010-05-26 16:08:29 +02005761# Mac OS X ships with a broken assembler
5762roms=
5763if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5764 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5765 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005766 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005767 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5768 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5769 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005770 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5771 ld_i386_emulation="$emu"
5772 roms="optionrom"
5773 break
5774 fi
5775 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005776fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005777if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005778 roms="$roms spapr-rtas"
5779fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005780
Christian Borntraeger9933c302013-04-23 01:23:03 +00005781if test "$cpu" = "s390x" ; then
5782 roms="$roms s390-ccw"
5783fi
5784
Richard Henderson964c6fa2013-06-21 19:10:16 -07005785# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005786if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005787 textseg_addr=
5788 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005789 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5790 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005791 textseg_addr=0x60000000
5792 ;;
5793 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005794 # A 256M aligned address, high in the address space, with enough
5795 # room for the code_gen_buffer above it before the stack.
5796 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005797 ;;
5798 esac
5799 if [ -n "$textseg_addr" ]; then
5800 cat > $TMPC <<EOF
5801 int main(void) { return 0; }
5802EOF
5803 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5804 if ! compile_prog "" "$textseg_ldflags"; then
5805 # In case ld does not support -Ttext-segment, edit the default linker
5806 # script via sed to set the .text start addr. This is needed on FreeBSD
5807 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005808 if ! $ld --verbose >/dev/null 2>&1; then
5809 error_exit \
5810 "We need to link the QEMU user mode binaries at a" \
5811 "specific text address. Unfortunately your linker" \
5812 "doesn't support either the -Ttext-segment option or" \
5813 "printing the default linker script with --verbose." \
5814 "If you don't want the user mode binaries, pass the" \
5815 "--disable-user option to configure."
5816 fi
5817
Richard Henderson964c6fa2013-06-21 19:10:16 -07005818 $ld --verbose | sed \
5819 -e '1,/==================================================/d' \
5820 -e '/==================================================/,$d' \
5821 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5822 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5823 textseg_ldflags="-Wl,-T../config-host.ld"
5824 fi
5825 fi
5826fi
5827
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005828# Check that the C++ compiler exists and works with the C compiler.
5829# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5830if has $cxx; then
5831 cat > $TMPC <<EOF
5832int c_function(void);
5833int main(void) { return c_function(); }
5834EOF
5835
5836 compile_object
5837
5838 cat > $TMPCXX <<EOF
5839extern "C" {
5840 int c_function(void);
5841}
5842int c_function(void) { return 42; }
5843EOF
5844
5845 update_cxxflags
5846
5847 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5848 # C++ compiler $cxx works ok with C compiler $cc
5849 :
5850 else
5851 echo "C++ compiler $cxx does not work with C compiler $cc"
5852 echo "Disabling C++ specific optional code"
5853 cxx=
5854 fi
5855else
5856 echo "No C++ compiler available; disabling C++ specific optional code"
5857 cxx=
5858fi
5859
Cole Robinson02d34f62016-05-06 14:03:09 -04005860echo_version() {
5861 if test "$1" = "yes" ; then
5862 echo "($2)"
5863 fi
5864}
5865
Jan Kiszka50e12062014-10-02 10:03:55 +02005866# prepend pixman and ftd flags after all config tests are done
5867QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005868QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005869libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005870
bellard43ce4df2003-06-09 19:53:12 +00005871echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005872echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005873echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005874echo "binary directory $(eval echo $bindir)"
5875echo "library directory $(eval echo $libdir)"
5876echo "module directory $(eval echo $qemu_moddir)"
5877echo "libexec directory $(eval echo $libexecdir)"
5878echo "include directory $(eval echo $includedir)"
5879echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005880if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005881echo "local state directory $(eval echo $local_statedir)"
5882echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005883echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005884else
5885echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005886echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005887fi
bellard5a671352003-10-01 00:13:48 +00005888echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005889echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005890echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005891echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005892echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005893echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005894echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005895echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005896echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005897echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005898echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005899echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005900echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005901echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005902echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005903if test "$slirp" = "yes" ; then
5904 echo "smbd $smbd"
5905fi
Fam Zheng17969262014-02-10 14:48:56 +08005906echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005907echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005908echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005909echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005910echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005911echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005912echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005913echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005914echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005915if test "$darwin" = "yes" ; then
5916 echo "Cocoa support $cocoa"
5917fi
Stefan Weil89138852016-05-16 15:10:20 +02005918echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5919echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005920echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005921echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005922echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005923echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005924echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02005925echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005926echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005927echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02005928echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02005929echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005930echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005931echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005932echo "Block whitelist (rw) $block_drv_rw_whitelist"
5933echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305934echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005935echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01005936echo "VNC support $vnc"
5937if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005938 echo "VNC SASL support $vnc_sasl"
5939 echo "VNC JPEG support $vnc_jpeg"
5940 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005941fi
blueswir131422552007-04-16 18:27:06 +00005942if test -n "$sparc_cpu"; then
5943 echo "Target Sparc Arch $sparc_cpu"
5944fi
aliguorie37630c2009-04-22 15:19:10 +00005945echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005946if test "$xen" = "yes" ; then
5947 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005948 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005949fi
aurel322e4d9fb2008-04-08 06:01:02 +00005950echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005951echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005952echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005953echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005954echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005955echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005956echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005957echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005958echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005959echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01005960echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005961echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08005962echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005963echo "TCG support $tcg"
5964if test "$tcg" = "yes" ; then
5965 echo "TCG debug enabled $debug_tcg"
5966 echo "TCG interpreter $tcg_interpreter"
5967fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08005968echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04005969echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03005970echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00005971echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005972echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00005973echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005974echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005975echo "madvise $madvise"
5976echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005977echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05005978echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005979echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08005980echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005981echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005982echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005983echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005984echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005985if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005986echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005987fi
Stefan Weil89138852016-05-16 15:10:20 +02005988echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005989echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005990echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005991echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005992echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005993echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005994echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005995echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005996echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005997echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005998echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005999echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006000echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006001echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006002echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006003echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006004echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006005echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006006echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006007echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306008echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006009echo "gcov $gcov_tool"
6010echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006011echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006012echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006013echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006014echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006015echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006016echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006017echo "lzo support $lzo"
6018echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006019echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006020echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006021echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006022echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006023echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006024echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006025echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006026echo "VxHS block device $vxhs"
Richard Henderson8ca80762017-09-14 09:41:12 -07006027echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006028echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006029echo "libpmem support $libpmem"
bellard67b915a2004-03-31 23:37:16 +00006030
Stefan Weil1ba16962011-07-29 22:40:45 +02006031if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006032echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006033fi
bellard97a847b2003-08-10 21:36:04 +00006034
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006035if test "$sdlabi" = "1.2"; then
6036 echo
6037 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6038 echo "WARNING: future releases. Please switch to using SDL 2.0"
6039fi
6040
Peter Maydell898be3e2017-03-21 14:31:57 +00006041if test "$supported_cpu" = "no"; then
6042 echo
6043 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6044 echo
6045 echo "CPU host architecture $cpu support is not currently maintained."
6046 echo "The QEMU project intends to remove support for this host CPU in"
6047 echo "a future release if nobody volunteers to maintain it and to"
6048 echo "provide a build host for our continuous integration setup."
6049 echo "configure has succeeded and you can continue to build, but"
6050 echo "if you care about QEMU on this platform you should contact"
6051 echo "us upstream at qemu-devel@nongnu.org."
6052fi
6053
6054if test "$supported_os" = "no"; then
6055 echo
6056 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6057 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006058 echo "Host OS $targetos support is not currently maintained."
6059 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006060 echo "a future release if nobody volunteers to maintain it and to"
6061 echo "provide a build host for our continuous integration setup."
6062 echo "configure has succeeded and you can continue to build, but"
6063 echo "if you care about QEMU on this platform you should contact"
6064 echo "us upstream at qemu-devel@nongnu.org."
6065fi
6066
Juan Quintela98ec69a2009-07-16 18:34:18 +02006067config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006068
Stefan Weildbd99ae2013-01-01 18:33:44 +01006069echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6070
Juan Quintela98ec69a2009-07-16 18:34:18 +02006071echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006072echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006073
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006074echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006075echo "prefix=$prefix" >> $config_host_mak
6076echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006077echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006078echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006079echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006080echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006081echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006082echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006083echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006084echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006085echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006086echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006087if test "$mingw32" = "no" ; then
6088 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6089fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006090echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006091echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006092echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006093echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006094echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006095echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006096
Juan Quintela98ec69a2009-07-16 18:34:18 +02006097echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006098
aurel32f8393942009-04-13 18:45:38 +00006099if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006100 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006101fi
aliguori1625af82009-04-05 17:41:02 +00006102if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006103 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006104fi
bellard7d132992003-03-06 23:23:54 +00006105if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006106 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006107fi
bellard67b915a2004-03-31 23:37:16 +00006108if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006109 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006110 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006111 version_major=${rc_version%%.*}
6112 rc_version=${rc_version#*.}
6113 version_minor=${rc_version%%.*}
6114 rc_version=${rc_version#*.}
6115 version_subminor=${rc_version%%.*}
6116 version_micro=0
6117 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6118 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006119 if test "$guest_agent_with_vss" = "yes" ; then
6120 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006121 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006122 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6123 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006124 if test "$guest_agent_ntddscsi" = "yes" ; then
6125 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6126 fi
Michael Roth1a349042015-08-26 11:14:31 -05006127 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006128 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006129 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6130 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6131 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6132 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6133 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6134 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6135 fi
pbrook210fa552007-02-27 21:04:49 +00006136else
Juan Quintela35f4df22009-07-27 16:13:07 +02006137 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006138fi
blueswir1128ab2f2008-08-15 18:33:42 +00006139
Mark McLoughlindffcb712009-10-22 17:49:11 +01006140if test "$linux" = "yes" ; then
6141 echo "CONFIG_LINUX=y" >> $config_host_mak
6142fi
6143
bellard83fb7ad2004-07-05 21:25:26 +00006144if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006145 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006146fi
malcb29fe3e2008-11-18 01:42:22 +00006147
bellardec530c82006-04-25 22:36:06 +00006148if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006149 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006150fi
Andreas Färber179cf402010-09-20 00:50:43 +02006151if test "$haiku" = "yes" ; then
6152 echo "CONFIG_HAIKU=y" >> $config_host_mak
6153fi
bellard97a847b2003-08-10 21:36:04 +00006154if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006155 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006156fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006157if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006158 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006159fi
bellardc20709a2004-04-21 23:27:19 +00006160if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006161 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006162 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006163fi
ths8a16d272008-07-19 09:56:24 +00006164if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006165 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006166 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006167fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006168if test "$netmap" = "yes" ; then
6169 echo "CONFIG_NETMAP=y" >> $config_host_mak
6170fi
Gonglei015a33b2014-07-01 20:58:08 +08006171if test "$l2tpv3" = "yes" ; then
6172 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6173fi
Corey Bryant47e98652012-01-26 09:42:26 -05006174if test "$cap_ng" = "yes" ; then
6175 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6176fi
Juan Quintela2358a492009-07-27 16:13:25 +02006177echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006178for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006179 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006180 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006181 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006182 echo "$def=m" >> $config_host_mak ;;
6183 *)
6184 echo "$def=y" >> $config_host_mak ;;
6185 esac
malc0c58ac12008-06-25 21:04:05 +00006186done
Fam Zhengb1149912017-09-07 16:29:13 +08006187echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6188echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6189echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6190echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6191echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006192if test "$audio_pt_int" = "yes" ; then
6193 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6194fi
malcd5631632009-10-10 01:13:41 +04006195if test "$audio_win_int" = "yes" ; then
6196 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6197fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006198echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6199echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006200if test "$vnc" = "yes" ; then
6201 echo "CONFIG_VNC=y" >> $config_host_mak
6202fi
aliguori2f9606b2009-03-06 20:27:28 +00006203if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006204 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006205fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006206if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006207 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006208fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006209if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006210 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006211fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006212if test "$xkbcommon" = "yes" ; then
6213 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6214 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6215fi
aliguori76655d62009-03-06 20:27:37 +00006216if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006217 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006218fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006219if test "$xfs" = "yes" ; then
6220 echo "CONFIG_XFS=y" >> $config_host_mak
6221fi
Stefan Weil89138852016-05-16 15:10:20 +02006222qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006223echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006224echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006225echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006226echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006227if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006228 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006229fi
Fam Zheng17969262014-02-10 14:48:56 +08006230if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006231 # $shacmd can generate a hash started with digit, which the compiler doesn't
6232 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006233 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006234 echo "CONFIG_MODULES=y" >> $config_host_mak
6235fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006236if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6237 echo "CONFIG_X11=y" >> $config_host_mak
6238 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6239 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6240fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006241if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006242 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006243 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006244 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006245 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006246fi
6247if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006248 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006249fi
6250if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006251 echo "CONFIG_CURSES=m" >> $config_host_mak
6252 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6253 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006254fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006255if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006256 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006257fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006258if test "$accept4" = "yes" ; then
6259 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6260fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306261if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006262 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306263fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006264if test "$eventfd" = "yes" ; then
6265 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6266fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006267if test "$memfd" = "yes" ; then
6268 echo "CONFIG_MEMFD=y" >> $config_host_mak
6269fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006270if test "$have_usbfs" = "yes" ; then
6271 echo "CONFIG_USBFS=y" >> $config_host_mak
6272fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006273if test "$fallocate" = "yes" ; then
6274 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6275fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006276if test "$fallocate_punch_hole" = "yes" ; then
6277 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6278fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006279if test "$fallocate_zero_range" = "yes" ; then
6280 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6281fi
Kevin Wolfed911432014-09-29 17:12:59 +02006282if test "$posix_fallocate" = "yes" ; then
6283 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6284fi
Peter Maydellc727f472011-01-06 11:05:10 +00006285if test "$sync_file_range" = "yes" ; then
6286 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6287fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006288if test "$fiemap" = "yes" ; then
6289 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6290fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006291if test "$dup3" = "yes" ; then
6292 echo "CONFIG_DUP3=y" >> $config_host_mak
6293fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006294if test "$ppoll" = "yes" ; then
6295 echo "CONFIG_PPOLL=y" >> $config_host_mak
6296fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006297if test "$prctl_pr_set_timerslack" = "yes" ; then
6298 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6299fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006300if test "$epoll" = "yes" ; then
6301 echo "CONFIG_EPOLL=y" >> $config_host_mak
6302fi
6303if test "$epoll_create1" = "yes" ; then
6304 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6305fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006306if test "$sendfile" = "yes" ; then
6307 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6308fi
Riku Voipio51834342014-06-22 11:25:42 +01006309if test "$timerfd" = "yes" ; then
6310 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6311fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006312if test "$setns" = "yes" ; then
6313 echo "CONFIG_SETNS=y" >> $config_host_mak
6314fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006315if test "$clock_adjtime" = "yes" ; then
6316 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6317fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006318if test "$syncfs" = "yes" ; then
6319 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6320fi
aurel323b3f24a2009-04-15 16:12:13 +00006321if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006322 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006323fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006324if test "$inotify1" = "yes" ; then
6325 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6326fi
Peter Maydell401bc052017-09-05 13:19:32 +01006327if test "$sem_timedwait" = "yes" ; then
6328 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6329fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006330if test "$strchrnul" = "yes" ; then
6331 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6332fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006333if test "$byteswap_h" = "yes" ; then
6334 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6335fi
6336if test "$bswap_h" = "yes" ; then
6337 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6338fi
Alexander Graf769ce762009-05-11 17:41:42 +02006339if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006340 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006341 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006342 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006343fi
aurel322e4d9fb2008-04-08 06:01:02 +00006344if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006345 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006346 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006347fi
balrogfb599c92008-09-28 23:49:55 +00006348if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006349 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006350 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006351fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006352if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006353 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006354 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006355 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006356 if test "$gtk_gl" = "yes" ; then
6357 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6358 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006359fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006360echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006361if test "$gnutls" = "yes" ; then
6362 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6363fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006364if test "$gcrypt" = "yes" ; then
6365 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006366 if test "$gcrypt_hmac" = "yes" ; then
6367 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6368 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006369fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006370if test "$nettle" = "yes" ; then
6371 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006372 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006373fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006374if test "$tasn1" = "yes" ; then
6375 echo "CONFIG_TASN1=y" >> $config_host_mak
6376fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006377if test "$have_ifaddrs_h" = "yes" ; then
6378 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6379fi
Eric Blake6b39b062016-10-11 10:46:23 -05006380if test "$have_broken_size_max" = "yes" ; then
6381 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6382fi
Jan Vesely277abf12016-04-29 13:15:23 -04006383
6384# Work around a system header bug with some kernel/XFS header
6385# versions where they both try to define 'struct fsxattr':
6386# xfs headers will not try to redefine structs from linux headers
6387# if this macro is set.
6388if test "$have_fsxattr" = "yes" ; then
6389 echo "HAVE_FSXATTR=y" >> $config_host_mak
6390fi
Fam Zheng1efad062018-06-01 17:26:43 +08006391if test "$have_copy_file_range" = "yes" ; then
6392 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6393fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006394if test "$vte" = "yes" ; then
6395 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006396 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006397 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006398fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006399if test "$virglrenderer" = "yes" ; then
6400 echo "CONFIG_VIRGL=y" >> $config_host_mak
6401 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6402 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6403fi
aliguorie37630c2009-04-22 15:19:10 +00006404if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006405 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006406 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006407 if test "$xen_pv_domain_build" = "yes" ; then
6408 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6409 fi
aliguorie37630c2009-04-22 15:19:10 +00006410fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006411if test "$linux_aio" = "yes" ; then
6412 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6413fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006414if test "$attr" = "yes" ; then
6415 echo "CONFIG_ATTR=y" >> $config_host_mak
6416fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006417if test "$libattr" = "yes" ; then
6418 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6419fi
Meador Inge983eef52012-02-24 14:00:42 +05306420if test "$virtfs" = "yes" ; then
6421 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006422fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006423if test "$mpath" = "yes" ; then
6424 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006425 if test "$mpathpersist_new_api" = "yes"; then
6426 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6427 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006428fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006429if test "$vhost_scsi" = "yes" ; then
6430 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6431fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006432if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006433 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6434fi
Gonglei042cea22018-03-01 21:46:28 +08006435if test "$vhost_crypto" = "yes" ; then
6436 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6437fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006438if test "$vhost_vsock" = "yes" ; then
6439 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6440fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006441if test "$vhost_user" = "yes" ; then
6442 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6443fi
ths77755342008-11-27 15:45:16 +00006444if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006445 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006446fi
aliguoribf9298b2008-12-05 20:05:26 +00006447if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006448 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006449fi
aliguoriceb42de2009-04-07 18:43:28 +00006450if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006451 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006452fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006453if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006454 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006455fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006456if test "$membarrier" = "yes" ; then
6457 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6458fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006459if test "$signalfd" = "yes" ; then
6460 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6461fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006462if test "$tcg" = "yes"; then
6463 echo "CONFIG_TCG=y" >> $config_host_mak
6464 if test "$tcg_interpreter" = "yes" ; then
6465 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6466 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006467fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006468if test "$fdatasync" = "yes" ; then
6469 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6470fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006471if test "$madvise" = "yes" ; then
6472 echo "CONFIG_MADVISE=y" >> $config_host_mak
6473fi
6474if test "$posix_madvise" = "yes" ; then
6475 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6476fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006477if test "$posix_memalign" = "yes" ; then
6478 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6479fi
bellard97a847b2003-08-10 21:36:04 +00006480
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006481if test "$spice" = "yes" ; then
6482 echo "CONFIG_SPICE=y" >> $config_host_mak
6483fi
6484
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006485if test "$smartcard" = "yes" ; then
6486 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006487 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6488 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006489fi
6490
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006491if test "$libusb" = "yes" ; then
6492 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006493 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6494 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006495fi
6496
Hans de Goede69354a82011-07-19 11:04:10 +02006497if test "$usb_redir" = "yes" ; then
6498 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006499 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6500 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006501fi
6502
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006503if test "$opengl" = "yes" ; then
6504 echo "CONFIG_OPENGL=y" >> $config_host_mak
6505 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006506 if test "$opengl_dmabuf" = "yes" ; then
6507 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6508 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006509fi
6510
Yang Zhong5a22ab72017-12-20 21:16:46 +08006511if test "$malloc_trim" = "yes" ; then
6512 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6513fi
6514
Liang Li99f2dbd2016-03-08 13:53:16 +08006515if test "$avx2_opt" = "yes" ; then
6516 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6517fi
6518
qiaonuohan607dacd2014-02-18 14:11:30 +08006519if test "$lzo" = "yes" ; then
6520 echo "CONFIG_LZO=y" >> $config_host_mak
6521fi
6522
6523if test "$snappy" = "yes" ; then
6524 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6525fi
6526
Peter Wu6b383c02015-01-06 18:48:14 +01006527if test "$bzip2" = "yes" ; then
6528 echo "CONFIG_BZIP2=y" >> $config_host_mak
6529 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6530fi
6531
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006532if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006533 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006534 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6535 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006536fi
6537
Peter Lieven6542aa92014-02-03 10:26:13 +01006538if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006539 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6540 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006541fi
6542
Eduardo Otubof7945732012-08-14 18:44:05 -03006543if test "$seccomp" = "yes"; then
6544 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006545 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6546 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006547fi
6548
bellard83fb7ad2004-07-05 21:25:26 +00006549# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006550if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006551 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006552fi
6553
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006554if test "$localtime_r" = "yes" ; then
6555 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6556fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006557if test "$qom_cast_debug" = "yes" ; then
6558 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6559fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006560if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006561 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006562 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6563 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006564fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006565
Peter Maydell7c2acc72013-04-08 12:11:27 +01006566echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006567if test "$coroutine_pool" = "yes" ; then
6568 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6569else
6570 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6571fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306572
Peter Lieven7d992e42016-09-27 11:58:45 +02006573if test "$debug_stack_usage" = "yes" ; then
6574 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6575fi
6576
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006577if test "$crypto_afalg" = "yes" ; then
6578 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6579fi
6580
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306581if test "$open_by_handle_at" = "yes" ; then
6582 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6583fi
6584
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306585if test "$linux_magic_h" = "yes" ; then
6586 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6587fi
6588
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006589if test "$pragma_diagnostic_available" = "yes" ; then
6590 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006591fi
6592
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006593if test "$valgrind_h" = "yes" ; then
6594 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6595fi
6596
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006597if test "$have_asan_iface_fiber" = "yes" ; then
6598 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6599fi
6600
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006601if test "$has_environ" = "yes" ; then
6602 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6603fi
6604
Richard Henderson76a347e2012-12-28 14:17:02 -08006605if test "$cpuid_h" = "yes" ; then
6606 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6607fi
6608
Richard Hendersonf5401662013-02-16 12:46:59 -08006609if test "$int128" = "yes" ; then
6610 echo "CONFIG_INT128=y" >> $config_host_mak
6611fi
6612
Richard Henderson7ebee432016-06-29 21:10:59 -07006613if test "$atomic128" = "yes" ; then
6614 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6615fi
6616
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006617if test "$cmpxchg128" = "yes" ; then
6618 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6619fi
6620
Richard Hendersondf79b992016-09-02 12:23:57 -07006621if test "$atomic64" = "yes" ; then
6622 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6623fi
6624
Richard Hendersondb432672017-09-15 14:11:45 -07006625if test "$vector16" = "yes" ; then
6626 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6627fi
6628
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006629if test "$getauxval" = "yes" ; then
6630 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6631fi
6632
Bharata B Raoeb100392012-09-24 14:42:45 +05306633if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006634 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006635 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6636 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306637fi
6638
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006639if test "$glusterfs_xlator_opt" = "yes" ; then
6640 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6641fi
6642
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306643if test "$glusterfs_discard" = "yes" ; then
6644 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6645fi
6646
Niels de Vosdf3a4292017-05-28 12:01:14 +05306647if test "$glusterfs_fallocate" = "yes" ; then
6648 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6649fi
6650
Bharata B Rao7c815372013-12-21 14:51:25 +05306651if test "$glusterfs_zerofill" = "yes" ; then
6652 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6653fi
6654
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006655if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006656 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006657 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6658 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006659fi
6660
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006661if test "$live_block_migration" = "yes" ; then
6662 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6663fi
6664
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006665if test "$tpm" = "yes"; then
6666 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006667 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006668 if test "$tpm_passthrough" = "yes"; then
6669 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6670 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006671 # TPM emulator support?
6672 if test "$tpm_emulator" = "yes"; then
6673 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6674 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006675fi
6676
Lluís Vilanova5b808272014-05-27 15:02:14 +02006677echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6678if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006679 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306680fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006681if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006682 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6683 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006684 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006685fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006686if have_backend "log"; then
6687 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006688fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006689if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006690 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6691fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006692if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006693 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6694 if test "$trace_backend_stap" = "yes" ; then
6695 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6696 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006697fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006698if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006699 if test "$linux" = "yes" ; then
6700 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006701 else
Stewart Smith21684af2014-01-24 12:39:10 +11006702 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006703 fi
6704fi
Paul Durrant0a852412016-08-04 14:44:14 +01006705if have_backend "syslog"; then
6706 if test "$posix_syslog" = "yes" ; then
6707 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6708 else
6709 feature_not_found "syslog(trace backend)" "syslog not available"
6710 fi
6711fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006712echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6713
Michael R. Hines2da776d2013-07-22 10:01:54 -04006714if test "$rdma" = "yes" ; then
6715 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006716 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006717fi
6718
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006719if test "$pvrdma" = "yes" ; then
6720 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6721fi
6722
Laurent Vivier575b22b2016-06-02 22:14:15 +02006723if test "$have_rtnetlink" = "yes" ; then
6724 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6725fi
6726
Klim Kireeved279a02018-01-12 12:01:19 +03006727if test "$libxml2" = "yes" ; then
6728 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6729 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6730 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6731fi
6732
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006733if test "$replication" = "yes" ; then
6734 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6735fi
6736
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006737if test "$have_af_vsock" = "yes" ; then
6738 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6739fi
6740
Christopher Covington4d043512016-12-28 15:04:33 -05006741if test "$have_sysmacros" = "yes" ; then
6742 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6743fi
6744
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006745if test "$have_static_assert" = "yes" ; then
6746 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6747fi
6748
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006749if test "$have_utmpx" = "yes" ; then
6750 echo "HAVE_UTMPX=y" >> $config_host_mak
6751fi
6752
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006753if test "$ivshmem" = "yes" ; then
6754 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6755fi
Richard Hendersone219c492017-09-28 09:01:23 -07006756if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006757 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6758fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006759if test "$debug_mutex" = "yes" ; then
6760 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6761fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006762
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006763# Hold two types of flag:
6764# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6765# a thread we have a handle to
6766# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6767# platform
6768if test "$pthread_setname_np" = "yes" ; then
6769 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6770 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6771fi
6772
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006773if test "$vxhs" = "yes" ; then
6774 echo "CONFIG_VXHS=y" >> $config_host_mak
6775 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6776fi
6777
Junyan He17824402018-07-18 15:47:59 +08006778if test "$libpmem" = "yes" ; then
6779 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6780fi
6781
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006782if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006783 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006784elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006785 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006786elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006787 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006788elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006789 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006790elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006791 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006792else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006793 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006794fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006795QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006796
Juan Quintela98ec69a2009-07-16 18:34:18 +02006797echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006798echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006799echo "MAKE=$make" >> $config_host_mak
6800echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006801echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6802echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006803echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6804echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006805echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006806echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006807if $iasl -h > /dev/null 2>&1; then
6808 echo "IASL=$iasl" >> $config_host_mak
6809fi
Juan Quintela804edf22009-07-27 16:12:49 +02006810echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006811echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006812echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006813echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006814echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006815echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006816echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006817echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006818echo "OBJCOPY=$objcopy" >> $config_host_mak
6819echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006820echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006821echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006822echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006823echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006824echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006825echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006826echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006827echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006828if test "$sparse" = "yes" ; then
6829 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006830 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006831 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006832 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6833 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6834fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006835if test "$cross_prefix" != ""; then
6836 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6837else
6838 echo "AUTOCONF_HOST := " >> $config_host_mak
6839fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006840echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006841echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006842echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006843echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006844echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006845echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006846echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006847echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006848echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006849echo "DSOSUF=$DSOSUF" >> $config_host_mak
6850echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006851echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006852echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6853echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006854echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006855echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006856if test "$gcov" = "yes" ; then
6857 echo "CONFIG_GCOV=y" >> $config_host_mak
6858 echo "GCOV=$gcov_tool" >> $config_host_mak
6859fi
Juan Quintela804edf22009-07-27 16:12:49 +02006860
Alex Bennée51a12b52018-04-04 14:24:39 +01006861if test "$docker" != "no"; then
6862 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6863fi
6864
Peter Maydell6efd7512011-11-30 11:59:04 +00006865# use included Linux headers
6866if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006867 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006868 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006869 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006870 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006871 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02006872 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006873 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006874 ;;
6875 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006876 linux_arch=s390
6877 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006878 aarch64)
6879 linux_arch=arm64
6880 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006881 mips64)
6882 linux_arch=mips
6883 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006884 *)
6885 # For most CPUs the kernel architecture name and QEMU CPU name match.
6886 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006887 ;;
6888 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006889 # For non-KVM architectures we will not have asm headers
6890 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6891 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6892 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006893fi
6894
bellard1d14ffa2005-10-30 18:58:22 +00006895for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006896target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006897config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006898target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006899target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006900
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006901case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02006902 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 +02006903 target_bigendian=yes
6904 ;;
6905esac
bellard97a847b2003-08-10 21:36:04 +00006906target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006907target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006908target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006909target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006910case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006911 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006912 target_softmmu="yes"
6913 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006914 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006915 target_user_only="yes"
6916 target_linux_user="yes"
6917 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006918 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00006919 target_user_only="yes"
6920 target_bsd_user="yes"
6921 ;;
pbrook9e407a82007-05-26 16:38:53 +00006922 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006923 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006924 exit 1
6925 ;;
6926esac
ths831b7822007-01-18 20:06:33 +00006927
Alex Bennéed75402b2018-04-04 20:27:05 +01006928target_compiler=""
6929target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01006930target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01006931
bellard97a847b2003-08-10 21:36:04 +00006932mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006933echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006934
pbrooke5fe0c52006-06-11 13:32:59 +00006935bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00006936mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02006937interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00006938gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00006939
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006940TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02006941TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02006942TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02006943
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006944case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00006945 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04006946 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006947 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006948 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01006949 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00006950 ;;
6951 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006952 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04006953 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006954 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006955 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00006956 ;;
6957 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11006958 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01006959 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00006960 ;;
6961 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006962 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00006963 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006964 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00006965 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006966 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01006967 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00006968 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00006969 aarch64|aarch64_be)
6970 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01006971 TARGET_BASE_ARCH=arm
6972 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006973 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01006974 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 +01006975 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01006976 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01006977 ;;
aurel322408a522008-04-20 20:19:44 +00006978 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01006979 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00006980 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08006981 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08006982 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01006983 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08006984 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01006985 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01006986 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01006987 ;;
aurel322408a522008-04-20 20:19:44 +00006988 m68k)
aurel322408a522008-04-20 20:19:44 +00006989 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02006990 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006991 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00006992 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006993 microblaze|microblazeel)
6994 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006995 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02006996 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01006997 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006998 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02006999 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007000 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007001 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007002 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007003 ;;
7004 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007005 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007006 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007007 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007008 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007009 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007010 ;;
7011 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007012 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007013 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007014 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007015 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007016 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007017 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007018 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007019 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007020 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007021 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007022 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007023 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007024 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007025 TARGET_ARCH=openrisc
7026 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007027 ;;
aurel322408a522008-04-20 20:19:44 +00007028 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007029 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007030 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007031 ;;
aurel322408a522008-04-20 20:19:44 +00007032 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007033 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007034 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307035 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007036 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 +01007037 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007038 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007039 ppc64le)
7040 TARGET_ARCH=ppc64
7041 TARGET_BASE_ARCH=ppc
7042 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307043 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007044 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 +01007045 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007046 ;;
aurel322408a522008-04-20 20:19:44 +00007047 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007048 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007049 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007050 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007051 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007052 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 +01007053 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007054 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007055 riscv32)
7056 TARGET_BASE_ARCH=riscv
7057 TARGET_ABI_DIR=riscv
7058 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007059 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007060 ;;
7061 riscv64)
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_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007066 ;;
aurel322408a522008-04-20 20:19:44 +00007067 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007068 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007069 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007070 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007071 ;;
7072 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007073 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007074 ;;
7075 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007076 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007077 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007078 ;;
7079 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007080 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007081 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007082 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007083 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007084 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007085 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007086 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007087 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007088 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 +01007089 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007090 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007091 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007092 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007093 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007094 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007095 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007096 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007097 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007098 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007099 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007100 xtensa|xtensaeb)
7101 TARGET_ARCH=xtensa
Max Filippov9fb40342017-03-06 17:17:43 -08007102 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007103 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007104 ;;
aurel322408a522008-04-20 20:19:44 +00007105 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007106 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007107 ;;
7108esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007109# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7110if [ "$TARGET_BASE_ARCH" = "" ]; then
7111 TARGET_BASE_ARCH=$TARGET_ARCH
7112fi
7113
Alex Bennéed75402b2018-04-04 20:27:05 +01007114# Do we have a cross compiler for this target?
7115if has $target_compiler; then
7116
7117 write_c_skeleton
7118
Alex Bennée716a5072018-04-10 12:19:40 +01007119 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007120 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007121 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007122 target_compiler=""
7123 else
7124 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7125 target_compiler_static="n"
7126 fi
7127 else
7128 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7129 target_compiler_static="y"
7130 fi
7131else
7132 target_compiler=""
7133fi
7134
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007135symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7136
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007137upper() {
7138 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7139}
7140
Stefan Weil89138852016-05-16 15:10:20 +02007141target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007142echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007143echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007144echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007145if [ "$TARGET_ABI_DIR" = "" ]; then
7146 TARGET_ABI_DIR=$TARGET_ARCH
7147fi
Juan Quintela25be2102009-10-07 02:41:00 +02007148echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007149if [ "$HOST_VARIANT_DIR" != "" ]; then
7150 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7151fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007152
7153if supported_xen_target $target; then
7154 echo "CONFIG_XEN=y" >> $config_target_mak
7155 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007156 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007157 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007158fi
7159if supported_kvm_target $target; then
7160 echo "CONFIG_KVM=y" >> $config_target_mak
7161 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007162 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007163 if test "$vhost_user" = "yes" ; then
7164 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7165 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007166 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007167fi
7168if supported_hax_target $target; then
7169 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007170fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007171if supported_hvf_target $target; then
7172 echo "CONFIG_HVF=y" >> $config_target_mak
7173fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007174if supported_whpx_target $target; then
7175 echo "CONFIG_WHPX=y" >> $config_target_mak
7176fi
bellardde83cd02003-06-15 20:25:43 +00007177if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007178 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007179fi
7180if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007181 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007182 if test "$mttcg" = "yes" ; then
7183 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7184 fi
bellardde83cd02003-06-15 20:25:43 +00007185fi
bellard997344f2003-10-27 21:10:39 +00007186if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007187 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007188 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007189fi
ths831b7822007-01-18 20:06:33 +00007190if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007191 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007192fi
pbrook56aebc82008-10-11 17:55:29 +00007193list=""
7194if test ! -z "$gdb_xml_files" ; then
7195 for x in $gdb_xml_files; do
7196 list="$list $source_path/gdb-xml/$x"
7197 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007198 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007199fi
bellardde83cd02003-06-15 20:25:43 +00007200
pbrooke5fe0c52006-06-11 13:32:59 +00007201if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007202 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007203fi
blueswir184778502008-10-26 20:33:16 +00007204if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007205 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007206fi
bellard5b0753e2005-03-01 21:37:28 +00007207
Alex Bennéed75402b2018-04-04 20:27:05 +01007208if test -n "$target_compiler"; then
7209 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7210
7211 if test -n "$target_compiler_static"; then
7212 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7213 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007214
7215 if test -n "$target_compiler_cflags"; then
7216 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7217 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007218fi
7219
Alex Bennée716a5072018-04-10 12:19:40 +01007220
Juan Quintela4afddb52009-08-03 14:46:45 +02007221# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007222
Juan Quintela4afddb52009-08-03 14:46:45 +02007223cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007224ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007225
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007226disas_config() {
7227 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7228 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7229}
7230
Juan Quintela64656022009-08-03 14:46:53 +02007231for i in $ARCH $TARGET_BASE_ARCH ; do
7232 case "$i" in
7233 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007234 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007235 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007236 aarch64)
7237 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007238 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007239 fi
7240 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007241 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007242 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007243 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007244 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007245 fi
Juan Quintela64656022009-08-03 14:46:53 +02007246 ;;
7247 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007248 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007249 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007250 hppa)
7251 disas_config "HPPA"
7252 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007253 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007254 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007255 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007256 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007257 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007258 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007259 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007260 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007261 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007262 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007263 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007264 ;;
7265 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007266 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007267 if test -n "${cxx}"; then
7268 disas_config "NANOMIPS"
7269 fi
Juan Quintela64656022009-08-03 14:46:53 +02007270 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007271 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007272 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007273 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007274 nios2)
7275 disas_config "NIOS2"
7276 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007277 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007278 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007279 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007280 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007281 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007282 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007283 riscv)
7284 disas_config "RISCV"
7285 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007286 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007287 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007288 ;;
7289 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007290 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007291 ;;
7292 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007293 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007294 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007295 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007296 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007297 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007298 esac
7299done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007300if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007301 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007302fi
Juan Quintela64656022009-08-03 14:46:53 +02007303
Juan Quintela6ee71262009-08-03 14:46:47 +02007304case "$ARCH" in
7305alpha)
7306 # Ensure there's only a single GP
7307 cflags="-msmall-data $cflags"
7308;;
7309esac
7310
Juan Quintelad02c1db2009-08-03 14:46:50 +02007311if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007312 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007313 if test "$target_linux_user" = "yes" ; then
7314 cflags="-p $cflags"
7315 ldflags="-p $ldflags"
7316 fi
7317 if test "$target_softmmu" = "yes" ; then
7318 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007319 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007320 fi
7321fi
7322
Juan Quintela9b8e1112009-08-03 14:46:46 +02007323if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007324 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007325fi
Juan Quintelafa282482009-07-22 22:37:39 +02007326
Christian Borntraegere9a35912017-08-23 12:16:23 +02007327# Newer kernels on s390 check for an S390_PGSTE program header and
7328# enable the pgste page table extensions in that case. This makes
7329# the vm.allocate_pgste sysctl unnecessary. We enable this program
7330# header if
7331# - we build on s390x
7332# - we build the system emulation for s390x (qemu-system-s390x)
7333# - KVM is enabled
7334# - the linker supports --s390-pgste
7335if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7336 if ld_has --s390-pgste ; then
7337 ldflags="-Wl,--s390-pgste $ldflags"
7338 fi
7339fi
7340
Juan Quintela25be2102009-10-07 02:41:00 +02007341echo "LDFLAGS+=$ldflags" >> $config_target_mak
7342echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007343
bellard97a847b2003-08-10 21:36:04 +00007344done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007345
Alex Bennéed75402b2018-04-04 20:27:05 +01007346if test -n "$enabled_cross_compilers"; then
7347 echo
7348 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7349fi
7350
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007351if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007352 echo "config-host.h: subdir-dtc" >> $config_host_mak
7353fi
Richard Hendersone219c492017-09-28 09:01:23 -07007354if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7355 echo "config-host.h: subdir-capstone" >> $config_host_mak
7356fi
7357if test -n "$LIBCAPSTONE"; then
7358 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7359fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007360
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007361if test "$numa" = "yes"; then
7362 echo "CONFIG_NUMA=y" >> $config_host_mak
7363fi
7364
John Snowfd0e6052015-03-25 18:57:39 -04007365if test "$ccache_cpp2" = "yes"; then
7366 echo "export CCACHE_CPP2=y" >> $config_host_mak
7367fi
7368
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007369# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007370DIRS="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 -05007371DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007372DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007373DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007374DIRS="$DIRS roms/seabios roms/vgabios"
Anthony Liguoric09015d2012-01-10 13:10:42 -06007375FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7376FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02007377FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -05007378FILES="$FILES tests/fp/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007379FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02007380FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007381FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007382FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01007383FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01007384FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07007385for bios_file in \
7386 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007387 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007388 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007389 $source_path/pc-bios/*.rom \
7390 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007391 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007392 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007393 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007394 $source_path/pc-bios/palcode-*
7395do
Stefan Weil89138852016-05-16 15:10:20 +02007396 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007397done
Stefan Weil89138852016-05-16 15:10:20 +02007398for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007399do
Stefan Weil89138852016-05-16 15:10:20 +02007400 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007401done
Su Hang645d3cb2018-08-16 14:05:28 +01007402for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7403do
7404 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7405done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007406mkdir -p $DIRS
7407for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007408 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007409 symlink "$source_path/$f" "$f"
7410 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007411done
Paul Brook1ad21342009-05-19 16:17:58 +01007412
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007413# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007414for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007415 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007416 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007417 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007418 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007419 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007420 echo "CC=$cc" >> $config_mak
7421 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007422 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007423 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007424 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007425 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007426 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007427done
7428
Marc-André Lureaufe310172016-06-15 13:06:00 +02007429# set up tests data directory
Philippe Mathieu-Daudé1b145d52018-06-12 14:34:37 -03007430for tests_subdir in acceptance data; do
7431 if [ ! -e tests/$tests_subdir ]; then
7432 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7433 fi
7434done
Marc-André Lureaufe310172016-06-15 13:06:00 +02007435
Max Reitz76c75602014-05-24 23:24:56 +02007436# set up qemu-iotests in this build directory
7437iotests_common_env="tests/qemu-iotests/common.env"
7438iotests_check="tests/qemu-iotests/check"
7439
7440echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7441echo >> "$iotests_common_env"
7442echo "export PYTHON='$python'" >> "$iotests_common_env"
7443
7444if [ ! -e "$iotests_check" ]; then
7445 symlink "$source_path/$iotests_check" "$iotests_check"
7446fi
7447
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007448# Save the configure command line for later reuse.
7449cat <<EOD >config.status
7450#!/bin/sh
7451# Generated by configure.
7452# Run this file to recreate the current configuration.
7453# Compiler output produced by configure, useful for debugging
7454# configure, is in config.log if it exists.
7455EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007456
7457preserve_env() {
7458 envname=$1
7459
7460 eval envval=\$$envname
7461
7462 if test -n "$envval"
7463 then
7464 echo "$envname='$envval'" >> config.status
7465 echo "export $envname" >> config.status
7466 else
7467 echo "unset $envname" >> config.status
7468 fi
7469}
7470
7471# Preserve various env variables that influence what
7472# features/build target configure will detect
7473preserve_env AR
7474preserve_env AS
7475preserve_env CC
7476preserve_env CPP
7477preserve_env CXX
7478preserve_env INSTALL
7479preserve_env LD
7480preserve_env LD_LIBRARY_PATH
7481preserve_env LIBTOOL
7482preserve_env MAKE
7483preserve_env NM
7484preserve_env OBJCOPY
7485preserve_env PATH
7486preserve_env PKG_CONFIG
7487preserve_env PKG_CONFIG_LIBDIR
7488preserve_env PKG_CONFIG_PATH
7489preserve_env PYTHON
7490preserve_env SDL_CONFIG
7491preserve_env SDL2_CONFIG
7492preserve_env SMBD
7493preserve_env STRIP
7494preserve_env WINDRES
7495
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007496printf "exec" >>config.status
7497printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007498echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007499chmod +x config.status
7500
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007501rm -r "$TMPDIR1"