blob: f89d29358509de246effdd0a9fdac4c08663f0e9 [file] [log] [blame]
bellard7d132992003-03-06 23:23:54 +00001#!/bin/sh
2#
bellard3ef693a2003-03-23 20:17:16 +00003# qemu configure script (c) 2003 Fabrice Bellard
bellard7d132992003-03-06 23:23:54 +00004#
Peter Maydell8cd05ab2014-05-23 17:07:24 +01005
Cornelia Huck99519e62014-05-28 12:39:17 +02006# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
John Snow5e4dfd32015-10-28 13:56:40 -040011# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
Peter Maydell8cd05ab2014-05-23 17:07:24 +010014# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
bellard7d132992003-03-06 23:23:54 +000025fi
26
Peter Maydell8cd05ab2014-05-23 17:07:24 +010027TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
Don Slutz66518bf2014-01-02 21:12:46 -050029TMPO="${TMPDIR1}/${TMPB}.o"
Peter Maydell9c83ffd2014-02-25 18:27:49 +000030TMPCXX="${TMPDIR1}/${TMPB}.cxx"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010031TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010032TMPMO="${TMPDIR1}/${TMPB}.mo"
bellard7d132992003-03-06 23:23:54 +000033
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020034rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000035
Peter Maydellb48e3612011-11-23 17:26:44 +000036# Print a helpful header at the top of config.log
37echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000038printf "# Configured with:" >> config.log
39printf " '%s'" "$0" "$@" >> config.log
40echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000041echo "#" >> config.log
42
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020043print_error() {
44 (echo
Peter Maydell76ad07a2013-04-08 12:11:26 +010045 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020050 echo) >&2
51}
52
53error_exit() {
54 print_error "$@"
Peter Maydell76ad07a2013-04-08 12:11:26 +010055 exit 1
56}
57
Peter Maydell9c83ffd2014-02-25 18:27:49 +000058do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
Ian Jackson8bbe05d2017-09-25 16:41:03 +010063 if test -n "$BASH_VERSION"; then eval '
64 echo >>config.log "
65funcs: ${FUNCNAME[*]}
66lines: ${BASH_LINENO[*]}"
67 '; fi
Peter Maydell9c83ffd2014-02-25 18:27:49 +000068 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010070 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
75 return 0
76 fi
77 # Don't bother rerunning the compile if we were already using -Werror
78 case "$*" in
79 *-Werror*)
80 return 0
81 ;;
82 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000083 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010085 error_exit "configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010089}
90
Peter Maydell9c83ffd2014-02-25 18:27:49 +000091do_cc() {
92 do_compiler "$cc" "$@"
93}
94
95do_cxx() {
96 do_compiler "$cxx" "$@"
97}
98
99update_cxxflags() {
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
104
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000105 for arg in $QEMU_CFLAGS; do
106 case $arg in
107 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
109 ;;
110 *)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
112 ;;
113 esac
114 done
115}
116
Juan Quintela52166aa2009-08-03 14:46:03 +0200117compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400118 local_cflags="$1"
119 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200120}
121
122compile_prog() {
123 local_cflags="$1"
124 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100125 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200126}
127
Paolo Bonzini11568d62010-12-23 11:43:58 +0100128# symbolically link $1 to $2. Portable version of "ln -sf".
129symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100130 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800131 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100132 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100133}
134
Loïc Minier0dba6192010-01-28 21:26:51 +0000135# check whether a command is available to this shell (may be either an
136# executable or a builtin)
137has() {
138 type "$1" >/dev/null 2>&1
139}
140
141# search for an executable in PATH
142path_of() {
143 local_command="$1"
144 local_ifs="$IFS"
145 local_dir=""
146
147 # pathname has a dir component?
148 if [ "${local_command#*/}" != "$local_command" ]; then
149 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
150 echo "$local_command"
151 return 0
152 fi
153 fi
154 if [ -z "$local_command" ]; then
155 return 1
156 fi
157
158 IFS=:
159 for local_dir in $PATH; do
160 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
161 echo "$local_dir/$local_command"
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 0
164 fi
165 done
166 # not found
167 IFS="${local_ifs:-$(printf ' \t\n')}"
168 return 1
169}
170
Lluís Vilanova5b808272014-05-27 15:02:14 +0200171have_backend () {
172 echo "$trace_backends" | grep "$1" >/dev/null
173}
174
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200175glob() {
176 eval test -z '"${1#'"$2"'}"'
177}
178
179supported_hax_target() {
180 test "$hax" = "yes" || return 1
181 glob "$1" "*-softmmu" || return 1
182 case "${1%-softmmu}" in
183 i386|x86_64)
184 return 0
185 ;;
186 esac
187 return 1
188}
189
190supported_kvm_target() {
191 test "$kvm" = "yes" || return 1
192 glob "$1" "*-softmmu" || return 1
193 case "${1%-softmmu}:$cpu" in
194 arm:arm | aarch64:aarch64 | \
195 i386:i386 | i386:x86_64 | i386:x32 | \
196 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
197 mips:mips | mipsel:mips | \
Thomas Hutha69dc532018-08-21 13:27:48 +0200198 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200199 s390x:s390x)
200 return 0
201 ;;
202 esac
203 return 1
204}
205
206supported_xen_target() {
207 test "$xen" = "yes" || return 1
208 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200209 # Only i386 and x86_64 provide the xenpv machine.
210 case "${1%-softmmu}" in
211 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200212 return 0
213 ;;
214 esac
215 return 1
216}
217
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500218supported_hvf_target() {
219 test "$hvf" = "yes" || return 1
220 glob "$1" "*-softmmu" || return 1
221 case "${1%-softmmu}" in
222 x86_64)
223 return 0
224 ;;
225 esac
226 return 1
227}
228
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800229supported_whpx_target() {
230 test "$whpx" = "yes" || return 1
231 glob "$1" "*-softmmu" || return 1
232 case "${1%-softmmu}" in
233 i386|x86_64)
234 return 0
235 ;;
236 esac
237 return 1
238}
239
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200240supported_target() {
241 case "$1" in
242 *-softmmu)
243 ;;
244 *-linux-user)
245 if test "$linux" != "yes"; then
246 print_error "Target '$target' is only available on a Linux host"
247 return 1
248 fi
249 ;;
250 *-bsd-user)
251 if test "$bsd" != "yes"; then
252 print_error "Target '$target' is only available on a BSD host"
253 return 1
254 fi
255 ;;
256 *)
257 print_error "Invalid target name '$target'"
258 return 1
259 ;;
260 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200261 test "$tcg" = "yes" && return 0
262 supported_kvm_target "$1" && return 0
263 supported_xen_target "$1" && return 0
264 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500265 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800266 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200267 print_error "TCG disabled, but hardware accelerator not available for '$target'"
268 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200269}
270
Christian Borntraegere9a35912017-08-23 12:16:23 +0200271
272ld_has() {
273 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
274}
275
bellard7d132992003-03-06 23:23:54 +0000276# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200277source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200278cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300279iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000280interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000281static="no"
bellard7d132992003-03-06 23:23:54 +0000282cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000283audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800284block_drv_rw_whitelist=""
285block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000286host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200287libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200288libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200289audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400290audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500291libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100292debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100293stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000294
Daniel P. Berrange92712822017-09-29 11:11:58 +0100295if test -e "$source_path/.git"
296then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100297 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100298 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500299 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
300 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100301else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100302 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100303 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100304
305 if ! test -f "$source_path/ui/keycodemapdb/README"
306 then
307 echo
308 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
309 echo
310 echo "This is not a GIT checkout but module content appears to"
311 echo "be missing. Do not use 'git archive' or GitHub download links"
312 echo "to acquire QEMU source archives. Non-GIT builds are only"
313 echo "supported with source archives linked from:"
314 echo
315 echo " https://www.qemu.org/download/"
316 echo
317 echo "Developers working with GIT can use scripts/archive-source.sh"
318 echo "if they need to create valid source archives."
319 echo
320 exit 1
321 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100322fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100323git="git"
aliguoriac0df512008-12-29 17:14:15 +0000324
Stefan Weilafb63eb2012-09-26 22:04:38 +0200325# Don't accept a target_list environment variable.
326unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100327
328# Default value for a variable defining feature "foo".
329# * foo="no" feature will only be used if --enable-foo arg is given
330# * foo="" feature will be searched for, and if found, will be used
331# unless --disable-foo is given
332# * foo="yes" this value will only be set by --enable-foo flag.
333# feature will searched for,
334# if not found, configure exits with error
335#
336# Always add --enable-foo and --disable-foo command line args.
337# Distributions want to ensure that several features are compiled in, and it
338# is impossible without a --enable-foo that exits if a feature is not found.
339
340bluez=""
341brlapi=""
342curl=""
343curses=""
344docs=""
345fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100346netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100347sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400348sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530349virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200350mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100351vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100352sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100354vnc_sasl=""
355vnc_jpeg=""
356vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200357xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100358xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000359xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000360xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000361xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100362linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500363cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200365libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200367tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100368membarrier=""
Bradd41a75a2011-07-26 23:11:26 -0400369vhost_net="no"
Gonglei042cea22018-03-01 21:46:28 +0800370vhost_crypto="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000371vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100372vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200373vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400374kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100375hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500376hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800377whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400378rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300379pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100380gprof="no"
381debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100382debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100383sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500384fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100385strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200386tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100387bigendian="no"
388mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000389gcov="no"
390gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100391EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800392DSOSUF=".so"
393LDFLAGS_SHARED="-shared"
394modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100395prefix="/usr/local"
396mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300397datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200398firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300399qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100400bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300401libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400402libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200403includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100404sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300405local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100406confsuffix="/qemu"
407slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100408oss_lib=""
409bsd="no"
410linux="no"
411solaris="no"
412profiler="no"
413cocoa="no"
414softmmu="yes"
415linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100416bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100417blobs="yes"
418pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200419pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200420qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300421trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100422trace_file="trace"
423spice=""
424rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200425smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100426libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200427usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100428opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100429opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000430cpuid_h="no"
Liang Li99f2dbd2016-03-08 13:53:16 +0800431avx2_opt="no"
Alon Levy1ece9902011-07-26 12:30:40 +0300432zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700433capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200434lzo=""
435snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100436bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400437guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400438guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500439guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300440guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400441vss_win32_sdk=""
442win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100443want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100444libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100445libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100446coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200447coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200448debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400449crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300450seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530451glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400452glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530453glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530454glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530455glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600456gtk=""
Stefan Weil9e04c682014-05-17 16:29:18 +0200457gtkabi=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200458gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100459tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100460gnutls=""
Daniel P. Berrangeb917da42015-10-31 14:39:52 +0900461gnutls_rnd=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100462nettle=""
Daniel P. Berrangefff2f982016-03-29 15:47:51 +0100463nettle_kdf="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100464gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800465gcrypt_hmac="no"
Daniel P. Berrange37788f22015-10-14 13:14:04 +0100466gcrypt_kdf="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100467vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200468virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400469tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100470libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100471live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800472numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800473tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200474jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800475replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700476vxhs=""
Klim Kireeved279a02018-01-12 12:01:19 +0300477libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100478docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200479debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800480libpmem=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100481
Alex Bennéed75402b2018-04-04 20:27:05 +0100482# cross compilers defaults, can be overridden with --cross-cc-ARCH
483cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100484cross_cc_aarch64_be="$cross_cc_aarch64"
485cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100486cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100487cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100488cross_cc_i386="i386-pc-linux-gnu-gcc"
489cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100490cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100491cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100492
493enabled_cross_compilers=""
494
Peter Maydell898be3e2017-03-21 14:31:57 +0000495supported_cpu="no"
496supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100497bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800498malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000499
aliguoriac0df512008-12-29 17:14:15 +0000500# parse CC options first
501for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200502 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000503 case "$opt" in
504 --cross-prefix=*) cross_prefix="$optarg"
505 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100506 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000507 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400508 --cxx=*) CXX="$optarg"
509 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100510 --source-path=*) source_path="$optarg"
511 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200512 --cpu=*) cpu="$optarg"
513 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100514 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200515 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100516 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100517 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100518 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100519 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200520 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100521 --enable-debug-info) debug_info="yes"
522 ;;
523 --disable-debug-info) debug_info="no"
524 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100525 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
526 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100527 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
528 eval "cross_cc_cflags_${cc_arch}=\$optarg"
529 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100530 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
531 eval "cross_cc_${cc_arch}=\$optarg"
532 ;;
aliguoriac0df512008-12-29 17:14:15 +0000533 esac
534done
aliguoriac0df512008-12-29 17:14:15 +0000535# OS specific
536# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100537# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000538
Peter Maydelle49d0212012-12-07 15:39:13 +0000539# Preferred compiler:
540# ${CC} (if set)
541# ${cross_prefix}gcc (if cross-prefix specified)
542# system compiler
543if test -z "${CC}${cross_prefix}"; then
544 cc="$host_cc"
545else
546 cc="${CC-${cross_prefix}gcc}"
547fi
548
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400549if test -z "${CXX}${cross_prefix}"; then
550 cxx="c++"
551else
552 cxx="${CXX-${cross_prefix}g++}"
553fi
554
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500555ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700556as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700557ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000558cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500559objcopy="${OBJCOPY-${cross_prefix}objcopy}"
560ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800561ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200562nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500563strip="${STRIP-${cross_prefix}strip}"
564windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300565pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
566query_pkg_config() {
567 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
568}
569pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500570sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000571sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000572
Peter Maydell45d285a2013-10-21 21:03:06 +0100573# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
574ARFLAGS="${ARFLAGS-rv}"
575
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200576# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100577# We use -fwrapv to tell the compiler that we require a C dialect where
578# left shift of signed integers is well defined and has the expected
579# 2s-complement style results. (Both clang and gcc agree that it
580# provides these semantics.)
581QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400582QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100583QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200584QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200585QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100586if test "$debug_info" = "yes"; then
587 CFLAGS="-g $CFLAGS"
588 LDFLAGS="-g $LDFLAGS"
589fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200590
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100591# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200592source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100593
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300594# running configure in the source tree?
595# we know that's the case if configure is there.
596if test -f "./configure"; then
597 pwd_is_source_path="y"
598else
599 pwd_is_source_path="n"
600fi
601
aliguoriac0df512008-12-29 17:14:15 +0000602check_define() {
603cat > $TMPC <<EOF
604#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000605#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000606#endif
607int main(void) { return 0; }
608EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200609 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000610}
611
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200612check_include() {
613cat > $TMPC <<EOF
614#include <$1>
615int main(void) { return 0; }
616EOF
617 compile_object
618}
619
John Snow93b25862015-03-25 18:57:37 -0400620write_c_skeleton() {
621 cat > $TMPC <<EOF
622int main(void) { return 0; }
623EOF
624}
625
Peter Maydellbbea4052012-08-14 15:35:34 +0100626if check_define __linux__ ; then
627 targetos="Linux"
628elif check_define _WIN32 ; then
629 targetos='MINGW32'
630elif check_define __OpenBSD__ ; then
631 targetos='OpenBSD'
632elif check_define __sun__ ; then
633 targetos='SunOS'
634elif check_define __HAIKU__ ; then
635 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100636elif check_define __FreeBSD__ ; then
637 targetos='FreeBSD'
638elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
639 targetos='GNU/kFreeBSD'
640elif check_define __DragonFly__ ; then
641 targetos='DragonFly'
642elif check_define __NetBSD__; then
643 targetos='NetBSD'
644elif check_define __APPLE__; then
645 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100646else
Peter Maydell951fedf2017-07-13 16:15:32 +0100647 # This is a fatal error, but don't report it yet, because we
648 # might be going to just print the --help text, or it might
649 # be the result of a missing compiler.
650 targetos='bogus'
651 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100652fi
653
654# Some host OSes need non-standard checks for which CPU to use.
655# Note that these checks are broken for cross-compilation: if you're
656# cross-compiling to one of these OSes then you'll need to specify
657# the correct CPU with the --cpu option.
658case $targetos in
659Darwin)
660 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
661 # run 64-bit userspace code.
662 # If the user didn't specify a CPU explicitly and the kernel says this is
663 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
664 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
665 cpu="x86_64"
666 fi
667 ;;
668SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200669 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100670 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
671 cpu="x86_64"
672 fi
673esac
674
Juan Quintela2ff6b912009-08-03 14:45:55 +0200675if test ! -z "$cpu" ; then
676 # command line argument
677 :
678elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000679 cpu="i386"
680elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700681 if check_define __ILP32__ ; then
682 cpu="x32"
683 else
684 cpu="x86_64"
685 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000686elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000687 if check_define __arch64__ ; then
688 cpu="sparc64"
689 else
690 cpu="sparc"
691 fi
malcfdf7ed92009-01-14 18:39:52 +0000692elif check_define _ARCH_PPC ; then
693 if check_define _ARCH_PPC64 ; then
694 cpu="ppc64"
695 else
696 cpu="ppc"
697 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200698elif check_define __mips__ ; then
699 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200700elif check_define __s390__ ; then
701 if check_define __s390x__ ; then
702 cpu="s390x"
703 else
704 cpu="s390"
705 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100706elif check_define __arm__ ; then
707 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100708elif check_define __aarch64__ ; then
709 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000710else
Stefan Weil89138852016-05-16 15:10:20 +0200711 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000712fi
713
Peter Maydell359bc952011-12-24 13:07:25 +0000714ARCH=
715# Normalise host CPU name and set ARCH.
716# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000717case "$cpu" in
Peter Maydell6499fd12017-03-28 11:58:38 +0100718 ppc|ppc64|s390|s390x|sparc64|x32)
Peter Maydell898be3e2017-03-21 14:31:57 +0000719 cpu="$cpu"
720 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100721 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000722 ;;
bellard7d132992003-03-06 23:23:54 +0000723 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000724 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000725 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100726 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000727 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000728 x86_64|amd64)
729 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000730 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100731 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000732 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100733 armv*b|armv*l|arm)
734 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000735 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100736 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000737 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100738 aarch64)
739 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000740 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100741 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100742 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200743 mips*)
744 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000745 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100746 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200747 ;;
blueswir131422552007-04-16 18:27:06 +0000748 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000749 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100750 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100751 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000752 ;;
bellard7d132992003-03-06 23:23:54 +0000753 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000754 # This will result in either an error or falling back to TCI later
755 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000756 ;;
757esac
Peter Maydell359bc952011-12-24 13:07:25 +0000758if test -z "$ARCH"; then
759 ARCH="$cpu"
760fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200761
bellard7d132992003-03-06 23:23:54 +0000762# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200763
Stacey Sonadfc3e92014-06-08 09:57:22 -0700764# host *BSD for user mode
765HOST_VARIANT_DIR=""
766
bellard7d132992003-03-06 23:23:54 +0000767case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000768MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200769 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100770 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200771 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200772 if check_include dsound.h; then
773 audio_drv_list="dsound"
774 else
775 audio_drv_list=""
776 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000777 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000778;;
ths5c40d2b2007-06-23 16:03:36 +0000779GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100780 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200781 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200782 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000783;;
bellard7d3505c2004-05-12 19:32:15 +0000784FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200785 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100786 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200787 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200788 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100789 # needed for kinfo_getvmmap(3) in libutil.h
790 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500791 # needed for kinfo_getproc
792 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100793 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700794 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000795 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000796;;
blueswir1c5e97232009-03-07 20:06:23 +0000797DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200798 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100799 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200800 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200801 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700802 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000803;;
bellard7d3505c2004-05-12 19:32:15 +0000804NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200805 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100806 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200807 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200808 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200809 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700810 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200811 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000812;;
813OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200814 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100815 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400816 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200817 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700818 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500819 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000820;;
bellard83fb7ad2004-07-05 21:25:26 +0000821Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200822 bsd="yes"
823 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100824 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500825 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800826 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200827 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200828 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200829 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200830 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200831 cocoa="yes"
832 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200833 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200834 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200835 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100836 # Disable attempts to use ObjectiveC features in os/object.h since they
837 # won't work when we're compiling with gcc as a C compiler.
838 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700839 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000840 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000841;;
bellardec530c82006-04-25 22:36:06 +0000842SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200843 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100844 make="${MAKE-gmake}"
845 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400846 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200847 if test -f /usr/include/sys/soundcard.h ; then
848 audio_drv_list="oss"
849 fi
850 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000851# needed for CMSG_ macros in sys/socket.h
852 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
853# needed for TIOCWIN* defines in termios.h
854 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200855 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200856 solarisnetlibs="-lsocket -lnsl -lresolv"
857 LIBS="$solarisnetlibs $LIBS"
858 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000859;;
Andreas Färber179cf402010-09-20 00:50:43 +0200860Haiku)
861 haiku="yes"
862 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
863 LIBS="-lposix_error_mapper -lnetwork $LIBS"
864;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000865Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200866 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200867 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200868 linux="yes"
869 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200870 kvm="yes"
871 vhost_net="yes"
Gonglei042cea22018-03-01 21:46:28 +0800872 vhost_crypto="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000873 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100874 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000875 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000876 supported_os="yes"
877;;
bellard7d132992003-03-06 23:23:54 +0000878esac
879
bellard7d3505c2004-05-12 19:32:15 +0000880if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000881 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200882 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000883 fi
bellard7d3505c2004-05-12 19:32:15 +0000884fi
885
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100886: ${make=${MAKE-make}}
887: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100888: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400889: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100890
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100891# Default objcc to clang if available, otherwise use CC
892if has clang; then
893 objcc=clang
894else
895 objcc="$cc"
896fi
897
Juan Quintela3457a3f2009-08-03 14:46:07 +0200898if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200899 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800900 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200901 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100902 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
903 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100904 # MinGW needs -mthreads for TLS and macro _MT.
905 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100906 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400907 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100908 if compile_prog "" "-liberty" ; then
909 LIBS="-liberty $LIBS"
910 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200911 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200912 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300913 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300914 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200915 bindir="\${prefix}"
916 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200917 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200918 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300919 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200920fi
921
Anthony Liguori487fefd2009-06-11 13:28:25 -0500922werror=""
bellard85aa5182007-11-11 20:17:03 +0000923
bellard7d132992003-03-06 23:23:54 +0000924for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200925 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000926 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000927 --help|-h) show_help=yes
928 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400929 --version|-V) exec cat $source_path/VERSION
930 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000931 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000932 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000933 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000934 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100935 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000936 ;;
aliguoriac0df512008-12-29 17:14:15 +0000937 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000938 ;;
aliguoriac0df512008-12-29 17:14:15 +0000939 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000940 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000941 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000942 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400943 --cxx=*)
944 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200945 --iasl=*) iasl="$optarg"
946 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100947 --objcc=*) objcc="$optarg"
948 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000949 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000950 ;;
pbrook6a882642006-04-17 13:57:12 +0000951 --install=*) install="$optarg"
952 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000953 --python=*) python="$optarg"
954 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000955 --gcov=*) gcov_tool="$optarg"
956 ;;
Brade2d88302011-09-02 16:53:28 -0400957 --smbd=*) smbd="$optarg"
958 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200959 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000960 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100961 --extra-cxxflags=*)
962 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200963 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000964 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100965 --enable-debug-info)
966 ;;
967 --disable-debug-info)
968 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100969 --cross-cc-*)
970 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800971 --enable-modules)
972 modules="yes"
973 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000974 --disable-modules)
975 modules="no"
976 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200977 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000978 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000979 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000980 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200981 --enable-trace-backends=*) trace_backends="$optarg"
982 ;;
983 # XXX: backwards compatibility
984 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100985 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100986 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100987 ;;
bellard7d132992003-03-06 23:23:54 +0000988 --enable-gprof) gprof="yes"
989 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000990 --enable-gcov) gcov="yes"
991 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100992 --static)
993 static="yes"
994 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300995 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000996 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200997 --mandir=*) mandir="$optarg"
998 ;;
999 --bindir=*) bindir="$optarg"
1000 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001001 --libdir=*) libdir="$optarg"
1002 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001003 --libexecdir=*) libexecdir="$optarg"
1004 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001005 --includedir=*) includedir="$optarg"
1006 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001007 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001008 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001009 --with-confsuffix=*) confsuffix="$optarg"
1010 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001011 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001012 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001013 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001014 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001015 --localstatedir=*) local_statedir="$optarg"
1016 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001017 --firmwarepath=*) firmwarepath="$optarg"
1018 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001019 --host=*|--build=*|\
1020 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001021 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001022 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1023 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1024 # These switches are silently ignored, for compatibility with
1025 # autoconf-generated configure scripts. This allows QEMU's
1026 # configure to be used by RPM and similar macros that set
1027 # lots of directory switches by default.
1028 ;;
bellard97a847b2003-08-10 21:36:04 +00001029 --disable-sdl) sdl="no"
1030 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001031 --enable-sdl) sdl="yes"
1032 ;;
Dave Airlie47c03742013-12-10 14:05:51 +10001033 --with-sdlabi=*) sdlabi="$optarg"
1034 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001035 --disable-qom-cast-debug) qom_cast_debug="no"
1036 ;;
1037 --enable-qom-cast-debug) qom_cast_debug="yes"
1038 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301039 --disable-virtfs) virtfs="no"
1040 ;;
1041 --enable-virtfs) virtfs="yes"
1042 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001043 --disable-mpath) mpath="no"
1044 ;;
1045 --enable-mpath) mpath="yes"
1046 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001047 --disable-vnc) vnc="no"
1048 ;;
1049 --enable-vnc) vnc="yes"
1050 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001051 --oss-lib=*) oss_lib="$optarg"
1052 ;;
malc0c58ac12008-06-25 21:04:05 +00001053 --audio-drv-list=*) audio_drv_list="$optarg"
1054 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001055 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001056 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001057 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001058 ;;
aurel32f8393942009-04-13 18:45:38 +00001059 --enable-debug-tcg) debug_tcg="yes"
1060 ;;
1061 --disable-debug-tcg) debug_tcg="no"
1062 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001063 --enable-debug)
1064 # Enable debugging options that aren't excessively noisy
1065 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001066 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001067 debug="yes"
1068 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001069 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001070 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001071 --enable-sanitizers) sanitizers="yes"
1072 ;;
1073 --disable-sanitizers) sanitizers="no"
1074 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001075 --enable-sparse) sparse="yes"
1076 ;;
1077 --disable-sparse) sparse="no"
1078 ;;
aliguori1625af82009-04-05 17:41:02 +00001079 --disable-strip) strip_opt="no"
1080 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001081 --disable-vnc-sasl) vnc_sasl="no"
1082 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001083 --enable-vnc-sasl) vnc_sasl="yes"
1084 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001085 --disable-vnc-jpeg) vnc_jpeg="no"
1086 ;;
1087 --enable-vnc-jpeg) vnc_jpeg="yes"
1088 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001089 --disable-vnc-png) vnc_png="no"
1090 ;;
1091 --enable-vnc-png) vnc_png="yes"
1092 ;;
bellard443f1372004-06-04 11:13:20 +00001093 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001094 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001095 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001096 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001097 --enable-vde) vde="yes"
1098 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001099 --disable-netmap) netmap="no"
1100 ;;
1101 --enable-netmap) netmap="yes"
1102 ;;
aliguorie37630c2009-04-22 15:19:10 +00001103 --disable-xen) xen="no"
1104 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001105 --enable-xen) xen="yes"
1106 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001107 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1108 ;;
1109 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1110 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001111 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1112 ;;
1113 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1114 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001115 --disable-brlapi) brlapi="no"
1116 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001117 --enable-brlapi) brlapi="yes"
1118 ;;
balrogfb599c92008-09-28 23:49:55 +00001119 --disable-bluez) bluez="no"
1120 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001121 --enable-bluez) bluez="yes"
1122 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001123 --disable-kvm) kvm="no"
1124 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001125 --enable-kvm) kvm="yes"
1126 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001127 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001128 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001129 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001130 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001131 --disable-hvf) hvf="no"
1132 ;;
1133 --enable-hvf) hvf="yes"
1134 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001135 --disable-whpx) whpx="no"
1136 ;;
1137 --enable-whpx) whpx="yes"
1138 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001139 --disable-tcg-interpreter) tcg_interpreter="no"
1140 ;;
1141 --enable-tcg-interpreter) tcg_interpreter="yes"
1142 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001143 --disable-cap-ng) cap_ng="no"
1144 ;;
1145 --enable-cap-ng) cap_ng="yes"
1146 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001147 --disable-tcg) tcg="no"
1148 ;;
1149 --enable-tcg) tcg="yes"
1150 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001151 --disable-malloc-trim) malloc_trim="no"
1152 ;;
1153 --enable-malloc-trim) malloc_trim="yes"
1154 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001155 --disable-spice) spice="no"
1156 ;;
1157 --enable-spice) spice="yes"
1158 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001159 --disable-libiscsi) libiscsi="no"
1160 ;;
1161 --enable-libiscsi) libiscsi="yes"
1162 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001163 --disable-libnfs) libnfs="no"
1164 ;;
1165 --enable-libnfs) libnfs="yes"
1166 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001167 --enable-profiler) profiler="yes"
1168 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001169 --disable-cocoa) cocoa="no"
1170 ;;
malcc2de5c92008-06-28 19:13:06 +00001171 --enable-cocoa)
1172 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001173 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001174 ;;
pbrookcad25d62006-03-19 16:31:11 +00001175 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001176 ;;
pbrookcad25d62006-03-19 16:31:11 +00001177 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001178 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001179 --disable-user)
1180 linux_user="no" ;
1181 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001182 ;;
1183 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001184 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001185 ;;
ths831b7822007-01-18 20:06:33 +00001186 --enable-linux-user) linux_user="yes"
1187 ;;
blueswir184778502008-10-26 20:33:16 +00001188 --disable-bsd-user) bsd_user="no"
1189 ;;
1190 --enable-bsd-user) bsd_user="yes"
1191 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001192 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001193 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001194 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001195 ;;
bellard85aa5182007-11-11 20:17:03 +00001196 --enable-werror) werror="yes"
1197 ;;
1198 --disable-werror) werror="no"
1199 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001200 --enable-stack-protector) stack_protector="yes"
1201 ;;
1202 --disable-stack-protector) stack_protector="no"
1203 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001204 --disable-curses) curses="no"
1205 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001206 --enable-curses) curses="yes"
1207 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001208 --disable-curl) curl="no"
1209 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001210 --enable-curl) curl="yes"
1211 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001212 --disable-fdt) fdt="no"
1213 ;;
1214 --enable-fdt) fdt="yes"
1215 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001216 --disable-linux-aio) linux_aio="no"
1217 ;;
1218 --enable-linux-aio) linux_aio="yes"
1219 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001220 --disable-attr) attr="no"
1221 ;;
1222 --enable-attr) attr="yes"
1223 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001224 --disable-membarrier) membarrier="no"
1225 ;;
1226 --enable-membarrier) membarrier="yes"
1227 ;;
ths77755342008-11-27 15:45:16 +00001228 --disable-blobs) blobs="no"
1229 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001230 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001231 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001232 --with-coroutine=*) coroutine="$optarg"
1233 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001234 --disable-coroutine-pool) coroutine_pool="no"
1235 ;;
1236 --enable-coroutine-pool) coroutine_pool="yes"
1237 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001238 --enable-debug-stack-usage) debug_stack_usage="yes"
1239 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001240 --enable-crypto-afalg) crypto_afalg="yes"
1241 ;;
1242 --disable-crypto-afalg) crypto_afalg="no"
1243 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001244 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001245 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001246 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001247 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001248 --disable-vhost-net) vhost_net="no"
1249 ;;
1250 --enable-vhost-net) vhost_net="yes"
1251 ;;
Gonglei042cea22018-03-01 21:46:28 +08001252 --disable-vhost-crypto) vhost_crypto="no"
1253 ;;
1254 --enable-vhost-crypto)
1255 vhost_crypto="yes"
1256 if test "$mingw32" = "yes"; then
1257 error_exit "vhost-crypto isn't available on win32"
1258 fi
1259 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001260 --disable-vhost-scsi) vhost_scsi="no"
1261 ;;
1262 --enable-vhost-scsi) vhost_scsi="yes"
1263 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001264 --disable-vhost-vsock) vhost_vsock="no"
1265 ;;
1266 --enable-vhost-vsock) vhost_vsock="yes"
1267 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001268 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001269 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001270 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001271 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001272 --disable-rbd) rbd="no"
1273 ;;
1274 --enable-rbd) rbd="yes"
1275 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001276 --disable-xfsctl) xfs="no"
1277 ;;
1278 --enable-xfsctl) xfs="yes"
1279 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001280 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001281 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001282 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001283 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001284 --disable-libusb) libusb="no"
1285 ;;
1286 --enable-libusb) libusb="yes"
1287 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001288 --disable-usb-redir) usb_redir="no"
1289 ;;
1290 --enable-usb-redir) usb_redir="yes"
1291 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001292 --disable-zlib-test) zlib="no"
1293 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001294 --disable-lzo) lzo="no"
1295 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001296 --enable-lzo) lzo="yes"
1297 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001298 --disable-snappy) snappy="no"
1299 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001300 --enable-snappy) snappy="yes"
1301 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001302 --disable-bzip2) bzip2="no"
1303 ;;
1304 --enable-bzip2) bzip2="yes"
1305 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001306 --enable-guest-agent) guest_agent="yes"
1307 ;;
1308 --disable-guest-agent) guest_agent="no"
1309 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001310 --enable-guest-agent-msi) guest_agent_msi="yes"
1311 ;;
1312 --disable-guest-agent-msi) guest_agent_msi="no"
1313 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001314 --with-vss-sdk) vss_win32_sdk=""
1315 ;;
1316 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1317 ;;
1318 --without-vss-sdk) vss_win32_sdk="no"
1319 ;;
1320 --with-win-sdk) win_sdk=""
1321 ;;
1322 --with-win-sdk=*) win_sdk="$optarg"
1323 ;;
1324 --without-win-sdk) win_sdk="no"
1325 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001326 --enable-tools) want_tools="yes"
1327 ;;
1328 --disable-tools) want_tools="no"
1329 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001330 --enable-seccomp) seccomp="yes"
1331 ;;
1332 --disable-seccomp) seccomp="no"
1333 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301334 --disable-glusterfs) glusterfs="no"
1335 ;;
1336 --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 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001373 --with-gtkabi=*) gtkabi="$optarg"
1374 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001375 --disable-vte) vte="no"
1376 ;;
1377 --enable-vte) vte="yes"
1378 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001379 --disable-virglrenderer) virglrenderer="no"
1380 ;;
1381 --enable-virglrenderer) virglrenderer="yes"
1382 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001383 --disable-tpm) tpm="no"
1384 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001385 --enable-tpm) tpm="yes"
1386 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001387 --disable-libssh2) libssh2="no"
1388 ;;
1389 --enable-libssh2) libssh2="yes"
1390 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001391 --disable-live-block-migration) live_block_migration="no"
1392 ;;
1393 --enable-live-block-migration) live_block_migration="yes"
1394 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001395 --disable-numa) numa="no"
1396 ;;
1397 --enable-numa) numa="yes"
1398 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001399 --disable-libxml2) libxml2="no"
1400 ;;
1401 --enable-libxml2) libxml2="yes"
1402 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001403 --disable-tcmalloc) tcmalloc="no"
1404 ;;
1405 --enable-tcmalloc) tcmalloc="yes"
1406 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001407 --disable-jemalloc) jemalloc="no"
1408 ;;
1409 --enable-jemalloc) jemalloc="yes"
1410 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001411 --disable-replication) replication="no"
1412 ;;
1413 --enable-replication) replication="yes"
1414 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001415 --disable-vxhs) vxhs="no"
1416 ;;
1417 --enable-vxhs) vxhs="yes"
1418 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001419 --disable-vhost-user) vhost_user="no"
1420 ;;
1421 --enable-vhost-user)
1422 vhost_user="yes"
1423 if test "$mingw32" = "yes"; then
1424 error_exit "vhost-user isn't available on win32"
1425 fi
1426 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001427 --disable-capstone) capstone="no"
1428 ;;
1429 --enable-capstone) capstone="yes"
1430 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001431 --enable-capstone=git) capstone="git"
1432 ;;
1433 --enable-capstone=system) capstone="system"
1434 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001435 --with-git=*) git="$optarg"
1436 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001437 --enable-git-update) git_update=yes
1438 ;;
1439 --disable-git-update) git_update=no
1440 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001441 --enable-debug-mutex) debug_mutex=yes
1442 ;;
1443 --disable-debug-mutex) debug_mutex=no
1444 ;;
Junyan He17824402018-07-18 15:47:59 +08001445 --enable-libpmem) libpmem=yes
1446 ;;
1447 --disable-libpmem) libpmem=no
1448 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001449 *)
1450 echo "ERROR: unknown option $opt"
1451 echo "Try '$0 --help' for more information"
1452 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001453 ;;
bellard7d132992003-03-06 23:23:54 +00001454 esac
1455done
1456
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001457if test "$vhost_user" = ""; then
1458 if test "$mingw32" = "yes"; then
1459 vhost_user="no"
1460 else
1461 vhost_user="yes"
1462 fi
1463fi
1464
bellard40293e52008-01-31 11:32:10 +00001465case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001466 ppc)
1467 CPU_CFLAGS="-m32"
1468 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001469 cross_cc_powerpc=$cc
1470 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001471 ;;
1472 ppc64)
1473 CPU_CFLAGS="-m64"
1474 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001475 cross_cc_ppc64=$cc
1476 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001477 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001478 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001479 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1480 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001481 cross_cc_sparc=$cc
1482 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001483 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001484 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001485 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001486 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001487 cross_cc_sparc64=$cc
1488 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001489 ;;
ths76d83bd2007-11-18 21:22:10 +00001490 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001491 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001492 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001493 cross_cc_s390=$cc
1494 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001495 ;;
1496 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001497 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001498 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001499 cross_cc_s390x=$cc
1500 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001501 ;;
bellard40293e52008-01-31 11:32:10 +00001502 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001503 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001504 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001505 cross_cc_i386=$cc
1506 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001507 ;;
1508 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001509 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1510 # If we truly care, we should simply detect this case at
1511 # runtime and generate the fallback to serial emulation.
1512 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001513 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001514 cross_cc_x86_64=$cc
1515 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001516 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001517 x32)
1518 CPU_CFLAGS="-mx32"
1519 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001520 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001521 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001522 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001523 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001524esac
1525
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001526QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001527
Peter Maydellaffc88c2016-06-13 11:32:24 +01001528# For user-mode emulation the host arch has to be one we explicitly
1529# support, even if we're using TCI.
1530if [ "$ARCH" = "unknown" ]; then
1531 bsd_user="no"
1532 linux_user="no"
1533fi
1534
Peter Maydell60e0df22011-05-03 14:50:13 +01001535default_target_list=""
1536
Peter Maydell6e92f822013-05-20 16:16:15 +01001537mak_wilds=""
1538
1539if [ "$softmmu" = "yes" ]; then
1540 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001541fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001542if [ "$linux_user" = "yes" ]; then
1543 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001544fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001545if [ "$bsd_user" = "yes" ]; then
1546 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001547fi
1548
Peter Maydell6e92f822013-05-20 16:16:15 +01001549for config in $mak_wilds; do
1550 default_target_list="${default_target_list} $(basename "$config" .mak)"
1551done
1552
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001553# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001554trace_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 +01001555
pbrookaf5db582006-04-08 14:26:41 +00001556if test x"$show_help" = x"yes" ; then
1557cat << EOF
1558
1559Usage: configure [options]
1560Options: [defaults in brackets after descriptions]
1561
Stefan Weil08fb77e2013-12-18 22:09:39 +01001562Standard options:
1563 --help print this message
1564 --prefix=PREFIX install in PREFIX [$prefix]
1565 --interp-prefix=PREFIX where to find shared libraries, etc.
1566 use %M for cpu name [$interp_prefix]
1567 --target-list=LIST set target list (default: build everything)
1568$(echo Available targets: $default_target_list | \
1569 fold -s -w 53 | sed -e 's/^/ /')
1570
1571Advanced options (experts only):
1572 --source-path=PATH path of source code [$source_path]
1573 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1574 --cc=CC use C compiler CC [$cc]
1575 --iasl=IASL use ACPI compiler IASL [$iasl]
1576 --host-cc=CC use C compiler CC [$host_cc] for code run at
1577 build time
1578 --cxx=CXX use C++ compiler CXX [$cxx]
1579 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1580 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001581 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001582 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001583 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001584 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001585 --make=MAKE use specified make [$make]
1586 --install=INSTALL use specified install [$install]
1587 --python=PYTHON use specified python [$python]
1588 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001589 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001590 --static enable static build [$static]
1591 --mandir=PATH install man pages in PATH
1592 --datadir=PATH install firmware in PATH$confsuffix
1593 --docdir=PATH install documentation in PATH$confsuffix
1594 --bindir=PATH install binaries in PATH
1595 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001596 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001597 --sysconfdir=PATH install config in PATH$confsuffix
1598 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001599 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001600 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001601 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001602 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001603 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001604 --disable-strip disable stripping binaries
1605 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001606 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001607 --audio-drv-list=LIST set audio drivers list:
1608 Available drivers: $audio_possible_drivers
1609 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1610 --block-drv-rw-whitelist=L
1611 set block driver read-write whitelist
1612 (affects only QEMU, not qemu-img)
1613 --block-drv-ro-whitelist=L
1614 set block driver read-only whitelist
1615 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001616 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001617 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001618 --with-trace-file=NAME Full PATH,NAME of file to store traces
1619 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001620 --disable-slirp disable SLIRP userspace network connectivity
1621 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001622 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001623 --oss-lib path to OSS library
1624 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001625 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001626 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001627 --enable-gcov enable test coverage analysis with gcov
1628 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001629 --disable-blobs disable installing provided firmware blobs
1630 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1631 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001632 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001633 --enable-gprof QEMU profiling with gprof
1634 --enable-profiler profiler support
1635 --enable-xen-pv-domain-build
1636 xen pv domain builder
1637 --enable-debug-stack-usage
1638 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001639
1640Optional features, enabled with --enable-FEATURE and
1641disabled with --disable-FEATURE, default is enabled if available:
1642
1643 system all system emulation targets
1644 user supported user emulation targets
1645 linux-user all linux usermode emulation targets
1646 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001647 docs build documentation
1648 guest-agent build the QEMU Guest Agent
1649 guest-agent-msi build guest agent Windows MSI installation package
1650 pie Position Independent Executables
1651 modules modules support
1652 debug-tcg TCG debugging (default is disabled)
1653 debug-info debugging information
1654 sparse sparse checker
1655
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001656 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001657 nettle nettle cryptography support
1658 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001659 sdl SDL UI
1660 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1661 gtk gtk UI
1662 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1663 vte vte support for the gtk UI
1664 curses curses UI
1665 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001666 vnc-sasl SASL encryption for VNC server
1667 vnc-jpeg JPEG lossy compression for VNC server
1668 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001669 cocoa Cocoa UI (Mac OS X only)
1670 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001671 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001672 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001673 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001674 brlapi BrlAPI (Braile)
1675 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001676 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001677 fdt fdt device tree
1678 bluez bluez stack connectivity
1679 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001680 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001681 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001682 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001683 rdma Enable RDMA-based migration
1684 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001685 vde support for vde network
1686 netmap support for netmap network
1687 linux-aio Linux AIO support
1688 cap-ng libcap-ng support
1689 attr attr and xattr support
1690 vhost-net vhost-net acceleration support
Gonglei042cea22018-03-01 21:46:28 +08001691 vhost-crypto vhost-crypto acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001692 spice spice
1693 rbd rados block device (rbd)
1694 libiscsi iscsi support
1695 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001696 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001697 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001698 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001699 usb-redir usb network redirection support
1700 lzo support of lzo compression library
1701 snappy support of snappy compression library
1702 bzip2 support of bzip2 compression library
1703 (for reading bzip2-compressed dmg images)
1704 seccomp seccomp support
1705 coroutine-pool coroutine freelist (better performance)
1706 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001707 tpm TPM support
1708 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001709 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001710 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001711 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001712 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001713 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001714 vhost-vsock virtio sockets device support
1715 opengl opengl support
1716 virglrenderer virgl rendering support
1717 xfsctl xfsctl support
1718 qom-cast-debug cast debugging support
1719 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001720 vxhs Veritas HyperScale vDisk backend support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001721 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001722 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001723 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001724 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001725 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001726
1727NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001728EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001729exit 0
pbrookaf5db582006-04-08 14:26:41 +00001730fi
1731
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001732if ! has $python; then
1733 error_exit "Python not found. Use --python=/path/to/python"
1734fi
1735
1736# Note that if the Python conditional here evaluates True we will exit
1737# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001738if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1739 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001740 "Use --python=/path/to/python to specify a supported Python."
1741fi
1742
1743# Suppress writing compiled files
1744python="$python -B"
1745
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001746# Check that the C compiler works. Doing this here before testing
1747# the host CPU ensures that we had a valid CC to autodetect the
1748# $cpu var (and we should bail right here if that's not the case).
1749# It also allows the help message to be printed without a CC.
1750write_c_skeleton;
1751if compile_object ; then
1752 : C compiler works ok
1753else
1754 error_exit "\"$cc\" either does not exist or does not work"
1755fi
1756if ! compile_prog ; then
1757 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1758fi
1759
Peter Maydell359bc952011-12-24 13:07:25 +00001760# Now we have handled --enable-tcg-interpreter and know we're not just
1761# printing the help message, bail out if the host CPU isn't supported.
1762if test "$ARCH" = "unknown"; then
1763 if test "$tcg_interpreter" = "yes" ; then
1764 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001765 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001766 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001767 fi
1768fi
1769
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001770# Consult white-list to determine whether to enable werror
1771# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001772if test -z "$werror" ; then
1773 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001774 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001775 werror="yes"
1776 else
1777 werror="no"
1778 fi
1779fi
1780
Peter Maydellfb59dab2017-03-28 14:01:52 +01001781if test "$bogus_os" = "yes"; then
1782 # Now that we know that we're not printing the help and that
1783 # the compiler works (so the results of the check_defines we used
1784 # to identify the OS are reliable), if we didn't recognize the
1785 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001786 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001787fi
1788
Paolo Bonzini8d050952010-12-23 11:43:52 +01001789gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1790gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001791gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001792gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001793gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001794gcc_flags="-Wno-string-plus-int $gcc_flags"
Gerd Hoffmann0e39c4a2018-03-09 14:59:45 +01001795gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001796# Note that we do not add -Werror to gcc_flags here, because that would
1797# enable it for all configure tests. If a configure test failed due
1798# to -Werror this would just silently disable some features,
1799# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001800
1801cc_has_warning_flag() {
1802 write_c_skeleton;
1803
Peter Maydella1d29d62012-10-27 22:19:07 +01001804 # Use the positive sense of the flag when testing for -Wno-wombat
1805 # support (gcc will happily accept the -Wno- form of unknown
1806 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001807 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1808 compile_prog "-Werror $optflag" ""
1809}
1810
1811for flag in $gcc_flags; do
1812 if cc_has_warning_flag $flag ; then
1813 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001814 fi
1815done
1816
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001817if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001818 cat > $TMPC << EOF
1819int main(int argc, char *argv[])
1820{
1821 char arr[64], *p = arr, *c = argv[0];
1822 while (*c) {
1823 *p++ = *c++;
1824 }
1825 return 0;
1826}
1827EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001828 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001829 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001830 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001831 # We need to check both a compile and a link, since some compiler
1832 # setups fail only on a .c->.o compile and some only at link time
1833 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1834 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001835 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001836 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001837 break
1838 fi
1839 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001840 if test "$stack_protector" = yes; then
1841 if test $sp_on = 0; then
1842 error_exit "Stack protector not supported"
1843 fi
1844 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001845fi
1846
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001847# Disable -Wmissing-braces on older compilers that warn even for
1848# the "universal" C zero initializer {0}.
1849cat > $TMPC << EOF
1850struct {
1851 int a[2];
1852} x = {0};
1853EOF
1854if compile_object "-Werror" "" ; then
1855 :
1856else
1857 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1858fi
1859
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001860# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1861# large functions that use global variables. The bug is in all releases of
1862# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1863# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1864cat > $TMPC << EOF
1865#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1866int main(void) { return 0; }
1867#else
1868#error No bug in this compiler.
1869#endif
1870EOF
1871if compile_prog "-Werror -fno-gcse" "" ; then
1872 TRANSLATE_OPT_CFLAGS=-fno-gcse
1873fi
1874
Avi Kivity40d64442011-11-15 20:12:17 +02001875if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001876 if test "$modules" = "yes" ; then
1877 error_exit "static and modules are mutually incompatible"
1878 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001879 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001880 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001881 else
1882 pie="no"
1883 fi
1884fi
1885
Emilio G. Cota768b7852015-04-29 13:09:02 +02001886# Unconditional check for compiler __thread support
1887 cat > $TMPC << EOF
1888static __thread int tls_var;
1889int main(void) { return tls_var; }
1890EOF
1891
1892if ! compile_prog "-Werror" "" ; then
1893 error_exit "Your compiler does not support the __thread specifier for " \
1894 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1895fi
1896
Avi Kivity40d64442011-11-15 20:12:17 +02001897if test "$pie" = ""; then
1898 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001899 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001900 ;;
1901 *)
1902 pie="no"
1903 ;;
1904 esac
1905fi
1906
1907if test "$pie" != "no" ; then
1908 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001909
1910#ifdef __linux__
1911# define THREAD __thread
1912#else
1913# define THREAD
1914#endif
1915
1916static THREAD int tls_var;
1917
1918int main(void) { return tls_var; }
1919
Avi Kivity40d64442011-11-15 20:12:17 +02001920EOF
1921 if compile_prog "-fPIE -DPIE" "-pie"; then
1922 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1923 LDFLAGS="-pie $LDFLAGS"
1924 pie="yes"
1925 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1926 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1927 fi
1928 else
1929 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001930 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001931 else
1932 echo "Disabling PIE due to missing toolchain support"
1933 pie="no"
1934 fi
1935 fi
Brad46eef332013-12-10 19:49:08 -05001936
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001937 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001938 CFLAGS_NOPIE="-fno-pie"
1939 LDFLAGS_NOPIE="-nopie"
1940 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001941fi
1942
Paolo Bonzini09dada42013-04-17 16:26:47 +02001943##########################################
1944# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1945# use i686 as default anyway, but for those that don't, an explicit
1946# specification is necessary
1947
1948if test "$cpu" = "i386"; then
1949 cat > $TMPC << EOF
1950static int sfaa(int *ptr)
1951{
1952 return __sync_fetch_and_and(ptr, 0);
1953}
1954
1955int main(void)
1956{
1957 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001958 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001959 sfaa(&val);
1960 return val;
1961}
1962EOF
1963 if ! compile_prog "" "" ; then
1964 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1965 fi
1966fi
1967
1968#########################################
bellardec530c82006-04-25 22:36:06 +00001969# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001970
bellardec530c82006-04-25 22:36:06 +00001971if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001972 if has $install; then
1973 :
1974 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001975 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1976 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1977 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001978 fi
Stefan Weil89138852016-05-16 15:10:20 +02001979 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001980 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1981 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1982 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001983 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001984 if has ar; then
1985 :
1986 else
bellardec530c82006-04-25 22:36:06 +00001987 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001988 error_exit "No path includes ar" \
1989 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001990 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001991 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001992 fi
ths5fafdf22007-09-16 21:08:06 +00001993fi
bellardec530c82006-04-25 22:36:06 +00001994
Stefan Weilafb63eb2012-09-26 22:04:38 +02001995if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001996 for target in $default_target_list; do
1997 supported_target $target 2>/dev/null && \
1998 target_list="$target_list $target"
1999 done
2000 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002001else
Stefan Weil89138852016-05-16 15:10:20 +02002002 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002003 for target in $target_list; do
2004 # Check that we recognised the target name; this allows a more
2005 # friendly error message than if we let it fall through.
2006 case " $default_target_list " in
2007 *" $target "*)
2008 ;;
2009 *)
2010 error_exit "Unknown target name '$target'"
2011 ;;
2012 esac
2013 supported_target $target || exit 1
2014 done
bellard5327cf42005-01-10 23:18:50 +00002015fi
Peter Maydell25b48332013-05-20 16:16:16 +01002016
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002017# see if system emulation was really requested
2018case " $target_list " in
2019 *"-softmmu "*) softmmu=yes
2020 ;;
2021 *) softmmu=no
2022 ;;
2023esac
bellard5327cf42005-01-10 23:18:50 +00002024
Juan Quintela249247c2009-08-12 18:20:25 +02002025feature_not_found() {
2026 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002027 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002028
Peter Maydell76ad07a2013-04-08 12:11:26 +01002029 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002030 "configure was not able to find it." \
2031 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002032}
2033
bellard7d132992003-03-06 23:23:54 +00002034# ---
2035# big/little endian test
2036cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002037short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2038short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2039extern int foo(short *, short *);
2040int main(int argc, char *argv[]) {
2041 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002042}
2043EOF
2044
Mike Frysinger61cc9192013-06-30 23:30:18 -04002045if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002046 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002047 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002048 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002049 bigendian="no"
2050 else
2051 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002052 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002053else
2054 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002055fi
2056
Juan Quintelab0a47e72009-08-12 18:29:49 +02002057##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002058# cocoa implies not SDL or GTK
2059# (the cocoa UI code currently assumes it is always the active UI
2060# and doesn't interact well with other UI frontend code)
2061if test "$cocoa" = "yes"; then
2062 if test "$sdl" = "yes"; then
2063 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2064 fi
2065 if test "$gtk" = "yes"; then
2066 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2067 fi
2068 gtk=no
2069 sdl=no
2070fi
2071
Eric Blake6b39b062016-10-11 10:46:23 -05002072# Some versions of Mac OS X incorrectly define SIZE_MAX
2073cat > $TMPC << EOF
2074#include <stdint.h>
2075#include <stdio.h>
2076int main(int argc, char *argv[]) {
2077 return printf("%zu", SIZE_MAX);
2078}
2079EOF
2080have_broken_size_max=no
2081if ! compile_object -Werror ; then
2082 have_broken_size_max=yes
2083fi
2084
Peter Maydella30878e2015-08-14 16:10:52 +01002085##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002086# L2TPV3 probe
2087
2088cat > $TMPC <<EOF
2089#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002090#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002091int main(void) { return sizeof(struct mmsghdr); }
2092EOF
2093if compile_prog "" "" ; then
2094 l2tpv3=yes
2095else
2096 l2tpv3=no
2097fi
2098
2099##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002100# MinGW / Mingw-w64 localtime_r/gmtime_r check
2101
2102if test "$mingw32" = "yes"; then
2103 # Some versions of MinGW / Mingw-w64 lack localtime_r
2104 # and gmtime_r entirely.
2105 #
2106 # Some versions of Mingw-w64 define a macro for
2107 # localtime_r/gmtime_r.
2108 #
2109 # Some versions of Mingw-w64 will define functions
2110 # for localtime_r/gmtime_r, but only if you have
2111 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2112 # though, unistd.h and pthread.h both define
2113 # that for you.
2114 #
2115 # So this #undef localtime_r and #include <unistd.h>
2116 # are not in fact redundant.
2117cat > $TMPC << EOF
2118#include <unistd.h>
2119#include <time.h>
2120#undef localtime_r
2121int main(void) { localtime_r(NULL, NULL); return 0; }
2122EOF
2123 if compile_prog "" "" ; then
2124 localtime_r="yes"
2125 else
2126 localtime_r="no"
2127 fi
2128fi
2129
2130##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002131# pkg-config probe
2132
2133if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002134 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002135fi
2136
2137##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002138# NPTL probe
2139
Peter Maydell24cb36a2013-07-16 18:45:00 +01002140if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002141 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002142#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002143#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002144int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002145#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2146#error bork
2147#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002148 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002149}
2150EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002151 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002152 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002153 fi
pbrookbd0c5662008-05-29 14:34:11 +00002154fi
2155
Liang Li99f2dbd2016-03-08 13:53:16 +08002156#########################################
balrogac629222008-10-11 09:56:04 +00002157# zlib check
2158
Alon Levy1ece9902011-07-26 12:30:40 +03002159if test "$zlib" != "no" ; then
2160 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00002161#include <zlib.h>
2162int main(void) { zlibVersion(); return 0; }
2163EOF
Alon Levy1ece9902011-07-26 12:30:40 +03002164 if compile_prog "" "-lz" ; then
2165 :
2166 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002167 error_exit "zlib check failed" \
2168 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03002169 fi
balrogac629222008-10-11 09:56:04 +00002170fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00002171LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00002172
2173##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002174# lzo check
2175
2176if test "$lzo" != "no" ; then
2177 cat > $TMPC << EOF
2178#include <lzo/lzo1x.h>
2179int main(void) { lzo_version(); return 0; }
2180EOF
2181 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002182 libs_softmmu="$libs_softmmu -llzo2"
2183 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002184 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002185 if test "$lzo" = "yes"; then
2186 feature_not_found "liblzo2" "Install liblzo2 devel"
2187 fi
2188 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002189 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002190fi
2191
2192##########################################
2193# snappy check
2194
2195if test "$snappy" != "no" ; then
2196 cat > $TMPC << EOF
2197#include <snappy-c.h>
2198int main(void) { snappy_max_compressed_length(4096); return 0; }
2199EOF
2200 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002201 libs_softmmu="$libs_softmmu -lsnappy"
2202 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002203 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002204 if test "$snappy" = "yes"; then
2205 feature_not_found "libsnappy" "Install libsnappy devel"
2206 fi
2207 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002208 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002209fi
2210
2211##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002212# bzip2 check
2213
2214if test "$bzip2" != "no" ; then
2215 cat > $TMPC << EOF
2216#include <bzlib.h>
2217int main(void) { BZ2_bzlibVersion(); return 0; }
2218EOF
2219 if compile_prog "" "-lbz2" ; then
2220 bzip2="yes"
2221 else
2222 if test "$bzip2" = "yes"; then
2223 feature_not_found "libbzip2" "Install libbzip2 devel"
2224 fi
2225 bzip2="no"
2226 fi
2227fi
2228
2229##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002230# libseccomp check
2231
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002232libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002233if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002234 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002235 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002236 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002237 arm|aarch64)
2238 libseccomp_minver="2.2.3"
2239 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002240 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002241 libseccomp_minver="2.3.0"
2242 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002243 *)
2244 libseccomp_minver=""
2245 ;;
2246 esac
2247
2248 if test "$libseccomp_minver" != "" &&
2249 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002250 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2251 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002252 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002253 else
Andrew Jones693e5912015-09-30 11:59:18 -04002254 if test "$seccomp" = "yes" ; then
2255 if test "$libseccomp_minver" != "" ; then
2256 feature_not_found "libseccomp" \
2257 "Install libseccomp devel >= $libseccomp_minver"
2258 else
2259 feature_not_found "libseccomp" \
2260 "libseccomp is not supported for host cpu $cpu"
2261 fi
2262 fi
2263 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002264 fi
2265fi
2266##########################################
aliguorie37630c2009-04-22 15:19:10 +00002267# xen probe
2268
Juan Quintelafc321b42009-08-12 18:29:55 +02002269if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002270 # Check whether Xen library path is specified via --extra-ldflags to avoid
2271 # overriding this setting with pkg-config output. If not, try pkg-config
2272 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002273
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002274 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2275 $pkg_config --exists xencontrol ; then
2276 xen_ctrl_version="$(printf '%d%02d%02d' \
2277 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2278 xen=yes
2279 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2280 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002281 if $pkg_config --exists xentoolcore; then
2282 xen_pc="$xen_pc xentoolcore"
2283 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002284 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2285 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2286 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2287 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002288
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002289 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002290 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002291
2292 # First we test whether Xen headers and libraries are available.
2293 # If no, we are done and there is no Xen support.
2294 # If yes, more tests are run to detect the Xen version.
2295
2296 # Xen (any)
2297 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002298#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002299int main(void) {
2300 return 0;
2301}
2302EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002303 if ! compile_prog "" "$xen_libs" ; then
2304 # Xen not found
2305 if test "$xen" = "yes" ; then
2306 feature_not_found "xen" "Install xen devel"
2307 fi
2308 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002309
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002310 # Xen unstable
2311 elif
2312 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002313#undef XC_WANT_COMPAT_DEVICEMODEL_API
2314#define __XEN_TOOLS__
2315#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002316#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002317int main(void) {
2318 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002319 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002320
2321 xd = xendevicemodel_open(0, 0);
2322 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2323
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002324 xfmem = xenforeignmemory_open(0, 0);
2325 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2326
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002327 return 0;
2328}
2329EOF
2330 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2331 then
2332 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2333 xen_ctrl_version=41100
2334 xen=yes
2335 elif
2336 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002337#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2338#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002339#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002340int main(void) {
2341 xenforeignmemory_handle *xfmem;
2342
2343 xfmem = xenforeignmemory_open(0, 0);
2344 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002345 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002346
2347 return 0;
2348}
2349EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002350 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002351 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002352 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002353 xen_ctrl_version=41000
2354 xen=yes
2355 elif
2356 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002357#undef XC_WANT_COMPAT_DEVICEMODEL_API
2358#define __XEN_TOOLS__
2359#include <xendevicemodel.h>
2360int main(void) {
2361 xendevicemodel_handle *xd;
2362
2363 xd = xendevicemodel_open(0, 0);
2364 xendevicemodel_close(xd);
2365
2366 return 0;
2367}
2368EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002369 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2370 then
2371 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2372 xen_ctrl_version=40900
2373 xen=yes
2374 elif
2375 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002376/*
2377 * If we have stable libs the we don't want the libxc compat
2378 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002379 *
2380 * Also, check if xengnttab_grant_copy_segment_t is defined and
2381 * grant copy operation is implemented.
2382 */
2383#undef XC_WANT_COMPAT_EVTCHN_API
2384#undef XC_WANT_COMPAT_GNTTAB_API
2385#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2386#include <xenctrl.h>
2387#include <xenstore.h>
2388#include <xenevtchn.h>
2389#include <xengnttab.h>
2390#include <xenforeignmemory.h>
2391#include <stdint.h>
2392#include <xen/hvm/hvm_info_table.h>
2393#if !defined(HVM_MAX_VCPUS)
2394# error HVM_MAX_VCPUS not defined
2395#endif
2396int main(void) {
2397 xc_interface *xc = NULL;
2398 xenforeignmemory_handle *xfmem;
2399 xenevtchn_handle *xe;
2400 xengnttab_handle *xg;
2401 xen_domain_handle_t handle;
2402 xengnttab_grant_copy_segment_t* seg = NULL;
2403
2404 xs_daemon_open();
2405
2406 xc = xc_interface_open(0, 0, 0);
2407 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2408 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2409 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2410 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2411 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2412
2413 xfmem = xenforeignmemory_open(0, 0);
2414 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2415
2416 xe = xenevtchn_open(0, 0);
2417 xenevtchn_fd(xe);
2418
2419 xg = xengnttab_open(0, 0);
2420 xengnttab_grant_copy(xg, 0, seg);
2421
2422 return 0;
2423}
2424EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002425 compile_prog "" "$xen_libs $xen_stable_libs"
2426 then
2427 xen_ctrl_version=40800
2428 xen=yes
2429 elif
2430 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002431/*
2432 * If we have stable libs the we don't want the libxc compat
2433 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002434 */
2435#undef XC_WANT_COMPAT_EVTCHN_API
2436#undef XC_WANT_COMPAT_GNTTAB_API
2437#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2438#include <xenctrl.h>
2439#include <xenstore.h>
2440#include <xenevtchn.h>
2441#include <xengnttab.h>
2442#include <xenforeignmemory.h>
2443#include <stdint.h>
2444#include <xen/hvm/hvm_info_table.h>
2445#if !defined(HVM_MAX_VCPUS)
2446# error HVM_MAX_VCPUS not defined
2447#endif
2448int main(void) {
2449 xc_interface *xc = NULL;
2450 xenforeignmemory_handle *xfmem;
2451 xenevtchn_handle *xe;
2452 xengnttab_handle *xg;
2453 xen_domain_handle_t handle;
2454
2455 xs_daemon_open();
2456
2457 xc = xc_interface_open(0, 0, 0);
2458 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2459 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2460 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2461 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2462 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2463
2464 xfmem = xenforeignmemory_open(0, 0);
2465 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2466
2467 xe = xenevtchn_open(0, 0);
2468 xenevtchn_fd(xe);
2469
2470 xg = xengnttab_open(0, 0);
2471 xengnttab_map_grant_ref(xg, 0, 0, 0);
2472
2473 return 0;
2474}
2475EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002476 compile_prog "" "$xen_libs $xen_stable_libs"
2477 then
2478 xen_ctrl_version=40701
2479 xen=yes
2480 elif
2481 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002482#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002483#include <stdint.h>
2484int main(void) {
2485 xc_interface *xc = NULL;
2486 xen_domain_handle_t handle;
2487 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2488 return 0;
2489}
2490EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002491 compile_prog "" "$xen_libs"
2492 then
2493 xen_ctrl_version=40700
2494 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002495
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002496 # Xen 4.6
2497 elif
2498 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002499#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002500#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002501#include <stdint.h>
2502#include <xen/hvm/hvm_info_table.h>
2503#if !defined(HVM_MAX_VCPUS)
2504# error HVM_MAX_VCPUS not defined
2505#endif
2506int main(void) {
2507 xc_interface *xc;
2508 xs_daemon_open();
2509 xc = xc_interface_open(0, 0, 0);
2510 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2511 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002512 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002513 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002514 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002515 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002516 return 0;
2517}
2518EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002519 compile_prog "" "$xen_libs"
2520 then
2521 xen_ctrl_version=40600
2522 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002523
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002524 # Xen 4.5
2525 elif
2526 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002527#include <xenctrl.h>
2528#include <xenstore.h>
2529#include <stdint.h>
2530#include <xen/hvm/hvm_info_table.h>
2531#if !defined(HVM_MAX_VCPUS)
2532# error HVM_MAX_VCPUS not defined
2533#endif
2534int main(void) {
2535 xc_interface *xc;
2536 xs_daemon_open();
2537 xc = xc_interface_open(0, 0, 0);
2538 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2539 xc_gnttab_open(NULL, 0);
2540 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2541 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002542 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2543 return 0;
2544}
2545EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002546 compile_prog "" "$xen_libs"
2547 then
2548 xen_ctrl_version=40500
2549 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002550
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002551 elif
2552 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002553#include <xenctrl.h>
2554#include <xenstore.h>
2555#include <stdint.h>
2556#include <xen/hvm/hvm_info_table.h>
2557#if !defined(HVM_MAX_VCPUS)
2558# error HVM_MAX_VCPUS not defined
2559#endif
2560int main(void) {
2561 xc_interface *xc;
2562 xs_daemon_open();
2563 xc = xc_interface_open(0, 0, 0);
2564 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2565 xc_gnttab_open(NULL, 0);
2566 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2567 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002568 return 0;
2569}
2570EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002571 compile_prog "" "$xen_libs"
2572 then
2573 xen_ctrl_version=40200
2574 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002575
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002576 else
2577 if test "$xen" = "yes" ; then
2578 feature_not_found "xen (unsupported version)" \
2579 "Install a supported xen (xen 4.2 or newer)"
2580 fi
2581 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002582 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002583
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002584 if test "$xen" = yes; then
2585 if test $xen_ctrl_version -ge 40701 ; then
2586 libs_softmmu="$xen_stable_libs $libs_softmmu"
2587 fi
2588 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002589 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002590 fi
aliguorie37630c2009-04-22 15:19:10 +00002591fi
2592
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002593if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002594 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002595 xen_pci_passthrough=yes
2596 else
2597 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002598 error_exit "User requested feature Xen PCI Passthrough" \
2599 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002600 fi
2601 xen_pci_passthrough=no
2602 fi
2603fi
2604
Ian Campbell64a7ad62016-01-15 13:23:44 +00002605if test "$xen_pv_domain_build" = "yes" &&
2606 test "$xen" != "yes"; then
2607 error_exit "User requested Xen PV domain builder support" \
2608 "which requires Xen support."
2609fi
2610
aliguorie37630c2009-04-22 15:19:10 +00002611##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002612# Windows Hypervisor Platform accelerator (WHPX) check
2613if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002614 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002615 whpx="yes"
2616 else
2617 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002618 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002619 fi
2620 whpx="no"
2621 fi
2622fi
2623
2624##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002625# Sparse probe
2626if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002627 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002628 sparse=yes
2629 else
2630 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002631 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002632 fi
2633 sparse=no
2634 fi
2635fi
2636
2637##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002638# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002639if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002640 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002641 x11_cflags=$($pkg_config --cflags x11)
2642 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002643fi
2644
2645##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002646# GTK probe
2647
2648if test "$gtk" != "no"; then
Peter Xu5a464e62018-04-09 16:23:23 +08002649 if test "$gtkabi" = ""; then
2650 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2651 # Use 2.0 as a fallback if that is available.
2652 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2653 gtkabi=3.0
2654 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2655 gtkabi=2.0
2656 else
2657 gtkabi=3.0
2658 fi
2659 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002660 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002661 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002662 if test "$gtkabi" = "3.0" ; then
2663 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002664 else
2665 gtkversion="2.18.0"
2666 fi
2667 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002668 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2669 gtk_libs=$($pkg_config --libs $gtkpackage)
2670 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002671 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002672 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002673 gtk_cflags="$gtk_cflags $x11_cflags"
2674 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002675 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002676 gtk="yes"
2677 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002678 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002679 else
2680 gtk="no"
2681 fi
2682fi
2683
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002684
2685##########################################
2686# GNUTLS probe
2687
Peter Maydell37371292015-07-24 18:28:08 +01002688gnutls_works() {
2689 # Unfortunately some distros have bad pkg-config information for gnutls
2690 # such that it claims to exist but you get a compiler error if you try
2691 # to use the options returned by --libs. Specifically, Ubuntu for --static
2692 # builds doesn't work:
2693 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2694 #
2695 # So sanity check the cflags/libs before assuming gnutls can be used.
2696 if ! $pkg_config --exists "gnutls"; then
2697 return 1
2698 fi
2699
2700 write_c_skeleton
2701 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2702}
2703
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002704gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002705gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002706if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002707 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002708 gnutls_cflags=$($pkg_config --cflags gnutls)
2709 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002710 libs_softmmu="$gnutls_libs $libs_softmmu"
2711 libs_tools="$gnutls_libs $libs_tools"
2712 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2713 gnutls="yes"
2714
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002715 # gnutls_rnd requires >= 2.11.0
2716 if $pkg_config --exists "gnutls >= 2.11.0"; then
2717 gnutls_rnd="yes"
2718 else
2719 gnutls_rnd="no"
2720 fi
2721
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002722 if $pkg_config --exists 'gnutls >= 3.0'; then
2723 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002724 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002725 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002726 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002727 *gcrypt*)
2728 gnutls_gcrypt=yes
2729 gnutls_nettle=no
2730 ;;
2731 *nettle*)
2732 gnutls_gcrypt=no
2733 gnutls_nettle=yes
2734 ;;
2735 *)
2736 gnutls_gcrypt=yes
2737 gnutls_nettle=no
2738 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002739 esac
2740 else
2741 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002742 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002743 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002744 elif test "$gnutls" = "yes"; then
2745 feature_not_found "gnutls" "Install gnutls devel"
2746 else
2747 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002748 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002749 fi
2750else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002751 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002752fi
2753
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002754
2755# If user didn't give a --disable/enable-gcrypt flag,
2756# then mark as disabled if user requested nettle
2757# explicitly, or if gnutls links to nettle
2758if test -z "$gcrypt"
2759then
2760 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2761 then
2762 gcrypt="no"
2763 fi
2764fi
2765
2766# If user didn't give a --disable/enable-nettle flag,
2767# then mark as disabled if user requested gcrypt
2768# explicitly, or if gnutls links to gcrypt
2769if test -z "$nettle"
2770then
2771 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2772 then
2773 nettle="no"
2774 fi
2775fi
2776
2777has_libgcrypt_config() {
2778 if ! has "libgcrypt-config"
2779 then
2780 return 1
2781 fi
2782
2783 if test -n "$cross_prefix"
2784 then
Stefan Weil89138852016-05-16 15:10:20 +02002785 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002786 if test "$host-" != $cross_prefix
2787 then
2788 return 1
2789 fi
2790 fi
2791
2792 return 0
2793}
2794
2795if test "$gcrypt" != "no"; then
2796 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002797 gcrypt_cflags=$(libgcrypt-config --cflags)
2798 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002799 # Debian has remove -lgpg-error from libgcrypt-config
2800 # as it "spreads unnecessary dependencies" which in
2801 # turn breaks static builds...
2802 if test "$static" = "yes"
2803 then
2804 gcrypt_libs="$gcrypt_libs -lgpg-error"
2805 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002806 libs_softmmu="$gcrypt_libs $libs_softmmu"
2807 libs_tools="$gcrypt_libs $libs_tools"
2808 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002809 gcrypt="yes"
2810 if test -z "$nettle"; then
2811 nettle="no"
2812 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002813
2814 cat > $TMPC << EOF
2815#include <gcrypt.h>
2816int main(void) {
2817 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2818 GCRY_MD_SHA256,
2819 NULL, 0, 0, 0, NULL);
2820 return 0;
2821}
2822EOF
2823 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2824 gcrypt_kdf=yes
2825 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002826
2827 cat > $TMPC << EOF
2828#include <gcrypt.h>
2829int main(void) {
2830 gcry_mac_hd_t handle;
2831 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2832 GCRY_MAC_FLAG_SECURE, NULL);
2833 return 0;
2834}
2835EOF
2836 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2837 gcrypt_hmac=yes
2838 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002839 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002840 if test "$gcrypt" = "yes"; then
2841 feature_not_found "gcrypt" "Install gcrypt devel"
2842 else
2843 gcrypt="no"
2844 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002845 fi
2846fi
2847
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002848
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002849if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002850 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002851 nettle_cflags=$($pkg_config --cflags nettle)
2852 nettle_libs=$($pkg_config --libs nettle)
2853 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002854 libs_softmmu="$nettle_libs $libs_softmmu"
2855 libs_tools="$nettle_libs $libs_tools"
2856 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002857 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002858
2859 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002860#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002861#include <nettle/pbkdf2.h>
2862int main(void) {
2863 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2864 return 0;
2865}
2866EOF
2867 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2868 nettle_kdf=yes
2869 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002870 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002871 if test "$nettle" = "yes"; then
2872 feature_not_found "nettle" "Install nettle devel"
2873 else
2874 nettle="no"
2875 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002876 fi
2877fi
2878
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002879if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2880then
2881 error_exit "Only one of gcrypt & nettle can be enabled"
2882fi
2883
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002884##########################################
2885# libtasn1 - only for the TLS creds/session test suite
2886
2887tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002888tasn1_cflags=""
2889tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002890if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002891 tasn1_cflags=$($pkg_config --cflags libtasn1)
2892 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002893else
2894 tasn1=no
2895fi
2896
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002897
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002898##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002899# getifaddrs (for tests/test-io-channel-socket )
2900
2901have_ifaddrs_h=yes
2902if ! check_include "ifaddrs.h" ; then
2903 have_ifaddrs_h=no
2904fi
2905
2906##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002907# VTE probe
2908
2909if test "$vte" != "no"; then
2910 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002911 vteminversion="0.32.0"
2912 if $pkg_config --exists "vte-2.91"; then
2913 vtepackage="vte-2.91"
2914 else
2915 vtepackage="vte-2.90"
2916 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002917 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002918 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002919 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002920 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002921 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002922 vte_cflags=$($pkg_config --cflags $vtepackage)
2923 vte_libs=$($pkg_config --libs $vtepackage)
2924 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002925 vte="yes"
2926 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002927 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002928 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002929 else
2930 feature_not_found "vte" "Install libvte devel"
2931 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002932 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002933 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002934 fi
2935fi
2936
2937##########################################
bellard11d9f692004-04-02 20:55:59 +00002938# SDL probe
2939
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002940# Look for sdl configuration program (pkg-config or sdl-config). Try
2941# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002942
Peter Xuc6093a02018-04-10 13:40:34 +08002943sdl_probe ()
2944{
2945 sdl_too_old=no
2946 if test "$sdlabi" = ""; then
2947 if $pkg_config --exists "sdl2"; then
2948 sdlabi=2.0
2949 elif $pkg_config --exists "sdl"; then
2950 sdlabi=1.2
2951 else
2952 sdlabi=2.0
2953 fi
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002954 fi
bellard11d9f692004-04-02 20:55:59 +00002955
Peter Xuc6093a02018-04-10 13:40:34 +08002956 if test $sdlabi = "2.0"; then
2957 sdl_config=$sdl2_config
2958 sdlname=sdl2
2959 sdlconfigname=sdl2_config
2960 elif test $sdlabi = "1.2"; then
2961 sdlname=sdl
2962 sdlconfigname=sdl_config
2963 else
2964 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2965 fi
2966
2967 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2968 sdl_config=$sdlconfigname
2969 fi
2970
2971 if $pkg_config $sdlname --exists; then
2972 sdlconfig="$pkg_config $sdlname"
2973 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2974 elif has ${sdl_config}; then
2975 sdlconfig="$sdl_config"
2976 sdlversion=$($sdlconfig --version)
2977 else
2978 if test "$sdl" = "yes" ; then
2979 feature_not_found "sdl" "Install SDL2-devel"
2980 fi
2981 sdl=no
2982 # no need to do the rest
2983 return
2984 fi
2985 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2986 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2987 fi
2988
Juan Quintelaac119f92009-07-27 16:13:15 +02002989 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002990#include <SDL.h>
2991#undef main /* We don't want SDL to override our main() */
2992int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2993EOF
Stefan Weil89138852016-05-16 15:10:20 +02002994 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002995 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002996 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002997 if $pkg_config $sdlname --exists; then
2998 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2999 else
3000 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3001 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003002 else
Stefan Weil89138852016-05-16 15:10:20 +02003003 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003004 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003005 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02003006 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003007 sdl_too_old=yes
3008 else
Peter Maydella30878e2015-08-14 16:10:52 +01003009 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02003010 fi
aliguoricd01b4a2008-08-21 19:25:45 +00003011
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003012 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02003013 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003014 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003015 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3016 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003017 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003018 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003019 :
3020 else
3021 sdl=no
3022 fi
3023 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003024 else # sdl not found
3025 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003026 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003027 fi
3028 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003029 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003030}
3031
3032if test "$sdl" != "no" ; then
3033 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003034fi
bellard11d9f692004-04-02 20:55:59 +00003035
aliguori5368a422009-03-03 17:37:21 +00003036if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003037 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003038#include <SDL.h>
3039#if defined(SDL_VIDEO_DRIVER_X11)
3040#include <X11/XKBlib.h>
3041#else
3042#error No x11 support
3043#endif
3044int main(void) { return 0; }
3045EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003046 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003047 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003048 sdl_cflags="$sdl_cflags $x11_cflags"
3049 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003050 fi
aliguori5368a422009-03-03 17:37:21 +00003051fi
3052
ths8f28f3f2007-01-05 21:25:54 +00003053##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003054# RDMA needs OpenFabrics libraries
3055if test "$rdma" != "no" ; then
3056 cat > $TMPC <<EOF
3057#include <rdma/rdma_cma.h>
3058int main(void) { return 0; }
3059EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003060 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003061 if compile_prog "" "$rdma_libs" ; then
3062 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003063 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003064 else
3065 if test "$rdma" = "yes" ; then
3066 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003067 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003068 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003069 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003070 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3071 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3072 fi
3073 rdma="no"
3074 fi
3075fi
3076
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003077##########################################
3078# PVRDMA detection
3079
3080cat > $TMPC <<EOF &&
3081#include <sys/mman.h>
3082
3083int
3084main(void)
3085{
3086 char buf = 0;
3087 void *addr = &buf;
3088 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3089
3090 return 0;
3091}
3092EOF
3093
3094if test "$rdma" = "yes" ; then
3095 case "$pvrdma" in
3096 "")
3097 if compile_prog "" ""; then
3098 pvrdma="yes"
3099 else
3100 pvrdma="no"
3101 fi
3102 ;;
3103 "yes")
3104 if ! compile_prog "" ""; then
3105 error_exit "PVRDMA is not supported since mremap is not implemented"
3106 fi
3107 pvrdma="yes"
3108 ;;
3109 "no")
3110 pvrdma="no"
3111 ;;
3112 esac
3113else
3114 if test "$pvrdma" = "yes" ; then
3115 error_exit "PVRDMA requires rdma suppport"
3116 fi
3117 pvrdma="no"
3118fi
ths8d5d2d42007-08-25 01:37:51 +00003119
3120##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003121# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003122if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003123 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003124#include <sasl/sasl.h>
3125#include <stdio.h>
3126int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3127EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003128 # Assuming Cyrus-SASL installed in /usr prefix
3129 vnc_sasl_cflags=""
3130 vnc_sasl_libs="-lsasl2"
3131 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3132 vnc_sasl=yes
3133 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003134 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003135 else
3136 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003137 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003138 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003139 vnc_sasl=no
3140 fi
aliguori2f9606b2009-03-06 20:27:28 +00003141fi
3142
3143##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003144# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003145if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003146cat > $TMPC <<EOF
3147#include <stdio.h>
3148#include <jpeglib.h>
3149int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3150EOF
3151 vnc_jpeg_cflags=""
3152 vnc_jpeg_libs="-ljpeg"
3153 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3154 vnc_jpeg=yes
3155 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003156 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003157 else
3158 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003159 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003160 fi
3161 vnc_jpeg=no
3162 fi
3163fi
3164
3165##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003166# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003167if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003168cat > $TMPC <<EOF
3169//#include <stdio.h>
3170#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003171#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003172int main(void) {
3173 png_structp png_ptr;
3174 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003175 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003176}
3177EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003178 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003179 vnc_png_cflags=$($pkg_config libpng --cflags)
3180 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003181 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003182 vnc_png_cflags=""
3183 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003184 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003185 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3186 vnc_png=yes
3187 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003188 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003189 else
3190 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003191 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003192 fi
3193 vnc_png=no
3194 fi
3195fi
3196
3197##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003198# xkbcommon probe
3199if test "$xkbcommon" != "no" ; then
3200 if $pkg_config xkbcommon --exists; then
3201 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3202 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3203 xkbcommon=yes
3204 else
3205 if test "$xkbcommon" = "yes" ; then
3206 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3207 fi
3208 xkbcommon=no
3209 fi
3210fi
3211
3212##########################################
aliguori76655d62009-03-06 20:27:37 +00003213# fnmatch() probe, used for ACL routines
3214fnmatch="no"
3215cat > $TMPC << EOF
3216#include <fnmatch.h>
3217int main(void)
3218{
3219 fnmatch("foo", "foo", 0);
3220 return 0;
3221}
3222EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003223if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003224 fnmatch="yes"
3225fi
3226
3227##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003228# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003229if test "$xfs" != "no" ; then
3230 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003231#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003232#include <xfs/xfs.h>
3233int main(void)
3234{
3235 xfsctl(NULL, 0, 0, NULL);
3236 return 0;
3237}
3238EOF
3239 if compile_prog "" "" ; then
3240 xfs="yes"
3241 else
3242 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003243 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003244 fi
3245 xfs=no
3246 fi
3247fi
3248
3249##########################################
ths8a16d272008-07-19 09:56:24 +00003250# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003251if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003252 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003253 cat > $TMPC << EOF
3254#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003255int main(void)
3256{
3257 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003258 char s[] = "";
3259 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003260 return 0;
3261}
ths8a16d272008-07-19 09:56:24 +00003262EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003263 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003264 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003265 else
3266 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003267 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003268 fi
3269 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003270 fi
ths8a16d272008-07-19 09:56:24 +00003271fi
3272
3273##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003274# netmap support probe
3275# Apart from looking for netmap headers, we make sure that the host API version
3276# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3277# a minor/major version number. Minor new features will be marked with values up
3278# to 15, and if something happens that requires a change to the backend we will
3279# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003280if test "$netmap" != "no" ; then
3281 cat > $TMPC << EOF
3282#include <inttypes.h>
3283#include <net/if.h>
3284#include <net/netmap.h>
3285#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003286#if (NETMAP_API < 11) || (NETMAP_API > 15)
3287#error
3288#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003289int main(void) { return 0; }
3290EOF
3291 if compile_prog "" "" ; then
3292 netmap=yes
3293 else
3294 if test "$netmap" = "yes" ; then
3295 feature_not_found "netmap"
3296 fi
3297 netmap=no
3298 fi
3299fi
3300
3301##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003302# libcap-ng library probe
3303if test "$cap_ng" != "no" ; then
3304 cap_libs="-lcap-ng"
3305 cat > $TMPC << EOF
3306#include <cap-ng.h>
3307int main(void)
3308{
3309 capng_capability_to_name(CAPNG_EFFECTIVE);
3310 return 0;
3311}
3312EOF
3313 if compile_prog "" "$cap_libs" ; then
3314 cap_ng=yes
3315 libs_tools="$cap_libs $libs_tools"
3316 else
3317 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003318 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003319 fi
3320 cap_ng=no
3321 fi
3322fi
3323
3324##########################################
malcc2de5c92008-06-28 19:13:06 +00003325# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003326
malcc2de5c92008-06-28 19:13:06 +00003327audio_drv_probe()
3328{
3329 drv=$1
3330 hdr=$2
3331 lib=$3
3332 exp=$4
3333 cfl=$5
3334 cat > $TMPC << EOF
3335#include <$hdr>
3336int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003337EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003338 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003339 :
3340 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003341 error_exit "$drv check failed" \
3342 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003343 fi
3344}
3345
Stefan Weil89138852016-05-16 15:10:20 +02003346audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003347for drv in $audio_drv_list; do
3348 case $drv in
3349 alsa)
3350 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003351 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003352 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003353 ;;
3354
malcb8e59f12008-07-02 21:03:08 +00003355 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003356 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3357 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003358 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003359 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003360 ;;
3361
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003362 sdl)
3363 if test "$sdl" = "no"; then
3364 error_exit "sdl not found or disabled, can not use sdl audio driver"
3365 fi
3366 ;;
3367
Juan Quintela997e6902009-08-03 14:46:29 +02003368 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003369 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003370 ;;
3371
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003372 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003373 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003374 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003375 ;;
3376
3377 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003378 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003379 ;;
3380
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003381 wav)
3382 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003383 ;;
3384
malce4c63a62008-07-19 16:15:16 +00003385 *)
malc1c9b2a52008-07-19 16:57:30 +00003386 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003387 error_exit "Unknown driver '$drv' selected" \
3388 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003389 }
3390 ;;
malcc2de5c92008-06-28 19:13:06 +00003391 esac
3392done
ths8f28f3f2007-01-05 21:25:54 +00003393
balrog4d3b6f62008-02-10 16:33:14 +00003394##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003395# BrlAPI probe
3396
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003397if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003398 brlapi_libs="-lbrlapi"
3399 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003400#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003401#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003402int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3403EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003404 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003405 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003406 else
3407 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003408 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003409 fi
3410 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003411 fi
3412fi
aurel322e4d9fb2008-04-08 06:01:02 +00003413
3414##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003415# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003416if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003417 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003418 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3419 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003420 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003421 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003422 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003423 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003424 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003425 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003426#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003427#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003428#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003429int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003430 wchar_t wch = L'w';
3431 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003432 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003433 addwstr(L"wide chars\n");
3434 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003435 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003436 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003437}
balrog4d3b6f62008-02-10 16:33:14 +00003438EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003439 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003440 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003441 # Make sure we get the wide character prototypes
3442 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003443 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003444 for curses_lib in $curses_lib_list; do
3445 unset IFS
3446 if compile_prog "$curses_inc" "$curses_lib" ; then
3447 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003448 break
3449 fi
3450 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003451 if test "$curses_found" = yes ; then
3452 break
3453 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003454 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003455 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003456 if test "$curses_found" = "yes" ; then
3457 curses=yes
3458 else
3459 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003460 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003461 fi
3462 curses=no
3463 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003464fi
balrog4d3b6f62008-02-10 16:33:14 +00003465
blueswir1414f0da2008-08-15 18:20:52 +00003466##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003467# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003468if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003469 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003470 curlconfig="$pkg_config libcurl"
3471 else
3472 curlconfig=curl-config
3473 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003474 cat > $TMPC << EOF
3475#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003476int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003477EOF
Stefan Weil89138852016-05-16 15:10:20 +02003478 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3479 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003480 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003481 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003482 else
3483 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003484 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003485 fi
3486 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003487 fi
3488fi # test "$curl"
3489
3490##########################################
balrogfb599c92008-09-28 23:49:55 +00003491# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003492if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003493 cat > $TMPC << EOF
3494#include <bluetooth/bluetooth.h>
3495int main(void) { return bt_error(0); }
3496EOF
Stefan Weil89138852016-05-16 15:10:20 +02003497 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3498 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003499 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003500 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003501 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003502 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003503 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003504 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003505 fi
balroge820e3f2008-09-30 02:27:44 +00003506 bluez="no"
3507 fi
balrogfb599c92008-09-28 23:49:55 +00003508fi
3509
3510##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003511# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003512
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003513glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003514glib_modules=gthread-2.0
3515if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003516 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003517fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003518
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003519# This workaround is required due to a bug in pkg-config file for glib as it
3520# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3521
3522if test "$static" = yes -a "$mingw32" = yes; then
3523 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3524fi
3525
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003526for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003527 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003528 glib_cflags=$($pkg_config --cflags $i)
3529 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003530 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003531 LIBS="$glib_libs $LIBS"
3532 libs_qga="$glib_libs $libs_qga"
3533 else
3534 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3535 fi
3536done
3537
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003538# Sanity check that the current size_t matches the
3539# size that glib thinks it should be. This catches
3540# problems on multi-arch where people try to build
3541# 32-bit QEMU while pointing at 64-bit glib headers
3542cat > $TMPC <<EOF
3543#include <glib.h>
3544#include <unistd.h>
3545
3546#define QEMU_BUILD_BUG_ON(x) \
3547 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3548
3549int main(void) {
3550 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3551 return 0;
3552}
3553EOF
3554
Stefan Weil5919e032016-04-28 23:33:41 +02003555if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003556 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3557 "You probably need to set PKG_CONFIG_LIBDIR"\
3558 "to point to the right pkg-config files for your"\
3559 "build target"
3560fi
3561
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003562# g_test_trap_subprocess added in 2.38. Used by some tests.
3563glib_subprocess=yes
Marc-André Lureaua0492232017-01-04 21:57:22 +01003564if ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003565 glib_subprocess=no
3566fi
3567
John Snowbbbf2e02015-03-25 18:57:38 -04003568# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3569cat > $TMPC << EOF
3570#include <glib.h>
3571int main(void) { return 0; }
3572EOF
3573if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3574 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3575 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3576 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3577 fi
3578fi
3579
Fam Zhenge26110c2014-02-10 14:48:57 +08003580##########################################
3581# SHA command probe for modules
3582if test "$modules" = yes; then
3583 shacmd_probe="sha1sum sha1 shasum"
3584 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003585 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003586 shacmd="$c"
3587 break
3588 fi
3589 done
3590 if test "$shacmd" = ""; then
3591 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3592 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003593fi
3594
3595##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003596# pixman support probe
3597
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003598if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003599 pixman_cflags=
3600 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003601elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003602 pixman_cflags=$($pkg_config --cflags pixman-1)
3603 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003604else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003605 error_exit "pixman >= 0.21.8 not present." \
3606 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003607fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003608
3609##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003610# libmpathpersist probe
3611
3612if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003613 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003614 cat > $TMPC <<EOF
3615#include <libudev.h>
3616#include <mpath_persist.h>
3617unsigned mpath_mx_alloc_len = 1024;
3618int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003619static struct config *multipath_conf;
3620extern struct udev *udev;
3621extern struct config *get_multipath_config(void);
3622extern void put_multipath_config(struct config *conf);
3623struct udev *udev;
3624struct config *get_multipath_config(void) { return multipath_conf; }
3625void put_multipath_config(struct config *conf) { }
3626
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003627int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003628 udev = udev_new();
3629 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003630 return 0;
3631}
3632EOF
3633 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3634 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003635 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003636 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003637 # probe for the old API
3638 cat > $TMPC <<EOF
3639#include <libudev.h>
3640#include <mpath_persist.h>
3641unsigned mpath_mx_alloc_len = 1024;
3642int logsink;
3643int main(void) {
3644 struct udev *udev = udev_new();
3645 mpath_lib_init(udev);
3646 return 0;
3647}
3648EOF
3649 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3650 mpathpersist=yes
3651 mpathpersist_new_api=no
3652 else
3653 mpathpersist=no
3654 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003655 fi
3656else
3657 mpathpersist=no
3658fi
3659
3660##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303661# libcap probe
3662
3663if test "$cap" != "no" ; then
3664 cat > $TMPC <<EOF
3665#include <stdio.h>
3666#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003667int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303668EOF
3669 if compile_prog "" "-lcap" ; then
3670 cap=yes
3671 else
3672 cap=no
3673 fi
3674fi
3675
3676##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003677# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003678PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003679
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003680pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003681cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003682#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003683static void *f(void *p) { return NULL; }
3684int main(void) {
3685 pthread_t thread;
3686 pthread_create(&thread, 0, f, 0);
3687 return 0;
3688}
blueswir1414f0da2008-08-15 18:20:52 +00003689EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003690if compile_prog "" "" ; then
3691 pthread=yes
3692else
3693 for pthread_lib in $PTHREADLIBS_LIST; do
3694 if compile_prog "" "$pthread_lib" ; then
3695 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003696 found=no
3697 for lib_entry in $LIBS; do
3698 if test "$lib_entry" = "$pthread_lib"; then
3699 found=yes
3700 break
3701 fi
3702 done
3703 if test "$found" = "no"; then
3704 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003705 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003706 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003707 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003708 break
3709 fi
3710 done
3711fi
blueswir1414f0da2008-08-15 18:20:52 +00003712
Anthony Liguori4617e592009-08-25 17:21:56 -05003713if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003714 error_exit "pthread check failed" \
3715 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003716fi
3717
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003718# check for pthread_setname_np
3719pthread_setname_np=no
3720cat > $TMPC << EOF
3721#include <pthread.h>
3722
3723static void *f(void *p) { return NULL; }
3724int main(void)
3725{
3726 pthread_t thread;
3727 pthread_create(&thread, 0, f, 0);
3728 pthread_setname_np(thread, "QEMU");
3729 return 0;
3730}
3731EOF
3732if compile_prog "" "$pthread_lib" ; then
3733 pthread_setname_np=yes
3734fi
3735
aliguoribf9298b2008-12-05 20:05:26 +00003736##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003737# rbd probe
3738if test "$rbd" != "no" ; then
3739 cat > $TMPC <<EOF
3740#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003741#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003742int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003743 rados_t cluster;
3744 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003745 return 0;
3746}
3747EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003748 rbd_libs="-lrbd -lrados"
3749 if compile_prog "" "$rbd_libs" ; then
3750 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003751 else
3752 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003753 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003754 fi
3755 rbd=no
3756 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003757fi
3758
3759##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003760# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003761min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003762if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003763 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003764 libssh2_cflags=$($pkg_config libssh2 --cflags)
3765 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003766 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003767 else
3768 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003769 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003770 fi
3771 libssh2=no
3772 fi
3773fi
3774
3775##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003776# libssh2_sftp_fsync probe
3777
3778if test "$libssh2" = "yes"; then
3779 cat > $TMPC <<EOF
3780#include <stdio.h>
3781#include <libssh2.h>
3782#include <libssh2_sftp.h>
3783int main(void) {
3784 LIBSSH2_SESSION *session;
3785 LIBSSH2_SFTP *sftp;
3786 LIBSSH2_SFTP_HANDLE *sftp_handle;
3787 session = libssh2_session_init ();
3788 sftp = libssh2_sftp_init (session);
3789 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3790 libssh2_sftp_fsync (sftp_handle);
3791 return 0;
3792}
3793EOF
3794 # libssh2_cflags/libssh2_libs defined in previous test.
3795 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3796 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3797 fi
3798fi
3799
3800##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003801# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003802
3803if test "$linux_aio" != "no" ; then
3804 cat > $TMPC <<EOF
3805#include <libaio.h>
3806#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003807#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003808int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3809EOF
3810 if compile_prog "" "-laio" ; then
3811 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003812 else
3813 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003814 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003815 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003816 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003817 fi
3818fi
3819
3820##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003821# TPM passthrough is only on x86 Linux
3822
3823if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3824 tpm_passthrough=$tpm
3825else
3826 tpm_passthrough=no
3827fi
3828
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003829# TPM emulator is for all posix systems
3830if test "$mingw32" != "yes"; then
3831 tpm_emulator=$tpm
3832else
3833 tpm_emulator=no
3834fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003835##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003836# attr probe
3837
3838if test "$attr" != "no" ; then
3839 cat > $TMPC <<EOF
3840#include <stdio.h>
3841#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003842#ifdef CONFIG_LIBATTR
3843#include <attr/xattr.h>
3844#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003845#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003846#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003847int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3848EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003849 if compile_prog "" "" ; then
3850 attr=yes
3851 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003852 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003853 attr=yes
3854 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003855 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003856 else
3857 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003858 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003859 fi
3860 attr=no
3861 fi
3862fi
3863
3864##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003865# iovec probe
3866cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003867#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003868#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003869#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003870int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003871EOF
3872iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003873if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003874 iovec=yes
3875fi
3876
aurel32f652e6a2008-12-16 10:43:48 +00003877##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003878# preadv probe
3879cat > $TMPC <<EOF
3880#include <sys/types.h>
3881#include <sys/uio.h>
3882#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003883int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003884EOF
3885preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003886if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003887 preadv=yes
3888fi
3889
3890##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003891# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003892# fdt support is mandatory for at least some target architectures,
3893# so insist on it if we're building those system emulators.
3894fdt_required=no
3895for target in $target_list; do
3896 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003897 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003898 fdt_required=yes
3899 ;;
3900 esac
3901done
3902
3903if test "$fdt_required" = "yes"; then
3904 if test "$fdt" = "no"; then
3905 error_exit "fdt disabled but some requested targets require it." \
3906 "You can turn off fdt only if you also disable all the system emulation" \
3907 "targets which need it (by specifying a cut down --target-list)."
3908 fi
3909 fdt=yes
3910fi
3911
Juan Quintela2df87df2009-08-12 18:29:54 +02003912if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003913 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003914 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003915 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003916 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003917#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003918#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003919int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003920EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003921 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003922 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003923 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003924 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003925 # have GIT checkout, so activate dtc submodule
3926 if test -e "${source_path}/.git" ; then
3927 git_submodules="${git_submodules} dtc"
3928 fi
3929 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003930 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003931 mkdir -p dtc
3932 if [ "$pwd_is_source_path" != "y" ] ; then
3933 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3934 symlink "$source_path/dtc/scripts" "dtc/scripts"
3935 fi
3936 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003937 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3938 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003939 elif test "$fdt" = "yes" ; then
3940 # Not a git build & no libfdt found, prompt for system install
3941 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3942 "Please install the DTC (libfdt) devel package"
3943 else
3944 # don't have and don't want
3945 fdt_libs=
3946 fdt=no
3947 fi
aurel32f652e6a2008-12-16 10:43:48 +00003948 fi
3949fi
3950
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003951libs_softmmu="$libs_softmmu $fdt_libs"
3952
Michael Walle20ff0752011-03-07 23:32:39 +01003953##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003954# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003955
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003956if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003957 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003958 if $pkg_config $opengl_pkgs; then
3959 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3960 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003961 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003962 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3963 gtk_gl="yes"
3964 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003965 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003966 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003967 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003968 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003969 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003970 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003971 opengl_libs=""
3972 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003973 fi
3974fi
3975
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003976if test "$opengl" = "yes"; then
3977 cat > $TMPC << EOF
3978#include <epoxy/egl.h>
3979#ifndef EGL_MESA_image_dma_buf_export
3980# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3981#endif
3982int main(void) { return 0; }
3983EOF
3984 if compile_prog "" "" ; then
3985 opengl_dmabuf=yes
3986 fi
3987fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003988
Klim Kireeved279a02018-01-12 12:01:19 +03003989##########################################
3990# libxml2 probe
3991if test "$libxml2" != "no" ; then
3992 if $pkg_config --exists libxml-2.0; then
3993 libxml2="yes"
3994 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3995 libxml2_libs=$($pkg_config --libs libxml-2.0)
3996 else
3997 if test "$libxml2" = "yes"; then
3998 feature_not_found "libxml2" "Install libxml2 devel"
3999 fi
4000 libxml2="no"
4001 fi
4002fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004003
Bharata B Raoeb100392012-09-24 14:42:45 +05304004##########################################
4005# glusterfs probe
4006if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004007 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304008 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004009 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4010 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004011 if $pkg_config --atleast-version=4 glusterfs-api; then
4012 glusterfs_xlator_opt="yes"
4013 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004014 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304015 glusterfs_discard="yes"
4016 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304017 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304018 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304019 glusterfs_zerofill="yes"
4020 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304021 else
4022 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004023 feature_not_found "GlusterFS backend support" \
4024 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304025 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304026 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304027 fi
4028fi
4029
aurel3239386ac2009-04-15 19:48:17 +00004030# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004031# emulator. This is done because older glibc versions don't
4032# have syscall stubs for these implemented. In that case we
4033# don't provide them even if kernel supports them.
4034#
4035inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004036cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004037#include <sys/inotify.h>
4038
4039int
4040main(void)
4041{
4042 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004043 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004044}
4045EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004046if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004047 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004048fi
4049
Riku Voipioc05c7a72010-03-26 15:25:11 +00004050inotify1=no
4051cat > $TMPC << EOF
4052#include <sys/inotify.h>
4053
4054int
4055main(void)
4056{
4057 /* try to start inotify */
4058 return inotify_init1(0);
4059}
4060EOF
4061if compile_prog "" "" ; then
4062 inotify1=yes
4063fi
4064
Riku Voipio099d6b02009-05-05 12:10:04 +03004065# check if pipe2 is there
4066pipe2=no
4067cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004068#include <unistd.h>
4069#include <fcntl.h>
4070
4071int main(void)
4072{
4073 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004074 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004075}
4076EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004077if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004078 pipe2=yes
4079fi
4080
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004081# check if accept4 is there
4082accept4=no
4083cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004084#include <sys/socket.h>
4085#include <stddef.h>
4086
4087int main(void)
4088{
4089 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4090 return 0;
4091}
4092EOF
4093if compile_prog "" "" ; then
4094 accept4=yes
4095fi
4096
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304097# check if tee/splice is there. vmsplice was added same time.
4098splice=no
4099cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304100#include <unistd.h>
4101#include <fcntl.h>
4102#include <limits.h>
4103
4104int main(void)
4105{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004106 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304107 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4108 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4109 return 0;
4110}
4111EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004112if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304113 splice=yes
4114fi
4115
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004116##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004117# libnuma probe
4118
4119if test "$numa" != "no" ; then
4120 cat > $TMPC << EOF
4121#include <numa.h>
4122int main(void) { return numa_available(); }
4123EOF
4124
4125 if compile_prog "" "-lnuma" ; then
4126 numa=yes
4127 libs_softmmu="-lnuma $libs_softmmu"
4128 else
4129 if test "$numa" = "yes" ; then
4130 feature_not_found "numa" "install numactl devel"
4131 fi
4132 numa=no
4133 fi
4134fi
4135
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004136if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4137 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4138 exit 1
4139fi
4140
Yang Zhong5a22ab72017-12-20 21:16:46 +08004141# Even if malloc_trim() is available, these non-libc memory allocators
4142# do not support it.
4143if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4144 if test "$malloc_trim" = "yes" ; then
4145 echo "Disabling malloc_trim with non-libc memory allocator"
4146 fi
4147 malloc_trim="no"
4148fi
4149
4150#######################################
4151# malloc_trim
4152
4153if test "$malloc_trim" != "no" ; then
4154 cat > $TMPC << EOF
4155#include <malloc.h>
4156int main(void) { malloc_trim(0); return 0; }
4157EOF
4158 if compile_prog "" "" ; then
4159 malloc_trim="yes"
4160 else
4161 malloc_trim="no"
4162 fi
4163fi
4164
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004165##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004166# tcmalloc probe
4167
4168if test "$tcmalloc" = "yes" ; then
4169 cat > $TMPC << EOF
4170#include <stdlib.h>
4171int main(void) { malloc(1); return 0; }
4172EOF
4173
4174 if compile_prog "" "-ltcmalloc" ; then
4175 LIBS="-ltcmalloc $LIBS"
4176 else
4177 feature_not_found "tcmalloc" "install gperftools devel"
4178 fi
4179fi
4180
4181##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004182# jemalloc probe
4183
4184if test "$jemalloc" = "yes" ; then
4185 cat > $TMPC << EOF
4186#include <stdlib.h>
4187int main(void) { malloc(1); return 0; }
4188EOF
4189
4190 if compile_prog "" "-ljemalloc" ; then
4191 LIBS="-ljemalloc $LIBS"
4192 else
4193 feature_not_found "jemalloc" "install jemalloc devel"
4194 fi
4195fi
4196
4197##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004198# signalfd probe
4199signalfd="no"
4200cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004201#include <unistd.h>
4202#include <sys/syscall.h>
4203#include <signal.h>
4204int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4205EOF
4206
4207if compile_prog "" "" ; then
4208 signalfd=yes
4209fi
4210
Riku Voipioc2882b92009-08-12 15:08:24 +03004211# check if eventfd is supported
4212eventfd=no
4213cat > $TMPC << EOF
4214#include <sys/eventfd.h>
4215
4216int main(void)
4217{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004218 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004219}
4220EOF
4221if compile_prog "" "" ; then
4222 eventfd=yes
4223fi
4224
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004225# check if memfd is supported
4226memfd=no
4227cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004228#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004229
4230int main(void)
4231{
4232 return memfd_create("foo", MFD_ALLOW_SEALING);
4233}
4234EOF
4235if compile_prog "" "" ; then
4236 memfd=yes
4237fi
4238
4239
4240
Ulrich Hechtd0927932009-09-17 20:22:14 +03004241# check for fallocate
4242fallocate=no
4243cat > $TMPC << EOF
4244#include <fcntl.h>
4245
4246int main(void)
4247{
4248 fallocate(0, 0, 0, 0);
4249 return 0;
4250}
4251EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004252if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004253 fallocate=yes
4254fi
4255
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004256# check for fallocate hole punching
4257fallocate_punch_hole=no
4258cat > $TMPC << EOF
4259#include <fcntl.h>
4260#include <linux/falloc.h>
4261
4262int main(void)
4263{
4264 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4265 return 0;
4266}
4267EOF
4268if compile_prog "" "" ; then
4269 fallocate_punch_hole=yes
4270fi
4271
Denis V. Lunevb953f072015-01-30 11:42:14 +03004272# check that fallocate supports range zeroing inside the file
4273fallocate_zero_range=no
4274cat > $TMPC << EOF
4275#include <fcntl.h>
4276#include <linux/falloc.h>
4277
4278int main(void)
4279{
4280 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4281 return 0;
4282}
4283EOF
4284if compile_prog "" "" ; then
4285 fallocate_zero_range=yes
4286fi
4287
Kevin Wolfed911432014-09-29 17:12:59 +02004288# check for posix_fallocate
4289posix_fallocate=no
4290cat > $TMPC << EOF
4291#include <fcntl.h>
4292
4293int main(void)
4294{
4295 posix_fallocate(0, 0, 0);
4296 return 0;
4297}
4298EOF
4299if compile_prog "" "" ; then
4300 posix_fallocate=yes
4301fi
4302
Peter Maydellc727f472011-01-06 11:05:10 +00004303# check for sync_file_range
4304sync_file_range=no
4305cat > $TMPC << EOF
4306#include <fcntl.h>
4307
4308int main(void)
4309{
4310 sync_file_range(0, 0, 0, 0);
4311 return 0;
4312}
4313EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004314if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004315 sync_file_range=yes
4316fi
4317
Peter Maydelldace20d2011-01-10 13:11:24 +00004318# check for linux/fiemap.h and FS_IOC_FIEMAP
4319fiemap=no
4320cat > $TMPC << EOF
4321#include <sys/ioctl.h>
4322#include <linux/fs.h>
4323#include <linux/fiemap.h>
4324
4325int main(void)
4326{
4327 ioctl(0, FS_IOC_FIEMAP, 0);
4328 return 0;
4329}
4330EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004331if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004332 fiemap=yes
4333fi
4334
Ulrich Hechtd0927932009-09-17 20:22:14 +03004335# check for dup3
4336dup3=no
4337cat > $TMPC << EOF
4338#include <unistd.h>
4339
4340int main(void)
4341{
4342 dup3(0, 0, 0);
4343 return 0;
4344}
4345EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004346if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004347 dup3=yes
4348fi
4349
Alex Bligh4e0c6522013-08-21 16:02:43 +01004350# check for ppoll support
4351ppoll=no
4352cat > $TMPC << EOF
4353#include <poll.h>
4354
4355int main(void)
4356{
4357 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4358 ppoll(&pfd, 1, 0, 0);
4359 return 0;
4360}
4361EOF
4362if compile_prog "" "" ; then
4363 ppoll=yes
4364fi
4365
Alex Blighcd758dd2013-08-21 16:02:44 +01004366# check for prctl(PR_SET_TIMERSLACK , ... ) support
4367prctl_pr_set_timerslack=no
4368cat > $TMPC << EOF
4369#include <sys/prctl.h>
4370
4371int main(void)
4372{
4373 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4374 return 0;
4375}
4376EOF
4377if compile_prog "" "" ; then
4378 prctl_pr_set_timerslack=yes
4379fi
4380
Peter Maydell3b6edd12011-02-15 18:35:05 +00004381# check for epoll support
4382epoll=no
4383cat > $TMPC << EOF
4384#include <sys/epoll.h>
4385
4386int main(void)
4387{
4388 epoll_create(0);
4389 return 0;
4390}
4391EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004392if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004393 epoll=yes
4394fi
4395
Peter Maydell227f0212016-06-06 19:58:11 +01004396# epoll_create1 is a later addition
4397# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004398epoll_create1=no
4399cat > $TMPC << EOF
4400#include <sys/epoll.h>
4401
4402int main(void)
4403{
Peter Maydell19e83f62011-04-26 16:56:40 +01004404 /* Note that we use epoll_create1 as a value, not as
4405 * a function being called. This is necessary so that on
4406 * old SPARC glibc versions where the function was present in
4407 * the library but not declared in the header file we will
4408 * fail the configure check. (Otherwise we will get a compiler
4409 * warning but not an error, and will proceed to fail the
4410 * qemu compile where we compile with -Werror.)
4411 */
Blue Swirlc075a722012-08-09 20:21:25 +00004412 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004413}
4414EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004415if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004416 epoll_create1=yes
4417fi
4418
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004419# check for sendfile support
4420sendfile=no
4421cat > $TMPC << EOF
4422#include <sys/sendfile.h>
4423
4424int main(void)
4425{
4426 return sendfile(0, 0, 0, 0);
4427}
4428EOF
4429if compile_prog "" "" ; then
4430 sendfile=yes
4431fi
4432
Riku Voipio51834342014-06-22 11:25:42 +01004433# check for timerfd support (glibc 2.8 and newer)
4434timerfd=no
4435cat > $TMPC << EOF
4436#include <sys/timerfd.h>
4437
4438int main(void)
4439{
4440 return(timerfd_create(CLOCK_REALTIME, 0));
4441}
4442EOF
4443if compile_prog "" "" ; then
4444 timerfd=yes
4445fi
4446
Riku Voipio9af5c902014-08-12 15:58:57 +03004447# check for setns and unshare support
4448setns=no
4449cat > $TMPC << EOF
4450#include <sched.h>
4451
4452int main(void)
4453{
4454 int ret;
4455 ret = setns(0, 0);
4456 ret = unshare(0);
4457 return ret;
4458}
4459EOF
4460if compile_prog "" "" ; then
4461 setns=yes
4462fi
4463
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004464# clock_adjtime probe
4465clock_adjtime=no
4466cat > $TMPC <<EOF
4467#include <time.h>
4468
4469int main(void)
4470{
4471 return clock_adjtime(0, 0);
4472}
4473EOF
4474clock_adjtime=no
4475if compile_prog "" "" ; then
4476 clock_adjtime=yes
4477fi
4478
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004479# syncfs probe
4480syncfs=no
4481cat > $TMPC <<EOF
4482#include <unistd.h>
4483
4484int main(void)
4485{
4486 return syncfs(0);
4487}
4488EOF
4489syncfs=no
4490if compile_prog "" "" ; then
4491 syncfs=yes
4492fi
4493
pbrookcc8ae6d2006-04-23 17:57:59 +00004494# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004495if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004496 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004497 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004498 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004499 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004500 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004501 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004502 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004503 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004504fi
4505
Stefan Weilf514f412009-10-11 12:44:07 +02004506# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004507byteswap_h=no
4508cat > $TMPC << EOF
4509#include <byteswap.h>
4510int main(void) { return bswap_32(0); }
4511EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004512if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004513 byteswap_h=yes
4514fi
4515
Stefan Weil75f13592013-01-05 12:17:38 +01004516# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004517bswap_h=no
4518cat > $TMPC << EOF
4519#include <sys/endian.h>
4520#include <sys/types.h>
4521#include <machine/bswap.h>
4522int main(void) { return bswap32(0); }
4523EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004524if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004525 bswap_h=yes
4526fi
4527
aliguorida93a1f2008-12-12 20:02:52 +00004528##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004529# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004530if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004531 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004532 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004533 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4534 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004535 else
4536 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004537 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004538 fi
4539 libiscsi="no"
4540 fi
4541fi
4542
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004543##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004544# Do we need libm
4545cat > $TMPC << EOF
4546#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004547int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004548EOF
4549if compile_prog "" "" ; then
4550 :
4551elif compile_prog "" "-lm" ; then
4552 LIBS="-lm $LIBS"
4553 libs_qga="-lm $libs_qga"
4554else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004555 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004556fi
4557
4558##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004559# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004560# uClibc provides 2 versions of clock_gettime(), one with realtime
4561# support and one without. This means that the clock_gettime() don't
4562# need -lrt. We still need it for timer_create() so we check for this
4563# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004564cat > $TMPC <<EOF
4565#include <signal.h>
4566#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004567int main(void) {
4568 timer_create(CLOCK_REALTIME, NULL, NULL);
4569 return clock_gettime(CLOCK_REALTIME, NULL);
4570}
aliguorida93a1f2008-12-12 20:02:52 +00004571EOF
4572
Juan Quintela52166aa2009-08-03 14:46:03 +02004573if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004574 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004575# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004576elif compile_prog "" "$pthread_lib -lrt" ; then
4577 LIBS="$LIBS -lrt"
4578 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004579fi
4580
Blue Swirl31ff5042009-09-12 12:33:07 +00004581if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004582 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004583 libs_softmmu="-lutil $libs_softmmu"
4584fi
4585
Blue Swirlde5071c2009-09-12 09:58:46 +00004586##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004587# spice probe
4588if test "$spice" != "no" ; then
4589 cat > $TMPC << EOF
4590#include <spice.h>
4591int main(void) { spice_server_new(); return 0; }
4592EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004593 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4594 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004595 if $pkg_config --atleast-version=0.12.0 spice-server && \
4596 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004597 compile_prog "$spice_cflags" "$spice_libs" ; then
4598 spice="yes"
4599 libs_softmmu="$libs_softmmu $spice_libs"
4600 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004601 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4602 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004603 else
4604 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004605 feature_not_found "spice" \
4606 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004607 fi
4608 spice="no"
4609 fi
4610fi
4611
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004612# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004613if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004614 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004615 libcacard_cflags=$($pkg_config --cflags libcacard)
4616 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004617 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004618 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004619 if test "$smartcard" = "yes"; then
4620 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004621 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004622 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004623 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004624fi
4625
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004626# check for libusb
4627if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004628 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004629 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004630 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4631 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004632 else
4633 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004634 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004635 fi
4636 libusb="no"
4637 fi
4638fi
4639
Hans de Goede69354a82011-07-19 11:04:10 +02004640# check for usbredirparser for usb network redirection support
4641if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004642 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004643 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004644 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4645 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004646 else
4647 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004648 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004649 fi
4650 usb_redir="no"
4651 fi
4652fi
4653
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004654##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004655# check if we have VSS SDK headers for win
4656
4657if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4658 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004659 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004660 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4661 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004662 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004663 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4664 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004665 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004666 esac
4667 cat > $TMPC << EOF
4668#define __MIDL_user_allocate_free_DEFINED__
4669#include <inc/win2003/vss.h>
4670int main(void) { return VSS_CTX_BACKUP; }
4671EOF
4672 if compile_prog "$vss_win32_include" "" ; then
4673 guest_agent_with_vss="yes"
4674 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004675 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004676 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004677 else
4678 if test "$vss_win32_sdk" != "" ; then
4679 echo "ERROR: Please download and install Microsoft VSS SDK:"
4680 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4681 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4682 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4683 echo "ERROR: The headers are extracted in the directory \`inc'."
4684 feature_not_found "VSS support"
4685 fi
4686 guest_agent_with_vss="no"
4687 fi
4688fi
4689
4690##########################################
4691# lookup Windows platform SDK (if not specified)
4692# The SDK is needed only to build .tlb (type library) file of guest agent
4693# VSS provider from the source. It is usually unnecessary because the
4694# pre-compiled .tlb file is included.
4695
4696if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4697 if test -z "$win_sdk"; then
4698 programfiles="$PROGRAMFILES"
4699 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4700 if test -n "$programfiles"; then
4701 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4702 else
4703 feature_not_found "Windows SDK"
4704 fi
4705 elif test "$win_sdk" = "no"; then
4706 win_sdk=""
4707 fi
4708fi
4709
4710##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004711# check if mingw environment provides a recent ntddscsi.h
4712if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4713 cat > $TMPC << EOF
4714#include <windows.h>
4715#include <ntddscsi.h>
4716int main(void) {
4717#if !defined(IOCTL_SCSI_GET_ADDRESS)
4718#error Missing required ioctl definitions
4719#endif
4720 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4721 return addr.Lun;
4722}
4723EOF
4724 if compile_prog "" "" ; then
4725 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004726 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004727 fi
4728fi
4729
4730##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004731# virgl renderer probe
4732
4733if test "$virglrenderer" != "no" ; then
4734 cat > $TMPC << EOF
4735#include <virglrenderer.h>
4736int main(void) { virgl_renderer_poll(); return 0; }
4737EOF
4738 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4739 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004740 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004741 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4742 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4743 virglrenderer="yes"
4744 else
4745 if test "$virglrenderer" = "yes" ; then
4746 feature_not_found "virglrenderer"
4747 fi
4748 virglrenderer="no"
4749 fi
4750fi
4751
4752##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004753# capstone
4754
Richard Hendersone219c492017-09-28 09:01:23 -07004755case "$capstone" in
4756 "" | yes)
4757 if $pkg_config capstone; then
4758 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004759 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004760 capstone=git
4761 elif test -e "${source_path}/capstone/Makefile" ; then
4762 capstone=internal
4763 elif test -z "$capstone" ; then
4764 capstone=no
4765 else
4766 feature_not_found "capstone" "Install capstone devel or git submodule"
4767 fi
4768 ;;
4769
4770 system)
4771 if ! $pkg_config capstone; then
4772 feature_not_found "capstone" "Install capstone devel"
4773 fi
4774 ;;
4775esac
4776
4777case "$capstone" in
4778 git | internal)
4779 if test "$capstone" = git; then
4780 git_submodules="${git_submodules} capstone"
4781 fi
4782 mkdir -p capstone
4783 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4784 if test "$mingw32" = "yes"; then
4785 LIBCAPSTONE=capstone.lib
4786 else
4787 LIBCAPSTONE=libcapstone.a
4788 fi
4789 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4790 ;;
4791
4792 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004793 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4794 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004795 ;;
4796
4797 no)
4798 ;;
4799 *)
4800 error_exit "Unknown state for capstone: $capstone"
4801 ;;
4802esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004803
4804##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004805# check if we have fdatasync
4806
4807fdatasync=no
4808cat > $TMPC << EOF
4809#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004810int main(void) {
4811#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4812return fdatasync(0);
4813#else
Stefan Weile172fe12012-04-06 21:33:20 +02004814#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004815#endif
4816}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004817EOF
4818if compile_prog "" "" ; then
4819 fdatasync=yes
4820fi
4821
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004822##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004823# check if we have madvise
4824
4825madvise=no
4826cat > $TMPC << EOF
4827#include <sys/types.h>
4828#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004829#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004830int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4831EOF
4832if compile_prog "" "" ; then
4833 madvise=yes
4834fi
4835
4836##########################################
4837# check if we have posix_madvise
4838
4839posix_madvise=no
4840cat > $TMPC << EOF
4841#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004842#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004843int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4844EOF
4845if compile_prog "" "" ; then
4846 posix_madvise=yes
4847fi
4848
4849##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004850# check if we have posix_memalign()
4851
4852posix_memalign=no
4853cat > $TMPC << EOF
4854#include <stdlib.h>
4855int main(void) {
4856 void *p;
4857 return posix_memalign(&p, 8, 8);
4858}
4859EOF
4860if compile_prog "" "" ; then
4861 posix_memalign=yes
4862fi
4863
4864##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004865# check if we have posix_syslog
4866
4867posix_syslog=no
4868cat > $TMPC << EOF
4869#include <syslog.h>
4870int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4871EOF
4872if compile_prog "" "" ; then
4873 posix_syslog=yes
4874fi
4875
4876##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004877# check if we have sem_timedwait
4878
4879sem_timedwait=no
4880cat > $TMPC << EOF
4881#include <semaphore.h>
4882int main(void) { return sem_timedwait(0, 0); }
4883EOF
4884if compile_prog "" "" ; then
4885 sem_timedwait=yes
4886fi
4887
4888##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004889# check if we have strchrnul
4890
4891strchrnul=no
4892cat > $TMPC << EOF
4893#include <string.h>
4894int main(void);
4895// Use a haystack that the compiler shouldn't be able to constant fold
4896char *haystack = (char*)&main;
4897int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4898EOF
4899if compile_prog "" "" ; then
4900 strchrnul=yes
4901fi
4902
4903##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004904# check if trace backend exists
4905
Lluís Vilanova5b808272014-05-27 15:02:14 +02004906$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004907if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004908 error_exit "invalid trace backends" \
4909 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004910fi
4911
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004912##########################################
4913# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004914if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004915 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004916#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004917int main(void) { return 0; }
4918EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004919 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004920 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004921 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004922 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004923 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004924 fi
4925 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004926 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004927 else
4928 urcu_bp_libs="-lurcu-bp"
4929 fi
4930
4931 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4932 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004933 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004934 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004935 fi
4936fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004937
4938##########################################
4939# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004940if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004941 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004942 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004943 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004944 trace_backend_stap="no"
4945 if has 'stap' ; then
4946 trace_backend_stap="yes"
4947 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004948fi
4949
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004950##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004951# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304952
Peter Maydell7c2acc72013-04-08 12:11:27 +01004953# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004954# is sigcontext. On Windows the only valid backend is the Windows
4955# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004956
4957ucontext_works=no
4958if test "$darwin" != "yes"; then
4959 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304960#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004961#ifdef __stub_makecontext
4962#error Ignoring glibc stub makecontext which will always fail
4963#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004964int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304965EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004966 if compile_prog "" "" ; then
4967 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304968 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004969fi
4970
4971if test "$coroutine" = ""; then
4972 if test "$mingw32" = "yes"; then
4973 coroutine=win32
4974 elif test "$ucontext_works" = "yes"; then
4975 coroutine=ucontext
4976 else
4977 coroutine=sigaltstack
4978 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004979else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004980 case $coroutine in
4981 windows)
4982 if test "$mingw32" != "yes"; then
4983 error_exit "'windows' coroutine backend only valid for Windows"
4984 fi
4985 # Unfortunately the user visible backend name doesn't match the
4986 # coroutine-*.c filename for this case, so we have to adjust it here.
4987 coroutine=win32
4988 ;;
4989 ucontext)
4990 if test "$ucontext_works" != "yes"; then
4991 feature_not_found "ucontext"
4992 fi
4993 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004994 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004995 if test "$mingw32" = "yes"; then
4996 error_exit "only the 'windows' coroutine backend is valid for Windows"
4997 fi
4998 ;;
4999 *)
5000 error_exit "unknown coroutine backend $coroutine"
5001 ;;
5002 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305003fi
5004
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005005if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005006 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005007fi
5008
Peter Lieven7d992e42016-09-27 11:58:45 +02005009if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005010 if test "$coroutine_pool" = "yes"; then
5011 echo "WARN: disabling coroutine pool for stack usage debugging"
5012 coroutine_pool=no
5013 fi
5014fi
5015
5016
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305017##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305018# check if we have open_by_handle_at
5019
Stefan Weil4e1797f2012-06-18 22:11:06 +02005020open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305021cat > $TMPC << EOF
5022#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005023#if !defined(AT_EMPTY_PATH)
5024# error missing definition
5025#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005026int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005027#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305028EOF
5029if compile_prog "" "" ; then
5030 open_by_handle_at=yes
5031fi
5032
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305033########################################
5034# check if we have linux/magic.h
5035
5036linux_magic_h=no
5037cat > $TMPC << EOF
5038#include <linux/magic.h>
5039int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005040 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305041}
5042EOF
5043if compile_prog "" "" ; then
5044 linux_magic_h=yes
5045fi
5046
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005047########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005048# check whether we can disable warning option with a pragma (this is needed
5049# to silence warnings in the headers of some versions of external libraries).
5050# This test has to be compiled with -Werror as otherwise an unknown pragma is
5051# only a warning.
5052#
5053# If we can't selectively disable warning in the code, disable -Werror so that
5054# the build doesn't fail anyway.
5055
Peter Maydell06d71fa2012-07-30 16:13:07 +01005056pragma_disable_unused_but_set=no
5057cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005058#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005059#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005060#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005061
Peter Maydell06d71fa2012-07-30 16:13:07 +01005062int main(void) {
5063 return 0;
5064}
5065EOF
5066if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005067 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005068else
5069 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005070fi
5071
5072########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005073# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005074
5075valgrind_h=no
5076cat > $TMPC << EOF
5077#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005078int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005079 return 0;
5080}
5081EOF
5082if compile_prog "" "" ; then
5083 valgrind_h=yes
5084fi
5085
5086########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005087# check if environ is declared
5088
5089has_environ=no
5090cat > $TMPC << EOF
5091#include <unistd.h>
5092int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005093 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005094 return 0;
5095}
5096EOF
5097if compile_prog "" "" ; then
5098 has_environ=yes
5099fi
5100
Richard Henderson76a347e2012-12-28 14:17:02 -08005101########################################
5102# check if cpuid.h is usable.
5103
Richard Henderson76a347e2012-12-28 14:17:02 -08005104cat > $TMPC << EOF
5105#include <cpuid.h>
5106int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005107 unsigned a, b, c, d;
5108 int max = __get_cpuid_max(0, 0);
5109
5110 if (max >= 1) {
5111 __cpuid(1, a, b, c, d);
5112 }
5113
5114 if (max >= 7) {
5115 __cpuid_count(7, 0, a, b, c, d);
5116 }
5117
5118 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005119}
5120EOF
5121if compile_prog "" "" ; then
5122 cpuid_h=yes
5123fi
5124
Richard Henderson5dd89902017-07-18 18:40:18 -10005125##########################################
5126# avx2 optimization requirement check
5127#
5128# There is no point enabling this if cpuid.h is not usable,
5129# since we won't be able to select the new routines.
5130
5131if test $cpuid_h = yes; then
5132 cat > $TMPC << EOF
5133#pragma GCC push_options
5134#pragma GCC target("avx2")
5135#include <cpuid.h>
5136#include <immintrin.h>
5137static int bar(void *a) {
5138 __m256i x = *(__m256i *)a;
5139 return _mm256_testz_si256(x, x);
5140}
5141int main(int argc, char *argv[]) { return bar(argv[0]); }
5142EOF
5143 if compile_object "" ; then
5144 avx2_opt="yes"
5145 fi
5146fi
5147
Richard Hendersonf5401662013-02-16 12:46:59 -08005148########################################
5149# check if __[u]int128_t is usable.
5150
5151int128=no
5152cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01005153#if defined(__clang_major__) && defined(__clang_minor__)
5154# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5155# error __int128_t does not work in CLANG before 3.2
5156# endif
5157#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08005158__int128_t a;
5159__uint128_t b;
5160int main (void) {
5161 a = a + b;
5162 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005163 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005164 return 0;
5165}
5166EOF
5167if compile_prog "" "" ; then
5168 int128=yes
5169fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005170
Richard Henderson7ebee432016-06-29 21:10:59 -07005171#########################################
5172# See if 128-bit atomic operations are supported.
5173
5174atomic128=no
5175if test "$int128" = "yes"; then
5176 cat > $TMPC << EOF
5177int main(void)
5178{
5179 unsigned __int128 x = 0, y = 0;
5180 y = __atomic_load_16(&x, 0);
5181 __atomic_store_16(&x, y, 0);
5182 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5183 return 0;
5184}
5185EOF
5186 if compile_prog "" "" ; then
5187 atomic128=yes
5188 fi
5189fi
5190
Richard Hendersondf79b992016-09-02 12:23:57 -07005191#########################################
5192# See if 64-bit atomic operations are supported.
5193# Note that without __atomic builtins, we can only
5194# assume atomic loads/stores max at pointer size.
5195
5196cat > $TMPC << EOF
5197#include <stdint.h>
5198int main(void)
5199{
5200 uint64_t x = 0, y = 0;
5201#ifdef __ATOMIC_RELAXED
5202 y = __atomic_load_8(&x, 0);
5203 __atomic_store_8(&x, y, 0);
5204 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5205 __atomic_exchange_8(&x, y, 0);
5206 __atomic_fetch_add_8(&x, y, 0);
5207#else
5208 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5209 __sync_lock_test_and_set(&x, y);
5210 __sync_val_compare_and_swap(&x, y, 0);
5211 __sync_fetch_and_add(&x, y);
5212#endif
5213 return 0;
5214}
5215EOF
5216if compile_prog "" "" ; then
5217 atomic64=yes
5218fi
5219
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005220########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005221# See if 16-byte vector operations are supported.
5222# Even without a vector unit the compiler may expand these.
5223# There is a bug in old GCC for PPC that crashes here.
5224# Unfortunately it's the system compiler for Centos 7.
5225
5226cat > $TMPC << EOF
5227typedef unsigned char U1 __attribute__((vector_size(16)));
5228typedef unsigned short U2 __attribute__((vector_size(16)));
5229typedef unsigned int U4 __attribute__((vector_size(16)));
5230typedef unsigned long long U8 __attribute__((vector_size(16)));
5231typedef signed char S1 __attribute__((vector_size(16)));
5232typedef signed short S2 __attribute__((vector_size(16)));
5233typedef signed int S4 __attribute__((vector_size(16)));
5234typedef signed long long S8 __attribute__((vector_size(16)));
5235static U1 a1, b1;
5236static U2 a2, b2;
5237static U4 a4, b4;
5238static U8 a8, b8;
5239static S1 c1;
5240static S2 c2;
5241static S4 c4;
5242static S8 c8;
5243static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005244void helper(void *d, void *a, int shift, int i);
5245void helper(void *d, void *a, int shift, int i)
5246{
5247 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5248 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5249 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5250 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5251}
Richard Hendersondb432672017-09-15 14:11:45 -07005252int main(void)
5253{
5254 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5255 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5256 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5257 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5258 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5259 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5260 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5261 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5262 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5263 return 0;
5264}
5265EOF
5266
5267vector16=no
5268if compile_prog "" "" ; then
5269 vector16=yes
5270fi
5271
5272########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005273# check if getauxval is available.
5274
5275getauxval=no
5276cat > $TMPC << EOF
5277#include <sys/auxv.h>
5278int main(void) {
5279 return getauxval(AT_HWCAP) == 0;
5280}
5281EOF
5282if compile_prog "" "" ; then
5283 getauxval=yes
5284fi
5285
John Snowfd0e6052015-03-25 18:57:39 -04005286########################################
5287# check if ccache is interfering with
5288# semantic analysis of macros
5289
John Snow5e4dfd32015-10-28 13:56:40 -04005290unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005291ccache_cpp2=no
5292cat > $TMPC << EOF
5293static const int Z = 1;
5294#define fn() ({ Z; })
5295#define TAUT(X) ((X) == Z)
5296#define PAREN(X, Y) (X == Y)
5297#define ID(X) (X)
5298int main(int argc, char *argv[])
5299{
5300 int x = 0, y = 0;
5301 x = ID(x);
5302 x = fn();
5303 fn();
5304 if (PAREN(x, y)) return 0;
5305 if (TAUT(Z)) return 0;
5306 return 0;
5307}
5308EOF
5309
5310if ! compile_object "-Werror"; then
5311 ccache_cpp2=yes
5312fi
5313
John Snowb553a042015-11-03 15:43:42 -05005314#################################################
5315# clang does not support glibc + FORTIFY_SOURCE.
5316
5317if test "$fortify_source" != "no"; then
5318 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5319 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005320 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005321 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005322 fortify_source="no";
5323 else
5324 fortify_source="yes"
5325 fi
5326fi
5327
Fam Zheng1efad062018-06-01 17:26:43 +08005328###############################################
5329# Check if copy_file_range is provided by glibc
5330have_copy_file_range=no
5331cat > $TMPC << EOF
5332#include <unistd.h>
5333int main(void) {
5334 copy_file_range(0, NULL, 0, NULL, 0, 0);
5335 return 0;
5336}
5337EOF
5338if compile_prog "" "" ; then
5339 have_copy_file_range=yes
5340fi
5341
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305342##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005343# check if struct fsxattr is available via linux/fs.h
5344
5345have_fsxattr=no
5346cat > $TMPC << EOF
5347#include <linux/fs.h>
5348struct fsxattr foo;
5349int main(void) {
5350 return 0;
5351}
5352EOF
5353if compile_prog "" "" ; then
5354 have_fsxattr=yes
5355fi
5356
Peter Maydellb66e10e2016-06-08 18:34:32 +01005357##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005358# check for usable membarrier system call
5359if test "$membarrier" = "yes"; then
5360 have_membarrier=no
5361 if test "$mingw32" = "yes" ; then
5362 have_membarrier=yes
5363 elif test "$linux" = "yes" ; then
5364 cat > $TMPC << EOF
5365 #include <linux/membarrier.h>
5366 #include <sys/syscall.h>
5367 #include <unistd.h>
5368 #include <stdlib.h>
5369 int main(void) {
5370 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5371 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5372 exit(0);
5373 }
5374EOF
5375 if compile_prog "" "" ; then
5376 have_membarrier=yes
5377 fi
5378 fi
5379 if test "$have_membarrier" = "no"; then
5380 feature_not_found "membarrier" "membarrier system call not available"
5381 fi
5382else
5383 # Do not enable it by default even for Mingw32, because it doesn't
5384 # work on Wine.
5385 membarrier=no
5386fi
5387
5388##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005389# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005390have_rtnetlink=no
5391cat > $TMPC << EOF
5392#include <linux/rtnetlink.h>
5393int main(void) {
5394 return IFLA_PROTO_DOWN;
5395}
5396EOF
5397if compile_prog "" "" ; then
5398 have_rtnetlink=yes
5399fi
5400
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005401##########################################
5402# check for usable AF_VSOCK environment
5403have_af_vsock=no
5404cat > $TMPC << EOF
5405#include <errno.h>
5406#include <sys/types.h>
5407#include <sys/socket.h>
5408#if !defined(AF_VSOCK)
5409# error missing AF_VSOCK flag
5410#endif
5411#include <linux/vm_sockets.h>
5412int main(void) {
5413 int sock, ret;
5414 struct sockaddr_vm svm;
5415 socklen_t len = sizeof(svm);
5416 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5417 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5418 if ((ret == -1) && (errno == ENOTCONN)) {
5419 return 0;
5420 }
5421 return -1;
5422}
5423EOF
5424if compile_prog "" "" ; then
5425 have_af_vsock=yes
5426fi
5427
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005428##########################################
5429# check for usable AF_ALG environment
5430hava_afalg=no
5431cat > $TMPC << EOF
5432#include <errno.h>
5433#include <sys/types.h>
5434#include <sys/socket.h>
5435#include <linux/if_alg.h>
5436int main(void) {
5437 int sock;
5438 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5439 return sock;
5440}
5441EOF
5442if compile_prog "" "" ; then
5443 have_afalg=yes
5444fi
5445if test "$crypto_afalg" = "yes"
5446then
5447 if test "$have_afalg" != "yes"
5448 then
5449 error_exit "AF_ALG requested but could not be detected"
5450 fi
5451fi
5452
5453
James Clarke6969ec62016-06-06 12:02:50 +01005454#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005455# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005456if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005457 cat > $TMPC << EOF
5458#include <Hypervisor/hv.h>
5459int main() { return 0;}
5460EOF
5461 if ! compile_object ""; then
5462 hvf='no'
5463 else
5464 hvf='yes'
5465 LDFLAGS="-framework Hypervisor $LDFLAGS"
5466 fi
5467fi
5468
5469#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005470# Sparc implicitly links with --relax, which is
5471# incompatible with -r, so --no-relax should be
5472# given. It does no harm to give it on other
5473# platforms too.
5474
5475# Note: the prototype is needed since QEMU_CFLAGS
5476# contains -Wmissing-prototypes
5477cat > $TMPC << EOF
5478extern int foo(void);
5479int foo(void) { return 0; }
5480EOF
5481if ! compile_object ""; then
5482 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5483fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005484for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5485 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5486 LD_REL_FLAGS=$i
5487 break
5488 fi
5489done
5490if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5491 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005492fi
5493
Jan Vesely277abf12016-04-29 13:15:23 -04005494##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005495# check for sysmacros.h
5496
5497have_sysmacros=no
5498cat > $TMPC << EOF
5499#include <sys/sysmacros.h>
5500int main(void) {
5501 return makedev(0, 0);
5502}
5503EOF
5504if compile_prog "" "" ; then
5505 have_sysmacros=yes
5506fi
5507
5508##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005509# Veritas HyperScale block driver VxHS
5510# Check if libvxhs is installed
5511
5512if test "$vxhs" != "no" ; then
5513 cat > $TMPC <<EOF
5514#include <stdint.h>
5515#include <qnio/qnio_api.h>
5516
5517void *vxhs_callback;
5518
5519int main(void) {
5520 iio_init(QNIO_VERSION, vxhs_callback);
5521 return 0;
5522}
5523EOF
5524 vxhs_libs="-lvxhs -lssl"
5525 if compile_prog "" "$vxhs_libs" ; then
5526 vxhs=yes
5527 else
5528 if test "$vxhs" = "yes" ; then
5529 feature_not_found "vxhs block device" "Install libvxhs See github"
5530 fi
5531 vxhs=no
5532 fi
5533fi
5534
5535##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005536# check for _Static_assert()
5537
5538have_static_assert=no
5539cat > $TMPC << EOF
5540_Static_assert(1, "success");
5541int main(void) {
5542 return 0;
5543}
5544EOF
5545if compile_prog "" "" ; then
5546 have_static_assert=yes
5547fi
5548
5549##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005550# check for utmpx.h, it is missing e.g. on OpenBSD
5551
5552have_utmpx=no
5553cat > $TMPC << EOF
5554#include <utmpx.h>
5555struct utmpx user_info;
5556int main(void) {
5557 return 0;
5558}
5559EOF
5560if compile_prog "" "" ; then
5561 have_utmpx=yes
5562fi
5563
5564##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005565# checks for sanitizers
5566
Marc-André Lureau247724c2018-01-16 16:11:51 +01005567have_asan=no
5568have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005569have_asan_iface_h=no
5570have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005571
5572if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005573 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005574 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5575 have_asan=yes
5576 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005577
5578 # we could use a simple skeleton for flags checks, but this also
5579 # detect the static linking issue of ubsan, see also:
5580 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5581 cat > $TMPC << EOF
5582#include <stdlib.h>
5583int main(void) {
5584 void *tmp = malloc(10);
5585 return *(int *)(tmp + 2);
5586}
5587EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005588 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5589 have_ubsan=yes
5590 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005591
5592 if check_include "sanitizer/asan_interface.h" ; then
5593 have_asan_iface_h=yes
5594 fi
5595
5596 cat > $TMPC << EOF
5597#include <sanitizer/asan_interface.h>
5598int main(void) {
5599 __sanitizer_start_switch_fiber(0, 0, 0);
5600 return 0;
5601}
5602EOF
5603 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5604 have_asan_iface_fiber=yes
5605 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005606fi
5607
5608##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005609# Docker and cross-compiler support
5610#
5611# This is specifically for building test
5612# cases for foreign architectures, not
5613# cross-compiling QEMU itself.
5614
5615if has "docker"; then
5616 docker=$($python $source_path/tests/docker/docker.py probe)
5617fi
5618
5619##########################################
Junyan He17824402018-07-18 15:47:59 +08005620# check for libpmem
5621
5622if test "$libpmem" != "no"; then
5623 if $pkg_config --exists "libpmem"; then
5624 libpmem="yes"
5625 libpmem_libs=$($pkg_config --libs libpmem)
5626 libpmem_cflags=$($pkg_config --cflags libpmem)
5627 libs_softmmu="$libs_softmmu $libpmem_libs"
5628 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5629 else
5630 if test "$libpmem" = "yes" ; then
5631 feature_not_found "libpmem" "Install nvml or pmdk"
5632 fi
5633 libpmem="no"
5634 fi
5635fi
5636
5637##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005638# End of CC checks
5639# After here, no more $cc or $ld runs
5640
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005641write_c_skeleton
5642
Blue Swirl1d728c32012-05-01 18:45:39 +00005643if test "$gcov" = "yes" ; then
5644 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5645 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005646elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005647 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005648elif test "$debug" = "no"; then
5649 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005650fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005651
Marc-André Lureau247724c2018-01-16 16:11:51 +01005652if test "$have_asan" = "yes"; then
5653 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005654 if test "$have_asan_iface_h" = "no" ; then
5655 echo "ASAN build enabled, but ASAN header missing." \
5656 "Without code annotation, the report may be inferior."
5657 elif test "$have_asan_iface_fiber" = "no" ; then
5658 echo "ASAN build enabled, but ASAN header is too old." \
5659 "Without code annotation, the report may be inferior."
5660 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005661fi
5662if test "$have_ubsan" = "yes"; then
5663 CFLAGS="-fsanitize=undefined $CFLAGS"
5664fi
5665
Peter Lieven6542aa92014-02-03 10:26:13 +01005666##########################################
5667# Do we have libnfs
5668if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005669 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005670 libnfs="yes"
5671 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005672 else
5673 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005674 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005675 fi
5676 libnfs="no"
5677 fi
5678fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005679
Peter Maydell6ca026c2012-07-18 15:10:18 +01005680# Now we've finished running tests it's OK to add -Werror to the compiler flags
5681if test "$werror" = "yes"; then
5682 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5683fi
5684
Juan Quintelae86ecd42009-08-03 14:45:59 +02005685if test "$solaris" = "no" ; then
5686 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005687 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005688 fi
5689fi
5690
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005691# test if pod2man has --utf8 option
5692if pod2man --help | grep -q utf8; then
5693 POD2MAN="pod2man --utf8"
5694else
5695 POD2MAN="pod2man"
5696fi
5697
Blue Swirl952afb72010-09-19 08:36:34 +00005698# Use ASLR, no-SEH and DEP if available
5699if test "$mingw32" = "yes" ; then
5700 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005701 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005702 LDFLAGS="-Wl,$flag $LDFLAGS"
5703 fi
5704 done
5705fi
5706
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005707qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005708qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005709qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005710qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005711
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005712# We can only support ivshmem if we have eventfd
5713if [ "$eventfd" = "yes" ]; then
5714 ivshmem=yes
5715fi
5716
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005717tools=""
5718if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005719 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005720 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5721 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005722 fi
5723 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005724 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005725 fi
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005726 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5727 tools="elf2dmp $tools"
5728 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005729fi
5730if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005731 if test "$linux" = yes; then
5732 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005733 virtfs=yes
5734 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5735 else
5736 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005737 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305738 fi
Andreas Färber17500372012-05-01 01:12:03 +02005739 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005740 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005741 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5742 mpath=yes
5743 else
5744 if test "$mpath" = yes; then
5745 error_exit "Multipath requires libmpathpersist devel"
5746 fi
5747 mpath=no
5748 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005749 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5750 else
5751 if test "$virtfs" = yes; then
5752 error_exit "VirtFS is supported only on Linux"
5753 fi
5754 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005755 if test "$mpath" = yes; then
5756 error_exit "Multipath is supported only on Linux"
5757 fi
5758 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305759 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005760 if test "$xkbcommon" = "yes"; then
5761 tools="qemu-keymap\$(EXESUF) $tools"
5762 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005763fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005764
5765# Probe for guest agent support/options
5766
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005767if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005768 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005769 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005770 guest_agent=yes
5771 elif [ "$guest_agent" != yes ]; then
5772 guest_agent=no
5773 else
5774 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005775 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005776fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005777
Michael Roth9d6bc272015-08-26 10:49:13 -05005778# Guest agent Window MSI package
5779
5780if test "$guest_agent" != yes; then
5781 if test "$guest_agent_msi" = yes; then
5782 error_exit "MSI guest agent package requires guest agent enabled"
5783 fi
5784 guest_agent_msi=no
5785elif test "$mingw32" != "yes"; then
5786 if test "$guest_agent_msi" = "yes"; then
5787 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5788 fi
5789 guest_agent_msi=no
5790elif ! has wixl; then
5791 if test "$guest_agent_msi" = "yes"; then
5792 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5793 fi
5794 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005795else
5796 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5797 # disabled explicitly
5798 if test "$guest_agent_msi" != "no"; then
5799 guest_agent_msi=yes
5800 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005801fi
5802
Michael Roth1a349042015-08-26 11:14:31 -05005803if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005804 if test "$guest_agent_with_vss" = "yes"; then
5805 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5806 fi
5807
5808 if test "$QEMU_GA_MANUFACTURER" = ""; then
5809 QEMU_GA_MANUFACTURER=QEMU
5810 fi
5811
5812 if test "$QEMU_GA_DISTRO" = ""; then
5813 QEMU_GA_DISTRO=Linux
5814 fi
5815
5816 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005817 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005818 fi
5819
Stefan Weil89138852016-05-16 15:10:20 +02005820 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005821
5822 case "$cpu" in
5823 x86_64)
5824 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5825 ;;
5826 i386)
5827 QEMU_GA_MSI_ARCH="-D Arch=32"
5828 ;;
5829 *)
5830 error_exit "CPU $cpu not supported for building installation package"
5831 ;;
5832 esac
5833fi
5834
Paolo Bonzinica35f782010-05-26 16:08:29 +02005835# Mac OS X ships with a broken assembler
5836roms=
5837if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5838 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5839 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005840 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005841 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5842 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5843 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005844 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5845 ld_i386_emulation="$emu"
5846 roms="optionrom"
5847 break
5848 fi
5849 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005850fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005851if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005852 roms="$roms spapr-rtas"
5853fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005854
Christian Borntraeger9933c302013-04-23 01:23:03 +00005855if test "$cpu" = "s390x" ; then
5856 roms="$roms s390-ccw"
5857fi
5858
Richard Henderson964c6fa2013-06-21 19:10:16 -07005859# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005860if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005861 textseg_addr=
5862 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005863 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5864 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005865 textseg_addr=0x60000000
5866 ;;
5867 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005868 # A 256M aligned address, high in the address space, with enough
5869 # room for the code_gen_buffer above it before the stack.
5870 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005871 ;;
5872 esac
5873 if [ -n "$textseg_addr" ]; then
5874 cat > $TMPC <<EOF
5875 int main(void) { return 0; }
5876EOF
5877 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5878 if ! compile_prog "" "$textseg_ldflags"; then
5879 # In case ld does not support -Ttext-segment, edit the default linker
5880 # script via sed to set the .text start addr. This is needed on FreeBSD
5881 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005882 if ! $ld --verbose >/dev/null 2>&1; then
5883 error_exit \
5884 "We need to link the QEMU user mode binaries at a" \
5885 "specific text address. Unfortunately your linker" \
5886 "doesn't support either the -Ttext-segment option or" \
5887 "printing the default linker script with --verbose." \
5888 "If you don't want the user mode binaries, pass the" \
5889 "--disable-user option to configure."
5890 fi
5891
Richard Henderson964c6fa2013-06-21 19:10:16 -07005892 $ld --verbose | sed \
5893 -e '1,/==================================================/d' \
5894 -e '/==================================================/,$d' \
5895 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5896 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5897 textseg_ldflags="-Wl,-T../config-host.ld"
5898 fi
5899 fi
5900fi
5901
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005902# Check that the C++ compiler exists and works with the C compiler.
5903# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5904if has $cxx; then
5905 cat > $TMPC <<EOF
5906int c_function(void);
5907int main(void) { return c_function(); }
5908EOF
5909
5910 compile_object
5911
5912 cat > $TMPCXX <<EOF
5913extern "C" {
5914 int c_function(void);
5915}
5916int c_function(void) { return 42; }
5917EOF
5918
5919 update_cxxflags
5920
5921 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5922 # C++ compiler $cxx works ok with C compiler $cc
5923 :
5924 else
5925 echo "C++ compiler $cxx does not work with C compiler $cc"
5926 echo "Disabling C++ specific optional code"
5927 cxx=
5928 fi
5929else
5930 echo "No C++ compiler available; disabling C++ specific optional code"
5931 cxx=
5932fi
5933
Cole Robinson02d34f62016-05-06 14:03:09 -04005934echo_version() {
5935 if test "$1" = "yes" ; then
5936 echo "($2)"
5937 fi
5938}
5939
Jan Kiszka50e12062014-10-02 10:03:55 +02005940# prepend pixman and ftd flags after all config tests are done
5941QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005942QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005943libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005944
bellard43ce4df2003-06-09 19:53:12 +00005945echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005946echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005947echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005948echo "binary directory $(eval echo $bindir)"
5949echo "library directory $(eval echo $libdir)"
5950echo "module directory $(eval echo $qemu_moddir)"
5951echo "libexec directory $(eval echo $libexecdir)"
5952echo "include directory $(eval echo $includedir)"
5953echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005954if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005955echo "local state directory $(eval echo $local_statedir)"
5956echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005957echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005958else
5959echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005960echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005961fi
bellard5a671352003-10-01 00:13:48 +00005962echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005963echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005964echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005965echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005966echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005967echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005968echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005969echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005970echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005971echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005972echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005973echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005974echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005975echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005976echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005977if test "$slirp" = "yes" ; then
5978 echo "smbd $smbd"
5979fi
Fam Zheng17969262014-02-10 14:48:56 +08005980echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005981echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005982echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005983echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005984echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005985echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005986echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005987echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005988echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005989if test "$darwin" = "yes" ; then
5990 echo "Cocoa support $cocoa"
5991fi
Stefan Weil89138852016-05-16 15:10:20 +02005992echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5993echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005994echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005995echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005996echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005997echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005998echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005999echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01006000echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02006001echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01006002echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006003echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006004echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006005echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006006echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006007echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006008echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006009echo "Block whitelist (rw) $block_drv_rw_whitelist"
6010echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306011echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006012echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006013echo "VNC support $vnc"
6014if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006015 echo "VNC SASL support $vnc_sasl"
6016 echo "VNC JPEG support $vnc_jpeg"
6017 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006018fi
blueswir131422552007-04-16 18:27:06 +00006019if test -n "$sparc_cpu"; then
6020 echo "Target Sparc Arch $sparc_cpu"
6021fi
aliguorie37630c2009-04-22 15:19:10 +00006022echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006023if test "$xen" = "yes" ; then
6024 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00006025 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00006026fi
aurel322e4d9fb2008-04-08 06:01:02 +00006027echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006028echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006029echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006030echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006031echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006032echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006033echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006034echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006035echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006036echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006037echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006038echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006039echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006040echo "TCG support $tcg"
6041if test "$tcg" = "yes" ; then
6042 echo "TCG debug enabled $debug_tcg"
6043 echo "TCG interpreter $tcg_interpreter"
6044fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006045echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006046echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006047echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006048echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006049echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006050echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006051echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006052echo "madvise $madvise"
6053echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006054echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006055echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006056echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006057echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006058echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006059echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006060echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006061echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006062if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006063echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006064fi
Stefan Weil89138852016-05-16 15:10:20 +02006065echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006066echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006067echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006068echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006069echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006070echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006071echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006072echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006073echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006074echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006075echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006076echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006077echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006078echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006079echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006080echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006081echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006082echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006083echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006084echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306085echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006086echo "gcov $gcov_tool"
6087echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006088echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006089echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006090echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006091echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006092echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006093echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006094echo "lzo support $lzo"
6095echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006096echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006097echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006098echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006099echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006100echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006101echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006102echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006103echo "VxHS block device $vxhs"
Richard Henderson8ca80762017-09-14 09:41:12 -07006104echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006105echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006106echo "libpmem support $libpmem"
bellard67b915a2004-03-31 23:37:16 +00006107
Stefan Weil1ba16962011-07-29 22:40:45 +02006108if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006109echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006110fi
bellard97a847b2003-08-10 21:36:04 +00006111
Daniel P. Berrangeb7715af2017-12-12 11:34:40 +00006112if test "$gtkabi" = "2.0"; then
6113 echo
6114 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
6115 echo "WARNING: future releases. Please switch to using GTK 3.0"
6116fi
6117
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006118if test "$sdlabi" = "1.2"; then
6119 echo
6120 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6121 echo "WARNING: future releases. Please switch to using SDL 2.0"
6122fi
6123
Peter Maydell898be3e2017-03-21 14:31:57 +00006124if test "$supported_cpu" = "no"; then
6125 echo
6126 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6127 echo
6128 echo "CPU host architecture $cpu support is not currently maintained."
6129 echo "The QEMU project intends to remove support for this host CPU in"
6130 echo "a future release if nobody volunteers to maintain it and to"
6131 echo "provide a build host for our continuous integration setup."
6132 echo "configure has succeeded and you can continue to build, but"
6133 echo "if you care about QEMU on this platform you should contact"
6134 echo "us upstream at qemu-devel@nongnu.org."
6135fi
6136
6137if test "$supported_os" = "no"; then
6138 echo
6139 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6140 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006141 echo "Host OS $targetos support is not currently maintained."
6142 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006143 echo "a future release if nobody volunteers to maintain it and to"
6144 echo "provide a build host for our continuous integration setup."
6145 echo "configure has succeeded and you can continue to build, but"
6146 echo "if you care about QEMU on this platform you should contact"
6147 echo "us upstream at qemu-devel@nongnu.org."
6148fi
6149
Juan Quintela98ec69a2009-07-16 18:34:18 +02006150config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006151
Stefan Weildbd99ae2013-01-01 18:33:44 +01006152echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6153
Juan Quintela98ec69a2009-07-16 18:34:18 +02006154echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006155echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006156
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006157echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006158echo "prefix=$prefix" >> $config_host_mak
6159echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006160echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006161echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006162echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006163echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006164echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006165echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006166echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006167echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006168echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006169echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006170if test "$mingw32" = "no" ; then
6171 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6172fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006173echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006174echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006175echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006176echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006177echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006178echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006179
Juan Quintela98ec69a2009-07-16 18:34:18 +02006180echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006181
aurel32f8393942009-04-13 18:45:38 +00006182if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006183 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006184fi
aliguori1625af82009-04-05 17:41:02 +00006185if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006186 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006187fi
bellard7d132992003-03-06 23:23:54 +00006188if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006189 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006190fi
bellard67b915a2004-03-31 23:37:16 +00006191if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006192 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006193 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006194 version_major=${rc_version%%.*}
6195 rc_version=${rc_version#*.}
6196 version_minor=${rc_version%%.*}
6197 rc_version=${rc_version#*.}
6198 version_subminor=${rc_version%%.*}
6199 version_micro=0
6200 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6201 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006202 if test "$guest_agent_with_vss" = "yes" ; then
6203 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006204 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006205 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6206 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006207 if test "$guest_agent_ntddscsi" = "yes" ; then
6208 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6209 fi
Michael Roth1a349042015-08-26 11:14:31 -05006210 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006211 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006212 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6213 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6214 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6215 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6216 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6217 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6218 fi
pbrook210fa552007-02-27 21:04:49 +00006219else
Juan Quintela35f4df22009-07-27 16:13:07 +02006220 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006221fi
blueswir1128ab2f2008-08-15 18:33:42 +00006222
Mark McLoughlindffcb712009-10-22 17:49:11 +01006223if test "$linux" = "yes" ; then
6224 echo "CONFIG_LINUX=y" >> $config_host_mak
6225fi
6226
bellard83fb7ad2004-07-05 21:25:26 +00006227if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006228 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006229fi
malcb29fe3e2008-11-18 01:42:22 +00006230
bellardec530c82006-04-25 22:36:06 +00006231if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006232 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006233fi
Andreas Färber179cf402010-09-20 00:50:43 +02006234if test "$haiku" = "yes" ; then
6235 echo "CONFIG_HAIKU=y" >> $config_host_mak
6236fi
bellard97a847b2003-08-10 21:36:04 +00006237if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006238 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006239fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006240if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006241 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006242fi
bellardc20709a2004-04-21 23:27:19 +00006243if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006244 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006245 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006246fi
ths8a16d272008-07-19 09:56:24 +00006247if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006248 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006249 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006250fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006251if test "$netmap" = "yes" ; then
6252 echo "CONFIG_NETMAP=y" >> $config_host_mak
6253fi
Gonglei015a33b2014-07-01 20:58:08 +08006254if test "$l2tpv3" = "yes" ; then
6255 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6256fi
Corey Bryant47e98652012-01-26 09:42:26 -05006257if test "$cap_ng" = "yes" ; then
6258 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6259fi
Juan Quintela2358a492009-07-27 16:13:25 +02006260echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006261for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006262 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006263 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006264 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006265 echo "$def=m" >> $config_host_mak ;;
6266 *)
6267 echo "$def=y" >> $config_host_mak ;;
6268 esac
malc0c58ac12008-06-25 21:04:05 +00006269done
Fam Zhengb1149912017-09-07 16:29:13 +08006270echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6271echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6272echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6273echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6274echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006275if test "$audio_pt_int" = "yes" ; then
6276 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6277fi
malcd5631632009-10-10 01:13:41 +04006278if test "$audio_win_int" = "yes" ; then
6279 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6280fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006281echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6282echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006283if test "$vnc" = "yes" ; then
6284 echo "CONFIG_VNC=y" >> $config_host_mak
6285fi
aliguori2f9606b2009-03-06 20:27:28 +00006286if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006287 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006288fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006289if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006290 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006291fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006292if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006293 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006294fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006295if test "$xkbcommon" = "yes" ; then
6296 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6297 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6298fi
aliguori76655d62009-03-06 20:27:37 +00006299if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006300 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006301fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006302if test "$xfs" = "yes" ; then
6303 echo "CONFIG_XFS=y" >> $config_host_mak
6304fi
Stefan Weil89138852016-05-16 15:10:20 +02006305qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006306echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006307echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006308echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006309echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006310if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006311 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006312fi
Fam Zheng17969262014-02-10 14:48:56 +08006313if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006314 # $shacmd can generate a hash started with digit, which the compiler doesn't
6315 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006316 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006317 echo "CONFIG_MODULES=y" >> $config_host_mak
6318fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006319if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6320 echo "CONFIG_X11=y" >> $config_host_mak
6321 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6322 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6323fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006324if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006325 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006326 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006327 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006328 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006329fi
6330if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006331 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006332fi
6333if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006334 echo "CONFIG_CURSES=m" >> $config_host_mak
6335 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6336 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006337fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006338if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006339 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006340fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006341if test "$accept4" = "yes" ; then
6342 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6343fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306344if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006345 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306346fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006347if test "$eventfd" = "yes" ; then
6348 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6349fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006350if test "$memfd" = "yes" ; then
6351 echo "CONFIG_MEMFD=y" >> $config_host_mak
6352fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006353if test "$fallocate" = "yes" ; then
6354 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6355fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006356if test "$fallocate_punch_hole" = "yes" ; then
6357 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6358fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006359if test "$fallocate_zero_range" = "yes" ; then
6360 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6361fi
Kevin Wolfed911432014-09-29 17:12:59 +02006362if test "$posix_fallocate" = "yes" ; then
6363 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6364fi
Peter Maydellc727f472011-01-06 11:05:10 +00006365if test "$sync_file_range" = "yes" ; then
6366 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6367fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006368if test "$fiemap" = "yes" ; then
6369 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6370fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006371if test "$dup3" = "yes" ; then
6372 echo "CONFIG_DUP3=y" >> $config_host_mak
6373fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006374if test "$ppoll" = "yes" ; then
6375 echo "CONFIG_PPOLL=y" >> $config_host_mak
6376fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006377if test "$prctl_pr_set_timerslack" = "yes" ; then
6378 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6379fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006380if test "$epoll" = "yes" ; then
6381 echo "CONFIG_EPOLL=y" >> $config_host_mak
6382fi
6383if test "$epoll_create1" = "yes" ; then
6384 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6385fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006386if test "$sendfile" = "yes" ; then
6387 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6388fi
Riku Voipio51834342014-06-22 11:25:42 +01006389if test "$timerfd" = "yes" ; then
6390 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6391fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006392if test "$setns" = "yes" ; then
6393 echo "CONFIG_SETNS=y" >> $config_host_mak
6394fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006395if test "$clock_adjtime" = "yes" ; then
6396 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6397fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006398if test "$syncfs" = "yes" ; then
6399 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6400fi
aurel323b3f24a2009-04-15 16:12:13 +00006401if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006402 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006403fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006404if test "$inotify1" = "yes" ; then
6405 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6406fi
Peter Maydell401bc052017-09-05 13:19:32 +01006407if test "$sem_timedwait" = "yes" ; then
6408 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6409fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006410if test "$strchrnul" = "yes" ; then
6411 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6412fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006413if test "$byteswap_h" = "yes" ; then
6414 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6415fi
6416if test "$bswap_h" = "yes" ; then
6417 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6418fi
Alexander Graf769ce762009-05-11 17:41:42 +02006419if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006420 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006421 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006422 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006423fi
aurel322e4d9fb2008-04-08 06:01:02 +00006424if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006425 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006426 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006427fi
balrogfb599c92008-09-28 23:49:55 +00006428if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006429 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006430 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006431fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006432if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006433 echo "CONFIG_GTK=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006434 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006435 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006436 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006437 if test "$gtk_gl" = "yes" ; then
6438 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6439 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006440fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006441echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006442if test "$gnutls" = "yes" ; then
6443 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6444fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09006445if test "$gnutls_rnd" = "yes" ; then
6446 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6447fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006448if test "$gcrypt" = "yes" ; then
6449 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006450 if test "$gcrypt_hmac" = "yes" ; then
6451 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6452 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01006453 if test "$gcrypt_kdf" = "yes" ; then
6454 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6455 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006456fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006457if test "$nettle" = "yes" ; then
6458 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006459 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01006460 if test "$nettle_kdf" = "yes" ; then
6461 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6462 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006463fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006464if test "$tasn1" = "yes" ; then
6465 echo "CONFIG_TASN1=y" >> $config_host_mak
6466fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006467if test "$have_ifaddrs_h" = "yes" ; then
6468 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6469fi
Eric Blake6b39b062016-10-11 10:46:23 -05006470if test "$have_broken_size_max" = "yes" ; then
6471 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6472fi
Jan Vesely277abf12016-04-29 13:15:23 -04006473
6474# Work around a system header bug with some kernel/XFS header
6475# versions where they both try to define 'struct fsxattr':
6476# xfs headers will not try to redefine structs from linux headers
6477# if this macro is set.
6478if test "$have_fsxattr" = "yes" ; then
6479 echo "HAVE_FSXATTR=y" >> $config_host_mak
6480fi
Fam Zheng1efad062018-06-01 17:26:43 +08006481if test "$have_copy_file_range" = "yes" ; then
6482 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6483fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006484if test "$vte" = "yes" ; then
6485 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006486 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006487 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006488fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006489if test "$virglrenderer" = "yes" ; then
6490 echo "CONFIG_VIRGL=y" >> $config_host_mak
6491 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6492 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6493fi
aliguorie37630c2009-04-22 15:19:10 +00006494if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006495 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006496 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006497 if test "$xen_pv_domain_build" = "yes" ; then
6498 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6499 fi
aliguorie37630c2009-04-22 15:19:10 +00006500fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006501if test "$linux_aio" = "yes" ; then
6502 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6503fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006504if test "$attr" = "yes" ; then
6505 echo "CONFIG_ATTR=y" >> $config_host_mak
6506fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006507if test "$libattr" = "yes" ; then
6508 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6509fi
Meador Inge983eef52012-02-24 14:00:42 +05306510if test "$virtfs" = "yes" ; then
6511 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006512fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006513if test "$mpath" = "yes" ; then
6514 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006515 if test "$mpathpersist_new_api" = "yes"; then
6516 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6517 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006518fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006519if test "$vhost_scsi" = "yes" ; then
6520 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6521fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006522if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006523 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6524fi
Gonglei042cea22018-03-01 21:46:28 +08006525if test "$vhost_crypto" = "yes" ; then
6526 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6527fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006528if test "$vhost_vsock" = "yes" ; then
6529 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6530fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006531if test "$vhost_user" = "yes" ; then
6532 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6533fi
ths77755342008-11-27 15:45:16 +00006534if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006535 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006536fi
aliguoribf9298b2008-12-05 20:05:26 +00006537if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006538 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006539fi
aliguoriceb42de2009-04-07 18:43:28 +00006540if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006541 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006542fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006543if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006544 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006545fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006546if test "$membarrier" = "yes" ; then
6547 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6548fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006549if test "$signalfd" = "yes" ; then
6550 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6551fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006552if test "$tcg" = "yes"; then
6553 echo "CONFIG_TCG=y" >> $config_host_mak
6554 if test "$tcg_interpreter" = "yes" ; then
6555 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6556 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006557fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006558if test "$fdatasync" = "yes" ; then
6559 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6560fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006561if test "$madvise" = "yes" ; then
6562 echo "CONFIG_MADVISE=y" >> $config_host_mak
6563fi
6564if test "$posix_madvise" = "yes" ; then
6565 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6566fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006567if test "$posix_memalign" = "yes" ; then
6568 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6569fi
bellard97a847b2003-08-10 21:36:04 +00006570
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006571if test "$spice" = "yes" ; then
6572 echo "CONFIG_SPICE=y" >> $config_host_mak
6573fi
6574
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006575if test "$smartcard" = "yes" ; then
6576 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006577 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6578 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006579fi
6580
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006581if test "$libusb" = "yes" ; then
6582 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006583 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6584 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006585fi
6586
Hans de Goede69354a82011-07-19 11:04:10 +02006587if test "$usb_redir" = "yes" ; then
6588 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006589 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6590 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006591fi
6592
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006593if test "$opengl" = "yes" ; then
6594 echo "CONFIG_OPENGL=y" >> $config_host_mak
6595 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006596 if test "$opengl_dmabuf" = "yes" ; then
6597 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6598 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006599fi
6600
Yang Zhong5a22ab72017-12-20 21:16:46 +08006601if test "$malloc_trim" = "yes" ; then
6602 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6603fi
6604
Liang Li99f2dbd2016-03-08 13:53:16 +08006605if test "$avx2_opt" = "yes" ; then
6606 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6607fi
6608
qiaonuohan607dacd2014-02-18 14:11:30 +08006609if test "$lzo" = "yes" ; then
6610 echo "CONFIG_LZO=y" >> $config_host_mak
6611fi
6612
6613if test "$snappy" = "yes" ; then
6614 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6615fi
6616
Peter Wu6b383c02015-01-06 18:48:14 +01006617if test "$bzip2" = "yes" ; then
6618 echo "CONFIG_BZIP2=y" >> $config_host_mak
6619 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6620fi
6621
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006622if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006623 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006624 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6625 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006626fi
6627
Peter Lieven6542aa92014-02-03 10:26:13 +01006628if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006629 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6630 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006631fi
6632
Eduardo Otubof7945732012-08-14 18:44:05 -03006633if test "$seccomp" = "yes"; then
6634 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006635 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6636 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006637fi
6638
bellard83fb7ad2004-07-05 21:25:26 +00006639# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006640if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006641 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006642fi
6643
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006644if test "$localtime_r" = "yes" ; then
6645 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6646fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006647if test "$qom_cast_debug" = "yes" ; then
6648 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6649fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006650if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006651 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006652 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6653 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006654fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006655
Peter Maydell7c2acc72013-04-08 12:11:27 +01006656echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006657if test "$coroutine_pool" = "yes" ; then
6658 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6659else
6660 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6661fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306662
Peter Lieven7d992e42016-09-27 11:58:45 +02006663if test "$debug_stack_usage" = "yes" ; then
6664 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6665fi
6666
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006667if test "$crypto_afalg" = "yes" ; then
6668 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6669fi
6670
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306671if test "$open_by_handle_at" = "yes" ; then
6672 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6673fi
6674
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306675if test "$linux_magic_h" = "yes" ; then
6676 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6677fi
6678
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006679if test "$pragma_diagnostic_available" = "yes" ; then
6680 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006681fi
6682
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006683if test "$valgrind_h" = "yes" ; then
6684 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6685fi
6686
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006687if test "$have_asan_iface_fiber" = "yes" ; then
6688 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6689fi
6690
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006691if test "$has_environ" = "yes" ; then
6692 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6693fi
6694
Richard Henderson76a347e2012-12-28 14:17:02 -08006695if test "$cpuid_h" = "yes" ; then
6696 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6697fi
6698
Richard Hendersonf5401662013-02-16 12:46:59 -08006699if test "$int128" = "yes" ; then
6700 echo "CONFIG_INT128=y" >> $config_host_mak
6701fi
6702
Richard Henderson7ebee432016-06-29 21:10:59 -07006703if test "$atomic128" = "yes" ; then
6704 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6705fi
6706
Richard Hendersondf79b992016-09-02 12:23:57 -07006707if test "$atomic64" = "yes" ; then
6708 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6709fi
6710
Richard Hendersondb432672017-09-15 14:11:45 -07006711if test "$vector16" = "yes" ; then
6712 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6713fi
6714
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006715if test "$getauxval" = "yes" ; then
6716 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6717fi
6718
Bharata B Raoeb100392012-09-24 14:42:45 +05306719if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006720 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006721 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6722 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306723fi
6724
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006725if test "$glusterfs_xlator_opt" = "yes" ; then
6726 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6727fi
6728
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306729if test "$glusterfs_discard" = "yes" ; then
6730 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6731fi
6732
Niels de Vosdf3a4292017-05-28 12:01:14 +05306733if test "$glusterfs_fallocate" = "yes" ; then
6734 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6735fi
6736
Bharata B Rao7c815372013-12-21 14:51:25 +05306737if test "$glusterfs_zerofill" = "yes" ; then
6738 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6739fi
6740
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006741if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006742 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006743 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6744 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006745fi
6746
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006747if test "$live_block_migration" = "yes" ; then
6748 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6749fi
6750
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006751if test "$tpm" = "yes"; then
6752 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006753 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006754 if test "$tpm_passthrough" = "yes"; then
6755 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6756 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006757 # TPM emulator support?
6758 if test "$tpm_emulator" = "yes"; then
6759 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6760 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006761fi
6762
Lluís Vilanova5b808272014-05-27 15:02:14 +02006763echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6764if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006765 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306766fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006767if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006768 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6769 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006770 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006771fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006772if have_backend "log"; then
6773 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006774fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006775if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006776 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6777fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006778if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006779 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6780 if test "$trace_backend_stap" = "yes" ; then
6781 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6782 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006783fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006784if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006785 if test "$linux" = "yes" ; then
6786 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006787 else
Stewart Smith21684af2014-01-24 12:39:10 +11006788 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006789 fi
6790fi
Paul Durrant0a852412016-08-04 14:44:14 +01006791if have_backend "syslog"; then
6792 if test "$posix_syslog" = "yes" ; then
6793 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6794 else
6795 feature_not_found "syslog(trace backend)" "syslog not available"
6796 fi
6797fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006798echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6799
Michael R. Hines2da776d2013-07-22 10:01:54 -04006800if test "$rdma" = "yes" ; then
6801 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006802 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006803fi
6804
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006805if test "$pvrdma" = "yes" ; then
6806 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6807fi
6808
Laurent Vivier575b22b2016-06-02 22:14:15 +02006809if test "$have_rtnetlink" = "yes" ; then
6810 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6811fi
6812
Klim Kireeved279a02018-01-12 12:01:19 +03006813if test "$libxml2" = "yes" ; then
6814 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6815 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6816 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6817fi
6818
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006819if test "$replication" = "yes" ; then
6820 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6821fi
6822
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006823if test "$have_af_vsock" = "yes" ; then
6824 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6825fi
6826
Christopher Covington4d043512016-12-28 15:04:33 -05006827if test "$have_sysmacros" = "yes" ; then
6828 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6829fi
6830
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006831if test "$have_static_assert" = "yes" ; then
6832 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6833fi
6834
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006835if test "$have_utmpx" = "yes" ; then
6836 echo "HAVE_UTMPX=y" >> $config_host_mak
6837fi
6838
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006839if test "$ivshmem" = "yes" ; then
6840 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6841fi
Richard Hendersone219c492017-09-28 09:01:23 -07006842if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006843 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6844fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006845if test "$debug_mutex" = "yes" ; then
6846 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6847fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006848
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006849# Hold two types of flag:
6850# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6851# a thread we have a handle to
6852# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6853# platform
6854if test "$pthread_setname_np" = "yes" ; then
6855 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6856 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6857fi
6858
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006859if test "$vxhs" = "yes" ; then
6860 echo "CONFIG_VXHS=y" >> $config_host_mak
6861 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6862fi
6863
Junyan He17824402018-07-18 15:47:59 +08006864if test "$libpmem" = "yes" ; then
6865 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6866fi
6867
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006868if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006869 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006870elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006871 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006872elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006873 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006874elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006875 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006876elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006877 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006878else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006879 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006880fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006881QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006882
Juan Quintela98ec69a2009-07-16 18:34:18 +02006883echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006884echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006885echo "MAKE=$make" >> $config_host_mak
6886echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006887echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6888echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006889echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6890echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006891echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006892echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006893if $iasl -h > /dev/null 2>&1; then
6894 echo "IASL=$iasl" >> $config_host_mak
6895fi
Juan Quintela804edf22009-07-27 16:12:49 +02006896echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006897echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006898echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006899echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006900echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006901echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006902echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006903echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006904echo "OBJCOPY=$objcopy" >> $config_host_mak
6905echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006906echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006907echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006908echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006909echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006910echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006911echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006912echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006913echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006914if test "$sparse" = "yes" ; then
6915 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006916 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006917 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006918 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6919 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6920fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006921if test "$cross_prefix" != ""; then
6922 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6923else
6924 echo "AUTOCONF_HOST := " >> $config_host_mak
6925fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006926echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006927echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006928echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006929echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006930echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006931echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006932echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006933echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006934echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006935echo "DSOSUF=$DSOSUF" >> $config_host_mak
6936echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006937echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006938echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6939echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006940echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006941echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006942if test "$gcov" = "yes" ; then
6943 echo "CONFIG_GCOV=y" >> $config_host_mak
6944 echo "GCOV=$gcov_tool" >> $config_host_mak
6945fi
Juan Quintela804edf22009-07-27 16:12:49 +02006946
Alex Bennée51a12b52018-04-04 14:24:39 +01006947if test "$docker" != "no"; then
6948 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6949fi
6950
Peter Maydell6efd7512011-11-30 11:59:04 +00006951# use included Linux headers
6952if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006953 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006954 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006955 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006956 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006957 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02006958 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006959 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006960 ;;
6961 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006962 linux_arch=s390
6963 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006964 aarch64)
6965 linux_arch=arm64
6966 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006967 mips64)
6968 linux_arch=mips
6969 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006970 *)
6971 # For most CPUs the kernel architecture name and QEMU CPU name match.
6972 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006973 ;;
6974 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006975 # For non-KVM architectures we will not have asm headers
6976 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6977 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6978 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006979fi
6980
bellard1d14ffa2005-10-30 18:58:22 +00006981for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006982target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006983config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006984target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006985target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006986
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006987case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02006988 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 +02006989 target_bigendian=yes
6990 ;;
6991esac
bellard97a847b2003-08-10 21:36:04 +00006992target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006993target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006994target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006995target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006996case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006997 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006998 target_softmmu="yes"
6999 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007000 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007001 target_user_only="yes"
7002 target_linux_user="yes"
7003 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007004 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007005 target_user_only="yes"
7006 target_bsd_user="yes"
7007 ;;
pbrook9e407a82007-05-26 16:38:53 +00007008 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007009 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007010 exit 1
7011 ;;
7012esac
ths831b7822007-01-18 20:06:33 +00007013
Alex Bennéed75402b2018-04-04 20:27:05 +01007014target_compiler=""
7015target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007016target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007017
bellard97a847b2003-08-10 21:36:04 +00007018mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007019echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007020
pbrooke5fe0c52006-06-11 13:32:59 +00007021bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007022mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007023interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007024gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007025
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007026TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007027TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007028TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007029
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007030case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007031 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007032 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007033 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007034 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007035 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007036 ;;
7037 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007038 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007039 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007040 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007041 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007042 ;;
7043 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007044 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007045 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007046 ;;
7047 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007048 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007049 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007050 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007051 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007052 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007053 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007054 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007055 aarch64|aarch64_be)
7056 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007057 TARGET_BASE_ARCH=arm
7058 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007059 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007060 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 +01007061 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007062 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007063 ;;
aurel322408a522008-04-20 20:19:44 +00007064 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007065 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007066 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007067 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007068 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007069 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007070 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007071 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007072 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007073 ;;
aurel322408a522008-04-20 20:19:44 +00007074 m68k)
aurel322408a522008-04-20 20:19:44 +00007075 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007076 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007077 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007078 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007079 microblaze|microblazeel)
7080 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007081 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007082 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007083 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007084 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007085 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007086 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007087 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007088 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007089 ;;
7090 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007091 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007092 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007093 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007094 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007095 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007096 ;;
7097 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007098 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007099 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007100 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007101 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007102 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007103 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007104 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007105 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007106 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007107 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007108 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007109 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007110 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007111 TARGET_ARCH=openrisc
7112 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007113 ;;
aurel322408a522008-04-20 20:19:44 +00007114 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007115 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007116 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007117 ;;
aurel322408a522008-04-20 20:19:44 +00007118 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007119 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007120 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307121 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007122 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 +01007123 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007124 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007125 ppc64le)
7126 TARGET_ARCH=ppc64
7127 TARGET_BASE_ARCH=ppc
7128 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307129 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007130 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 +01007131 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007132 ;;
aurel322408a522008-04-20 20:19:44 +00007133 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007134 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007135 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007136 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007137 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007138 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 +01007139 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007140 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007141 riscv32)
7142 TARGET_BASE_ARCH=riscv
7143 TARGET_ABI_DIR=riscv
7144 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007145 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007146 ;;
7147 riscv64)
7148 TARGET_BASE_ARCH=riscv
7149 TARGET_ABI_DIR=riscv
7150 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007151 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007152 ;;
aurel322408a522008-04-20 20:19:44 +00007153 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007154 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007155 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007156 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007157 ;;
7158 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007159 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007160 ;;
7161 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007162 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007163 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007164 ;;
7165 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007166 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007167 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007168 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007169 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007170 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007171 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007172 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007173 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007174 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 +01007175 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007176 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007177 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007178 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007179 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007180 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007181 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007182 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007183 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007184 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007185 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007186 xtensa|xtensaeb)
7187 TARGET_ARCH=xtensa
Max Filippov9fb40342017-03-06 17:17:43 -08007188 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007189 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007190 ;;
aurel322408a522008-04-20 20:19:44 +00007191 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007192 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007193 ;;
7194esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007195# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7196if [ "$TARGET_BASE_ARCH" = "" ]; then
7197 TARGET_BASE_ARCH=$TARGET_ARCH
7198fi
7199
Alex Bennéed75402b2018-04-04 20:27:05 +01007200# Do we have a cross compiler for this target?
7201if has $target_compiler; then
7202
7203 write_c_skeleton
7204
Alex Bennée716a5072018-04-10 12:19:40 +01007205 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007206 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007207 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007208 target_compiler=""
7209 else
7210 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7211 target_compiler_static="n"
7212 fi
7213 else
7214 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7215 target_compiler_static="y"
7216 fi
7217else
7218 target_compiler=""
7219fi
7220
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007221symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7222
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007223upper() {
7224 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7225}
7226
Stefan Weil89138852016-05-16 15:10:20 +02007227target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007228echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007229echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007230echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007231if [ "$TARGET_ABI_DIR" = "" ]; then
7232 TARGET_ABI_DIR=$TARGET_ARCH
7233fi
Juan Quintela25be2102009-10-07 02:41:00 +02007234echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007235if [ "$HOST_VARIANT_DIR" != "" ]; then
7236 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7237fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007238
7239if supported_xen_target $target; then
7240 echo "CONFIG_XEN=y" >> $config_target_mak
7241 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007242 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007243 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007244fi
7245if supported_kvm_target $target; then
7246 echo "CONFIG_KVM=y" >> $config_target_mak
7247 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007248 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007249 if test "$vhost_user" = "yes" ; then
7250 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7251 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007252 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007253fi
7254if supported_hax_target $target; then
7255 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007256fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007257if supported_hvf_target $target; then
7258 echo "CONFIG_HVF=y" >> $config_target_mak
7259fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007260if supported_whpx_target $target; then
7261 echo "CONFIG_WHPX=y" >> $config_target_mak
7262fi
bellardde83cd02003-06-15 20:25:43 +00007263if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007264 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007265fi
7266if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007267 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007268 if test "$mttcg" = "yes" ; then
7269 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7270 fi
bellardde83cd02003-06-15 20:25:43 +00007271fi
bellard997344f2003-10-27 21:10:39 +00007272if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007273 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007274 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007275fi
ths831b7822007-01-18 20:06:33 +00007276if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007277 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007278fi
pbrook56aebc82008-10-11 17:55:29 +00007279list=""
7280if test ! -z "$gdb_xml_files" ; then
7281 for x in $gdb_xml_files; do
7282 list="$list $source_path/gdb-xml/$x"
7283 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007284 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007285fi
bellardde83cd02003-06-15 20:25:43 +00007286
pbrooke5fe0c52006-06-11 13:32:59 +00007287if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007288 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007289fi
blueswir184778502008-10-26 20:33:16 +00007290if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007291 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007292fi
bellard5b0753e2005-03-01 21:37:28 +00007293
Alex Bennéed75402b2018-04-04 20:27:05 +01007294if test -n "$target_compiler"; then
7295 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7296
7297 if test -n "$target_compiler_static"; then
7298 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7299 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007300
7301 if test -n "$target_compiler_cflags"; then
7302 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7303 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007304fi
7305
Alex Bennée716a5072018-04-10 12:19:40 +01007306
Juan Quintela4afddb52009-08-03 14:46:45 +02007307# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007308
Juan Quintela4afddb52009-08-03 14:46:45 +02007309cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007310ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007311
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007312disas_config() {
7313 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7314 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7315}
7316
Juan Quintela64656022009-08-03 14:46:53 +02007317for i in $ARCH $TARGET_BASE_ARCH ; do
7318 case "$i" in
7319 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007320 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007321 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007322 aarch64)
7323 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007324 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007325 fi
7326 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007327 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007328 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007329 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007330 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007331 fi
Juan Quintela64656022009-08-03 14:46:53 +02007332 ;;
7333 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007334 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007335 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007336 hppa)
7337 disas_config "HPPA"
7338 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007339 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007340 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007341 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007342 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007343 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007344 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007345 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007346 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007347 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007348 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007349 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007350 ;;
7351 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007352 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02007353 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007354 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007355 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007356 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007357 nios2)
7358 disas_config "NIOS2"
7359 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007360 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007361 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007362 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007363 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007364 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007365 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007366 riscv)
7367 disas_config "RISCV"
7368 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007369 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007370 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007371 ;;
7372 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007373 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007374 ;;
7375 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007376 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007377 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007378 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007379 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007380 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007381 esac
7382done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007383if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007384 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007385fi
Juan Quintela64656022009-08-03 14:46:53 +02007386
Juan Quintela6ee71262009-08-03 14:46:47 +02007387case "$ARCH" in
7388alpha)
7389 # Ensure there's only a single GP
7390 cflags="-msmall-data $cflags"
7391;;
7392esac
7393
Juan Quintelad02c1db2009-08-03 14:46:50 +02007394if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007395 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007396 if test "$target_linux_user" = "yes" ; then
7397 cflags="-p $cflags"
7398 ldflags="-p $ldflags"
7399 fi
7400 if test "$target_softmmu" = "yes" ; then
7401 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007402 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007403 fi
7404fi
7405
Juan Quintela9b8e1112009-08-03 14:46:46 +02007406if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007407 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007408fi
Juan Quintelafa282482009-07-22 22:37:39 +02007409
Christian Borntraegere9a35912017-08-23 12:16:23 +02007410# Newer kernels on s390 check for an S390_PGSTE program header and
7411# enable the pgste page table extensions in that case. This makes
7412# the vm.allocate_pgste sysctl unnecessary. We enable this program
7413# header if
7414# - we build on s390x
7415# - we build the system emulation for s390x (qemu-system-s390x)
7416# - KVM is enabled
7417# - the linker supports --s390-pgste
7418if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7419 if ld_has --s390-pgste ; then
7420 ldflags="-Wl,--s390-pgste $ldflags"
7421 fi
7422fi
7423
Juan Quintela25be2102009-10-07 02:41:00 +02007424echo "LDFLAGS+=$ldflags" >> $config_target_mak
7425echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007426
bellard97a847b2003-08-10 21:36:04 +00007427done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007428
Alex Bennéed75402b2018-04-04 20:27:05 +01007429if test -n "$enabled_cross_compilers"; then
7430 echo
7431 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7432fi
7433
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007434if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007435 echo "config-host.h: subdir-dtc" >> $config_host_mak
7436fi
Richard Hendersone219c492017-09-28 09:01:23 -07007437if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7438 echo "config-host.h: subdir-capstone" >> $config_host_mak
7439fi
7440if test -n "$LIBCAPSTONE"; then
7441 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7442fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007443
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007444if test "$numa" = "yes"; then
7445 echo "CONFIG_NUMA=y" >> $config_host_mak
7446fi
7447
John Snowfd0e6052015-03-25 18:57:39 -04007448if test "$ccache_cpp2" = "yes"; then
7449 echo "export CCACHE_CPP2=y" >> $config_host_mak
7450fi
7451
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007452# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007453DIRS="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 -05007454DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007455DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007456DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007457DIRS="$DIRS roms/seabios roms/vgabios"
Anthony Liguoric09015d2012-01-10 13:10:42 -06007458FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7459FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02007460FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -05007461FILES="$FILES tests/fp/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007462FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02007463FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007464FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007465FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01007466FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01007467FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07007468for bios_file in \
7469 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007470 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007471 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007472 $source_path/pc-bios/*.rom \
7473 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007474 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007475 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007476 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007477 $source_path/pc-bios/palcode-*
7478do
Stefan Weil89138852016-05-16 15:10:20 +02007479 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007480done
Stefan Weil89138852016-05-16 15:10:20 +02007481for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007482do
Stefan Weil89138852016-05-16 15:10:20 +02007483 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007484done
Su Hang645d3cb2018-08-16 14:05:28 +01007485for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7486do
7487 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7488done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007489mkdir -p $DIRS
7490for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007491 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007492 symlink "$source_path/$f" "$f"
7493 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007494done
Paul Brook1ad21342009-05-19 16:17:58 +01007495
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007496# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007497for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007498 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007499 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007500 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007501 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007502 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007503 echo "CC=$cc" >> $config_mak
7504 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007505 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007506 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007507 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007508 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007509 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007510done
7511
Marc-André Lureaufe310172016-06-15 13:06:00 +02007512# set up tests data directory
Philippe Mathieu-Daudé1b145d52018-06-12 14:34:37 -03007513for tests_subdir in acceptance data; do
7514 if [ ! -e tests/$tests_subdir ]; then
7515 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7516 fi
7517done
Marc-André Lureaufe310172016-06-15 13:06:00 +02007518
Max Reitz76c75602014-05-24 23:24:56 +02007519# set up qemu-iotests in this build directory
7520iotests_common_env="tests/qemu-iotests/common.env"
7521iotests_check="tests/qemu-iotests/check"
7522
7523echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7524echo >> "$iotests_common_env"
7525echo "export PYTHON='$python'" >> "$iotests_common_env"
7526
7527if [ ! -e "$iotests_check" ]; then
7528 symlink "$source_path/$iotests_check" "$iotests_check"
7529fi
7530
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007531# Save the configure command line for later reuse.
7532cat <<EOD >config.status
7533#!/bin/sh
7534# Generated by configure.
7535# Run this file to recreate the current configuration.
7536# Compiler output produced by configure, useful for debugging
7537# configure, is in config.log if it exists.
7538EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007539
7540preserve_env() {
7541 envname=$1
7542
7543 eval envval=\$$envname
7544
7545 if test -n "$envval"
7546 then
7547 echo "$envname='$envval'" >> config.status
7548 echo "export $envname" >> config.status
7549 else
7550 echo "unset $envname" >> config.status
7551 fi
7552}
7553
7554# Preserve various env variables that influence what
7555# features/build target configure will detect
7556preserve_env AR
7557preserve_env AS
7558preserve_env CC
7559preserve_env CPP
7560preserve_env CXX
7561preserve_env INSTALL
7562preserve_env LD
7563preserve_env LD_LIBRARY_PATH
7564preserve_env LIBTOOL
7565preserve_env MAKE
7566preserve_env NM
7567preserve_env OBJCOPY
7568preserve_env PATH
7569preserve_env PKG_CONFIG
7570preserve_env PKG_CONFIG_LIBDIR
7571preserve_env PKG_CONFIG_PATH
7572preserve_env PYTHON
7573preserve_env SDL_CONFIG
7574preserve_env SDL2_CONFIG
7575preserve_env SMBD
7576preserve_env STRIP
7577preserve_env WINDRES
7578
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007579printf "exec" >>config.status
7580printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007581echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007582chmod +x config.status
7583
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007584rm -r "$TMPDIR1"