blob: 8049b71eef5638cb7884dfecd37a11e25422adc1 [file] [log] [blame]
bellard7d132992003-03-06 23:23:54 +00001#!/bin/sh
2#
bellard3ef693a2003-03-23 20:17:16 +00003# qemu configure script (c) 2003 Fabrice Bellard
bellard7d132992003-03-06 23:23:54 +00004#
Peter Maydell8cd05ab2014-05-23 17:07:24 +01005
Cornelia Huck99519e62014-05-28 12:39:17 +02006# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
John Snow5e4dfd32015-10-28 13:56:40 -040011# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
Peter Maydell8cd05ab2014-05-23 17:07:24 +010014# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
bellard7d132992003-03-06 23:23:54 +000025fi
26
Peter Maydell8cd05ab2014-05-23 17:07:24 +010027TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
Don Slutz66518bf2014-01-02 21:12:46 -050029TMPO="${TMPDIR1}/${TMPB}.o"
Peter Maydell9c83ffd2014-02-25 18:27:49 +000030TMPCXX="${TMPDIR1}/${TMPB}.cxx"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010031TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010032TMPMO="${TMPDIR1}/${TMPB}.mo"
bellard7d132992003-03-06 23:23:54 +000033
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020034rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000035
Peter Maydellb48e3612011-11-23 17:26:44 +000036# Print a helpful header at the top of config.log
37echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000038printf "# Configured with:" >> config.log
39printf " '%s'" "$0" "$@" >> config.log
40echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000041echo "#" >> config.log
42
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020043print_error() {
44 (echo
Peter Maydell76ad07a2013-04-08 12:11:26 +010045 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020050 echo) >&2
51}
52
53error_exit() {
54 print_error "$@"
Peter Maydell76ad07a2013-04-08 12:11:26 +010055 exit 1
56}
57
Peter Maydell9c83ffd2014-02-25 18:27:49 +000058do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
Ian Jackson8bbe05d2017-09-25 16:41:03 +010063 if test -n "$BASH_VERSION"; then eval '
64 echo >>config.log "
65funcs: ${FUNCNAME[*]}
66lines: ${BASH_LINENO[*]}"
67 '; fi
Peter Maydell9c83ffd2014-02-25 18:27:49 +000068 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010070 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
75 return 0
76 fi
77 # Don't bother rerunning the compile if we were already using -Werror
78 case "$*" in
79 *-Werror*)
80 return 0
81 ;;
82 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000083 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010085 error_exit "configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010089}
90
Peter Maydell9c83ffd2014-02-25 18:27:49 +000091do_cc() {
92 do_compiler "$cc" "$@"
93}
94
95do_cxx() {
96 do_compiler "$cxx" "$@"
97}
98
99update_cxxflags() {
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
104
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000105 for arg in $QEMU_CFLAGS; do
106 case $arg in
107 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
109 ;;
110 *)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
112 ;;
113 esac
114 done
115}
116
Juan Quintela52166aa2009-08-03 14:46:03 +0200117compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400118 local_cflags="$1"
119 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200120}
121
122compile_prog() {
123 local_cflags="$1"
124 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100125 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200126}
127
Paolo Bonzini11568d62010-12-23 11:43:58 +0100128# symbolically link $1 to $2. Portable version of "ln -sf".
129symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100130 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800131 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100132 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100133}
134
LoĂŻc Minier0dba6192010-01-28 21:26:51 +0000135# check whether a command is available to this shell (may be either an
136# executable or a builtin)
137has() {
138 type "$1" >/dev/null 2>&1
139}
140
141# search for an executable in PATH
142path_of() {
143 local_command="$1"
144 local_ifs="$IFS"
145 local_dir=""
146
147 # pathname has a dir component?
148 if [ "${local_command#*/}" != "$local_command" ]; then
149 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
150 echo "$local_command"
151 return 0
152 fi
153 fi
154 if [ -z "$local_command" ]; then
155 return 1
156 fi
157
158 IFS=:
159 for local_dir in $PATH; do
160 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
161 echo "$local_dir/$local_command"
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 0
164 fi
165 done
166 # not found
167 IFS="${local_ifs:-$(printf ' \t\n')}"
168 return 1
169}
170
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200171have_backend () {
172 echo "$trace_backends" | grep "$1" >/dev/null
173}
174
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200175glob() {
176 eval test -z '"${1#'"$2"'}"'
177}
178
179supported_hax_target() {
180 test "$hax" = "yes" || return 1
181 glob "$1" "*-softmmu" || return 1
182 case "${1%-softmmu}" in
183 i386|x86_64)
184 return 0
185 ;;
186 esac
187 return 1
188}
189
190supported_kvm_target() {
191 test "$kvm" = "yes" || return 1
192 glob "$1" "*-softmmu" || return 1
193 case "${1%-softmmu}:$cpu" in
194 arm:arm | aarch64:aarch64 | \
195 i386:i386 | i386:x86_64 | i386:x32 | \
196 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
197 mips:mips | mipsel:mips | \
Thomas Hutha69dc532018-08-21 13:27:48 +0200198 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200199 s390x:s390x)
200 return 0
201 ;;
202 esac
203 return 1
204}
205
206supported_xen_target() {
207 test "$xen" = "yes" || return 1
208 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200209 # Only i386 and x86_64 provide the xenpv machine.
210 case "${1%-softmmu}" in
211 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200212 return 0
213 ;;
214 esac
215 return 1
216}
217
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500218supported_hvf_target() {
219 test "$hvf" = "yes" || return 1
220 glob "$1" "*-softmmu" || return 1
221 case "${1%-softmmu}" in
222 x86_64)
223 return 0
224 ;;
225 esac
226 return 1
227}
228
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800229supported_whpx_target() {
230 test "$whpx" = "yes" || return 1
231 glob "$1" "*-softmmu" || return 1
232 case "${1%-softmmu}" in
233 i386|x86_64)
234 return 0
235 ;;
236 esac
237 return 1
238}
239
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200240supported_target() {
241 case "$1" in
242 *-softmmu)
243 ;;
244 *-linux-user)
245 if test "$linux" != "yes"; then
246 print_error "Target '$target' is only available on a Linux host"
247 return 1
248 fi
249 ;;
250 *-bsd-user)
251 if test "$bsd" != "yes"; then
252 print_error "Target '$target' is only available on a BSD host"
253 return 1
254 fi
255 ;;
256 *)
257 print_error "Invalid target name '$target'"
258 return 1
259 ;;
260 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200261 test "$tcg" = "yes" && return 0
262 supported_kvm_target "$1" && return 0
263 supported_xen_target "$1" && return 0
264 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500265 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800266 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200267 print_error "TCG disabled, but hardware accelerator not available for '$target'"
268 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200269}
270
Christian Borntraegere9a35912017-08-23 12:16:23 +0200271
272ld_has() {
273 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
274}
275
bellard7d132992003-03-06 23:23:54 +0000276# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200277source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200278cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300279iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000280interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000281static="no"
bellard7d132992003-03-06 23:23:54 +0000282cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000283audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800284block_drv_rw_whitelist=""
285block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000286host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200287libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200288libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200289audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400290audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500291libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100292debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100293stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000294
Daniel P. Berrange92712822017-09-29 11:11:58 +0100295if test -e "$source_path/.git"
296then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100297 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100298 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500299 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
300 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100301else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100302 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100303 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100304
305 if ! test -f "$source_path/ui/keycodemapdb/README"
306 then
307 echo
308 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
309 echo
310 echo "This is not a GIT checkout but module content appears to"
311 echo "be missing. Do not use 'git archive' or GitHub download links"
312 echo "to acquire QEMU source archives. Non-GIT builds are only"
313 echo "supported with source archives linked from:"
314 echo
315 echo " https://www.qemu.org/download/"
316 echo
317 echo "Developers working with GIT can use scripts/archive-source.sh"
318 echo "if they need to create valid source archives."
319 echo
320 exit 1
321 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100322fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100323git="git"
aliguoriac0df512008-12-29 17:14:15 +0000324
Stefan Weilafb63eb2012-09-26 22:04:38 +0200325# Don't accept a target_list environment variable.
326unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100327
328# Default value for a variable defining feature "foo".
329# * foo="no" feature will only be used if --enable-foo arg is given
330# * foo="" feature will be searched for, and if found, will be used
331# unless --disable-foo is given
332# * foo="yes" this value will only be set by --enable-foo flag.
333# feature will searched for,
334# if not found, configure exits with error
335#
336# Always add --enable-foo and --disable-foo command line args.
337# Distributions want to ensure that several features are compiled in, and it
338# is impossible without a --enable-foo that exits if a feature is not found.
339
340bluez=""
341brlapi=""
342curl=""
343curses=""
344docs=""
345fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100346netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100347sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400348sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530349virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200350mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100351vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100352sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100354vnc_sasl=""
355vnc_jpeg=""
356vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200357xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100358xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000359xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000360xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000361xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100362linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500363cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200365libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200367tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100368membarrier=""
Bradd41a75a2011-07-26 23:11:26 -0400369vhost_net="no"
Gonglei042cea22018-03-01 21:46:28 +0800370vhost_crypto="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000371vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100372vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200373vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400374kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100375hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500376hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800377whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400378rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300379pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100380gprof="no"
381debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100382debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100383sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500384fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100385strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200386tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100387bigendian="no"
388mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000389gcov="no"
390gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100391EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800392DSOSUF=".so"
393LDFLAGS_SHARED="-shared"
394modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100395prefix="/usr/local"
396mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300397datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200398firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300399qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100400bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300401libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400402libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200403includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100404sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300405local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100406confsuffix="/qemu"
407slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100408oss_lib=""
409bsd="no"
410linux="no"
411solaris="no"
412profiler="no"
413cocoa="no"
414softmmu="yes"
415linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100416bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100417blobs="yes"
418pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200419pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200420qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300421trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100422trace_file="trace"
423spice=""
424rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200425smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100426libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200427usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100428opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100429opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000430cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100431avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300432zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700433capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200434lzo=""
435snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100436bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200437lzfse=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400438guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400439guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500440guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300441guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400442vss_win32_sdk=""
443win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100444want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100445libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100446libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100447coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200448coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200449debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400450crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300451seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530452glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400453glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530454glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530455glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530456glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600457gtk=""
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. Berrange91bfcdb2015-10-16 16:36:53 +0100461nettle=""
462gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800463gcrypt_hmac="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100464vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200465virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400466tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100467libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100468live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800469numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800470tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200471jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800472replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700473vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100474bochs="yes"
475cloop="yes"
476dmg="yes"
477qcow1="yes"
478vdi="yes"
479vvfat="yes"
480qed="yes"
481parallels="yes"
482sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300483libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100484docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200485debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800486libpmem=""
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200487libudev="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100488
Alex Bennéed75402b2018-04-04 20:27:05 +0100489# cross compilers defaults, can be overridden with --cross-cc-ARCH
490cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100491cross_cc_aarch64_be="$cross_cc_aarch64"
492cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100493cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100494cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100495cross_cc_i386="i386-pc-linux-gnu-gcc"
496cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100497cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100498cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100499
500enabled_cross_compilers=""
501
Peter Maydell898be3e2017-03-21 14:31:57 +0000502supported_cpu="no"
503supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100504bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800505malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000506
aliguoriac0df512008-12-29 17:14:15 +0000507# parse CC options first
508for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200509 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000510 case "$opt" in
511 --cross-prefix=*) cross_prefix="$optarg"
512 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100513 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000514 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400515 --cxx=*) CXX="$optarg"
516 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100517 --source-path=*) source_path="$optarg"
518 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200519 --cpu=*) cpu="$optarg"
520 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100521 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200522 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100523 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100524 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100525 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100526 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200527 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100528 --enable-debug-info) debug_info="yes"
529 ;;
530 --disable-debug-info) debug_info="no"
531 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100532 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
533 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100534 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
535 eval "cross_cc_cflags_${cc_arch}=\$optarg"
536 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100537 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
538 eval "cross_cc_${cc_arch}=\$optarg"
539 ;;
aliguoriac0df512008-12-29 17:14:15 +0000540 esac
541done
aliguoriac0df512008-12-29 17:14:15 +0000542# OS specific
543# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100544# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000545
Peter Maydelle49d0212012-12-07 15:39:13 +0000546# Preferred compiler:
547# ${CC} (if set)
548# ${cross_prefix}gcc (if cross-prefix specified)
549# system compiler
550if test -z "${CC}${cross_prefix}"; then
551 cc="$host_cc"
552else
553 cc="${CC-${cross_prefix}gcc}"
554fi
555
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400556if test -z "${CXX}${cross_prefix}"; then
557 cxx="c++"
558else
559 cxx="${CXX-${cross_prefix}g++}"
560fi
561
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500562ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700563as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700564ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000565cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500566objcopy="${OBJCOPY-${cross_prefix}objcopy}"
567ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800568ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200569nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500570strip="${STRIP-${cross_prefix}strip}"
571windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300572pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
573query_pkg_config() {
574 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
575}
576pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500577sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000578sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000579
Peter Maydell45d285a2013-10-21 21:03:06 +0100580# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
581ARFLAGS="${ARFLAGS-rv}"
582
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200583# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100584# We use -fwrapv to tell the compiler that we require a C dialect where
585# left shift of signed integers is well defined and has the expected
586# 2s-complement style results. (Both clang and gcc agree that it
587# provides these semantics.)
588QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400589QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100590QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200591QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200592QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100593if test "$debug_info" = "yes"; then
594 CFLAGS="-g $CFLAGS"
595 LDFLAGS="-g $LDFLAGS"
596fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200597
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100598# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200599source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100600
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300601# running configure in the source tree?
602# we know that's the case if configure is there.
603if test -f "./configure"; then
604 pwd_is_source_path="y"
605else
606 pwd_is_source_path="n"
607fi
608
aliguoriac0df512008-12-29 17:14:15 +0000609check_define() {
610cat > $TMPC <<EOF
611#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000612#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000613#endif
614int main(void) { return 0; }
615EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200616 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000617}
618
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200619check_include() {
620cat > $TMPC <<EOF
621#include <$1>
622int main(void) { return 0; }
623EOF
624 compile_object
625}
626
John Snow93b25862015-03-25 18:57:37 -0400627write_c_skeleton() {
628 cat > $TMPC <<EOF
629int main(void) { return 0; }
630EOF
631}
632
Peter Maydellbbea4052012-08-14 15:35:34 +0100633if check_define __linux__ ; then
634 targetos="Linux"
635elif check_define _WIN32 ; then
636 targetos='MINGW32'
637elif check_define __OpenBSD__ ; then
638 targetos='OpenBSD'
639elif check_define __sun__ ; then
640 targetos='SunOS'
641elif check_define __HAIKU__ ; then
642 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100643elif check_define __FreeBSD__ ; then
644 targetos='FreeBSD'
645elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
646 targetos='GNU/kFreeBSD'
647elif check_define __DragonFly__ ; then
648 targetos='DragonFly'
649elif check_define __NetBSD__; then
650 targetos='NetBSD'
651elif check_define __APPLE__; then
652 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100653else
Peter Maydell951fedf2017-07-13 16:15:32 +0100654 # This is a fatal error, but don't report it yet, because we
655 # might be going to just print the --help text, or it might
656 # be the result of a missing compiler.
657 targetos='bogus'
658 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100659fi
660
661# Some host OSes need non-standard checks for which CPU to use.
662# Note that these checks are broken for cross-compilation: if you're
663# cross-compiling to one of these OSes then you'll need to specify
664# the correct CPU with the --cpu option.
665case $targetos in
666Darwin)
667 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
668 # run 64-bit userspace code.
669 # If the user didn't specify a CPU explicitly and the kernel says this is
670 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
671 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
672 cpu="x86_64"
673 fi
674 ;;
675SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200676 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100677 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
678 cpu="x86_64"
679 fi
680esac
681
Juan Quintela2ff6b912009-08-03 14:45:55 +0200682if test ! -z "$cpu" ; then
683 # command line argument
684 :
685elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000686 cpu="i386"
687elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700688 if check_define __ILP32__ ; then
689 cpu="x32"
690 else
691 cpu="x86_64"
692 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000693elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000694 if check_define __arch64__ ; then
695 cpu="sparc64"
696 else
697 cpu="sparc"
698 fi
malcfdf7ed92009-01-14 18:39:52 +0000699elif check_define _ARCH_PPC ; then
700 if check_define _ARCH_PPC64 ; then
701 cpu="ppc64"
702 else
703 cpu="ppc"
704 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200705elif check_define __mips__ ; then
706 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200707elif check_define __s390__ ; then
708 if check_define __s390x__ ; then
709 cpu="s390x"
710 else
711 cpu="s390"
712 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000713elif check_define __riscv ; then
714 if check_define _LP64 ; then
715 cpu="riscv64"
716 else
717 cpu="riscv32"
718 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100719elif check_define __arm__ ; then
720 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100721elif check_define __aarch64__ ; then
722 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000723else
Stefan Weil89138852016-05-16 15:10:20 +0200724 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000725fi
726
Peter Maydell359bc952011-12-24 13:07:25 +0000727ARCH=
728# Normalise host CPU name and set ARCH.
729# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000730case "$cpu" in
Alistair Francisc4f80542018-12-19 19:20:19 +0000731 ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000732 cpu="$cpu"
733 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100734 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000735 ;;
bellard7d132992003-03-06 23:23:54 +0000736 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000737 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000738 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100739 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000740 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000741 x86_64|amd64)
742 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000743 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100744 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000745 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100746 armv*b|armv*l|arm)
747 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000748 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100749 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000750 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100751 aarch64)
752 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000753 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100754 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100755 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200756 mips*)
757 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000758 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100759 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200760 ;;
blueswir131422552007-04-16 18:27:06 +0000761 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000762 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100763 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100764 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000765 ;;
bellard7d132992003-03-06 23:23:54 +0000766 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000767 # This will result in either an error or falling back to TCI later
768 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000769 ;;
770esac
Peter Maydell359bc952011-12-24 13:07:25 +0000771if test -z "$ARCH"; then
772 ARCH="$cpu"
773fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200774
bellard7d132992003-03-06 23:23:54 +0000775# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200776
Stacey Sonadfc3e92014-06-08 09:57:22 -0700777# host *BSD for user mode
778HOST_VARIANT_DIR=""
779
bellard7d132992003-03-06 23:23:54 +0000780case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000781MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200782 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100783 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200784 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200785 if check_include dsound.h; then
786 audio_drv_list="dsound"
787 else
788 audio_drv_list=""
789 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000790 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000791;;
ths5c40d2b2007-06-23 16:03:36 +0000792GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100793 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200794 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200795 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000796;;
bellard7d3505c2004-05-12 19:32:15 +0000797FreeBSD)
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"
Juergen Lockf01576f2010-03-25 22:32:16 +0100802 # needed for kinfo_getvmmap(3) in libutil.h
803 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500804 # needed for kinfo_getproc
805 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100806 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700807 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000808 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000809;;
blueswir1c5e97232009-03-07 20:06:23 +0000810DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200811 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100812 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200813 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200814 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700815 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000816;;
bellard7d3505c2004-05-12 19:32:15 +0000817NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200818 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100819 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200820 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200821 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200822 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700823 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200824 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000825;;
826OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200827 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100828 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400829 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200830 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700831 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500832 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000833;;
bellard83fb7ad2004-07-05 21:25:26 +0000834Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200835 bsd="yes"
836 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100837 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500838 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800839 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200840 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200841 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200842 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200843 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200844 cocoa="yes"
845 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200846 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200847 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200848 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100849 # Disable attempts to use ObjectiveC features in os/object.h since they
850 # won't work when we're compiling with gcc as a C compiler.
851 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700852 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000853 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000854;;
bellardec530c82006-04-25 22:36:06 +0000855SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200856 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100857 make="${MAKE-gmake}"
858 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400859 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200860 if test -f /usr/include/sys/soundcard.h ; then
861 audio_drv_list="oss"
862 fi
863 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000864# needed for CMSG_ macros in sys/socket.h
865 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
866# needed for TIOCWIN* defines in termios.h
867 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200868 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200869 solarisnetlibs="-lsocket -lnsl -lresolv"
870 LIBS="$solarisnetlibs $LIBS"
871 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000872;;
Andreas Färber179cf402010-09-20 00:50:43 +0200873Haiku)
874 haiku="yes"
875 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
876 LIBS="-lposix_error_mapper -lnetwork $LIBS"
877;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000878Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200879 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200880 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200881 linux="yes"
882 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200883 kvm="yes"
884 vhost_net="yes"
Gonglei042cea22018-03-01 21:46:28 +0800885 vhost_crypto="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000886 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100887 vhost_vsock="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600888 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000889 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200890 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000891;;
bellard7d132992003-03-06 23:23:54 +0000892esac
893
bellard7d3505c2004-05-12 19:32:15 +0000894if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000895 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200896 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000897 fi
bellard7d3505c2004-05-12 19:32:15 +0000898fi
899
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100900: ${make=${MAKE-make}}
901: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100902: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400903: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100904
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100905# Default objcc to clang if available, otherwise use CC
906if has clang; then
907 objcc=clang
908else
909 objcc="$cc"
910fi
911
Juan Quintela3457a3f2009-08-03 14:46:07 +0200912if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200913 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800914 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200915 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100916 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
917 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100918 # MinGW needs -mthreads for TLS and macro _MT.
919 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100920 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400921 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100922 if compile_prog "" "-liberty" ; then
923 LIBS="-liberty $LIBS"
924 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200925 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200926 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300927 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300928 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200929 bindir="\${prefix}"
930 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200931 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200932 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300933 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200934fi
935
Anthony Liguori487fefd2009-06-11 13:28:25 -0500936werror=""
bellard85aa5182007-11-11 20:17:03 +0000937
bellard7d132992003-03-06 23:23:54 +0000938for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200939 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000940 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000941 --help|-h) show_help=yes
942 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400943 --version|-V) exec cat $source_path/VERSION
944 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000945 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000946 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000947 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000948 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100949 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000950 ;;
aliguoriac0df512008-12-29 17:14:15 +0000951 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000952 ;;
aliguoriac0df512008-12-29 17:14:15 +0000953 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000954 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000955 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000956 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400957 --cxx=*)
958 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200959 --iasl=*) iasl="$optarg"
960 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100961 --objcc=*) objcc="$optarg"
962 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000963 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000964 ;;
pbrook6a882642006-04-17 13:57:12 +0000965 --install=*) install="$optarg"
966 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000967 --python=*) python="$optarg"
968 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000969 --gcov=*) gcov_tool="$optarg"
970 ;;
Brade2d88302011-09-02 16:53:28 -0400971 --smbd=*) smbd="$optarg"
972 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200973 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000974 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100975 --extra-cxxflags=*)
976 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200977 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000978 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100979 --enable-debug-info)
980 ;;
981 --disable-debug-info)
982 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100983 --cross-cc-*)
984 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800985 --enable-modules)
986 modules="yes"
987 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000988 --disable-modules)
989 modules="no"
990 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200991 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000992 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000993 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000994 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200995 --enable-trace-backends=*) trace_backends="$optarg"
996 ;;
997 # XXX: backwards compatibility
998 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100999 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001000 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001001 ;;
bellard7d132992003-03-06 23:23:54 +00001002 --enable-gprof) gprof="yes"
1003 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001004 --enable-gcov) gcov="yes"
1005 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001006 --static)
1007 static="yes"
1008 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001009 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001010 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001011 --mandir=*) mandir="$optarg"
1012 ;;
1013 --bindir=*) bindir="$optarg"
1014 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001015 --libdir=*) libdir="$optarg"
1016 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001017 --libexecdir=*) libexecdir="$optarg"
1018 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001019 --includedir=*) includedir="$optarg"
1020 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001021 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001022 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001023 --with-confsuffix=*) confsuffix="$optarg"
1024 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001025 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001026 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001027 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001028 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001029 --localstatedir=*) local_statedir="$optarg"
1030 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001031 --firmwarepath=*) firmwarepath="$optarg"
1032 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001033 --host=*|--build=*|\
1034 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001035 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001036 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1037 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1038 # These switches are silently ignored, for compatibility with
1039 # autoconf-generated configure scripts. This allows QEMU's
1040 # configure to be used by RPM and similar macros that set
1041 # lots of directory switches by default.
1042 ;;
bellard97a847b2003-08-10 21:36:04 +00001043 --disable-sdl) sdl="no"
1044 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001045 --enable-sdl) sdl="yes"
1046 ;;
Dave Airlie47c03742013-12-10 14:05:51 +10001047 --with-sdlabi=*) sdlabi="$optarg"
1048 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001049 --disable-qom-cast-debug) qom_cast_debug="no"
1050 ;;
1051 --enable-qom-cast-debug) qom_cast_debug="yes"
1052 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301053 --disable-virtfs) virtfs="no"
1054 ;;
1055 --enable-virtfs) virtfs="yes"
1056 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001057 --disable-mpath) mpath="no"
1058 ;;
1059 --enable-mpath) mpath="yes"
1060 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001061 --disable-vnc) vnc="no"
1062 ;;
1063 --enable-vnc) vnc="yes"
1064 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001065 --oss-lib=*) oss_lib="$optarg"
1066 ;;
malc0c58ac12008-06-25 21:04:05 +00001067 --audio-drv-list=*) audio_drv_list="$optarg"
1068 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001069 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001070 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001071 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001072 ;;
aurel32f8393942009-04-13 18:45:38 +00001073 --enable-debug-tcg) debug_tcg="yes"
1074 ;;
1075 --disable-debug-tcg) debug_tcg="no"
1076 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001077 --enable-debug)
1078 # Enable debugging options that aren't excessively noisy
1079 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001080 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001081 debug="yes"
1082 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001083 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001084 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001085 --enable-sanitizers) sanitizers="yes"
1086 ;;
1087 --disable-sanitizers) sanitizers="no"
1088 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001089 --enable-sparse) sparse="yes"
1090 ;;
1091 --disable-sparse) sparse="no"
1092 ;;
aliguori1625af82009-04-05 17:41:02 +00001093 --disable-strip) strip_opt="no"
1094 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001095 --disable-vnc-sasl) vnc_sasl="no"
1096 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001097 --enable-vnc-sasl) vnc_sasl="yes"
1098 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001099 --disable-vnc-jpeg) vnc_jpeg="no"
1100 ;;
1101 --enable-vnc-jpeg) vnc_jpeg="yes"
1102 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001103 --disable-vnc-png) vnc_png="no"
1104 ;;
1105 --enable-vnc-png) vnc_png="yes"
1106 ;;
bellard443f1372004-06-04 11:13:20 +00001107 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001108 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001109 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001110 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001111 --enable-vde) vde="yes"
1112 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001113 --disable-netmap) netmap="no"
1114 ;;
1115 --enable-netmap) netmap="yes"
1116 ;;
aliguorie37630c2009-04-22 15:19:10 +00001117 --disable-xen) xen="no"
1118 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001119 --enable-xen) xen="yes"
1120 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001121 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1122 ;;
1123 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1124 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001125 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1126 ;;
1127 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1128 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001129 --disable-brlapi) brlapi="no"
1130 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001131 --enable-brlapi) brlapi="yes"
1132 ;;
balrogfb599c92008-09-28 23:49:55 +00001133 --disable-bluez) bluez="no"
1134 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001135 --enable-bluez) bluez="yes"
1136 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001137 --disable-kvm) kvm="no"
1138 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001139 --enable-kvm) kvm="yes"
1140 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001141 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001142 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001143 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001144 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001145 --disable-hvf) hvf="no"
1146 ;;
1147 --enable-hvf) hvf="yes"
1148 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001149 --disable-whpx) whpx="no"
1150 ;;
1151 --enable-whpx) whpx="yes"
1152 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001153 --disable-tcg-interpreter) tcg_interpreter="no"
1154 ;;
1155 --enable-tcg-interpreter) tcg_interpreter="yes"
1156 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001157 --disable-cap-ng) cap_ng="no"
1158 ;;
1159 --enable-cap-ng) cap_ng="yes"
1160 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001161 --disable-tcg) tcg="no"
1162 ;;
1163 --enable-tcg) tcg="yes"
1164 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001165 --disable-malloc-trim) malloc_trim="no"
1166 ;;
1167 --enable-malloc-trim) malloc_trim="yes"
1168 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001169 --disable-spice) spice="no"
1170 ;;
1171 --enable-spice) spice="yes"
1172 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001173 --disable-libiscsi) libiscsi="no"
1174 ;;
1175 --enable-libiscsi) libiscsi="yes"
1176 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001177 --disable-libnfs) libnfs="no"
1178 ;;
1179 --enable-libnfs) libnfs="yes"
1180 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001181 --enable-profiler) profiler="yes"
1182 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001183 --disable-cocoa) cocoa="no"
1184 ;;
malcc2de5c92008-06-28 19:13:06 +00001185 --enable-cocoa)
1186 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001187 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001188 ;;
pbrookcad25d62006-03-19 16:31:11 +00001189 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001190 ;;
pbrookcad25d62006-03-19 16:31:11 +00001191 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001192 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001193 --disable-user)
1194 linux_user="no" ;
1195 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001196 ;;
1197 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001198 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001199 ;;
ths831b7822007-01-18 20:06:33 +00001200 --enable-linux-user) linux_user="yes"
1201 ;;
blueswir184778502008-10-26 20:33:16 +00001202 --disable-bsd-user) bsd_user="no"
1203 ;;
1204 --enable-bsd-user) bsd_user="yes"
1205 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001206 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001207 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001208 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001209 ;;
bellard85aa5182007-11-11 20:17:03 +00001210 --enable-werror) werror="yes"
1211 ;;
1212 --disable-werror) werror="no"
1213 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001214 --enable-stack-protector) stack_protector="yes"
1215 ;;
1216 --disable-stack-protector) stack_protector="no"
1217 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001218 --disable-curses) curses="no"
1219 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001220 --enable-curses) curses="yes"
1221 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001222 --disable-curl) curl="no"
1223 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001224 --enable-curl) curl="yes"
1225 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001226 --disable-fdt) fdt="no"
1227 ;;
1228 --enable-fdt) fdt="yes"
1229 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001230 --disable-linux-aio) linux_aio="no"
1231 ;;
1232 --enable-linux-aio) linux_aio="yes"
1233 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001234 --disable-attr) attr="no"
1235 ;;
1236 --enable-attr) attr="yes"
1237 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001238 --disable-membarrier) membarrier="no"
1239 ;;
1240 --enable-membarrier) membarrier="yes"
1241 ;;
ths77755342008-11-27 15:45:16 +00001242 --disable-blobs) blobs="no"
1243 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001244 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001245 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001246 --with-coroutine=*) coroutine="$optarg"
1247 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001248 --disable-coroutine-pool) coroutine_pool="no"
1249 ;;
1250 --enable-coroutine-pool) coroutine_pool="yes"
1251 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001252 --enable-debug-stack-usage) debug_stack_usage="yes"
1253 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001254 --enable-crypto-afalg) crypto_afalg="yes"
1255 ;;
1256 --disable-crypto-afalg) crypto_afalg="no"
1257 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001258 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001259 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001260 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001261 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001262 --disable-vhost-net) vhost_net="no"
1263 ;;
1264 --enable-vhost-net) vhost_net="yes"
1265 ;;
Gonglei042cea22018-03-01 21:46:28 +08001266 --disable-vhost-crypto) vhost_crypto="no"
1267 ;;
1268 --enable-vhost-crypto)
1269 vhost_crypto="yes"
1270 if test "$mingw32" = "yes"; then
1271 error_exit "vhost-crypto isn't available on win32"
1272 fi
1273 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001274 --disable-vhost-scsi) vhost_scsi="no"
1275 ;;
1276 --enable-vhost-scsi) vhost_scsi="yes"
1277 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001278 --disable-vhost-vsock) vhost_vsock="no"
1279 ;;
1280 --enable-vhost-vsock) vhost_vsock="yes"
1281 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001282 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001283 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001284 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001285 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001286 --disable-rbd) rbd="no"
1287 ;;
1288 --enable-rbd) rbd="yes"
1289 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001290 --disable-xfsctl) xfs="no"
1291 ;;
1292 --enable-xfsctl) xfs="yes"
1293 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001294 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001295 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001296 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001297 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001298 --disable-libusb) libusb="no"
1299 ;;
1300 --enable-libusb) libusb="yes"
1301 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001302 --disable-usb-redir) usb_redir="no"
1303 ;;
1304 --enable-usb-redir) usb_redir="yes"
1305 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001306 --disable-zlib-test) zlib="no"
1307 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001308 --disable-lzo) lzo="no"
1309 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001310 --enable-lzo) lzo="yes"
1311 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001312 --disable-snappy) snappy="no"
1313 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001314 --enable-snappy) snappy="yes"
1315 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001316 --disable-bzip2) bzip2="no"
1317 ;;
1318 --enable-bzip2) bzip2="yes"
1319 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001320 --enable-lzfse) lzfse="yes"
1321 ;;
1322 --disable-lzfse) lzfse="no"
1323 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001324 --enable-guest-agent) guest_agent="yes"
1325 ;;
1326 --disable-guest-agent) guest_agent="no"
1327 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001328 --enable-guest-agent-msi) guest_agent_msi="yes"
1329 ;;
1330 --disable-guest-agent-msi) guest_agent_msi="no"
1331 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001332 --with-vss-sdk) vss_win32_sdk=""
1333 ;;
1334 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1335 ;;
1336 --without-vss-sdk) vss_win32_sdk="no"
1337 ;;
1338 --with-win-sdk) win_sdk=""
1339 ;;
1340 --with-win-sdk=*) win_sdk="$optarg"
1341 ;;
1342 --without-win-sdk) win_sdk="no"
1343 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001344 --enable-tools) want_tools="yes"
1345 ;;
1346 --disable-tools) want_tools="no"
1347 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001348 --enable-seccomp) seccomp="yes"
1349 ;;
1350 --disable-seccomp) seccomp="no"
1351 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301352 --disable-glusterfs) glusterfs="no"
1353 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001354 --disable-avx2) avx2_opt="no"
1355 ;;
1356 --enable-avx2) avx2_opt="yes"
1357 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301358 --enable-glusterfs) glusterfs="yes"
1359 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001360 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1361 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001362 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001363 --enable-vhdx|--disable-vhdx)
1364 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1365 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001366 --enable-uuid|--disable-uuid)
1367 echo "$0: $opt is obsolete, UUID support is always built" >&2
1368 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001369 --disable-gtk) gtk="no"
1370 ;;
1371 --enable-gtk) gtk="yes"
1372 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001373 --tls-priority=*) tls_priority="$optarg"
1374 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001375 --disable-gnutls) gnutls="no"
1376 ;;
1377 --enable-gnutls) gnutls="yes"
1378 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001379 --disable-nettle) nettle="no"
1380 ;;
1381 --enable-nettle) nettle="yes"
1382 ;;
1383 --disable-gcrypt) gcrypt="no"
1384 ;;
1385 --enable-gcrypt) gcrypt="yes"
1386 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001387 --enable-rdma) rdma="yes"
1388 ;;
1389 --disable-rdma) rdma="no"
1390 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001391 --enable-pvrdma) pvrdma="yes"
1392 ;;
1393 --disable-pvrdma) pvrdma="no"
1394 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001395 --disable-vte) vte="no"
1396 ;;
1397 --enable-vte) vte="yes"
1398 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001399 --disable-virglrenderer) virglrenderer="no"
1400 ;;
1401 --enable-virglrenderer) virglrenderer="yes"
1402 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001403 --disable-tpm) tpm="no"
1404 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001405 --enable-tpm) tpm="yes"
1406 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001407 --disable-libssh2) libssh2="no"
1408 ;;
1409 --enable-libssh2) libssh2="yes"
1410 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001411 --disable-live-block-migration) live_block_migration="no"
1412 ;;
1413 --enable-live-block-migration) live_block_migration="yes"
1414 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001415 --disable-numa) numa="no"
1416 ;;
1417 --enable-numa) numa="yes"
1418 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001419 --disable-libxml2) libxml2="no"
1420 ;;
1421 --enable-libxml2) libxml2="yes"
1422 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001423 --disable-tcmalloc) tcmalloc="no"
1424 ;;
1425 --enable-tcmalloc) tcmalloc="yes"
1426 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001427 --disable-jemalloc) jemalloc="no"
1428 ;;
1429 --enable-jemalloc) jemalloc="yes"
1430 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001431 --disable-replication) replication="no"
1432 ;;
1433 --enable-replication) replication="yes"
1434 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001435 --disable-vxhs) vxhs="no"
1436 ;;
1437 --enable-vxhs) vxhs="yes"
1438 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001439 --disable-bochs) bochs="no"
1440 ;;
1441 --enable-bochs) bochs="yes"
1442 ;;
1443 --disable-cloop) cloop="no"
1444 ;;
1445 --enable-cloop) cloop="yes"
1446 ;;
1447 --disable-dmg) dmg="no"
1448 ;;
1449 --enable-dmg) dmg="yes"
1450 ;;
1451 --disable-qcow1) qcow1="no"
1452 ;;
1453 --enable-qcow1) qcow1="yes"
1454 ;;
1455 --disable-vdi) vdi="no"
1456 ;;
1457 --enable-vdi) vdi="yes"
1458 ;;
1459 --disable-vvfat) vvfat="no"
1460 ;;
1461 --enable-vvfat) vvfat="yes"
1462 ;;
1463 --disable-qed) qed="no"
1464 ;;
1465 --enable-qed) qed="yes"
1466 ;;
1467 --disable-parallels) parallels="no"
1468 ;;
1469 --enable-parallels) parallels="yes"
1470 ;;
1471 --disable-sheepdog) sheepdog="no"
1472 ;;
1473 --enable-sheepdog) sheepdog="yes"
1474 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001475 --disable-vhost-user) vhost_user="no"
1476 ;;
1477 --enable-vhost-user)
1478 vhost_user="yes"
1479 if test "$mingw32" = "yes"; then
1480 error_exit "vhost-user isn't available on win32"
1481 fi
1482 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001483 --disable-capstone) capstone="no"
1484 ;;
1485 --enable-capstone) capstone="yes"
1486 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001487 --enable-capstone=git) capstone="git"
1488 ;;
1489 --enable-capstone=system) capstone="system"
1490 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001491 --with-git=*) git="$optarg"
1492 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001493 --enable-git-update) git_update=yes
1494 ;;
1495 --disable-git-update) git_update=no
1496 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001497 --enable-debug-mutex) debug_mutex=yes
1498 ;;
1499 --disable-debug-mutex) debug_mutex=no
1500 ;;
Junyan He17824402018-07-18 15:47:59 +08001501 --enable-libpmem) libpmem=yes
1502 ;;
1503 --disable-libpmem) libpmem=no
1504 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001505 *)
1506 echo "ERROR: unknown option $opt"
1507 echo "Try '$0 --help' for more information"
1508 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001509 ;;
bellard7d132992003-03-06 23:23:54 +00001510 esac
1511done
1512
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001513if test "$vhost_user" = ""; then
1514 if test "$mingw32" = "yes"; then
1515 vhost_user="no"
1516 else
1517 vhost_user="yes"
1518 fi
1519fi
1520
bellard40293e52008-01-31 11:32:10 +00001521case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001522 ppc)
1523 CPU_CFLAGS="-m32"
1524 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001525 cross_cc_powerpc=$cc
1526 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001527 ;;
1528 ppc64)
1529 CPU_CFLAGS="-m64"
1530 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001531 cross_cc_ppc64=$cc
1532 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001533 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001534 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001535 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1536 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001537 cross_cc_sparc=$cc
1538 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001539 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001540 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001541 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001542 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001543 cross_cc_sparc64=$cc
1544 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001545 ;;
ths76d83bd2007-11-18 21:22:10 +00001546 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001547 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001548 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001549 cross_cc_s390=$cc
1550 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001551 ;;
1552 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001553 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001554 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001555 cross_cc_s390x=$cc
1556 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001557 ;;
bellard40293e52008-01-31 11:32:10 +00001558 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001559 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001560 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001561 cross_cc_i386=$cc
1562 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001563 ;;
1564 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001565 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1566 # If we truly care, we should simply detect this case at
1567 # runtime and generate the fallback to serial emulation.
1568 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001569 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001570 cross_cc_x86_64=$cc
1571 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001572 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001573 x32)
1574 CPU_CFLAGS="-mx32"
1575 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001576 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001577 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001578 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001579 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001580esac
1581
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001582QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001583
Peter Maydellaffc88c2016-06-13 11:32:24 +01001584# For user-mode emulation the host arch has to be one we explicitly
1585# support, even if we're using TCI.
1586if [ "$ARCH" = "unknown" ]; then
1587 bsd_user="no"
1588 linux_user="no"
1589fi
1590
Peter Maydell60e0df22011-05-03 14:50:13 +01001591default_target_list=""
1592
Peter Maydell6e92f822013-05-20 16:16:15 +01001593mak_wilds=""
1594
1595if [ "$softmmu" = "yes" ]; then
1596 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001597fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001598if [ "$linux_user" = "yes" ]; then
1599 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001600fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001601if [ "$bsd_user" = "yes" ]; then
1602 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001603fi
1604
Peter Maydell6e92f822013-05-20 16:16:15 +01001605for config in $mak_wilds; do
1606 default_target_list="${default_target_list} $(basename "$config" .mak)"
1607done
1608
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001609# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001610trace_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 +01001611
pbrookaf5db582006-04-08 14:26:41 +00001612if test x"$show_help" = x"yes" ; then
1613cat << EOF
1614
1615Usage: configure [options]
1616Options: [defaults in brackets after descriptions]
1617
Stefan Weil08fb77e2013-12-18 22:09:39 +01001618Standard options:
1619 --help print this message
1620 --prefix=PREFIX install in PREFIX [$prefix]
1621 --interp-prefix=PREFIX where to find shared libraries, etc.
1622 use %M for cpu name [$interp_prefix]
1623 --target-list=LIST set target list (default: build everything)
1624$(echo Available targets: $default_target_list | \
1625 fold -s -w 53 | sed -e 's/^/ /')
1626
1627Advanced options (experts only):
1628 --source-path=PATH path of source code [$source_path]
1629 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1630 --cc=CC use C compiler CC [$cc]
1631 --iasl=IASL use ACPI compiler IASL [$iasl]
1632 --host-cc=CC use C compiler CC [$host_cc] for code run at
1633 build time
1634 --cxx=CXX use C++ compiler CXX [$cxx]
1635 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1636 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001637 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001638 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001639 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001640 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001641 --make=MAKE use specified make [$make]
1642 --install=INSTALL use specified install [$install]
1643 --python=PYTHON use specified python [$python]
1644 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001645 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001646 --static enable static build [$static]
1647 --mandir=PATH install man pages in PATH
1648 --datadir=PATH install firmware in PATH$confsuffix
1649 --docdir=PATH install documentation in PATH$confsuffix
1650 --bindir=PATH install binaries in PATH
1651 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001652 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001653 --sysconfdir=PATH install config in PATH$confsuffix
1654 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001655 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001656 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001657 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001658 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001659 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001660 --disable-strip disable stripping binaries
1661 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001662 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001663 --audio-drv-list=LIST set audio drivers list:
1664 Available drivers: $audio_possible_drivers
1665 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1666 --block-drv-rw-whitelist=L
1667 set block driver read-write whitelist
1668 (affects only QEMU, not qemu-img)
1669 --block-drv-ro-whitelist=L
1670 set block driver read-only whitelist
1671 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001672 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001673 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001674 --with-trace-file=NAME Full PATH,NAME of file to store traces
1675 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001676 --disable-slirp disable SLIRP userspace network connectivity
1677 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001678 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001679 --oss-lib path to OSS library
1680 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001681 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001682 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001683 --enable-gcov enable test coverage analysis with gcov
1684 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001685 --disable-blobs disable installing provided firmware blobs
1686 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1687 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001688 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001689 --enable-gprof QEMU profiling with gprof
1690 --enable-profiler profiler support
1691 --enable-xen-pv-domain-build
1692 xen pv domain builder
1693 --enable-debug-stack-usage
1694 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001695
1696Optional features, enabled with --enable-FEATURE and
1697disabled with --disable-FEATURE, default is enabled if available:
1698
1699 system all system emulation targets
1700 user supported user emulation targets
1701 linux-user all linux usermode emulation targets
1702 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001703 docs build documentation
1704 guest-agent build the QEMU Guest Agent
1705 guest-agent-msi build guest agent Windows MSI installation package
1706 pie Position Independent Executables
1707 modules modules support
1708 debug-tcg TCG debugging (default is disabled)
1709 debug-info debugging information
1710 sparse sparse checker
1711
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001712 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001713 nettle nettle cryptography support
1714 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001715 sdl SDL UI
1716 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1717 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001718 vte vte support for the gtk UI
1719 curses curses UI
1720 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001721 vnc-sasl SASL encryption for VNC server
1722 vnc-jpeg JPEG lossy compression for VNC server
1723 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001724 cocoa Cocoa UI (Mac OS X only)
1725 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001726 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001727 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001728 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001729 brlapi BrlAPI (Braile)
1730 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001731 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001732 fdt fdt device tree
1733 bluez bluez stack connectivity
1734 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001735 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001736 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001737 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001738 rdma Enable RDMA-based migration
1739 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001740 vde support for vde network
1741 netmap support for netmap network
1742 linux-aio Linux AIO support
1743 cap-ng libcap-ng support
1744 attr attr and xattr support
1745 vhost-net vhost-net acceleration support
Gonglei042cea22018-03-01 21:46:28 +08001746 vhost-crypto vhost-crypto acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001747 spice spice
1748 rbd rados block device (rbd)
1749 libiscsi iscsi support
1750 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001751 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001752 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001753 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001754 usb-redir usb network redirection support
1755 lzo support of lzo compression library
1756 snappy support of snappy compression library
1757 bzip2 support of bzip2 compression library
1758 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001759 lzfse support of lzfse compression library
1760 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001761 seccomp seccomp support
1762 coroutine-pool coroutine freelist (better performance)
1763 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001764 tpm TPM support
1765 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001766 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001767 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001768 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001769 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001770 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001771 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001772 vhost-vsock virtio sockets device support
1773 opengl opengl support
1774 virglrenderer virgl rendering support
1775 xfsctl xfsctl support
1776 qom-cast-debug cast debugging support
1777 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001778 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001779 bochs bochs image format support
1780 cloop cloop image format support
1781 dmg dmg image format support
1782 qcow1 qcow v1 image format support
1783 vdi vdi image format support
1784 vvfat vvfat image format support
1785 qed qed image format support
1786 parallels parallels image format support
1787 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001788 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001789 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001790 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001791 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001792 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001793
1794NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001795EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001796exit 0
pbrookaf5db582006-04-08 14:26:41 +00001797fi
1798
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001799if ! has $python; then
1800 error_exit "Python not found. Use --python=/path/to/python"
1801fi
1802
1803# Note that if the Python conditional here evaluates True we will exit
1804# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001805if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1806 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001807 "Use --python=/path/to/python to specify a supported Python."
1808fi
1809
1810# Suppress writing compiled files
1811python="$python -B"
1812
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001813# Check that the C compiler works. Doing this here before testing
1814# the host CPU ensures that we had a valid CC to autodetect the
1815# $cpu var (and we should bail right here if that's not the case).
1816# It also allows the help message to be printed without a CC.
1817write_c_skeleton;
1818if compile_object ; then
1819 : C compiler works ok
1820else
1821 error_exit "\"$cc\" either does not exist or does not work"
1822fi
1823if ! compile_prog ; then
1824 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1825fi
1826
Peter Maydell359bc952011-12-24 13:07:25 +00001827# Now we have handled --enable-tcg-interpreter and know we're not just
1828# printing the help message, bail out if the host CPU isn't supported.
1829if test "$ARCH" = "unknown"; then
1830 if test "$tcg_interpreter" = "yes" ; then
1831 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001832 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001833 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001834 fi
1835fi
1836
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001837# Consult white-list to determine whether to enable werror
1838# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001839if test -z "$werror" ; then
1840 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001841 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001842 werror="yes"
1843 else
1844 werror="no"
1845 fi
1846fi
1847
Peter Maydellfb59dab2017-03-28 14:01:52 +01001848if test "$bogus_os" = "yes"; then
1849 # Now that we know that we're not printing the help and that
1850 # the compiler works (so the results of the check_defines we used
1851 # to identify the OS are reliable), if we didn't recognize the
1852 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001853 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001854fi
1855
Thomas Huthefc6c072018-12-03 10:12:32 +01001856# Check whether the compiler matches our minimum requirements:
1857cat > $TMPC << EOF
1858#if defined(__clang_major__) && defined(__clang_minor__)
1859# ifdef __apple_build_version__
1860# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1861# error You need at least XCode Clang v5.1 to compile QEMU
1862# endif
1863# else
1864# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1865# error You need at least Clang v3.4 to compile QEMU
1866# endif
1867# endif
1868#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1869# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1870# error You need at least GCC v4.8 to compile QEMU
1871# endif
1872#else
1873# error You either need GCC or Clang to compiler QEMU
1874#endif
1875int main (void) { return 0; }
1876EOF
1877if ! compile_prog "" "" ; then
1878 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1879fi
1880
Paolo Bonzini8d050952010-12-23 11:43:52 +01001881gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1882gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001883gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001884gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001885gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001886gcc_flags="-Wno-string-plus-int $gcc_flags"
Gerd Hoffmann0e39c4a2018-03-09 14:59:45 +01001887gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001888# Note that we do not add -Werror to gcc_flags here, because that would
1889# enable it for all configure tests. If a configure test failed due
1890# to -Werror this would just silently disable some features,
1891# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001892
1893cc_has_warning_flag() {
1894 write_c_skeleton;
1895
Peter Maydella1d29d62012-10-27 22:19:07 +01001896 # Use the positive sense of the flag when testing for -Wno-wombat
1897 # support (gcc will happily accept the -Wno- form of unknown
1898 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001899 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1900 compile_prog "-Werror $optflag" ""
1901}
1902
1903for flag in $gcc_flags; do
1904 if cc_has_warning_flag $flag ; then
1905 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001906 fi
1907done
1908
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001909if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001910 cat > $TMPC << EOF
1911int main(int argc, char *argv[])
1912{
1913 char arr[64], *p = arr, *c = argv[0];
1914 while (*c) {
1915 *p++ = *c++;
1916 }
1917 return 0;
1918}
1919EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001920 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001921 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001922 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001923 # We need to check both a compile and a link, since some compiler
1924 # setups fail only on a .c->.o compile and some only at link time
1925 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1926 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001927 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001928 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001929 break
1930 fi
1931 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001932 if test "$stack_protector" = yes; then
1933 if test $sp_on = 0; then
1934 error_exit "Stack protector not supported"
1935 fi
1936 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001937fi
1938
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001939# Disable -Wmissing-braces on older compilers that warn even for
1940# the "universal" C zero initializer {0}.
1941cat > $TMPC << EOF
1942struct {
1943 int a[2];
1944} x = {0};
1945EOF
1946if compile_object "-Werror" "" ; then
1947 :
1948else
1949 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1950fi
1951
Thomas Huthd376e9d2018-12-03 11:41:38 +01001952# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001953if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001954 if test "$modules" = "yes" ; then
1955 error_exit "static and modules are mutually incompatible"
1956 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001957 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001958 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001959 else
1960 pie="no"
1961 fi
1962fi
1963
Emilio G. Cota768b7852015-04-29 13:09:02 +02001964# Unconditional check for compiler __thread support
1965 cat > $TMPC << EOF
1966static __thread int tls_var;
1967int main(void) { return tls_var; }
1968EOF
1969
1970if ! compile_prog "-Werror" "" ; then
1971 error_exit "Your compiler does not support the __thread specifier for " \
1972 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1973fi
1974
Avi Kivity40d64442011-11-15 20:12:17 +02001975if test "$pie" = ""; then
1976 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001977 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001978 ;;
1979 *)
1980 pie="no"
1981 ;;
1982 esac
1983fi
1984
1985if test "$pie" != "no" ; then
1986 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001987
1988#ifdef __linux__
1989# define THREAD __thread
1990#else
1991# define THREAD
1992#endif
1993
1994static THREAD int tls_var;
1995
1996int main(void) { return tls_var; }
1997
Avi Kivity40d64442011-11-15 20:12:17 +02001998EOF
1999 if compile_prog "-fPIE -DPIE" "-pie"; then
2000 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2001 LDFLAGS="-pie $LDFLAGS"
2002 pie="yes"
2003 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2004 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2005 fi
2006 else
2007 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002008 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002009 else
2010 echo "Disabling PIE due to missing toolchain support"
2011 pie="no"
2012 fi
2013 fi
Brad46eef332013-12-10 19:49:08 -05002014
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04002015 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002016 CFLAGS_NOPIE="-fno-pie"
2017 LDFLAGS_NOPIE="-nopie"
2018 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002019fi
2020
Paolo Bonzini09dada42013-04-17 16:26:47 +02002021##########################################
2022# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2023# use i686 as default anyway, but for those that don't, an explicit
2024# specification is necessary
2025
2026if test "$cpu" = "i386"; then
2027 cat > $TMPC << EOF
2028static int sfaa(int *ptr)
2029{
2030 return __sync_fetch_and_and(ptr, 0);
2031}
2032
2033int main(void)
2034{
2035 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002036 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002037 sfaa(&val);
2038 return val;
2039}
2040EOF
2041 if ! compile_prog "" "" ; then
2042 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2043 fi
2044fi
2045
2046#########################################
bellardec530c82006-04-25 22:36:06 +00002047# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002048
bellardec530c82006-04-25 22:36:06 +00002049if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002050 if has $install; then
2051 :
2052 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002053 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2054 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2055 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002056 fi
Stefan Weil89138852016-05-16 15:10:20 +02002057 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002058 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2059 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2060 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002061 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002062 if has ar; then
2063 :
2064 else
bellardec530c82006-04-25 22:36:06 +00002065 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002066 error_exit "No path includes ar" \
2067 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002068 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002069 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002070 fi
ths5fafdf22007-09-16 21:08:06 +00002071fi
bellardec530c82006-04-25 22:36:06 +00002072
Stefan Weilafb63eb2012-09-26 22:04:38 +02002073if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002074 for target in $default_target_list; do
2075 supported_target $target 2>/dev/null && \
2076 target_list="$target_list $target"
2077 done
2078 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002079else
Stefan Weil89138852016-05-16 15:10:20 +02002080 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002081 for target in $target_list; do
2082 # Check that we recognised the target name; this allows a more
2083 # friendly error message than if we let it fall through.
2084 case " $default_target_list " in
2085 *" $target "*)
2086 ;;
2087 *)
2088 error_exit "Unknown target name '$target'"
2089 ;;
2090 esac
2091 supported_target $target || exit 1
2092 done
bellard5327cf42005-01-10 23:18:50 +00002093fi
Peter Maydell25b48332013-05-20 16:16:16 +01002094
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002095# see if system emulation was really requested
2096case " $target_list " in
2097 *"-softmmu "*) softmmu=yes
2098 ;;
2099 *) softmmu=no
2100 ;;
2101esac
bellard5327cf42005-01-10 23:18:50 +00002102
Juan Quintela249247c2009-08-12 18:20:25 +02002103feature_not_found() {
2104 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002105 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002106
Peter Maydell76ad07a2013-04-08 12:11:26 +01002107 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002108 "configure was not able to find it." \
2109 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002110}
2111
bellard7d132992003-03-06 23:23:54 +00002112# ---
2113# big/little endian test
2114cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002115short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2116short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2117extern int foo(short *, short *);
2118int main(int argc, char *argv[]) {
2119 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002120}
2121EOF
2122
Mike Frysinger61cc9192013-06-30 23:30:18 -04002123if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002124 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002125 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002126 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002127 bigendian="no"
2128 else
2129 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002130 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002131else
2132 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002133fi
2134
Juan Quintelab0a47e72009-08-12 18:29:49 +02002135##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002136# cocoa implies not SDL or GTK
2137# (the cocoa UI code currently assumes it is always the active UI
2138# and doesn't interact well with other UI frontend code)
2139if test "$cocoa" = "yes"; then
2140 if test "$sdl" = "yes"; then
2141 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2142 fi
2143 if test "$gtk" = "yes"; then
2144 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2145 fi
2146 gtk=no
2147 sdl=no
2148fi
2149
Eric Blake6b39b062016-10-11 10:46:23 -05002150# Some versions of Mac OS X incorrectly define SIZE_MAX
2151cat > $TMPC << EOF
2152#include <stdint.h>
2153#include <stdio.h>
2154int main(int argc, char *argv[]) {
2155 return printf("%zu", SIZE_MAX);
2156}
2157EOF
2158have_broken_size_max=no
2159if ! compile_object -Werror ; then
2160 have_broken_size_max=yes
2161fi
2162
Peter Maydella30878e2015-08-14 16:10:52 +01002163##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002164# L2TPV3 probe
2165
2166cat > $TMPC <<EOF
2167#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002168#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002169int main(void) { return sizeof(struct mmsghdr); }
2170EOF
2171if compile_prog "" "" ; then
2172 l2tpv3=yes
2173else
2174 l2tpv3=no
2175fi
2176
2177##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002178# MinGW / Mingw-w64 localtime_r/gmtime_r check
2179
2180if test "$mingw32" = "yes"; then
2181 # Some versions of MinGW / Mingw-w64 lack localtime_r
2182 # and gmtime_r entirely.
2183 #
2184 # Some versions of Mingw-w64 define a macro for
2185 # localtime_r/gmtime_r.
2186 #
2187 # Some versions of Mingw-w64 will define functions
2188 # for localtime_r/gmtime_r, but only if you have
2189 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2190 # though, unistd.h and pthread.h both define
2191 # that for you.
2192 #
2193 # So this #undef localtime_r and #include <unistd.h>
2194 # are not in fact redundant.
2195cat > $TMPC << EOF
2196#include <unistd.h>
2197#include <time.h>
2198#undef localtime_r
2199int main(void) { localtime_r(NULL, NULL); return 0; }
2200EOF
2201 if compile_prog "" "" ; then
2202 localtime_r="yes"
2203 else
2204 localtime_r="no"
2205 fi
2206fi
2207
2208##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002209# pkg-config probe
2210
2211if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002212 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002213fi
2214
2215##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002216# NPTL probe
2217
Peter Maydell24cb36a2013-07-16 18:45:00 +01002218if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002219 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002220#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002221#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002222int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002223#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2224#error bork
2225#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002226 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002227}
2228EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002229 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002230 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002231 fi
pbrookbd0c5662008-05-29 14:34:11 +00002232fi
2233
balrogac629222008-10-11 09:56:04 +00002234##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002235# lzo check
2236
2237if test "$lzo" != "no" ; then
2238 cat > $TMPC << EOF
2239#include <lzo/lzo1x.h>
2240int main(void) { lzo_version(); return 0; }
2241EOF
2242 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002243 libs_softmmu="$libs_softmmu -llzo2"
2244 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002245 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002246 if test "$lzo" = "yes"; then
2247 feature_not_found "liblzo2" "Install liblzo2 devel"
2248 fi
2249 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002250 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002251fi
2252
2253##########################################
2254# snappy check
2255
2256if test "$snappy" != "no" ; then
2257 cat > $TMPC << EOF
2258#include <snappy-c.h>
2259int main(void) { snappy_max_compressed_length(4096); return 0; }
2260EOF
2261 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002262 libs_softmmu="$libs_softmmu -lsnappy"
2263 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002264 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002265 if test "$snappy" = "yes"; then
2266 feature_not_found "libsnappy" "Install libsnappy devel"
2267 fi
2268 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002269 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002270fi
2271
2272##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002273# bzip2 check
2274
2275if test "$bzip2" != "no" ; then
2276 cat > $TMPC << EOF
2277#include <bzlib.h>
2278int main(void) { BZ2_bzlibVersion(); return 0; }
2279EOF
2280 if compile_prog "" "-lbz2" ; then
2281 bzip2="yes"
2282 else
2283 if test "$bzip2" = "yes"; then
2284 feature_not_found "libbzip2" "Install libbzip2 devel"
2285 fi
2286 bzip2="no"
2287 fi
2288fi
2289
2290##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002291# lzfse check
2292
2293if test "$lzfse" != "no" ; then
2294 cat > $TMPC << EOF
2295#include <lzfse.h>
2296int main(void) { lzfse_decode_scratch_size(); return 0; }
2297EOF
2298 if compile_prog "" "-llzfse" ; then
2299 lzfse="yes"
2300 else
2301 if test "$lzfse" = "yes"; then
2302 feature_not_found "lzfse" "Install lzfse devel"
2303 fi
2304 lzfse="no"
2305 fi
2306fi
2307
2308##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002309# libseccomp check
2310
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002311libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002312if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002313 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002314 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002315 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002316 arm|aarch64)
2317 libseccomp_minver="2.2.3"
2318 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002319 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002320 libseccomp_minver="2.3.0"
2321 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002322 *)
2323 libseccomp_minver=""
2324 ;;
2325 esac
2326
2327 if test "$libseccomp_minver" != "" &&
2328 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002329 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2330 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002331 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002332 else
Andrew Jones693e5912015-09-30 11:59:18 -04002333 if test "$seccomp" = "yes" ; then
2334 if test "$libseccomp_minver" != "" ; then
2335 feature_not_found "libseccomp" \
2336 "Install libseccomp devel >= $libseccomp_minver"
2337 else
2338 feature_not_found "libseccomp" \
2339 "libseccomp is not supported for host cpu $cpu"
2340 fi
2341 fi
2342 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002343 fi
2344fi
2345##########################################
aliguorie37630c2009-04-22 15:19:10 +00002346# xen probe
2347
Juan Quintelafc321b42009-08-12 18:29:55 +02002348if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002349 # Check whether Xen library path is specified via --extra-ldflags to avoid
2350 # overriding this setting with pkg-config output. If not, try pkg-config
2351 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002352
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002353 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2354 $pkg_config --exists xencontrol ; then
2355 xen_ctrl_version="$(printf '%d%02d%02d' \
2356 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2357 xen=yes
2358 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2359 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002360 if $pkg_config --exists xentoolcore; then
2361 xen_pc="$xen_pc xentoolcore"
2362 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002363 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2364 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2365 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2366 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002367
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002368 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002369 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002370
2371 # First we test whether Xen headers and libraries are available.
2372 # If no, we are done and there is no Xen support.
2373 # If yes, more tests are run to detect the Xen version.
2374
2375 # Xen (any)
2376 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002377#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002378int main(void) {
2379 return 0;
2380}
2381EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002382 if ! compile_prog "" "$xen_libs" ; then
2383 # Xen not found
2384 if test "$xen" = "yes" ; then
2385 feature_not_found "xen" "Install xen devel"
2386 fi
2387 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002388
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002389 # Xen unstable
2390 elif
2391 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002392#undef XC_WANT_COMPAT_DEVICEMODEL_API
2393#define __XEN_TOOLS__
2394#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002395#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002396int main(void) {
2397 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002398 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002399
2400 xd = xendevicemodel_open(0, 0);
2401 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2402
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002403 xfmem = xenforeignmemory_open(0, 0);
2404 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2405
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002406 return 0;
2407}
2408EOF
2409 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2410 then
2411 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2412 xen_ctrl_version=41100
2413 xen=yes
2414 elif
2415 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002416#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2417#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002418#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002419int main(void) {
2420 xenforeignmemory_handle *xfmem;
2421
2422 xfmem = xenforeignmemory_open(0, 0);
2423 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002424 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002425
2426 return 0;
2427}
2428EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002429 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002430 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002431 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002432 xen_ctrl_version=41000
2433 xen=yes
2434 elif
2435 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002436#undef XC_WANT_COMPAT_DEVICEMODEL_API
2437#define __XEN_TOOLS__
2438#include <xendevicemodel.h>
2439int main(void) {
2440 xendevicemodel_handle *xd;
2441
2442 xd = xendevicemodel_open(0, 0);
2443 xendevicemodel_close(xd);
2444
2445 return 0;
2446}
2447EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002448 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2449 then
2450 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2451 xen_ctrl_version=40900
2452 xen=yes
2453 elif
2454 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002455/*
2456 * If we have stable libs the we don't want the libxc compat
2457 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002458 *
2459 * Also, check if xengnttab_grant_copy_segment_t is defined and
2460 * grant copy operation is implemented.
2461 */
2462#undef XC_WANT_COMPAT_EVTCHN_API
2463#undef XC_WANT_COMPAT_GNTTAB_API
2464#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2465#include <xenctrl.h>
2466#include <xenstore.h>
2467#include <xenevtchn.h>
2468#include <xengnttab.h>
2469#include <xenforeignmemory.h>
2470#include <stdint.h>
2471#include <xen/hvm/hvm_info_table.h>
2472#if !defined(HVM_MAX_VCPUS)
2473# error HVM_MAX_VCPUS not defined
2474#endif
2475int main(void) {
2476 xc_interface *xc = NULL;
2477 xenforeignmemory_handle *xfmem;
2478 xenevtchn_handle *xe;
2479 xengnttab_handle *xg;
2480 xen_domain_handle_t handle;
2481 xengnttab_grant_copy_segment_t* seg = NULL;
2482
2483 xs_daemon_open();
2484
2485 xc = xc_interface_open(0, 0, 0);
2486 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2487 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2488 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2489 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2490 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2491
2492 xfmem = xenforeignmemory_open(0, 0);
2493 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2494
2495 xe = xenevtchn_open(0, 0);
2496 xenevtchn_fd(xe);
2497
2498 xg = xengnttab_open(0, 0);
2499 xengnttab_grant_copy(xg, 0, seg);
2500
2501 return 0;
2502}
2503EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002504 compile_prog "" "$xen_libs $xen_stable_libs"
2505 then
2506 xen_ctrl_version=40800
2507 xen=yes
2508 elif
2509 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002510/*
2511 * If we have stable libs the we don't want the libxc compat
2512 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002513 */
2514#undef XC_WANT_COMPAT_EVTCHN_API
2515#undef XC_WANT_COMPAT_GNTTAB_API
2516#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2517#include <xenctrl.h>
2518#include <xenstore.h>
2519#include <xenevtchn.h>
2520#include <xengnttab.h>
2521#include <xenforeignmemory.h>
2522#include <stdint.h>
2523#include <xen/hvm/hvm_info_table.h>
2524#if !defined(HVM_MAX_VCPUS)
2525# error HVM_MAX_VCPUS not defined
2526#endif
2527int main(void) {
2528 xc_interface *xc = NULL;
2529 xenforeignmemory_handle *xfmem;
2530 xenevtchn_handle *xe;
2531 xengnttab_handle *xg;
2532 xen_domain_handle_t handle;
2533
2534 xs_daemon_open();
2535
2536 xc = xc_interface_open(0, 0, 0);
2537 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2538 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2539 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2540 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2541 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2542
2543 xfmem = xenforeignmemory_open(0, 0);
2544 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2545
2546 xe = xenevtchn_open(0, 0);
2547 xenevtchn_fd(xe);
2548
2549 xg = xengnttab_open(0, 0);
2550 xengnttab_map_grant_ref(xg, 0, 0, 0);
2551
2552 return 0;
2553}
2554EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002555 compile_prog "" "$xen_libs $xen_stable_libs"
2556 then
2557 xen_ctrl_version=40701
2558 xen=yes
2559 elif
2560 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002561#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002562#include <stdint.h>
2563int main(void) {
2564 xc_interface *xc = NULL;
2565 xen_domain_handle_t handle;
2566 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2567 return 0;
2568}
2569EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002570 compile_prog "" "$xen_libs"
2571 then
2572 xen_ctrl_version=40700
2573 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002574
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002575 # Xen 4.6
2576 elif
2577 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002578#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002579#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002580#include <stdint.h>
2581#include <xen/hvm/hvm_info_table.h>
2582#if !defined(HVM_MAX_VCPUS)
2583# error HVM_MAX_VCPUS not defined
2584#endif
2585int main(void) {
2586 xc_interface *xc;
2587 xs_daemon_open();
2588 xc = xc_interface_open(0, 0, 0);
2589 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2590 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002591 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002592 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002593 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002594 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002595 return 0;
2596}
2597EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002598 compile_prog "" "$xen_libs"
2599 then
2600 xen_ctrl_version=40600
2601 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002602
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002603 # Xen 4.5
2604 elif
2605 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002606#include <xenctrl.h>
2607#include <xenstore.h>
2608#include <stdint.h>
2609#include <xen/hvm/hvm_info_table.h>
2610#if !defined(HVM_MAX_VCPUS)
2611# error HVM_MAX_VCPUS not defined
2612#endif
2613int main(void) {
2614 xc_interface *xc;
2615 xs_daemon_open();
2616 xc = xc_interface_open(0, 0, 0);
2617 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2618 xc_gnttab_open(NULL, 0);
2619 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2620 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002621 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2622 return 0;
2623}
2624EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002625 compile_prog "" "$xen_libs"
2626 then
2627 xen_ctrl_version=40500
2628 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002629
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002630 elif
2631 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002632#include <xenctrl.h>
2633#include <xenstore.h>
2634#include <stdint.h>
2635#include <xen/hvm/hvm_info_table.h>
2636#if !defined(HVM_MAX_VCPUS)
2637# error HVM_MAX_VCPUS not defined
2638#endif
2639int main(void) {
2640 xc_interface *xc;
2641 xs_daemon_open();
2642 xc = xc_interface_open(0, 0, 0);
2643 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2644 xc_gnttab_open(NULL, 0);
2645 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2646 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002647 return 0;
2648}
2649EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002650 compile_prog "" "$xen_libs"
2651 then
2652 xen_ctrl_version=40200
2653 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002654
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002655 else
2656 if test "$xen" = "yes" ; then
2657 feature_not_found "xen (unsupported version)" \
2658 "Install a supported xen (xen 4.2 or newer)"
2659 fi
2660 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002661 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002662
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002663 if test "$xen" = yes; then
2664 if test $xen_ctrl_version -ge 40701 ; then
2665 libs_softmmu="$xen_stable_libs $libs_softmmu"
2666 fi
2667 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002668 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002669 fi
aliguorie37630c2009-04-22 15:19:10 +00002670fi
2671
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002672if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002673 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002674 xen_pci_passthrough=yes
2675 else
2676 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002677 error_exit "User requested feature Xen PCI Passthrough" \
2678 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002679 fi
2680 xen_pci_passthrough=no
2681 fi
2682fi
2683
Ian Campbell64a7ad62016-01-15 13:23:44 +00002684if test "$xen_pv_domain_build" = "yes" &&
2685 test "$xen" != "yes"; then
2686 error_exit "User requested Xen PV domain builder support" \
2687 "which requires Xen support."
2688fi
2689
aliguorie37630c2009-04-22 15:19:10 +00002690##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002691# Windows Hypervisor Platform accelerator (WHPX) check
2692if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002693 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002694 whpx="yes"
2695 else
2696 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002697 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002698 fi
2699 whpx="no"
2700 fi
2701fi
2702
2703##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002704# Sparse probe
2705if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002706 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002707 sparse=yes
2708 else
2709 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002710 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002711 fi
2712 sparse=no
2713 fi
2714fi
2715
2716##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002717# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002718if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002719 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002720 x11_cflags=$($pkg_config --cflags x11)
2721 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002722fi
2723
2724##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002725# GTK probe
2726
2727if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002728 gtkpackage="gtk+-3.0"
2729 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002730 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002731 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002732 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2733 gtk_libs=$($pkg_config --libs $gtkpackage)
2734 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002735 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002736 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002737 gtk_cflags="$gtk_cflags $x11_cflags"
2738 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002739 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002740 gtk="yes"
2741 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002742 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002743 else
2744 gtk="no"
2745 fi
2746fi
2747
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002748
2749##########################################
2750# GNUTLS probe
2751
2752if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002753 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002754 gnutls_cflags=$($pkg_config --cflags gnutls)
2755 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002756 libs_softmmu="$gnutls_libs $libs_softmmu"
2757 libs_tools="$gnutls_libs $libs_tools"
2758 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2759 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002760 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002761 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002762 else
2763 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002764 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002765fi
2766
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002767
2768# If user didn't give a --disable/enable-gcrypt flag,
2769# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002770# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002771if test -z "$gcrypt"
2772then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002773 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002774 then
2775 gcrypt="no"
2776 fi
2777fi
2778
2779# If user didn't give a --disable/enable-nettle flag,
2780# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002781# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002782if test -z "$nettle"
2783then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002784 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002785 then
2786 nettle="no"
2787 fi
2788fi
2789
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002790has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002791 if ! has "libgcrypt-config"
2792 then
2793 return 1
2794 fi
2795
2796 if test -n "$cross_prefix"
2797 then
Stefan Weil89138852016-05-16 15:10:20 +02002798 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002799 if test "$host-" != $cross_prefix
2800 then
2801 return 1
2802 fi
2803 fi
2804
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002805 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2806 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2807
2808 if test $maj != 1 || test $min -lt 5
2809 then
2810 return 1
2811 fi
2812
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002813 return 0
2814}
2815
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002816
2817if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002818 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002819 nettle_cflags=$($pkg_config --cflags nettle)
2820 nettle_libs=$($pkg_config --libs nettle)
2821 nettle_version=$($pkg_config --modversion nettle)
2822 libs_softmmu="$nettle_libs $libs_softmmu"
2823 libs_tools="$nettle_libs $libs_tools"
2824 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2825 nettle="yes"
2826
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002827 if test -z "$gcrypt"; then
2828 gcrypt="no"
2829 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002830 else
2831 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002832 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002833 else
2834 nettle="no"
2835 fi
2836 fi
2837fi
2838
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002839if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002840 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002841 gcrypt_cflags=$(libgcrypt-config --cflags)
2842 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002843 # Debian has remove -lgpg-error from libgcrypt-config
2844 # as it "spreads unnecessary dependencies" which in
2845 # turn breaks static builds...
2846 if test "$static" = "yes"
2847 then
2848 gcrypt_libs="$gcrypt_libs -lgpg-error"
2849 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002850 libs_softmmu="$gcrypt_libs $libs_softmmu"
2851 libs_tools="$gcrypt_libs $libs_tools"
2852 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002853 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002854
2855 cat > $TMPC << EOF
2856#include <gcrypt.h>
2857int main(void) {
2858 gcry_mac_hd_t handle;
2859 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2860 GCRY_MAC_FLAG_SECURE, NULL);
2861 return 0;
2862}
2863EOF
2864 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2865 gcrypt_hmac=yes
2866 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002867 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002868 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002869 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002870 else
2871 gcrypt="no"
2872 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002873 fi
2874fi
2875
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002876
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002877if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2878then
2879 error_exit "Only one of gcrypt & nettle can be enabled"
2880fi
2881
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002882##########################################
2883# libtasn1 - only for the TLS creds/session test suite
2884
2885tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002886tasn1_cflags=""
2887tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002888if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002889 tasn1_cflags=$($pkg_config --cflags libtasn1)
2890 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002891else
2892 tasn1=no
2893fi
2894
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002895
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002896##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002897# getifaddrs (for tests/test-io-channel-socket )
2898
2899have_ifaddrs_h=yes
2900if ! check_include "ifaddrs.h" ; then
2901 have_ifaddrs_h=no
2902fi
2903
2904##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002905# VTE probe
2906
2907if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002908 vteminversion="0.32.0"
2909 if $pkg_config --exists "vte-2.91"; then
2910 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002911 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002912 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002913 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002914 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002915 vte_cflags=$($pkg_config --cflags $vtepackage)
2916 vte_libs=$($pkg_config --libs $vtepackage)
2917 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002918 vte="yes"
2919 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002920 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002921 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002922 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002923 fi
2924fi
2925
2926##########################################
bellard11d9f692004-04-02 20:55:59 +00002927# SDL probe
2928
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002929# Look for sdl configuration program (pkg-config or sdl-config). Try
2930# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002931
Peter Xuc6093a02018-04-10 13:40:34 +08002932sdl_probe ()
2933{
2934 sdl_too_old=no
2935 if test "$sdlabi" = ""; then
2936 if $pkg_config --exists "sdl2"; then
2937 sdlabi=2.0
2938 elif $pkg_config --exists "sdl"; then
2939 sdlabi=1.2
2940 else
2941 sdlabi=2.0
2942 fi
LoĂŻc Miniera0dfd8a2010-01-28 21:15:18 +00002943 fi
bellard11d9f692004-04-02 20:55:59 +00002944
Peter Xuc6093a02018-04-10 13:40:34 +08002945 if test $sdlabi = "2.0"; then
2946 sdl_config=$sdl2_config
2947 sdlname=sdl2
2948 sdlconfigname=sdl2_config
2949 elif test $sdlabi = "1.2"; then
2950 sdlname=sdl
2951 sdlconfigname=sdl_config
2952 else
2953 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2954 fi
2955
2956 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2957 sdl_config=$sdlconfigname
2958 fi
2959
2960 if $pkg_config $sdlname --exists; then
2961 sdlconfig="$pkg_config $sdlname"
2962 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2963 elif has ${sdl_config}; then
2964 sdlconfig="$sdl_config"
2965 sdlversion=$($sdlconfig --version)
2966 else
2967 if test "$sdl" = "yes" ; then
2968 feature_not_found "sdl" "Install SDL2-devel"
2969 fi
2970 sdl=no
2971 # no need to do the rest
2972 return
2973 fi
2974 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2975 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2976 fi
2977
Juan Quintelaac119f92009-07-27 16:13:15 +02002978 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002979#include <SDL.h>
2980#undef main /* We don't want SDL to override our main() */
2981int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2982EOF
Stefan Weil89138852016-05-16 15:10:20 +02002983 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002984 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002985 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002986 if $pkg_config $sdlname --exists; then
2987 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2988 else
2989 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2990 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002991 else
Stefan Weil89138852016-05-16 15:10:20 +02002992 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002993 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002994 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002995 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002996 sdl_too_old=yes
2997 else
Peter Maydella30878e2015-08-14 16:10:52 +01002998 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002999 fi
aliguoricd01b4a2008-08-21 19:25:45 +00003000
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003001 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02003002 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003003 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003004 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3005 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003006 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003007 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003008 :
3009 else
3010 sdl=no
3011 fi
3012 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003013 else # sdl not found
3014 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003015 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003016 fi
3017 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003018 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003019}
3020
3021if test "$sdl" != "no" ; then
3022 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003023fi
bellard11d9f692004-04-02 20:55:59 +00003024
aliguori5368a422009-03-03 17:37:21 +00003025if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003026 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003027#include <SDL.h>
3028#if defined(SDL_VIDEO_DRIVER_X11)
3029#include <X11/XKBlib.h>
3030#else
3031#error No x11 support
3032#endif
3033int main(void) { return 0; }
3034EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003035 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003036 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003037 sdl_cflags="$sdl_cflags $x11_cflags"
3038 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003039 fi
aliguori5368a422009-03-03 17:37:21 +00003040fi
3041
ths8f28f3f2007-01-05 21:25:54 +00003042##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003043# RDMA needs OpenFabrics libraries
3044if test "$rdma" != "no" ; then
3045 cat > $TMPC <<EOF
3046#include <rdma/rdma_cma.h>
3047int main(void) { return 0; }
3048EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003049 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003050 if compile_prog "" "$rdma_libs" ; then
3051 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003052 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003053 else
3054 if test "$rdma" = "yes" ; then
3055 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003056 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003057 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003058 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003059 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3060 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3061 fi
3062 rdma="no"
3063 fi
3064fi
3065
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003066##########################################
3067# PVRDMA detection
3068
3069cat > $TMPC <<EOF &&
3070#include <sys/mman.h>
3071
3072int
3073main(void)
3074{
3075 char buf = 0;
3076 void *addr = &buf;
3077 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3078
3079 return 0;
3080}
3081EOF
3082
3083if test "$rdma" = "yes" ; then
3084 case "$pvrdma" in
3085 "")
3086 if compile_prog "" ""; then
3087 pvrdma="yes"
3088 else
3089 pvrdma="no"
3090 fi
3091 ;;
3092 "yes")
3093 if ! compile_prog "" ""; then
3094 error_exit "PVRDMA is not supported since mremap is not implemented"
3095 fi
3096 pvrdma="yes"
3097 ;;
3098 "no")
3099 pvrdma="no"
3100 ;;
3101 esac
3102else
3103 if test "$pvrdma" = "yes" ; then
3104 error_exit "PVRDMA requires rdma suppport"
3105 fi
3106 pvrdma="no"
3107fi
ths8d5d2d42007-08-25 01:37:51 +00003108
3109##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003110# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003111if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003112 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003113#include <sasl/sasl.h>
3114#include <stdio.h>
3115int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3116EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003117 # Assuming Cyrus-SASL installed in /usr prefix
3118 vnc_sasl_cflags=""
3119 vnc_sasl_libs="-lsasl2"
3120 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3121 vnc_sasl=yes
3122 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003123 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003124 else
3125 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003126 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003127 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003128 vnc_sasl=no
3129 fi
aliguori2f9606b2009-03-06 20:27:28 +00003130fi
3131
3132##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003133# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003134if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003135cat > $TMPC <<EOF
3136#include <stdio.h>
3137#include <jpeglib.h>
3138int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3139EOF
3140 vnc_jpeg_cflags=""
3141 vnc_jpeg_libs="-ljpeg"
3142 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3143 vnc_jpeg=yes
3144 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003145 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003146 else
3147 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003148 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003149 fi
3150 vnc_jpeg=no
3151 fi
3152fi
3153
3154##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003155# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003156if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003157cat > $TMPC <<EOF
3158//#include <stdio.h>
3159#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003160#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003161int main(void) {
3162 png_structp png_ptr;
3163 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003164 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003165}
3166EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003167 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003168 vnc_png_cflags=$($pkg_config libpng --cflags)
3169 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003170 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003171 vnc_png_cflags=""
3172 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003173 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003174 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3175 vnc_png=yes
3176 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003177 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003178 else
3179 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003180 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003181 fi
3182 vnc_png=no
3183 fi
3184fi
3185
3186##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003187# xkbcommon probe
3188if test "$xkbcommon" != "no" ; then
3189 if $pkg_config xkbcommon --exists; then
3190 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3191 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3192 xkbcommon=yes
3193 else
3194 if test "$xkbcommon" = "yes" ; then
3195 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3196 fi
3197 xkbcommon=no
3198 fi
3199fi
3200
3201##########################################
aliguori76655d62009-03-06 20:27:37 +00003202# fnmatch() probe, used for ACL routines
3203fnmatch="no"
3204cat > $TMPC << EOF
3205#include <fnmatch.h>
3206int main(void)
3207{
3208 fnmatch("foo", "foo", 0);
3209 return 0;
3210}
3211EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003212if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003213 fnmatch="yes"
3214fi
3215
3216##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003217# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003218if test "$xfs" != "no" ; then
3219 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003220#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003221#include <xfs/xfs.h>
3222int main(void)
3223{
3224 xfsctl(NULL, 0, 0, NULL);
3225 return 0;
3226}
3227EOF
3228 if compile_prog "" "" ; then
3229 xfs="yes"
3230 else
3231 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003232 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003233 fi
3234 xfs=no
3235 fi
3236fi
3237
3238##########################################
ths8a16d272008-07-19 09:56:24 +00003239# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003240if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003241 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003242 cat > $TMPC << EOF
3243#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003244int main(void)
3245{
3246 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003247 char s[] = "";
3248 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003249 return 0;
3250}
ths8a16d272008-07-19 09:56:24 +00003251EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003252 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003253 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003254 else
3255 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003256 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003257 fi
3258 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003259 fi
ths8a16d272008-07-19 09:56:24 +00003260fi
3261
3262##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003263# netmap support probe
3264# Apart from looking for netmap headers, we make sure that the host API version
3265# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3266# a minor/major version number. Minor new features will be marked with values up
3267# to 15, and if something happens that requires a change to the backend we will
3268# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003269if test "$netmap" != "no" ; then
3270 cat > $TMPC << EOF
3271#include <inttypes.h>
3272#include <net/if.h>
3273#include <net/netmap.h>
3274#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003275#if (NETMAP_API < 11) || (NETMAP_API > 15)
3276#error
3277#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003278int main(void) { return 0; }
3279EOF
3280 if compile_prog "" "" ; then
3281 netmap=yes
3282 else
3283 if test "$netmap" = "yes" ; then
3284 feature_not_found "netmap"
3285 fi
3286 netmap=no
3287 fi
3288fi
3289
3290##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003291# libcap-ng library probe
3292if test "$cap_ng" != "no" ; then
3293 cap_libs="-lcap-ng"
3294 cat > $TMPC << EOF
3295#include <cap-ng.h>
3296int main(void)
3297{
3298 capng_capability_to_name(CAPNG_EFFECTIVE);
3299 return 0;
3300}
3301EOF
3302 if compile_prog "" "$cap_libs" ; then
3303 cap_ng=yes
3304 libs_tools="$cap_libs $libs_tools"
3305 else
3306 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003307 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003308 fi
3309 cap_ng=no
3310 fi
3311fi
3312
3313##########################################
malcc2de5c92008-06-28 19:13:06 +00003314# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003315
malcc2de5c92008-06-28 19:13:06 +00003316audio_drv_probe()
3317{
3318 drv=$1
3319 hdr=$2
3320 lib=$3
3321 exp=$4
3322 cfl=$5
3323 cat > $TMPC << EOF
3324#include <$hdr>
3325int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003326EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003327 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003328 :
3329 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003330 error_exit "$drv check failed" \
3331 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003332 fi
3333}
3334
Stefan Weil89138852016-05-16 15:10:20 +02003335audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003336for drv in $audio_drv_list; do
3337 case $drv in
3338 alsa)
3339 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003340 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003341 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003342 ;;
3343
malcb8e59f12008-07-02 21:03:08 +00003344 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003345 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3346 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003347 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003348 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003349 ;;
3350
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003351 sdl)
3352 if test "$sdl" = "no"; then
3353 error_exit "sdl not found or disabled, can not use sdl audio driver"
3354 fi
3355 ;;
3356
Juan Quintela997e6902009-08-03 14:46:29 +02003357 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003358 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003359 ;;
3360
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003361 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003362 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003363 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003364 ;;
3365
3366 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003367 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003368 ;;
3369
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003370 wav)
3371 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003372 ;;
3373
malce4c63a62008-07-19 16:15:16 +00003374 *)
malc1c9b2a52008-07-19 16:57:30 +00003375 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003376 error_exit "Unknown driver '$drv' selected" \
3377 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003378 }
3379 ;;
malcc2de5c92008-06-28 19:13:06 +00003380 esac
3381done
ths8f28f3f2007-01-05 21:25:54 +00003382
balrog4d3b6f62008-02-10 16:33:14 +00003383##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003384# BrlAPI probe
3385
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003386if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003387 brlapi_libs="-lbrlapi"
3388 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003389#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003390#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003391int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3392EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003393 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003394 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003395 else
3396 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003397 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003398 fi
3399 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003400 fi
3401fi
aurel322e4d9fb2008-04-08 06:01:02 +00003402
3403##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003404# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003405if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003406 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003407 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3408 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003409 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003410 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003411 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003412 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003413 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003414 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003415#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003416#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003417#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003418int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003419 wchar_t wch = L'w';
3420 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003421 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003422 addwstr(L"wide chars\n");
3423 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003424 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003425 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003426}
balrog4d3b6f62008-02-10 16:33:14 +00003427EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003428 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003429 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003430 # Make sure we get the wide character prototypes
3431 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003432 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003433 for curses_lib in $curses_lib_list; do
3434 unset IFS
3435 if compile_prog "$curses_inc" "$curses_lib" ; then
3436 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003437 break
3438 fi
3439 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003440 if test "$curses_found" = yes ; then
3441 break
3442 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003443 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003444 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003445 if test "$curses_found" = "yes" ; then
3446 curses=yes
3447 else
3448 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003449 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003450 fi
3451 curses=no
3452 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003453fi
balrog4d3b6f62008-02-10 16:33:14 +00003454
blueswir1414f0da2008-08-15 18:20:52 +00003455##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003456# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003457if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003458 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003459 curlconfig="$pkg_config libcurl"
3460 else
3461 curlconfig=curl-config
3462 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003463 cat > $TMPC << EOF
3464#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003465int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003466EOF
Stefan Weil89138852016-05-16 15:10:20 +02003467 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3468 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003469 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003470 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003471 else
3472 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003473 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003474 fi
3475 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003476 fi
3477fi # test "$curl"
3478
3479##########################################
balrogfb599c92008-09-28 23:49:55 +00003480# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003481if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003482 cat > $TMPC << EOF
3483#include <bluetooth/bluetooth.h>
3484int main(void) { return bt_error(0); }
3485EOF
Stefan Weil89138852016-05-16 15:10:20 +02003486 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3487 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003488 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003489 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003490 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003491 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003492 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003493 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003494 fi
balroge820e3f2008-09-30 02:27:44 +00003495 bluez="no"
3496 fi
balrogfb599c92008-09-28 23:49:55 +00003497fi
3498
3499##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003500# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003501
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003502glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003503glib_modules=gthread-2.0
3504if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003505 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003506fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003507
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003508# This workaround is required due to a bug in pkg-config file for glib as it
3509# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3510
3511if test "$static" = yes -a "$mingw32" = yes; then
3512 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3513fi
3514
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003515for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003516 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003517 glib_cflags=$($pkg_config --cflags $i)
3518 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003519 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003520 LIBS="$glib_libs $LIBS"
3521 libs_qga="$glib_libs $libs_qga"
3522 else
3523 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3524 fi
3525done
3526
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003527# Sanity check that the current size_t matches the
3528# size that glib thinks it should be. This catches
3529# problems on multi-arch where people try to build
3530# 32-bit QEMU while pointing at 64-bit glib headers
3531cat > $TMPC <<EOF
3532#include <glib.h>
3533#include <unistd.h>
3534
3535#define QEMU_BUILD_BUG_ON(x) \
3536 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3537
3538int main(void) {
3539 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3540 return 0;
3541}
3542EOF
3543
Stefan Weil5919e032016-04-28 23:33:41 +02003544if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003545 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3546 "You probably need to set PKG_CONFIG_LIBDIR"\
3547 "to point to the right pkg-config files for your"\
3548 "build target"
3549fi
3550
John Snowbbbf2e02015-03-25 18:57:38 -04003551# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3552cat > $TMPC << EOF
3553#include <glib.h>
3554int main(void) { return 0; }
3555EOF
3556if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3557 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3558 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3559 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3560 fi
3561fi
3562
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003563#########################################
3564# zlib check
3565
3566if test "$zlib" != "no" ; then
3567 if $pkg_config --exists zlib; then
3568 zlib_cflags=$($pkg_config --cflags zlib)
3569 zlib_libs=$($pkg_config --libs zlib)
3570 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3571 LIBS="$zlib_libs $LIBS"
3572 else
3573 cat > $TMPC << EOF
3574#include <zlib.h>
3575int main(void) { zlibVersion(); return 0; }
3576EOF
3577 if compile_prog "" "-lz" ; then
3578 LIBS="$LIBS -lz"
3579 else
3580 error_exit "zlib check failed" \
3581 "Make sure to have the zlib libs and headers installed."
3582 fi
3583 fi
3584fi
3585
Fam Zhenge26110c2014-02-10 14:48:57 +08003586##########################################
3587# SHA command probe for modules
3588if test "$modules" = yes; then
3589 shacmd_probe="sha1sum sha1 shasum"
3590 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003591 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003592 shacmd="$c"
3593 break
3594 fi
3595 done
3596 if test "$shacmd" = ""; then
3597 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3598 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003599fi
3600
3601##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003602# pixman support probe
3603
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003604if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003605 pixman_cflags=
3606 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003607elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003608 pixman_cflags=$($pkg_config --cflags pixman-1)
3609 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003610else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003611 error_exit "pixman >= 0.21.8 not present." \
3612 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003613fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003614
3615##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003616# libmpathpersist probe
3617
3618if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003619 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003620 cat > $TMPC <<EOF
3621#include <libudev.h>
3622#include <mpath_persist.h>
3623unsigned mpath_mx_alloc_len = 1024;
3624int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003625static struct config *multipath_conf;
3626extern struct udev *udev;
3627extern struct config *get_multipath_config(void);
3628extern void put_multipath_config(struct config *conf);
3629struct udev *udev;
3630struct config *get_multipath_config(void) { return multipath_conf; }
3631void put_multipath_config(struct config *conf) { }
3632
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003633int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003634 udev = udev_new();
3635 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003636 return 0;
3637}
3638EOF
3639 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3640 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003641 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003642 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003643 # probe for the old API
3644 cat > $TMPC <<EOF
3645#include <libudev.h>
3646#include <mpath_persist.h>
3647unsigned mpath_mx_alloc_len = 1024;
3648int logsink;
3649int main(void) {
3650 struct udev *udev = udev_new();
3651 mpath_lib_init(udev);
3652 return 0;
3653}
3654EOF
3655 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3656 mpathpersist=yes
3657 mpathpersist_new_api=no
3658 else
3659 mpathpersist=no
3660 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003661 fi
3662else
3663 mpathpersist=no
3664fi
3665
3666##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303667# libcap probe
3668
3669if test "$cap" != "no" ; then
3670 cat > $TMPC <<EOF
3671#include <stdio.h>
3672#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003673int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303674EOF
3675 if compile_prog "" "-lcap" ; then
3676 cap=yes
3677 else
3678 cap=no
3679 fi
3680fi
3681
3682##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003683# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003684PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003685
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003686pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003687cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003688#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003689static void *f(void *p) { return NULL; }
3690int main(void) {
3691 pthread_t thread;
3692 pthread_create(&thread, 0, f, 0);
3693 return 0;
3694}
blueswir1414f0da2008-08-15 18:20:52 +00003695EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003696if compile_prog "" "" ; then
3697 pthread=yes
3698else
3699 for pthread_lib in $PTHREADLIBS_LIST; do
3700 if compile_prog "" "$pthread_lib" ; then
3701 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003702 found=no
3703 for lib_entry in $LIBS; do
3704 if test "$lib_entry" = "$pthread_lib"; then
3705 found=yes
3706 break
3707 fi
3708 done
3709 if test "$found" = "no"; then
3710 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003711 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003712 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003713 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003714 break
3715 fi
3716 done
3717fi
blueswir1414f0da2008-08-15 18:20:52 +00003718
Anthony Liguori4617e592009-08-25 17:21:56 -05003719if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003720 error_exit "pthread check failed" \
3721 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003722fi
3723
Roman Bolshakov479a5742018-12-17 23:26:01 +03003724# check for pthread_setname_np with thread id
3725pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003726cat > $TMPC << EOF
3727#include <pthread.h>
3728
3729static void *f(void *p) { return NULL; }
3730int main(void)
3731{
3732 pthread_t thread;
3733 pthread_create(&thread, 0, f, 0);
3734 pthread_setname_np(thread, "QEMU");
3735 return 0;
3736}
3737EOF
3738if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003739 pthread_setname_np_w_tid=yes
3740fi
3741
3742# check for pthread_setname_np without thread id
3743pthread_setname_np_wo_tid=no
3744cat > $TMPC << EOF
3745#include <pthread.h>
3746
3747static void *f(void *p) { pthread_setname_np("QEMU"); }
3748int main(void)
3749{
3750 pthread_t thread;
3751 pthread_create(&thread, 0, f, 0);
3752 return 0;
3753}
3754EOF
3755if compile_prog "" "$pthread_lib" ; then
3756 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003757fi
3758
aliguoribf9298b2008-12-05 20:05:26 +00003759##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003760# rbd probe
3761if test "$rbd" != "no" ; then
3762 cat > $TMPC <<EOF
3763#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003764#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003765int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003766 rados_t cluster;
3767 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003768 return 0;
3769}
3770EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003771 rbd_libs="-lrbd -lrados"
3772 if compile_prog "" "$rbd_libs" ; then
3773 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003774 else
3775 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003776 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003777 fi
3778 rbd=no
3779 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003780fi
3781
3782##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003783# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003784min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003785if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003786 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003787 libssh2_cflags=$($pkg_config libssh2 --cflags)
3788 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003789 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003790 else
3791 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003792 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003793 fi
3794 libssh2=no
3795 fi
3796fi
3797
3798##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003799# libssh2_sftp_fsync probe
3800
3801if test "$libssh2" = "yes"; then
3802 cat > $TMPC <<EOF
3803#include <stdio.h>
3804#include <libssh2.h>
3805#include <libssh2_sftp.h>
3806int main(void) {
3807 LIBSSH2_SESSION *session;
3808 LIBSSH2_SFTP *sftp;
3809 LIBSSH2_SFTP_HANDLE *sftp_handle;
3810 session = libssh2_session_init ();
3811 sftp = libssh2_sftp_init (session);
3812 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3813 libssh2_sftp_fsync (sftp_handle);
3814 return 0;
3815}
3816EOF
3817 # libssh2_cflags/libssh2_libs defined in previous test.
3818 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3819 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3820 fi
3821fi
3822
3823##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003824# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003825
3826if test "$linux_aio" != "no" ; then
3827 cat > $TMPC <<EOF
3828#include <libaio.h>
3829#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003830#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003831int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3832EOF
3833 if compile_prog "" "-laio" ; then
3834 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003835 else
3836 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003837 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003838 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003839 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003840 fi
3841fi
3842
3843##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003844# TPM passthrough is only on x86 Linux
3845
3846if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3847 tpm_passthrough=$tpm
3848else
3849 tpm_passthrough=no
3850fi
3851
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003852# TPM emulator is for all posix systems
3853if test "$mingw32" != "yes"; then
3854 tpm_emulator=$tpm
3855else
3856 tpm_emulator=no
3857fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003858##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003859# attr probe
3860
3861if test "$attr" != "no" ; then
3862 cat > $TMPC <<EOF
3863#include <stdio.h>
3864#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003865#ifdef CONFIG_LIBATTR
3866#include <attr/xattr.h>
3867#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003868#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003869#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003870int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3871EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003872 if compile_prog "" "" ; then
3873 attr=yes
3874 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003875 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003876 attr=yes
3877 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003878 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003879 else
3880 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003881 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003882 fi
3883 attr=no
3884 fi
3885fi
3886
3887##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003888# iovec probe
3889cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003890#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003891#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003892#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003893int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003894EOF
3895iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003896if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003897 iovec=yes
3898fi
3899
aurel32f652e6a2008-12-16 10:43:48 +00003900##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003901# preadv probe
3902cat > $TMPC <<EOF
3903#include <sys/types.h>
3904#include <sys/uio.h>
3905#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003906int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003907EOF
3908preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003909if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003910 preadv=yes
3911fi
3912
3913##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003914# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003915# fdt support is mandatory for at least some target architectures,
3916# so insist on it if we're building those system emulators.
3917fdt_required=no
3918for target in $target_list; do
3919 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003920 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003921 fdt_required=yes
3922 ;;
3923 esac
3924done
3925
3926if test "$fdt_required" = "yes"; then
3927 if test "$fdt" = "no"; then
3928 error_exit "fdt disabled but some requested targets require it." \
3929 "You can turn off fdt only if you also disable all the system emulation" \
3930 "targets which need it (by specifying a cut down --target-list)."
3931 fi
3932 fdt=yes
3933fi
3934
Juan Quintela2df87df2009-08-12 18:29:54 +02003935if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003936 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003937 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003938 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003939 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003940#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003941#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01003942int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003943EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003944 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003945 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003946 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003947 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003948 # have GIT checkout, so activate dtc submodule
3949 if test -e "${source_path}/.git" ; then
3950 git_submodules="${git_submodules} dtc"
3951 fi
3952 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003953 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003954 mkdir -p dtc
3955 if [ "$pwd_is_source_path" != "y" ] ; then
3956 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3957 symlink "$source_path/dtc/scripts" "dtc/scripts"
3958 fi
3959 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003960 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3961 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003962 elif test "$fdt" = "yes" ; then
3963 # Not a git build & no libfdt found, prompt for system install
3964 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3965 "Please install the DTC (libfdt) devel package"
3966 else
3967 # don't have and don't want
3968 fdt_libs=
3969 fdt=no
3970 fi
aurel32f652e6a2008-12-16 10:43:48 +00003971 fi
3972fi
3973
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003974libs_softmmu="$libs_softmmu $fdt_libs"
3975
Michael Walle20ff0752011-03-07 23:32:39 +01003976##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003977# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003978
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003979if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003980 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003981 if $pkg_config $opengl_pkgs; then
3982 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3983 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003984 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003985 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3986 gtk_gl="yes"
3987 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003988 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003989 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003990 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003991 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003992 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003993 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003994 opengl_libs=""
3995 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003996 fi
3997fi
3998
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003999if test "$opengl" = "yes"; then
4000 cat > $TMPC << EOF
4001#include <epoxy/egl.h>
4002#ifndef EGL_MESA_image_dma_buf_export
4003# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4004#endif
4005int main(void) { return 0; }
4006EOF
4007 if compile_prog "" "" ; then
4008 opengl_dmabuf=yes
4009 fi
4010fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004011
Klim Kireeved279a02018-01-12 12:01:19 +03004012##########################################
4013# libxml2 probe
4014if test "$libxml2" != "no" ; then
4015 if $pkg_config --exists libxml-2.0; then
4016 libxml2="yes"
4017 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4018 libxml2_libs=$($pkg_config --libs libxml-2.0)
4019 else
4020 if test "$libxml2" = "yes"; then
4021 feature_not_found "libxml2" "Install libxml2 devel"
4022 fi
4023 libxml2="no"
4024 fi
4025fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004026
Bharata B Raoeb100392012-09-24 14:42:45 +05304027##########################################
4028# glusterfs probe
4029if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004030 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304031 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004032 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4033 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004034 if $pkg_config --atleast-version=4 glusterfs-api; then
4035 glusterfs_xlator_opt="yes"
4036 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004037 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304038 glusterfs_discard="yes"
4039 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304040 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304041 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304042 glusterfs_zerofill="yes"
4043 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304044 else
4045 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004046 feature_not_found "GlusterFS backend support" \
4047 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304048 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304049 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304050 fi
4051fi
4052
aurel3239386ac2009-04-15 19:48:17 +00004053# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004054# emulator. This is done because older glibc versions don't
4055# have syscall stubs for these implemented. In that case we
4056# don't provide them even if kernel supports them.
4057#
4058inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004059cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004060#include <sys/inotify.h>
4061
4062int
4063main(void)
4064{
4065 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004066 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004067}
4068EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004069if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004070 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004071fi
4072
Riku Voipioc05c7a72010-03-26 15:25:11 +00004073inotify1=no
4074cat > $TMPC << EOF
4075#include <sys/inotify.h>
4076
4077int
4078main(void)
4079{
4080 /* try to start inotify */
4081 return inotify_init1(0);
4082}
4083EOF
4084if compile_prog "" "" ; then
4085 inotify1=yes
4086fi
4087
Riku Voipio099d6b02009-05-05 12:10:04 +03004088# check if pipe2 is there
4089pipe2=no
4090cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004091#include <unistd.h>
4092#include <fcntl.h>
4093
4094int main(void)
4095{
4096 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004097 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004098}
4099EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004100if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004101 pipe2=yes
4102fi
4103
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004104# check if accept4 is there
4105accept4=no
4106cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004107#include <sys/socket.h>
4108#include <stddef.h>
4109
4110int main(void)
4111{
4112 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4113 return 0;
4114}
4115EOF
4116if compile_prog "" "" ; then
4117 accept4=yes
4118fi
4119
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304120# check if tee/splice is there. vmsplice was added same time.
4121splice=no
4122cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304123#include <unistd.h>
4124#include <fcntl.h>
4125#include <limits.h>
4126
4127int main(void)
4128{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004129 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304130 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4131 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4132 return 0;
4133}
4134EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004135if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304136 splice=yes
4137fi
4138
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004139##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004140# libnuma probe
4141
4142if test "$numa" != "no" ; then
4143 cat > $TMPC << EOF
4144#include <numa.h>
4145int main(void) { return numa_available(); }
4146EOF
4147
4148 if compile_prog "" "-lnuma" ; then
4149 numa=yes
4150 libs_softmmu="-lnuma $libs_softmmu"
4151 else
4152 if test "$numa" = "yes" ; then
4153 feature_not_found "numa" "install numactl devel"
4154 fi
4155 numa=no
4156 fi
4157fi
4158
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004159if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4160 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4161 exit 1
4162fi
4163
Yang Zhong5a22ab72017-12-20 21:16:46 +08004164# Even if malloc_trim() is available, these non-libc memory allocators
4165# do not support it.
4166if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4167 if test "$malloc_trim" = "yes" ; then
4168 echo "Disabling malloc_trim with non-libc memory allocator"
4169 fi
4170 malloc_trim="no"
4171fi
4172
4173#######################################
4174# malloc_trim
4175
4176if test "$malloc_trim" != "no" ; then
4177 cat > $TMPC << EOF
4178#include <malloc.h>
4179int main(void) { malloc_trim(0); return 0; }
4180EOF
4181 if compile_prog "" "" ; then
4182 malloc_trim="yes"
4183 else
4184 malloc_trim="no"
4185 fi
4186fi
4187
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004188##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004189# tcmalloc probe
4190
4191if test "$tcmalloc" = "yes" ; then
4192 cat > $TMPC << EOF
4193#include <stdlib.h>
4194int main(void) { malloc(1); return 0; }
4195EOF
4196
4197 if compile_prog "" "-ltcmalloc" ; then
4198 LIBS="-ltcmalloc $LIBS"
4199 else
4200 feature_not_found "tcmalloc" "install gperftools devel"
4201 fi
4202fi
4203
4204##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004205# jemalloc probe
4206
4207if test "$jemalloc" = "yes" ; then
4208 cat > $TMPC << EOF
4209#include <stdlib.h>
4210int main(void) { malloc(1); return 0; }
4211EOF
4212
4213 if compile_prog "" "-ljemalloc" ; then
4214 LIBS="-ljemalloc $LIBS"
4215 else
4216 feature_not_found "jemalloc" "install jemalloc devel"
4217 fi
4218fi
4219
4220##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004221# signalfd probe
4222signalfd="no"
4223cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004224#include <unistd.h>
4225#include <sys/syscall.h>
4226#include <signal.h>
4227int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4228EOF
4229
4230if compile_prog "" "" ; then
4231 signalfd=yes
4232fi
4233
Riku Voipioc2882b92009-08-12 15:08:24 +03004234# check if eventfd is supported
4235eventfd=no
4236cat > $TMPC << EOF
4237#include <sys/eventfd.h>
4238
4239int main(void)
4240{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004241 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004242}
4243EOF
4244if compile_prog "" "" ; then
4245 eventfd=yes
4246fi
4247
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004248# check if memfd is supported
4249memfd=no
4250cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004251#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004252
4253int main(void)
4254{
4255 return memfd_create("foo", MFD_ALLOW_SEALING);
4256}
4257EOF
4258if compile_prog "" "" ; then
4259 memfd=yes
4260fi
4261
Cortland Tölva955727d2018-10-08 09:35:19 -07004262# check for usbfs
4263have_usbfs=no
4264if test "$linux_user" = "yes"; then
4265 if check_include linux/usbdevice_fs.h; then
4266 have_usbfs=yes
4267 fi
4268 have_usbfs=yes
4269fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004270
Ulrich Hechtd0927932009-09-17 20:22:14 +03004271# check for fallocate
4272fallocate=no
4273cat > $TMPC << EOF
4274#include <fcntl.h>
4275
4276int main(void)
4277{
4278 fallocate(0, 0, 0, 0);
4279 return 0;
4280}
4281EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004282if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004283 fallocate=yes
4284fi
4285
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004286# check for fallocate hole punching
4287fallocate_punch_hole=no
4288cat > $TMPC << EOF
4289#include <fcntl.h>
4290#include <linux/falloc.h>
4291
4292int main(void)
4293{
4294 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4295 return 0;
4296}
4297EOF
4298if compile_prog "" "" ; then
4299 fallocate_punch_hole=yes
4300fi
4301
Denis V. Lunevb953f072015-01-30 11:42:14 +03004302# check that fallocate supports range zeroing inside the file
4303fallocate_zero_range=no
4304cat > $TMPC << EOF
4305#include <fcntl.h>
4306#include <linux/falloc.h>
4307
4308int main(void)
4309{
4310 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4311 return 0;
4312}
4313EOF
4314if compile_prog "" "" ; then
4315 fallocate_zero_range=yes
4316fi
4317
Kevin Wolfed911432014-09-29 17:12:59 +02004318# check for posix_fallocate
4319posix_fallocate=no
4320cat > $TMPC << EOF
4321#include <fcntl.h>
4322
4323int main(void)
4324{
4325 posix_fallocate(0, 0, 0);
4326 return 0;
4327}
4328EOF
4329if compile_prog "" "" ; then
4330 posix_fallocate=yes
4331fi
4332
Peter Maydellc727f472011-01-06 11:05:10 +00004333# check for sync_file_range
4334sync_file_range=no
4335cat > $TMPC << EOF
4336#include <fcntl.h>
4337
4338int main(void)
4339{
4340 sync_file_range(0, 0, 0, 0);
4341 return 0;
4342}
4343EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004344if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004345 sync_file_range=yes
4346fi
4347
Peter Maydelldace20d2011-01-10 13:11:24 +00004348# check for linux/fiemap.h and FS_IOC_FIEMAP
4349fiemap=no
4350cat > $TMPC << EOF
4351#include <sys/ioctl.h>
4352#include <linux/fs.h>
4353#include <linux/fiemap.h>
4354
4355int main(void)
4356{
4357 ioctl(0, FS_IOC_FIEMAP, 0);
4358 return 0;
4359}
4360EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004361if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004362 fiemap=yes
4363fi
4364
Ulrich Hechtd0927932009-09-17 20:22:14 +03004365# check for dup3
4366dup3=no
4367cat > $TMPC << EOF
4368#include <unistd.h>
4369
4370int main(void)
4371{
4372 dup3(0, 0, 0);
4373 return 0;
4374}
4375EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004376if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004377 dup3=yes
4378fi
4379
Alex Bligh4e0c6522013-08-21 16:02:43 +01004380# check for ppoll support
4381ppoll=no
4382cat > $TMPC << EOF
4383#include <poll.h>
4384
4385int main(void)
4386{
4387 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4388 ppoll(&pfd, 1, 0, 0);
4389 return 0;
4390}
4391EOF
4392if compile_prog "" "" ; then
4393 ppoll=yes
4394fi
4395
Alex Blighcd758dd2013-08-21 16:02:44 +01004396# check for prctl(PR_SET_TIMERSLACK , ... ) support
4397prctl_pr_set_timerslack=no
4398cat > $TMPC << EOF
4399#include <sys/prctl.h>
4400
4401int main(void)
4402{
4403 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4404 return 0;
4405}
4406EOF
4407if compile_prog "" "" ; then
4408 prctl_pr_set_timerslack=yes
4409fi
4410
Peter Maydell3b6edd12011-02-15 18:35:05 +00004411# check for epoll support
4412epoll=no
4413cat > $TMPC << EOF
4414#include <sys/epoll.h>
4415
4416int main(void)
4417{
4418 epoll_create(0);
4419 return 0;
4420}
4421EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004422if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004423 epoll=yes
4424fi
4425
Peter Maydell227f0212016-06-06 19:58:11 +01004426# epoll_create1 is a later addition
4427# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004428epoll_create1=no
4429cat > $TMPC << EOF
4430#include <sys/epoll.h>
4431
4432int main(void)
4433{
Peter Maydell19e83f62011-04-26 16:56:40 +01004434 /* Note that we use epoll_create1 as a value, not as
4435 * a function being called. This is necessary so that on
4436 * old SPARC glibc versions where the function was present in
4437 * the library but not declared in the header file we will
4438 * fail the configure check. (Otherwise we will get a compiler
4439 * warning but not an error, and will proceed to fail the
4440 * qemu compile where we compile with -Werror.)
4441 */
Blue Swirlc075a722012-08-09 20:21:25 +00004442 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004443}
4444EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004445if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004446 epoll_create1=yes
4447fi
4448
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004449# check for sendfile support
4450sendfile=no
4451cat > $TMPC << EOF
4452#include <sys/sendfile.h>
4453
4454int main(void)
4455{
4456 return sendfile(0, 0, 0, 0);
4457}
4458EOF
4459if compile_prog "" "" ; then
4460 sendfile=yes
4461fi
4462
Riku Voipio51834342014-06-22 11:25:42 +01004463# check for timerfd support (glibc 2.8 and newer)
4464timerfd=no
4465cat > $TMPC << EOF
4466#include <sys/timerfd.h>
4467
4468int main(void)
4469{
4470 return(timerfd_create(CLOCK_REALTIME, 0));
4471}
4472EOF
4473if compile_prog "" "" ; then
4474 timerfd=yes
4475fi
4476
Riku Voipio9af5c902014-08-12 15:58:57 +03004477# check for setns and unshare support
4478setns=no
4479cat > $TMPC << EOF
4480#include <sched.h>
4481
4482int main(void)
4483{
4484 int ret;
4485 ret = setns(0, 0);
4486 ret = unshare(0);
4487 return ret;
4488}
4489EOF
4490if compile_prog "" "" ; then
4491 setns=yes
4492fi
4493
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004494# clock_adjtime probe
4495clock_adjtime=no
4496cat > $TMPC <<EOF
4497#include <time.h>
4498
4499int main(void)
4500{
4501 return clock_adjtime(0, 0);
4502}
4503EOF
4504clock_adjtime=no
4505if compile_prog "" "" ; then
4506 clock_adjtime=yes
4507fi
4508
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004509# syncfs probe
4510syncfs=no
4511cat > $TMPC <<EOF
4512#include <unistd.h>
4513
4514int main(void)
4515{
4516 return syncfs(0);
4517}
4518EOF
4519syncfs=no
4520if compile_prog "" "" ; then
4521 syncfs=yes
4522fi
4523
pbrookcc8ae6d2006-04-23 17:57:59 +00004524# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004525if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004526 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004527 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004528 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004529 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004530 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004531 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004532 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004533 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004534fi
4535
Stefan Weilf514f412009-10-11 12:44:07 +02004536# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004537byteswap_h=no
4538cat > $TMPC << EOF
4539#include <byteswap.h>
4540int main(void) { return bswap_32(0); }
4541EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004542if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004543 byteswap_h=yes
4544fi
4545
Stefan Weil75f13592013-01-05 12:17:38 +01004546# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004547bswap_h=no
4548cat > $TMPC << EOF
4549#include <sys/endian.h>
4550#include <sys/types.h>
4551#include <machine/bswap.h>
4552int main(void) { return bswap32(0); }
4553EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004554if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004555 bswap_h=yes
4556fi
4557
aliguorida93a1f2008-12-12 20:02:52 +00004558##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004559# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004560if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004561 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004562 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004563 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4564 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004565 else
4566 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004567 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004568 fi
4569 libiscsi="no"
4570 fi
4571fi
4572
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004573##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004574# Do we need libm
4575cat > $TMPC << EOF
4576#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004577int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004578EOF
4579if compile_prog "" "" ; then
4580 :
4581elif compile_prog "" "-lm" ; then
4582 LIBS="-lm $LIBS"
4583 libs_qga="-lm $libs_qga"
4584else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004585 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004586fi
4587
4588##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004589# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004590# uClibc provides 2 versions of clock_gettime(), one with realtime
4591# support and one without. This means that the clock_gettime() don't
4592# need -lrt. We still need it for timer_create() so we check for this
4593# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004594cat > $TMPC <<EOF
4595#include <signal.h>
4596#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004597int main(void) {
4598 timer_create(CLOCK_REALTIME, NULL, NULL);
4599 return clock_gettime(CLOCK_REALTIME, NULL);
4600}
aliguorida93a1f2008-12-12 20:02:52 +00004601EOF
4602
Juan Quintela52166aa2009-08-03 14:46:03 +02004603if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004604 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004605# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004606elif compile_prog "" "$pthread_lib -lrt" ; then
4607 LIBS="$LIBS -lrt"
4608 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004609fi
4610
Blue Swirl31ff5042009-09-12 12:33:07 +00004611if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004612 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004613 libs_softmmu="-lutil $libs_softmmu"
4614fi
4615
Blue Swirlde5071c2009-09-12 09:58:46 +00004616##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004617# spice probe
4618if test "$spice" != "no" ; then
4619 cat > $TMPC << EOF
4620#include <spice.h>
4621int main(void) { spice_server_new(); return 0; }
4622EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004623 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4624 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004625 if $pkg_config --atleast-version=0.12.0 spice-server && \
4626 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004627 compile_prog "$spice_cflags" "$spice_libs" ; then
4628 spice="yes"
4629 libs_softmmu="$libs_softmmu $spice_libs"
4630 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004631 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4632 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004633 else
4634 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004635 feature_not_found "spice" \
4636 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004637 fi
4638 spice="no"
4639 fi
4640fi
4641
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004642# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004643if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004644 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004645 libcacard_cflags=$($pkg_config --cflags libcacard)
4646 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004647 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004648 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004649 if test "$smartcard" = "yes"; then
4650 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004651 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004652 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004653 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004654fi
4655
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004656# check for libusb
4657if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004658 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004659 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004660 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4661 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004662 else
4663 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004664 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004665 fi
4666 libusb="no"
4667 fi
4668fi
4669
Hans de Goede69354a82011-07-19 11:04:10 +02004670# check for usbredirparser for usb network redirection support
4671if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004672 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004673 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004674 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4675 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004676 else
4677 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004678 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004679 fi
4680 usb_redir="no"
4681 fi
4682fi
4683
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004684##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004685# check if we have VSS SDK headers for win
4686
4687if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4688 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004689 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004690 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4691 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004692 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004693 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4694 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004695 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004696 esac
4697 cat > $TMPC << EOF
4698#define __MIDL_user_allocate_free_DEFINED__
4699#include <inc/win2003/vss.h>
4700int main(void) { return VSS_CTX_BACKUP; }
4701EOF
4702 if compile_prog "$vss_win32_include" "" ; then
4703 guest_agent_with_vss="yes"
4704 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004705 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004706 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004707 else
4708 if test "$vss_win32_sdk" != "" ; then
4709 echo "ERROR: Please download and install Microsoft VSS SDK:"
4710 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4711 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4712 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4713 echo "ERROR: The headers are extracted in the directory \`inc'."
4714 feature_not_found "VSS support"
4715 fi
4716 guest_agent_with_vss="no"
4717 fi
4718fi
4719
4720##########################################
4721# lookup Windows platform SDK (if not specified)
4722# The SDK is needed only to build .tlb (type library) file of guest agent
4723# VSS provider from the source. It is usually unnecessary because the
4724# pre-compiled .tlb file is included.
4725
4726if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4727 if test -z "$win_sdk"; then
4728 programfiles="$PROGRAMFILES"
4729 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4730 if test -n "$programfiles"; then
4731 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4732 else
4733 feature_not_found "Windows SDK"
4734 fi
4735 elif test "$win_sdk" = "no"; then
4736 win_sdk=""
4737 fi
4738fi
4739
4740##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004741# check if mingw environment provides a recent ntddscsi.h
4742if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4743 cat > $TMPC << EOF
4744#include <windows.h>
4745#include <ntddscsi.h>
4746int main(void) {
4747#if !defined(IOCTL_SCSI_GET_ADDRESS)
4748#error Missing required ioctl definitions
4749#endif
4750 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4751 return addr.Lun;
4752}
4753EOF
4754 if compile_prog "" "" ; then
4755 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004756 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004757 fi
4758fi
4759
4760##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004761# virgl renderer probe
4762
4763if test "$virglrenderer" != "no" ; then
4764 cat > $TMPC << EOF
4765#include <virglrenderer.h>
4766int main(void) { virgl_renderer_poll(); return 0; }
4767EOF
4768 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4769 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004770 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004771 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4772 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4773 virglrenderer="yes"
4774 else
4775 if test "$virglrenderer" = "yes" ; then
4776 feature_not_found "virglrenderer"
4777 fi
4778 virglrenderer="no"
4779 fi
4780fi
4781
4782##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004783# capstone
4784
Richard Hendersone219c492017-09-28 09:01:23 -07004785case "$capstone" in
4786 "" | yes)
4787 if $pkg_config capstone; then
4788 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004789 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004790 capstone=git
4791 elif test -e "${source_path}/capstone/Makefile" ; then
4792 capstone=internal
4793 elif test -z "$capstone" ; then
4794 capstone=no
4795 else
4796 feature_not_found "capstone" "Install capstone devel or git submodule"
4797 fi
4798 ;;
4799
4800 system)
4801 if ! $pkg_config capstone; then
4802 feature_not_found "capstone" "Install capstone devel"
4803 fi
4804 ;;
4805esac
4806
4807case "$capstone" in
4808 git | internal)
4809 if test "$capstone" = git; then
4810 git_submodules="${git_submodules} capstone"
4811 fi
4812 mkdir -p capstone
4813 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4814 if test "$mingw32" = "yes"; then
4815 LIBCAPSTONE=capstone.lib
4816 else
4817 LIBCAPSTONE=libcapstone.a
4818 fi
4819 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4820 ;;
4821
4822 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004823 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4824 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004825 ;;
4826
4827 no)
4828 ;;
4829 *)
4830 error_exit "Unknown state for capstone: $capstone"
4831 ;;
4832esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004833
4834##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004835# check if we have fdatasync
4836
4837fdatasync=no
4838cat > $TMPC << EOF
4839#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004840int main(void) {
4841#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4842return fdatasync(0);
4843#else
Stefan Weile172fe12012-04-06 21:33:20 +02004844#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004845#endif
4846}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004847EOF
4848if compile_prog "" "" ; then
4849 fdatasync=yes
4850fi
4851
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004852##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004853# check if we have madvise
4854
4855madvise=no
4856cat > $TMPC << EOF
4857#include <sys/types.h>
4858#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004859#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004860int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4861EOF
4862if compile_prog "" "" ; then
4863 madvise=yes
4864fi
4865
4866##########################################
4867# check if we have posix_madvise
4868
4869posix_madvise=no
4870cat > $TMPC << EOF
4871#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004872#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004873int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4874EOF
4875if compile_prog "" "" ; then
4876 posix_madvise=yes
4877fi
4878
4879##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004880# check if we have posix_memalign()
4881
4882posix_memalign=no
4883cat > $TMPC << EOF
4884#include <stdlib.h>
4885int main(void) {
4886 void *p;
4887 return posix_memalign(&p, 8, 8);
4888}
4889EOF
4890if compile_prog "" "" ; then
4891 posix_memalign=yes
4892fi
4893
4894##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004895# check if we have posix_syslog
4896
4897posix_syslog=no
4898cat > $TMPC << EOF
4899#include <syslog.h>
4900int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4901EOF
4902if compile_prog "" "" ; then
4903 posix_syslog=yes
4904fi
4905
4906##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004907# check if we have sem_timedwait
4908
4909sem_timedwait=no
4910cat > $TMPC << EOF
4911#include <semaphore.h>
4912int main(void) { return sem_timedwait(0, 0); }
4913EOF
4914if compile_prog "" "" ; then
4915 sem_timedwait=yes
4916fi
4917
4918##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004919# check if we have strchrnul
4920
4921strchrnul=no
4922cat > $TMPC << EOF
4923#include <string.h>
4924int main(void);
4925// Use a haystack that the compiler shouldn't be able to constant fold
4926char *haystack = (char*)&main;
4927int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4928EOF
4929if compile_prog "" "" ; then
4930 strchrnul=yes
4931fi
4932
4933##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004934# check if trace backend exists
4935
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004936$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004937if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004938 error_exit "invalid trace backends" \
4939 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004940fi
4941
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004942##########################################
4943# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004944if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004945 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004946#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004947int main(void) { return 0; }
4948EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004949 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004950 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004951 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004952 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004953 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004954 fi
4955 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004956 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004957 else
4958 urcu_bp_libs="-lurcu-bp"
4959 fi
4960
4961 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4962 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004963 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004964 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004965 fi
4966fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004967
4968##########################################
4969# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004970if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004971 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004972 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004973 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004974 trace_backend_stap="no"
4975 if has 'stap' ; then
4976 trace_backend_stap="yes"
4977 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004978fi
4979
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004980##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004981# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304982
Peter Maydell7c2acc72013-04-08 12:11:27 +01004983# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004984# is sigcontext. On Windows the only valid backend is the Windows
4985# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004986
4987ucontext_works=no
4988if test "$darwin" != "yes"; then
4989 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304990#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004991#ifdef __stub_makecontext
4992#error Ignoring glibc stub makecontext which will always fail
4993#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004994int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304995EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004996 if compile_prog "" "" ; then
4997 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304998 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004999fi
5000
5001if test "$coroutine" = ""; then
5002 if test "$mingw32" = "yes"; then
5003 coroutine=win32
5004 elif test "$ucontext_works" = "yes"; then
5005 coroutine=ucontext
5006 else
5007 coroutine=sigaltstack
5008 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005009else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005010 case $coroutine in
5011 windows)
5012 if test "$mingw32" != "yes"; then
5013 error_exit "'windows' coroutine backend only valid for Windows"
5014 fi
5015 # Unfortunately the user visible backend name doesn't match the
5016 # coroutine-*.c filename for this case, so we have to adjust it here.
5017 coroutine=win32
5018 ;;
5019 ucontext)
5020 if test "$ucontext_works" != "yes"; then
5021 feature_not_found "ucontext"
5022 fi
5023 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005024 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005025 if test "$mingw32" = "yes"; then
5026 error_exit "only the 'windows' coroutine backend is valid for Windows"
5027 fi
5028 ;;
5029 *)
5030 error_exit "unknown coroutine backend $coroutine"
5031 ;;
5032 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305033fi
5034
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005035if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005036 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005037fi
5038
Peter Lieven7d992e42016-09-27 11:58:45 +02005039if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005040 if test "$coroutine_pool" = "yes"; then
5041 echo "WARN: disabling coroutine pool for stack usage debugging"
5042 coroutine_pool=no
5043 fi
5044fi
5045
5046
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305047##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305048# check if we have open_by_handle_at
5049
Stefan Weil4e1797f2012-06-18 22:11:06 +02005050open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305051cat > $TMPC << EOF
5052#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005053#if !defined(AT_EMPTY_PATH)
5054# error missing definition
5055#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005056int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005057#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305058EOF
5059if compile_prog "" "" ; then
5060 open_by_handle_at=yes
5061fi
5062
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305063########################################
5064# check if we have linux/magic.h
5065
5066linux_magic_h=no
5067cat > $TMPC << EOF
5068#include <linux/magic.h>
5069int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005070 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305071}
5072EOF
5073if compile_prog "" "" ; then
5074 linux_magic_h=yes
5075fi
5076
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005077########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005078# check whether we can disable warning option with a pragma (this is needed
5079# to silence warnings in the headers of some versions of external libraries).
5080# This test has to be compiled with -Werror as otherwise an unknown pragma is
5081# only a warning.
5082#
5083# If we can't selectively disable warning in the code, disable -Werror so that
5084# the build doesn't fail anyway.
5085
Peter Maydell06d71fa2012-07-30 16:13:07 +01005086pragma_disable_unused_but_set=no
5087cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005088#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005089#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005090#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005091
Peter Maydell06d71fa2012-07-30 16:13:07 +01005092int main(void) {
5093 return 0;
5094}
5095EOF
5096if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005097 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005098else
5099 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005100fi
5101
5102########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005103# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005104
5105valgrind_h=no
5106cat > $TMPC << EOF
5107#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005108int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005109 return 0;
5110}
5111EOF
5112if compile_prog "" "" ; then
5113 valgrind_h=yes
5114fi
5115
5116########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005117# check if environ is declared
5118
5119has_environ=no
5120cat > $TMPC << EOF
5121#include <unistd.h>
5122int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005123 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005124 return 0;
5125}
5126EOF
5127if compile_prog "" "" ; then
5128 has_environ=yes
5129fi
5130
Richard Henderson76a347e2012-12-28 14:17:02 -08005131########################################
5132# check if cpuid.h is usable.
5133
Richard Henderson76a347e2012-12-28 14:17:02 -08005134cat > $TMPC << EOF
5135#include <cpuid.h>
5136int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005137 unsigned a, b, c, d;
5138 int max = __get_cpuid_max(0, 0);
5139
5140 if (max >= 1) {
5141 __cpuid(1, a, b, c, d);
5142 }
5143
5144 if (max >= 7) {
5145 __cpuid_count(7, 0, a, b, c, d);
5146 }
5147
5148 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005149}
5150EOF
5151if compile_prog "" "" ; then
5152 cpuid_h=yes
5153fi
5154
Richard Henderson5dd89902017-07-18 18:40:18 -10005155##########################################
5156# avx2 optimization requirement check
5157#
5158# There is no point enabling this if cpuid.h is not usable,
5159# since we won't be able to select the new routines.
5160
Liam Merwick86583a02018-10-19 21:38:59 +01005161if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005162 cat > $TMPC << EOF
5163#pragma GCC push_options
5164#pragma GCC target("avx2")
5165#include <cpuid.h>
5166#include <immintrin.h>
5167static int bar(void *a) {
5168 __m256i x = *(__m256i *)a;
5169 return _mm256_testz_si256(x, x);
5170}
5171int main(int argc, char *argv[]) { return bar(argv[0]); }
5172EOF
5173 if compile_object "" ; then
5174 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005175 else
5176 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005177 fi
5178fi
5179
Richard Hendersonf5401662013-02-16 12:46:59 -08005180########################################
5181# check if __[u]int128_t is usable.
5182
5183int128=no
5184cat > $TMPC << EOF
5185__int128_t a;
5186__uint128_t b;
5187int main (void) {
5188 a = a + b;
5189 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005190 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005191 return 0;
5192}
5193EOF
5194if compile_prog "" "" ; then
5195 int128=yes
5196fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005197
Richard Henderson7ebee432016-06-29 21:10:59 -07005198#########################################
5199# See if 128-bit atomic operations are supported.
5200
5201atomic128=no
5202if test "$int128" = "yes"; then
5203 cat > $TMPC << EOF
5204int main(void)
5205{
5206 unsigned __int128 x = 0, y = 0;
5207 y = __atomic_load_16(&x, 0);
5208 __atomic_store_16(&x, y, 0);
5209 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5210 return 0;
5211}
5212EOF
5213 if compile_prog "" "" ; then
5214 atomic128=yes
5215 fi
5216fi
5217
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005218cmpxchg128=no
5219if test "$int128" = yes -a "$atomic128" = no; then
5220 cat > $TMPC << EOF
5221int main(void)
5222{
5223 unsigned __int128 x = 0, y = 0;
5224 __sync_val_compare_and_swap_16(&x, y, x);
5225 return 0;
5226}
5227EOF
5228 if compile_prog "" "" ; then
5229 cmpxchg128=yes
5230 fi
5231fi
5232
Richard Hendersondf79b992016-09-02 12:23:57 -07005233#########################################
5234# See if 64-bit atomic operations are supported.
5235# Note that without __atomic builtins, we can only
5236# assume atomic loads/stores max at pointer size.
5237
5238cat > $TMPC << EOF
5239#include <stdint.h>
5240int main(void)
5241{
5242 uint64_t x = 0, y = 0;
5243#ifdef __ATOMIC_RELAXED
5244 y = __atomic_load_8(&x, 0);
5245 __atomic_store_8(&x, y, 0);
5246 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5247 __atomic_exchange_8(&x, y, 0);
5248 __atomic_fetch_add_8(&x, y, 0);
5249#else
5250 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5251 __sync_lock_test_and_set(&x, y);
5252 __sync_val_compare_and_swap(&x, y, 0);
5253 __sync_fetch_and_add(&x, y);
5254#endif
5255 return 0;
5256}
5257EOF
5258if compile_prog "" "" ; then
5259 atomic64=yes
5260fi
5261
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005262########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005263# See if 16-byte vector operations are supported.
5264# Even without a vector unit the compiler may expand these.
5265# There is a bug in old GCC for PPC that crashes here.
5266# Unfortunately it's the system compiler for Centos 7.
5267
5268cat > $TMPC << EOF
5269typedef unsigned char U1 __attribute__((vector_size(16)));
5270typedef unsigned short U2 __attribute__((vector_size(16)));
5271typedef unsigned int U4 __attribute__((vector_size(16)));
5272typedef unsigned long long U8 __attribute__((vector_size(16)));
5273typedef signed char S1 __attribute__((vector_size(16)));
5274typedef signed short S2 __attribute__((vector_size(16)));
5275typedef signed int S4 __attribute__((vector_size(16)));
5276typedef signed long long S8 __attribute__((vector_size(16)));
5277static U1 a1, b1;
5278static U2 a2, b2;
5279static U4 a4, b4;
5280static U8 a8, b8;
5281static S1 c1;
5282static S2 c2;
5283static S4 c4;
5284static S8 c8;
5285static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005286void helper(void *d, void *a, int shift, int i);
5287void helper(void *d, void *a, int shift, int i)
5288{
5289 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5290 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5291 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5292 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5293}
Richard Hendersondb432672017-09-15 14:11:45 -07005294int main(void)
5295{
5296 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5297 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5298 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5299 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5300 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5301 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5302 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5303 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5304 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5305 return 0;
5306}
5307EOF
5308
5309vector16=no
5310if compile_prog "" "" ; then
5311 vector16=yes
5312fi
5313
5314########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005315# check if getauxval is available.
5316
5317getauxval=no
5318cat > $TMPC << EOF
5319#include <sys/auxv.h>
5320int main(void) {
5321 return getauxval(AT_HWCAP) == 0;
5322}
5323EOF
5324if compile_prog "" "" ; then
5325 getauxval=yes
5326fi
5327
John Snowfd0e6052015-03-25 18:57:39 -04005328########################################
5329# check if ccache is interfering with
5330# semantic analysis of macros
5331
John Snow5e4dfd32015-10-28 13:56:40 -04005332unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005333ccache_cpp2=no
5334cat > $TMPC << EOF
5335static const int Z = 1;
5336#define fn() ({ Z; })
5337#define TAUT(X) ((X) == Z)
5338#define PAREN(X, Y) (X == Y)
5339#define ID(X) (X)
5340int main(int argc, char *argv[])
5341{
5342 int x = 0, y = 0;
5343 x = ID(x);
5344 x = fn();
5345 fn();
5346 if (PAREN(x, y)) return 0;
5347 if (TAUT(Z)) return 0;
5348 return 0;
5349}
5350EOF
5351
5352if ! compile_object "-Werror"; then
5353 ccache_cpp2=yes
5354fi
5355
John Snowb553a042015-11-03 15:43:42 -05005356#################################################
5357# clang does not support glibc + FORTIFY_SOURCE.
5358
5359if test "$fortify_source" != "no"; then
5360 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5361 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005362 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005363 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005364 fortify_source="no";
5365 else
5366 fortify_source="yes"
5367 fi
5368fi
5369
Fam Zheng1efad062018-06-01 17:26:43 +08005370###############################################
5371# Check if copy_file_range is provided by glibc
5372have_copy_file_range=no
5373cat > $TMPC << EOF
5374#include <unistd.h>
5375int main(void) {
5376 copy_file_range(0, NULL, 0, NULL, 0, 0);
5377 return 0;
5378}
5379EOF
5380if compile_prog "" "" ; then
5381 have_copy_file_range=yes
5382fi
5383
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305384##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005385# check if struct fsxattr is available via linux/fs.h
5386
5387have_fsxattr=no
5388cat > $TMPC << EOF
5389#include <linux/fs.h>
5390struct fsxattr foo;
5391int main(void) {
5392 return 0;
5393}
5394EOF
5395if compile_prog "" "" ; then
5396 have_fsxattr=yes
5397fi
5398
Peter Maydellb66e10e2016-06-08 18:34:32 +01005399##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005400# check for usable membarrier system call
5401if test "$membarrier" = "yes"; then
5402 have_membarrier=no
5403 if test "$mingw32" = "yes" ; then
5404 have_membarrier=yes
5405 elif test "$linux" = "yes" ; then
5406 cat > $TMPC << EOF
5407 #include <linux/membarrier.h>
5408 #include <sys/syscall.h>
5409 #include <unistd.h>
5410 #include <stdlib.h>
5411 int main(void) {
5412 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5413 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5414 exit(0);
5415 }
5416EOF
5417 if compile_prog "" "" ; then
5418 have_membarrier=yes
5419 fi
5420 fi
5421 if test "$have_membarrier" = "no"; then
5422 feature_not_found "membarrier" "membarrier system call not available"
5423 fi
5424else
5425 # Do not enable it by default even for Mingw32, because it doesn't
5426 # work on Wine.
5427 membarrier=no
5428fi
5429
5430##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005431# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005432have_rtnetlink=no
5433cat > $TMPC << EOF
5434#include <linux/rtnetlink.h>
5435int main(void) {
5436 return IFLA_PROTO_DOWN;
5437}
5438EOF
5439if compile_prog "" "" ; then
5440 have_rtnetlink=yes
5441fi
5442
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005443##########################################
5444# check for usable AF_VSOCK environment
5445have_af_vsock=no
5446cat > $TMPC << EOF
5447#include <errno.h>
5448#include <sys/types.h>
5449#include <sys/socket.h>
5450#if !defined(AF_VSOCK)
5451# error missing AF_VSOCK flag
5452#endif
5453#include <linux/vm_sockets.h>
5454int main(void) {
5455 int sock, ret;
5456 struct sockaddr_vm svm;
5457 socklen_t len = sizeof(svm);
5458 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5459 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5460 if ((ret == -1) && (errno == ENOTCONN)) {
5461 return 0;
5462 }
5463 return -1;
5464}
5465EOF
5466if compile_prog "" "" ; then
5467 have_af_vsock=yes
5468fi
5469
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005470##########################################
5471# check for usable AF_ALG environment
5472hava_afalg=no
5473cat > $TMPC << EOF
5474#include <errno.h>
5475#include <sys/types.h>
5476#include <sys/socket.h>
5477#include <linux/if_alg.h>
5478int main(void) {
5479 int sock;
5480 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5481 return sock;
5482}
5483EOF
5484if compile_prog "" "" ; then
5485 have_afalg=yes
5486fi
5487if test "$crypto_afalg" = "yes"
5488then
5489 if test "$have_afalg" != "yes"
5490 then
5491 error_exit "AF_ALG requested but could not be detected"
5492 fi
5493fi
5494
5495
James Clarke6969ec62016-06-06 12:02:50 +01005496#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005497# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005498if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005499 cat > $TMPC << EOF
5500#include <Hypervisor/hv.h>
5501int main() { return 0;}
5502EOF
5503 if ! compile_object ""; then
5504 hvf='no'
5505 else
5506 hvf='yes'
5507 LDFLAGS="-framework Hypervisor $LDFLAGS"
5508 fi
5509fi
5510
5511#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005512# Sparc implicitly links with --relax, which is
5513# incompatible with -r, so --no-relax should be
5514# given. It does no harm to give it on other
5515# platforms too.
5516
5517# Note: the prototype is needed since QEMU_CFLAGS
5518# contains -Wmissing-prototypes
5519cat > $TMPC << EOF
5520extern int foo(void);
5521int foo(void) { return 0; }
5522EOF
5523if ! compile_object ""; then
5524 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5525fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005526for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5527 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5528 LD_REL_FLAGS=$i
5529 break
5530 fi
5531done
5532if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5533 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005534fi
5535
Jan Vesely277abf12016-04-29 13:15:23 -04005536##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005537# check for sysmacros.h
5538
5539have_sysmacros=no
5540cat > $TMPC << EOF
5541#include <sys/sysmacros.h>
5542int main(void) {
5543 return makedev(0, 0);
5544}
5545EOF
5546if compile_prog "" "" ; then
5547 have_sysmacros=yes
5548fi
5549
5550##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005551# Veritas HyperScale block driver VxHS
5552# Check if libvxhs is installed
5553
5554if test "$vxhs" != "no" ; then
5555 cat > $TMPC <<EOF
5556#include <stdint.h>
5557#include <qnio/qnio_api.h>
5558
5559void *vxhs_callback;
5560
5561int main(void) {
5562 iio_init(QNIO_VERSION, vxhs_callback);
5563 return 0;
5564}
5565EOF
5566 vxhs_libs="-lvxhs -lssl"
5567 if compile_prog "" "$vxhs_libs" ; then
5568 vxhs=yes
5569 else
5570 if test "$vxhs" = "yes" ; then
5571 feature_not_found "vxhs block device" "Install libvxhs See github"
5572 fi
5573 vxhs=no
5574 fi
5575fi
5576
5577##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005578# check for _Static_assert()
5579
5580have_static_assert=no
5581cat > $TMPC << EOF
5582_Static_assert(1, "success");
5583int main(void) {
5584 return 0;
5585}
5586EOF
5587if compile_prog "" "" ; then
5588 have_static_assert=yes
5589fi
5590
5591##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005592# check for utmpx.h, it is missing e.g. on OpenBSD
5593
5594have_utmpx=no
5595cat > $TMPC << EOF
5596#include <utmpx.h>
5597struct utmpx user_info;
5598int main(void) {
5599 return 0;
5600}
5601EOF
5602if compile_prog "" "" ; then
5603 have_utmpx=yes
5604fi
5605
5606##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005607# checks for sanitizers
5608
Marc-André Lureau247724c2018-01-16 16:11:51 +01005609have_asan=no
5610have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005611have_asan_iface_h=no
5612have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005613
5614if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005615 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005616 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5617 have_asan=yes
5618 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005619
5620 # we could use a simple skeleton for flags checks, but this also
5621 # detect the static linking issue of ubsan, see also:
5622 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5623 cat > $TMPC << EOF
5624#include <stdlib.h>
5625int main(void) {
5626 void *tmp = malloc(10);
5627 return *(int *)(tmp + 2);
5628}
5629EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005630 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5631 have_ubsan=yes
5632 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005633
5634 if check_include "sanitizer/asan_interface.h" ; then
5635 have_asan_iface_h=yes
5636 fi
5637
5638 cat > $TMPC << EOF
5639#include <sanitizer/asan_interface.h>
5640int main(void) {
5641 __sanitizer_start_switch_fiber(0, 0, 0);
5642 return 0;
5643}
5644EOF
5645 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5646 have_asan_iface_fiber=yes
5647 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005648fi
5649
5650##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005651# Docker and cross-compiler support
5652#
5653# This is specifically for building test
5654# cases for foreign architectures, not
5655# cross-compiling QEMU itself.
5656
5657if has "docker"; then
5658 docker=$($python $source_path/tests/docker/docker.py probe)
5659fi
5660
5661##########################################
Junyan He17824402018-07-18 15:47:59 +08005662# check for libpmem
5663
5664if test "$libpmem" != "no"; then
5665 if $pkg_config --exists "libpmem"; then
5666 libpmem="yes"
5667 libpmem_libs=$($pkg_config --libs libpmem)
5668 libpmem_cflags=$($pkg_config --cflags libpmem)
5669 libs_softmmu="$libs_softmmu $libpmem_libs"
5670 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5671 else
5672 if test "$libpmem" = "yes" ; then
5673 feature_not_found "libpmem" "Install nvml or pmdk"
5674 fi
5675 libpmem="no"
5676 fi
5677fi
5678
5679##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005680# End of CC checks
5681# After here, no more $cc or $ld runs
5682
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005683write_c_skeleton
5684
Blue Swirl1d728c32012-05-01 18:45:39 +00005685if test "$gcov" = "yes" ; then
5686 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5687 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005688elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005689 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005690elif test "$debug" = "no"; then
5691 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005692fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005693
Marc-André Lureau247724c2018-01-16 16:11:51 +01005694if test "$have_asan" = "yes"; then
5695 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005696 if test "$have_asan_iface_h" = "no" ; then
5697 echo "ASAN build enabled, but ASAN header missing." \
5698 "Without code annotation, the report may be inferior."
5699 elif test "$have_asan_iface_fiber" = "no" ; then
5700 echo "ASAN build enabled, but ASAN header is too old." \
5701 "Without code annotation, the report may be inferior."
5702 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005703fi
5704if test "$have_ubsan" = "yes"; then
5705 CFLAGS="-fsanitize=undefined $CFLAGS"
5706fi
5707
Peter Lieven6542aa92014-02-03 10:26:13 +01005708##########################################
5709# Do we have libnfs
5710if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005711 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005712 libnfs="yes"
5713 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005714 else
5715 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005716 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005717 fi
5718 libnfs="no"
5719 fi
5720fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005721
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005722##########################################
5723# Do we have libudev
5724if test "$libudev" != "no" ; then
5725 if $pkg_config libudev && test "$static" != "yes"; then
5726 libudev="yes"
5727 libudev_libs=$($pkg_config --libs libudev)
5728 else
5729 libudev="no"
5730 fi
5731fi
5732
Peter Maydell6ca026c2012-07-18 15:10:18 +01005733# Now we've finished running tests it's OK to add -Werror to the compiler flags
5734if test "$werror" = "yes"; then
5735 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5736fi
5737
Juan Quintelae86ecd42009-08-03 14:45:59 +02005738if test "$solaris" = "no" ; then
5739 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005740 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005741 fi
5742fi
5743
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005744# test if pod2man has --utf8 option
5745if pod2man --help | grep -q utf8; then
5746 POD2MAN="pod2man --utf8"
5747else
5748 POD2MAN="pod2man"
5749fi
5750
Blue Swirl952afb72010-09-19 08:36:34 +00005751# Use ASLR, no-SEH and DEP if available
5752if test "$mingw32" = "yes" ; then
5753 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005754 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005755 LDFLAGS="-Wl,$flag $LDFLAGS"
5756 fi
5757 done
5758fi
5759
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005760qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005761qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005762qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005763qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005764
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005765# We can only support ivshmem if we have eventfd
5766if [ "$eventfd" = "yes" ]; then
5767 ivshmem=yes
5768fi
5769
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005770tools=""
5771if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005772 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005773 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5774 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005775 fi
5776 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005777 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005778 fi
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005779 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5780 tools="elf2dmp $tools"
5781 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005782fi
5783if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005784 if test "$linux" = yes; then
5785 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005786 virtfs=yes
5787 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5788 else
5789 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005790 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305791 fi
Andreas Färber17500372012-05-01 01:12:03 +02005792 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005793 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005794 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5795 mpath=yes
5796 else
5797 if test "$mpath" = yes; then
5798 error_exit "Multipath requires libmpathpersist devel"
5799 fi
5800 mpath=no
5801 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005802 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5803 else
5804 if test "$virtfs" = yes; then
5805 error_exit "VirtFS is supported only on Linux"
5806 fi
5807 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005808 if test "$mpath" = yes; then
5809 error_exit "Multipath is supported only on Linux"
5810 fi
5811 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305812 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005813 if test "$xkbcommon" = "yes"; then
5814 tools="qemu-keymap\$(EXESUF) $tools"
5815 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005816fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005817
5818# Probe for guest agent support/options
5819
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005820if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005821 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005822 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005823 guest_agent=yes
5824 elif [ "$guest_agent" != yes ]; then
5825 guest_agent=no
5826 else
5827 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005828 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005829fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005830
Michael Roth9d6bc272015-08-26 10:49:13 -05005831# Guest agent Window MSI package
5832
5833if test "$guest_agent" != yes; then
5834 if test "$guest_agent_msi" = yes; then
5835 error_exit "MSI guest agent package requires guest agent enabled"
5836 fi
5837 guest_agent_msi=no
5838elif test "$mingw32" != "yes"; then
5839 if test "$guest_agent_msi" = "yes"; then
5840 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5841 fi
5842 guest_agent_msi=no
5843elif ! has wixl; then
5844 if test "$guest_agent_msi" = "yes"; then
5845 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5846 fi
5847 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005848else
5849 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5850 # disabled explicitly
5851 if test "$guest_agent_msi" != "no"; then
5852 guest_agent_msi=yes
5853 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005854fi
5855
Michael Roth1a349042015-08-26 11:14:31 -05005856if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005857 if test "$guest_agent_with_vss" = "yes"; then
5858 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5859 fi
5860
5861 if test "$QEMU_GA_MANUFACTURER" = ""; then
5862 QEMU_GA_MANUFACTURER=QEMU
5863 fi
5864
5865 if test "$QEMU_GA_DISTRO" = ""; then
5866 QEMU_GA_DISTRO=Linux
5867 fi
5868
5869 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005870 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005871 fi
5872
Stefan Weil89138852016-05-16 15:10:20 +02005873 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005874
5875 case "$cpu" in
5876 x86_64)
5877 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5878 ;;
5879 i386)
5880 QEMU_GA_MSI_ARCH="-D Arch=32"
5881 ;;
5882 *)
5883 error_exit "CPU $cpu not supported for building installation package"
5884 ;;
5885 esac
5886fi
5887
Paolo Bonzinica35f782010-05-26 16:08:29 +02005888# Mac OS X ships with a broken assembler
5889roms=
5890if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5891 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5892 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005893 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005894 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5895 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5896 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005897 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5898 ld_i386_emulation="$emu"
5899 roms="optionrom"
5900 break
5901 fi
5902 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005903fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005904if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005905 roms="$roms spapr-rtas"
5906fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005907
Christian Borntraeger9933c302013-04-23 01:23:03 +00005908if test "$cpu" = "s390x" ; then
5909 roms="$roms s390-ccw"
5910fi
5911
Richard Henderson964c6fa2013-06-21 19:10:16 -07005912# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005913if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005914 textseg_addr=
5915 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005916 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5917 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005918 textseg_addr=0x60000000
5919 ;;
5920 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005921 # A 256M aligned address, high in the address space, with enough
5922 # room for the code_gen_buffer above it before the stack.
5923 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005924 ;;
5925 esac
5926 if [ -n "$textseg_addr" ]; then
5927 cat > $TMPC <<EOF
5928 int main(void) { return 0; }
5929EOF
5930 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5931 if ! compile_prog "" "$textseg_ldflags"; then
5932 # In case ld does not support -Ttext-segment, edit the default linker
5933 # script via sed to set the .text start addr. This is needed on FreeBSD
5934 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005935 if ! $ld --verbose >/dev/null 2>&1; then
5936 error_exit \
5937 "We need to link the QEMU user mode binaries at a" \
5938 "specific text address. Unfortunately your linker" \
5939 "doesn't support either the -Ttext-segment option or" \
5940 "printing the default linker script with --verbose." \
5941 "If you don't want the user mode binaries, pass the" \
5942 "--disable-user option to configure."
5943 fi
5944
Richard Henderson964c6fa2013-06-21 19:10:16 -07005945 $ld --verbose | sed \
5946 -e '1,/==================================================/d' \
5947 -e '/==================================================/,$d' \
5948 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5949 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5950 textseg_ldflags="-Wl,-T../config-host.ld"
5951 fi
5952 fi
5953fi
5954
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005955# Check that the C++ compiler exists and works with the C compiler.
5956# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5957if has $cxx; then
5958 cat > $TMPC <<EOF
5959int c_function(void);
5960int main(void) { return c_function(); }
5961EOF
5962
5963 compile_object
5964
5965 cat > $TMPCXX <<EOF
5966extern "C" {
5967 int c_function(void);
5968}
5969int c_function(void) { return 42; }
5970EOF
5971
5972 update_cxxflags
5973
5974 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5975 # C++ compiler $cxx works ok with C compiler $cc
5976 :
5977 else
5978 echo "C++ compiler $cxx does not work with C compiler $cc"
5979 echo "Disabling C++ specific optional code"
5980 cxx=
5981 fi
5982else
5983 echo "No C++ compiler available; disabling C++ specific optional code"
5984 cxx=
5985fi
5986
Cole Robinson02d34f62016-05-06 14:03:09 -04005987echo_version() {
5988 if test "$1" = "yes" ; then
5989 echo "($2)"
5990 fi
5991}
5992
Jan Kiszka50e12062014-10-02 10:03:55 +02005993# prepend pixman and ftd flags after all config tests are done
5994QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005995QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005996libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005997
bellard43ce4df2003-06-09 19:53:12 +00005998echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005999echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006000echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006001echo "binary directory $(eval echo $bindir)"
6002echo "library directory $(eval echo $libdir)"
6003echo "module directory $(eval echo $qemu_moddir)"
6004echo "libexec directory $(eval echo $libexecdir)"
6005echo "include directory $(eval echo $includedir)"
6006echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006007if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006008echo "local state directory $(eval echo $local_statedir)"
6009echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006010echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006011else
6012echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006013echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006014fi
bellard5a671352003-10-01 00:13:48 +00006015echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006016echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006017echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006018echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006019echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006020echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006021echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006022echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006023echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006024echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006025echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006026echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006027echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006028echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00006029echo "python $python"
Brade2d88302011-09-02 16:53:28 -04006030if test "$slirp" = "yes" ; then
6031 echo "smbd $smbd"
6032fi
Fam Zheng17969262014-02-10 14:48:56 +08006033echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006034echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006035echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006036echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006037echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006038echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006039echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006040echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006041echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006042if test "$darwin" = "yes" ; then
6043 echo "Cocoa support $cocoa"
6044fi
Stefan Weil89138852016-05-16 15:10:20 +02006045echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6046echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006047echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006048echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006049echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006050echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006051echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006052echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006053echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006054echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006055echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006056echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006057echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006058echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006059echo "Block whitelist (rw) $block_drv_rw_whitelist"
6060echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306061echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006062echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006063echo "VNC support $vnc"
6064if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006065 echo "VNC SASL support $vnc_sasl"
6066 echo "VNC JPEG support $vnc_jpeg"
6067 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006068fi
blueswir131422552007-04-16 18:27:06 +00006069if test -n "$sparc_cpu"; then
6070 echo "Target Sparc Arch $sparc_cpu"
6071fi
aliguorie37630c2009-04-22 15:19:10 +00006072echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006073if test "$xen" = "yes" ; then
6074 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00006075 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00006076fi
aurel322e4d9fb2008-04-08 06:01:02 +00006077echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006078echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006079echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006080echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006081echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006082echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006083echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006084echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006085echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006086echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006087echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006088echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006089echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006090echo "TCG support $tcg"
6091if test "$tcg" = "yes" ; then
6092 echo "TCG debug enabled $debug_tcg"
6093 echo "TCG interpreter $tcg_interpreter"
6094fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006095echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006096echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006097echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006098echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006099echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006100echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006101echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006102echo "madvise $madvise"
6103echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006104echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006105echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006106echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006107echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006108echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006109echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006110echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006111echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006112if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006113echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006114fi
Stefan Weil89138852016-05-16 15:10:20 +02006115echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006116echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006117echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006118echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006119echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006120echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006121echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006122echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006123echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006124echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006125echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006126echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006127echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006128echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006129echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006130echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006131echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006132echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006133echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006134echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306135echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006136echo "gcov $gcov_tool"
6137echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006138echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006139echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006140echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006141echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006142echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006143echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006144echo "lzo support $lzo"
6145echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006146echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006147echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006148echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006149echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006150echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006151echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006152echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006153echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006154echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006155echo "bochs support $bochs"
6156echo "cloop support $cloop"
6157echo "dmg support $dmg"
6158echo "qcow v1 support $qcow1"
6159echo "vdi support $vdi"
6160echo "vvfat support $vvfat"
6161echo "qed support $qed"
6162echo "parallels support $parallels"
6163echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006164echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006165echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006166echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006167echo "libudev $libudev"
bellard67b915a2004-03-31 23:37:16 +00006168
Stefan Weil1ba16962011-07-29 22:40:45 +02006169if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006170echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006171fi
bellard97a847b2003-08-10 21:36:04 +00006172
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006173if test "$sdlabi" = "1.2"; then
6174 echo
6175 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6176 echo "WARNING: future releases. Please switch to using SDL 2.0"
6177fi
6178
Peter Maydell898be3e2017-03-21 14:31:57 +00006179if test "$supported_cpu" = "no"; then
6180 echo
6181 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6182 echo
6183 echo "CPU host architecture $cpu support is not currently maintained."
6184 echo "The QEMU project intends to remove support for this host CPU in"
6185 echo "a future release if nobody volunteers to maintain it and to"
6186 echo "provide a build host for our continuous integration setup."
6187 echo "configure has succeeded and you can continue to build, but"
6188 echo "if you care about QEMU on this platform you should contact"
6189 echo "us upstream at qemu-devel@nongnu.org."
6190fi
6191
6192if test "$supported_os" = "no"; then
6193 echo
6194 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6195 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006196 echo "Host OS $targetos support is not currently maintained."
6197 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006198 echo "a future release if nobody volunteers to maintain it and to"
6199 echo "provide a build host for our continuous integration setup."
6200 echo "configure has succeeded and you can continue to build, but"
6201 echo "if you care about QEMU on this platform you should contact"
6202 echo "us upstream at qemu-devel@nongnu.org."
6203fi
6204
Juan Quintela98ec69a2009-07-16 18:34:18 +02006205config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006206
Stefan Weildbd99ae2013-01-01 18:33:44 +01006207echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6208
Juan Quintela98ec69a2009-07-16 18:34:18 +02006209echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006210echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006211
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006212echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006213echo "prefix=$prefix" >> $config_host_mak
6214echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006215echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006216echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006217echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006218echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006219echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006220echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006221echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006222echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006223echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006224echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006225if test "$mingw32" = "no" ; then
6226 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6227fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006228echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006229echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006230echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006231echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006232echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006233echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006234
Juan Quintela98ec69a2009-07-16 18:34:18 +02006235echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006236
aurel32f8393942009-04-13 18:45:38 +00006237if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006238 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006239fi
aliguori1625af82009-04-05 17:41:02 +00006240if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006241 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006242fi
bellard7d132992003-03-06 23:23:54 +00006243if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006244 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006245fi
bellard67b915a2004-03-31 23:37:16 +00006246if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006247 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006248 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006249 version_major=${rc_version%%.*}
6250 rc_version=${rc_version#*.}
6251 version_minor=${rc_version%%.*}
6252 rc_version=${rc_version#*.}
6253 version_subminor=${rc_version%%.*}
6254 version_micro=0
6255 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6256 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006257 if test "$guest_agent_with_vss" = "yes" ; then
6258 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006259 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006260 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6261 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006262 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006263 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006264 fi
Michael Roth1a349042015-08-26 11:14:31 -05006265 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006266 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006267 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6268 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6269 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6270 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6271 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6272 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6273 fi
pbrook210fa552007-02-27 21:04:49 +00006274else
Juan Quintela35f4df22009-07-27 16:13:07 +02006275 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006276fi
blueswir1128ab2f2008-08-15 18:33:42 +00006277
Mark McLoughlindffcb712009-10-22 17:49:11 +01006278if test "$linux" = "yes" ; then
6279 echo "CONFIG_LINUX=y" >> $config_host_mak
6280fi
6281
bellard83fb7ad2004-07-05 21:25:26 +00006282if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006283 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006284fi
malcb29fe3e2008-11-18 01:42:22 +00006285
bellardec530c82006-04-25 22:36:06 +00006286if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006287 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006288fi
Andreas Färber179cf402010-09-20 00:50:43 +02006289if test "$haiku" = "yes" ; then
6290 echo "CONFIG_HAIKU=y" >> $config_host_mak
6291fi
bellard97a847b2003-08-10 21:36:04 +00006292if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006293 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006294fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006295if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006296 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006297fi
bellardc20709a2004-04-21 23:27:19 +00006298if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006299 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006300 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006301fi
ths8a16d272008-07-19 09:56:24 +00006302if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006303 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006304 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006305fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006306if test "$netmap" = "yes" ; then
6307 echo "CONFIG_NETMAP=y" >> $config_host_mak
6308fi
Gonglei015a33b2014-07-01 20:58:08 +08006309if test "$l2tpv3" = "yes" ; then
6310 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6311fi
Corey Bryant47e98652012-01-26 09:42:26 -05006312if test "$cap_ng" = "yes" ; then
6313 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6314fi
Juan Quintela2358a492009-07-27 16:13:25 +02006315echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006316for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006317 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006318 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006319 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006320 echo "$def=m" >> $config_host_mak ;;
6321 *)
6322 echo "$def=y" >> $config_host_mak ;;
6323 esac
malc0c58ac12008-06-25 21:04:05 +00006324done
Fam Zhengb1149912017-09-07 16:29:13 +08006325echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6326echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6327echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6328echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6329echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006330if test "$audio_pt_int" = "yes" ; then
6331 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6332fi
malcd5631632009-10-10 01:13:41 +04006333if test "$audio_win_int" = "yes" ; then
6334 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6335fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006336echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6337echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006338if test "$vnc" = "yes" ; then
6339 echo "CONFIG_VNC=y" >> $config_host_mak
6340fi
aliguori2f9606b2009-03-06 20:27:28 +00006341if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006342 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006343fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006344if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006345 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006346fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006347if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006348 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006349fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006350if test "$xkbcommon" = "yes" ; then
6351 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6352 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6353fi
aliguori76655d62009-03-06 20:27:37 +00006354if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006355 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006356fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006357if test "$xfs" = "yes" ; then
6358 echo "CONFIG_XFS=y" >> $config_host_mak
6359fi
Stefan Weil89138852016-05-16 15:10:20 +02006360qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006361echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006362echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006363echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006364echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006365if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006366 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006367fi
Fam Zheng17969262014-02-10 14:48:56 +08006368if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006369 # $shacmd can generate a hash started with digit, which the compiler doesn't
6370 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006371 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006372 echo "CONFIG_MODULES=y" >> $config_host_mak
6373fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006374if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6375 echo "CONFIG_X11=y" >> $config_host_mak
6376 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6377 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6378fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006379if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006380 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006381 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006382 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006383 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006384fi
6385if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006386 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006387fi
6388if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006389 echo "CONFIG_CURSES=m" >> $config_host_mak
6390 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6391 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006392fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006393if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006394 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006395fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006396if test "$accept4" = "yes" ; then
6397 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6398fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306399if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006400 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306401fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006402if test "$eventfd" = "yes" ; then
6403 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6404fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006405if test "$memfd" = "yes" ; then
6406 echo "CONFIG_MEMFD=y" >> $config_host_mak
6407fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006408if test "$have_usbfs" = "yes" ; then
6409 echo "CONFIG_USBFS=y" >> $config_host_mak
6410fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006411if test "$fallocate" = "yes" ; then
6412 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6413fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006414if test "$fallocate_punch_hole" = "yes" ; then
6415 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6416fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006417if test "$fallocate_zero_range" = "yes" ; then
6418 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6419fi
Kevin Wolfed911432014-09-29 17:12:59 +02006420if test "$posix_fallocate" = "yes" ; then
6421 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6422fi
Peter Maydellc727f472011-01-06 11:05:10 +00006423if test "$sync_file_range" = "yes" ; then
6424 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6425fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006426if test "$fiemap" = "yes" ; then
6427 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6428fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006429if test "$dup3" = "yes" ; then
6430 echo "CONFIG_DUP3=y" >> $config_host_mak
6431fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006432if test "$ppoll" = "yes" ; then
6433 echo "CONFIG_PPOLL=y" >> $config_host_mak
6434fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006435if test "$prctl_pr_set_timerslack" = "yes" ; then
6436 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6437fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006438if test "$epoll" = "yes" ; then
6439 echo "CONFIG_EPOLL=y" >> $config_host_mak
6440fi
6441if test "$epoll_create1" = "yes" ; then
6442 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6443fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006444if test "$sendfile" = "yes" ; then
6445 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6446fi
Riku Voipio51834342014-06-22 11:25:42 +01006447if test "$timerfd" = "yes" ; then
6448 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6449fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006450if test "$setns" = "yes" ; then
6451 echo "CONFIG_SETNS=y" >> $config_host_mak
6452fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006453if test "$clock_adjtime" = "yes" ; then
6454 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6455fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006456if test "$syncfs" = "yes" ; then
6457 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6458fi
aurel323b3f24a2009-04-15 16:12:13 +00006459if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006460 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006461fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006462if test "$inotify1" = "yes" ; then
6463 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6464fi
Peter Maydell401bc052017-09-05 13:19:32 +01006465if test "$sem_timedwait" = "yes" ; then
6466 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6467fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006468if test "$strchrnul" = "yes" ; then
6469 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6470fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006471if test "$byteswap_h" = "yes" ; then
6472 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6473fi
6474if test "$bswap_h" = "yes" ; then
6475 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6476fi
Alexander Graf769ce762009-05-11 17:41:42 +02006477if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006478 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006479 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006480 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006481fi
aurel322e4d9fb2008-04-08 06:01:02 +00006482if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006483 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006484 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006485fi
balrogfb599c92008-09-28 23:49:55 +00006486if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006487 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006488 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006489fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006490if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006491 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006492 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006493 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006494 if test "$gtk_gl" = "yes" ; then
6495 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6496 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006497fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006498echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006499if test "$gnutls" = "yes" ; then
6500 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6501fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006502if test "$gcrypt" = "yes" ; then
6503 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006504 if test "$gcrypt_hmac" = "yes" ; then
6505 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6506 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006507fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006508if test "$nettle" = "yes" ; then
6509 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006510 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006511fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006512if test "$tasn1" = "yes" ; then
6513 echo "CONFIG_TASN1=y" >> $config_host_mak
6514fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006515if test "$have_ifaddrs_h" = "yes" ; then
6516 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6517fi
Eric Blake6b39b062016-10-11 10:46:23 -05006518if test "$have_broken_size_max" = "yes" ; then
6519 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6520fi
Jan Vesely277abf12016-04-29 13:15:23 -04006521
6522# Work around a system header bug with some kernel/XFS header
6523# versions where they both try to define 'struct fsxattr':
6524# xfs headers will not try to redefine structs from linux headers
6525# if this macro is set.
6526if test "$have_fsxattr" = "yes" ; then
6527 echo "HAVE_FSXATTR=y" >> $config_host_mak
6528fi
Fam Zheng1efad062018-06-01 17:26:43 +08006529if test "$have_copy_file_range" = "yes" ; then
6530 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6531fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006532if test "$vte" = "yes" ; then
6533 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006534 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006535 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006536fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006537if test "$virglrenderer" = "yes" ; then
6538 echo "CONFIG_VIRGL=y" >> $config_host_mak
6539 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6540 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6541fi
aliguorie37630c2009-04-22 15:19:10 +00006542if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006543 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006544 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006545 if test "$xen_pv_domain_build" = "yes" ; then
6546 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6547 fi
aliguorie37630c2009-04-22 15:19:10 +00006548fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006549if test "$linux_aio" = "yes" ; then
6550 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6551fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006552if test "$attr" = "yes" ; then
6553 echo "CONFIG_ATTR=y" >> $config_host_mak
6554fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006555if test "$libattr" = "yes" ; then
6556 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6557fi
Meador Inge983eef52012-02-24 14:00:42 +05306558if test "$virtfs" = "yes" ; then
6559 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006560fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006561if test "$mpath" = "yes" ; then
6562 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006563 if test "$mpathpersist_new_api" = "yes"; then
6564 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6565 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006566fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006567if test "$vhost_scsi" = "yes" ; then
6568 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6569fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006570if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006571 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6572fi
Gonglei042cea22018-03-01 21:46:28 +08006573if test "$vhost_crypto" = "yes" ; then
6574 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6575fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006576if test "$vhost_vsock" = "yes" ; then
6577 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6578fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006579if test "$vhost_user" = "yes" ; then
6580 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6581fi
ths77755342008-11-27 15:45:16 +00006582if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006583 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006584fi
aliguoribf9298b2008-12-05 20:05:26 +00006585if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006586 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006587fi
aliguoriceb42de2009-04-07 18:43:28 +00006588if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006589 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006590fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006591if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006592 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006593fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006594if test "$membarrier" = "yes" ; then
6595 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6596fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006597if test "$signalfd" = "yes" ; then
6598 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6599fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006600if test "$tcg" = "yes"; then
6601 echo "CONFIG_TCG=y" >> $config_host_mak
6602 if test "$tcg_interpreter" = "yes" ; then
6603 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6604 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006605fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006606if test "$fdatasync" = "yes" ; then
6607 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6608fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006609if test "$madvise" = "yes" ; then
6610 echo "CONFIG_MADVISE=y" >> $config_host_mak
6611fi
6612if test "$posix_madvise" = "yes" ; then
6613 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6614fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006615if test "$posix_memalign" = "yes" ; then
6616 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6617fi
bellard97a847b2003-08-10 21:36:04 +00006618
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006619if test "$spice" = "yes" ; then
6620 echo "CONFIG_SPICE=y" >> $config_host_mak
6621fi
6622
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006623if test "$smartcard" = "yes" ; then
6624 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006625 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6626 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006627fi
6628
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006629if test "$libusb" = "yes" ; then
6630 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006631 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6632 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006633fi
6634
Hans de Goede69354a82011-07-19 11:04:10 +02006635if test "$usb_redir" = "yes" ; then
6636 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006637 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6638 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006639fi
6640
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006641if test "$opengl" = "yes" ; then
6642 echo "CONFIG_OPENGL=y" >> $config_host_mak
6643 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006644 if test "$opengl_dmabuf" = "yes" ; then
6645 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6646 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006647fi
6648
Yang Zhong5a22ab72017-12-20 21:16:46 +08006649if test "$malloc_trim" = "yes" ; then
6650 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6651fi
6652
Liang Li99f2dbd2016-03-08 13:53:16 +08006653if test "$avx2_opt" = "yes" ; then
6654 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6655fi
6656
qiaonuohan607dacd2014-02-18 14:11:30 +08006657if test "$lzo" = "yes" ; then
6658 echo "CONFIG_LZO=y" >> $config_host_mak
6659fi
6660
6661if test "$snappy" = "yes" ; then
6662 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6663fi
6664
Peter Wu6b383c02015-01-06 18:48:14 +01006665if test "$bzip2" = "yes" ; then
6666 echo "CONFIG_BZIP2=y" >> $config_host_mak
6667 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6668fi
6669
Julio Faracco83bc1f92018-11-05 13:08:04 -02006670if test "$lzfse" = "yes" ; then
6671 echo "CONFIG_LZFSE=y" >> $config_host_mak
6672 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6673fi
6674
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006675if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006676 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006677 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6678 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006679fi
6680
Peter Lieven6542aa92014-02-03 10:26:13 +01006681if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006682 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6683 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006684fi
6685
Eduardo Otubof7945732012-08-14 18:44:05 -03006686if test "$seccomp" = "yes"; then
6687 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006688 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6689 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006690fi
6691
bellard83fb7ad2004-07-05 21:25:26 +00006692# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006693if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006694 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006695fi
6696
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006697if test "$localtime_r" = "yes" ; then
6698 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6699fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006700if test "$qom_cast_debug" = "yes" ; then
6701 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6702fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006703if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006704 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006705 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6706 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006707fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006708
Peter Maydell7c2acc72013-04-08 12:11:27 +01006709echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006710if test "$coroutine_pool" = "yes" ; then
6711 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6712else
6713 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6714fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306715
Peter Lieven7d992e42016-09-27 11:58:45 +02006716if test "$debug_stack_usage" = "yes" ; then
6717 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6718fi
6719
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006720if test "$crypto_afalg" = "yes" ; then
6721 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6722fi
6723
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306724if test "$open_by_handle_at" = "yes" ; then
6725 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6726fi
6727
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306728if test "$linux_magic_h" = "yes" ; then
6729 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6730fi
6731
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006732if test "$pragma_diagnostic_available" = "yes" ; then
6733 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006734fi
6735
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006736if test "$valgrind_h" = "yes" ; then
6737 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6738fi
6739
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006740if test "$have_asan_iface_fiber" = "yes" ; then
6741 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6742fi
6743
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006744if test "$has_environ" = "yes" ; then
6745 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6746fi
6747
Richard Henderson76a347e2012-12-28 14:17:02 -08006748if test "$cpuid_h" = "yes" ; then
6749 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6750fi
6751
Richard Hendersonf5401662013-02-16 12:46:59 -08006752if test "$int128" = "yes" ; then
6753 echo "CONFIG_INT128=y" >> $config_host_mak
6754fi
6755
Richard Henderson7ebee432016-06-29 21:10:59 -07006756if test "$atomic128" = "yes" ; then
6757 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6758fi
6759
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006760if test "$cmpxchg128" = "yes" ; then
6761 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6762fi
6763
Richard Hendersondf79b992016-09-02 12:23:57 -07006764if test "$atomic64" = "yes" ; then
6765 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6766fi
6767
Richard Hendersondb432672017-09-15 14:11:45 -07006768if test "$vector16" = "yes" ; then
6769 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6770fi
6771
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006772if test "$getauxval" = "yes" ; then
6773 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6774fi
6775
Bharata B Raoeb100392012-09-24 14:42:45 +05306776if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006777 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006778 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6779 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306780fi
6781
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006782if test "$glusterfs_xlator_opt" = "yes" ; then
6783 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6784fi
6785
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306786if test "$glusterfs_discard" = "yes" ; then
6787 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6788fi
6789
Niels de Vosdf3a4292017-05-28 12:01:14 +05306790if test "$glusterfs_fallocate" = "yes" ; then
6791 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6792fi
6793
Bharata B Rao7c815372013-12-21 14:51:25 +05306794if test "$glusterfs_zerofill" = "yes" ; then
6795 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6796fi
6797
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006798if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006799 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006800 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6801 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006802fi
6803
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006804if test "$live_block_migration" = "yes" ; then
6805 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6806fi
6807
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006808if test "$tpm" = "yes"; then
6809 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006810 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006811 if test "$tpm_passthrough" = "yes"; then
6812 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6813 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006814 # TPM emulator support?
6815 if test "$tpm_emulator" = "yes"; then
6816 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6817 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006818fi
6819
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006820echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6821if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006822 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306823fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006824if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006825 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6826 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006827 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006828fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006829if have_backend "log"; then
6830 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02006831fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006832if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006833 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6834fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006835if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006836 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6837 if test "$trace_backend_stap" = "yes" ; then
6838 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6839 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006840fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006841if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006842 if test "$linux" = "yes" ; then
6843 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006844 else
Stewart Smith21684af2014-01-24 12:39:10 +11006845 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006846 fi
6847fi
Paul Durrant0a852412016-08-04 14:44:14 +01006848if have_backend "syslog"; then
6849 if test "$posix_syslog" = "yes" ; then
6850 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6851 else
6852 feature_not_found "syslog(trace backend)" "syslog not available"
6853 fi
6854fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006855echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6856
Michael R. Hines2da776d2013-07-22 10:01:54 -04006857if test "$rdma" = "yes" ; then
6858 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006859 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006860fi
6861
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006862if test "$pvrdma" = "yes" ; then
6863 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6864fi
6865
Laurent Vivier575b22b2016-06-02 22:14:15 +02006866if test "$have_rtnetlink" = "yes" ; then
6867 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6868fi
6869
Klim Kireeved279a02018-01-12 12:01:19 +03006870if test "$libxml2" = "yes" ; then
6871 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6872 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6873 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6874fi
6875
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006876if test "$replication" = "yes" ; then
6877 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6878fi
6879
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006880if test "$have_af_vsock" = "yes" ; then
6881 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6882fi
6883
Christopher Covington4d043512016-12-28 15:04:33 -05006884if test "$have_sysmacros" = "yes" ; then
6885 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6886fi
6887
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006888if test "$have_static_assert" = "yes" ; then
6889 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6890fi
6891
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006892if test "$have_utmpx" = "yes" ; then
6893 echo "HAVE_UTMPX=y" >> $config_host_mak
6894fi
6895
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006896if test "$ivshmem" = "yes" ; then
6897 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6898fi
Richard Hendersone219c492017-09-28 09:01:23 -07006899if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006900 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6901fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006902if test "$debug_mutex" = "yes" ; then
6903 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6904fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006905
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006906# Hold two types of flag:
6907# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6908# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03006909# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006910# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03006911if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006912 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03006913 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6914elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6915 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6916 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006917fi
6918
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006919if test "$vxhs" = "yes" ; then
6920 echo "CONFIG_VXHS=y" >> $config_host_mak
6921 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6922fi
6923
Junyan He17824402018-07-18 15:47:59 +08006924if test "$libpmem" = "yes" ; then
6925 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6926fi
6927
Jeff Cody2f740132018-11-07 07:36:44 +01006928if test "$bochs" = "yes" ; then
6929 echo "CONFIG_BOCHS=y" >> $config_host_mak
6930fi
6931if test "$cloop" = "yes" ; then
6932 echo "CONFIG_CLOOP=y" >> $config_host_mak
6933fi
6934if test "$dmg" = "yes" ; then
6935 echo "CONFIG_DMG=y" >> $config_host_mak
6936fi
6937if test "$qcow1" = "yes" ; then
6938 echo "CONFIG_QCOW1=y" >> $config_host_mak
6939fi
6940if test "$vdi" = "yes" ; then
6941 echo "CONFIG_VDI=y" >> $config_host_mak
6942fi
6943if test "$vvfat" = "yes" ; then
6944 echo "CONFIG_VVFAT=y" >> $config_host_mak
6945fi
6946if test "$qed" = "yes" ; then
6947 echo "CONFIG_QED=y" >> $config_host_mak
6948fi
6949if test "$parallels" = "yes" ; then
6950 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6951fi
6952if test "$sheepdog" = "yes" ; then
6953 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6954fi
6955
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006956if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006957 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006958elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006959 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006960elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006961 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006962elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006963 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006964elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006965 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Alistair Francisc4f80542018-12-19 19:20:19 +00006966elif test "$ARCH" = "riscv32" -o "$ARCH" = "riscv64" ; then
6967 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006968else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006969 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006970fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006971QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006972
Juan Quintela98ec69a2009-07-16 18:34:18 +02006973echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006974echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006975echo "MAKE=$make" >> $config_host_mak
6976echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006977echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6978echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006979echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6980echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006981echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006982echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006983if $iasl -h > /dev/null 2>&1; then
6984 echo "IASL=$iasl" >> $config_host_mak
6985fi
Juan Quintela804edf22009-07-27 16:12:49 +02006986echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006987echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006988echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006989echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006990echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006991echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006992echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006993echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006994echo "OBJCOPY=$objcopy" >> $config_host_mak
6995echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006996echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006997echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006998echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006999echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007000echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007001echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007002echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007003echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007004if test "$sparse" = "yes" ; then
7005 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007006 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007007 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007008 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7009 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7010fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01007011if test "$cross_prefix" != ""; then
7012 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
7013else
7014 echo "AUTOCONF_HOST := " >> $config_host_mak
7015fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007016echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007017echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007018echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007019echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007020echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007021echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007022echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007023echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007024echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007025echo "DSOSUF=$DSOSUF" >> $config_host_mak
7026echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007027echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007028echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7029echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007030echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007031if test "$gcov" = "yes" ; then
7032 echo "CONFIG_GCOV=y" >> $config_host_mak
7033 echo "GCOV=$gcov_tool" >> $config_host_mak
7034fi
Juan Quintela804edf22009-07-27 16:12:49 +02007035
Alex Bennée51a12b52018-04-04 14:24:39 +01007036if test "$docker" != "no"; then
7037 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7038fi
7039
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007040if test "$libudev" != "no"; then
7041 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7042 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7043fi
7044
Peter Maydell6efd7512011-11-30 11:59:04 +00007045# use included Linux headers
7046if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007047 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007048 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007049 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007050 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007051 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02007052 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01007053 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007054 ;;
7055 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007056 linux_arch=s390
7057 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007058 aarch64)
7059 linux_arch=arm64
7060 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007061 mips64)
7062 linux_arch=mips
7063 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007064 *)
7065 # For most CPUs the kernel architecture name and QEMU CPU name match.
7066 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007067 ;;
7068 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007069 # For non-KVM architectures we will not have asm headers
7070 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7071 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7072 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007073fi
7074
bellard1d14ffa2005-10-30 18:58:22 +00007075for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007076target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007077config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007078target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00007079target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02007080
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007081case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007082 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 +02007083 target_bigendian=yes
7084 ;;
7085esac
bellard97a847b2003-08-10 21:36:04 +00007086target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007087target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007088target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007089target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007090case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007091 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007092 target_softmmu="yes"
7093 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007094 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007095 target_user_only="yes"
7096 target_linux_user="yes"
7097 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007098 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007099 target_user_only="yes"
7100 target_bsd_user="yes"
7101 ;;
pbrook9e407a82007-05-26 16:38:53 +00007102 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007103 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007104 exit 1
7105 ;;
7106esac
ths831b7822007-01-18 20:06:33 +00007107
Alex Bennéed75402b2018-04-04 20:27:05 +01007108target_compiler=""
7109target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007110target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007111
bellard97a847b2003-08-10 21:36:04 +00007112mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007113echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007114
pbrooke5fe0c52006-06-11 13:32:59 +00007115bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007116mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007117interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007118gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007119
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007120TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007121TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007122TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007123
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007124case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007125 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007126 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007127 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007128 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007129 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007130 ;;
7131 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007132 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007133 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007134 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007135 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007136 ;;
7137 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007138 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007139 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007140 ;;
7141 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007142 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007143 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007144 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007145 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007146 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007147 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007148 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007149 aarch64|aarch64_be)
7150 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007151 TARGET_BASE_ARCH=arm
7152 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007153 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007154 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 +01007155 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007156 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007157 ;;
aurel322408a522008-04-20 20:19:44 +00007158 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007159 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007160 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007161 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007162 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007163 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007164 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007165 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007166 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007167 ;;
aurel322408a522008-04-20 20:19:44 +00007168 m68k)
aurel322408a522008-04-20 20:19:44 +00007169 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007170 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007171 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007172 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007173 microblaze|microblazeel)
7174 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007175 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007176 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007177 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007178 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007179 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007180 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007181 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007182 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007183 ;;
7184 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007185 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007186 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007187 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007188 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007189 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007190 ;;
7191 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007192 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007193 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007194 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007195 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007196 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007197 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007198 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007199 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007200 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007201 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007202 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007203 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007204 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007205 TARGET_ARCH=openrisc
7206 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007207 ;;
aurel322408a522008-04-20 20:19:44 +00007208 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007209 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007210 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007211 ;;
aurel322408a522008-04-20 20:19:44 +00007212 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007213 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007214 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307215 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007216 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 +01007217 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007218 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007219 ppc64le)
7220 TARGET_ARCH=ppc64
7221 TARGET_BASE_ARCH=ppc
7222 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307223 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007224 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 +01007225 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007226 ;;
aurel322408a522008-04-20 20:19:44 +00007227 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007228 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007229 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007230 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007231 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007232 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 +01007233 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007234 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007235 riscv32)
7236 TARGET_BASE_ARCH=riscv
7237 TARGET_ABI_DIR=riscv
7238 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007239 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007240 ;;
7241 riscv64)
7242 TARGET_BASE_ARCH=riscv
7243 TARGET_ABI_DIR=riscv
7244 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007245 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007246 ;;
aurel322408a522008-04-20 20:19:44 +00007247 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007248 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007249 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007250 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007251 ;;
7252 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007253 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007254 ;;
7255 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007256 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007257 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007258 ;;
7259 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007260 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007261 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007262 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007263 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007264 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007265 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007266 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007267 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007268 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 +01007269 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007270 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007271 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007272 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007273 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007274 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007275 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007276 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007277 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007278 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007279 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007280 xtensa|xtensaeb)
7281 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007282 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007283 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007284 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007285 ;;
aurel322408a522008-04-20 20:19:44 +00007286 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007287 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007288 ;;
7289esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007290# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7291if [ "$TARGET_BASE_ARCH" = "" ]; then
7292 TARGET_BASE_ARCH=$TARGET_ARCH
7293fi
7294
Alex Bennéed75402b2018-04-04 20:27:05 +01007295# Do we have a cross compiler for this target?
7296if has $target_compiler; then
7297
7298 write_c_skeleton
7299
Alex Bennée716a5072018-04-10 12:19:40 +01007300 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007301 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007302 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007303 target_compiler=""
7304 else
7305 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7306 target_compiler_static="n"
7307 fi
7308 else
7309 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7310 target_compiler_static="y"
7311 fi
7312else
7313 target_compiler=""
7314fi
7315
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007316symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7317
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007318upper() {
7319 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7320}
7321
Stefan Weil89138852016-05-16 15:10:20 +02007322target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007323echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007324echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007325echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007326if [ "$TARGET_ABI_DIR" = "" ]; then
7327 TARGET_ABI_DIR=$TARGET_ARCH
7328fi
Juan Quintela25be2102009-10-07 02:41:00 +02007329echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007330if [ "$HOST_VARIANT_DIR" != "" ]; then
7331 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7332fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007333
7334if supported_xen_target $target; then
7335 echo "CONFIG_XEN=y" >> $config_target_mak
7336 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007337 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007338 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007339fi
7340if supported_kvm_target $target; then
7341 echo "CONFIG_KVM=y" >> $config_target_mak
7342 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007343 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007344 if test "$vhost_user" = "yes" ; then
7345 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7346 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007347 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007348fi
7349if supported_hax_target $target; then
7350 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007351fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007352if supported_hvf_target $target; then
7353 echo "CONFIG_HVF=y" >> $config_target_mak
7354fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007355if supported_whpx_target $target; then
7356 echo "CONFIG_WHPX=y" >> $config_target_mak
7357fi
bellardde83cd02003-06-15 20:25:43 +00007358if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007359 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007360fi
7361if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007362 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007363 if test "$mttcg" = "yes" ; then
7364 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7365 fi
bellardde83cd02003-06-15 20:25:43 +00007366fi
bellard997344f2003-10-27 21:10:39 +00007367if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007368 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007369 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007370fi
ths831b7822007-01-18 20:06:33 +00007371if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007372 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007373fi
pbrook56aebc82008-10-11 17:55:29 +00007374list=""
7375if test ! -z "$gdb_xml_files" ; then
7376 for x in $gdb_xml_files; do
7377 list="$list $source_path/gdb-xml/$x"
7378 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007379 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007380fi
bellardde83cd02003-06-15 20:25:43 +00007381
pbrooke5fe0c52006-06-11 13:32:59 +00007382if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007383 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007384fi
blueswir184778502008-10-26 20:33:16 +00007385if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007386 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007387fi
bellard5b0753e2005-03-01 21:37:28 +00007388
Alex Bennéed75402b2018-04-04 20:27:05 +01007389if test -n "$target_compiler"; then
7390 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7391
7392 if test -n "$target_compiler_static"; then
7393 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7394 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007395
7396 if test -n "$target_compiler_cflags"; then
7397 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7398 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007399fi
7400
Alex Bennée716a5072018-04-10 12:19:40 +01007401
Juan Quintela4afddb52009-08-03 14:46:45 +02007402# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007403
Juan Quintela4afddb52009-08-03 14:46:45 +02007404cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007405ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007406
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007407disas_config() {
7408 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7409 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7410}
7411
Juan Quintela64656022009-08-03 14:46:53 +02007412for i in $ARCH $TARGET_BASE_ARCH ; do
7413 case "$i" in
7414 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007415 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007416 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007417 aarch64)
7418 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007419 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007420 fi
7421 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007422 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007423 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007424 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007425 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007426 fi
Juan Quintela64656022009-08-03 14:46:53 +02007427 ;;
7428 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007429 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007430 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007431 hppa)
7432 disas_config "HPPA"
7433 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007434 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007435 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007436 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007437 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007438 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007439 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007440 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007441 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007442 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007443 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007444 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007445 ;;
7446 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007447 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007448 if test -n "${cxx}"; then
7449 disas_config "NANOMIPS"
7450 fi
Juan Quintela64656022009-08-03 14:46:53 +02007451 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007452 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007453 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007454 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007455 nios2)
7456 disas_config "NIOS2"
7457 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007458 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007459 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007460 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007461 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007462 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007463 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007464 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007465 disas_config "RISCV"
7466 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007467 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007468 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007469 ;;
7470 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007471 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007472 ;;
7473 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007474 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007475 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007476 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007477 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007478 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007479 esac
7480done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007481if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007482 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007483fi
Juan Quintela64656022009-08-03 14:46:53 +02007484
Juan Quintela6ee71262009-08-03 14:46:47 +02007485case "$ARCH" in
7486alpha)
7487 # Ensure there's only a single GP
7488 cflags="-msmall-data $cflags"
7489;;
7490esac
7491
Juan Quintelad02c1db2009-08-03 14:46:50 +02007492if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007493 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007494 if test "$target_linux_user" = "yes" ; then
7495 cflags="-p $cflags"
7496 ldflags="-p $ldflags"
7497 fi
7498 if test "$target_softmmu" = "yes" ; then
7499 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007500 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007501 fi
7502fi
7503
Juan Quintela9b8e1112009-08-03 14:46:46 +02007504if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007505 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007506fi
Juan Quintelafa282482009-07-22 22:37:39 +02007507
Christian Borntraegere9a35912017-08-23 12:16:23 +02007508# Newer kernels on s390 check for an S390_PGSTE program header and
7509# enable the pgste page table extensions in that case. This makes
7510# the vm.allocate_pgste sysctl unnecessary. We enable this program
7511# header if
7512# - we build on s390x
7513# - we build the system emulation for s390x (qemu-system-s390x)
7514# - KVM is enabled
7515# - the linker supports --s390-pgste
7516if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7517 if ld_has --s390-pgste ; then
7518 ldflags="-Wl,--s390-pgste $ldflags"
7519 fi
7520fi
7521
Juan Quintela25be2102009-10-07 02:41:00 +02007522echo "LDFLAGS+=$ldflags" >> $config_target_mak
7523echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007524
bellard97a847b2003-08-10 21:36:04 +00007525done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007526
Alex Bennéed75402b2018-04-04 20:27:05 +01007527if test -n "$enabled_cross_compilers"; then
7528 echo
7529 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7530fi
7531
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007532if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007533 echo "config-host.h: subdir-dtc" >> $config_host_mak
7534fi
Richard Hendersone219c492017-09-28 09:01:23 -07007535if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7536 echo "config-host.h: subdir-capstone" >> $config_host_mak
7537fi
7538if test -n "$LIBCAPSTONE"; then
7539 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7540fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007541
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007542if test "$numa" = "yes"; then
7543 echo "CONFIG_NUMA=y" >> $config_host_mak
7544fi
7545
John Snowfd0e6052015-03-25 18:57:39 -04007546if test "$ccache_cpp2" = "yes"; then
7547 echo "export CCACHE_CPP2=y" >> $config_host_mak
7548fi
7549
Peter Maydelle29e5c62018-11-02 11:52:38 +00007550# If we're using a separate build tree, set it up now.
7551# DIRS are directories which we simply mkdir in the build tree;
7552# LINKS are things to symlink back into the source tree
7553# (these can be both files and directories).
7554# Caution: do not add files or directories here using wildcards. This
7555# will result in problems later if a new file matching the wildcard is
7556# added to the source tree -- nothing will cause configure to be rerun
7557# so the build tree will be missing the link back to the new file, and
7558# tests might fail. Prefer to keep the relevant files in their own
7559# directory and symlink the directory instead.
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007560DIRS="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 -05007561DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007562DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007563DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007564DIRS="$DIRS roms/seabios roms/vgabios"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007565LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7566LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7567LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7568LINKS="$LINKS tests/fp/Makefile"
7569LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7570LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7571LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7572LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7573LINKS="$LINKS pc-bios/qemu-icon.bmp"
7574LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007575LINKS="$LINKS tests/acceptance tests/data"
7576LINKS="$LINKS tests/qemu-iotests/check"
Richard Henderson753d11f2011-06-24 11:58:37 -07007577for bios_file in \
7578 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007579 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007580 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007581 $source_path/pc-bios/*.rom \
7582 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007583 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007584 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007585 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007586 $source_path/pc-bios/palcode-*
7587do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007588 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007589done
7590mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007591for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007592 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007593 symlink "$source_path/$f" "$f"
7594 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007595done
Paul Brook1ad21342009-05-19 16:17:58 +01007596
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007597# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007598for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007599 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007600 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007601 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007602 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007603 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007604 echo "CC=$cc" >> $config_mak
7605 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007606 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007607 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007608 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007609 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007610 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007611done
7612
Max Reitz76c75602014-05-24 23:24:56 +02007613# set up qemu-iotests in this build directory
7614iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007615
7616echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7617echo >> "$iotests_common_env"
7618echo "export PYTHON='$python'" >> "$iotests_common_env"
7619
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007620# Save the configure command line for later reuse.
7621cat <<EOD >config.status
7622#!/bin/sh
7623# Generated by configure.
7624# Run this file to recreate the current configuration.
7625# Compiler output produced by configure, useful for debugging
7626# configure, is in config.log if it exists.
7627EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007628
7629preserve_env() {
7630 envname=$1
7631
7632 eval envval=\$$envname
7633
7634 if test -n "$envval"
7635 then
7636 echo "$envname='$envval'" >> config.status
7637 echo "export $envname" >> config.status
7638 else
7639 echo "unset $envname" >> config.status
7640 fi
7641}
7642
7643# Preserve various env variables that influence what
7644# features/build target configure will detect
7645preserve_env AR
7646preserve_env AS
7647preserve_env CC
7648preserve_env CPP
7649preserve_env CXX
7650preserve_env INSTALL
7651preserve_env LD
7652preserve_env LD_LIBRARY_PATH
7653preserve_env LIBTOOL
7654preserve_env MAKE
7655preserve_env NM
7656preserve_env OBJCOPY
7657preserve_env PATH
7658preserve_env PKG_CONFIG
7659preserve_env PKG_CONFIG_LIBDIR
7660preserve_env PKG_CONFIG_PATH
7661preserve_env PYTHON
7662preserve_env SDL_CONFIG
7663preserve_env SDL2_CONFIG
7664preserve_env SMBD
7665preserve_env STRIP
7666preserve_env WINDRES
7667
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007668printf "exec" >>config.status
7669printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007670echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007671chmod +x config.status
7672
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007673rm -r "$TMPDIR1"